2012-05-22  Yong Li  <yoli@rim.com>

        [BlackBerry] getPlatformThreadRegisters() should fetch target thread's registers
        https://bugs.webkit.org/show_bug.cgi?id=87148

        Reviewed by George Staikos.

        Our previous implementation of getPlatformThreadRegisters() read registers in current
        thread's context but it is supposed to read the target thread's registers.

        * heap/MachineStackMarker.cpp:
        (JSC::getPlatformThreadRegisters):

2012-05-05  Filip Pizlo  <fpizlo@apple.com>

        DFG should support reflective arguments access
        https://bugs.webkit.org/show_bug.cgi?id=85721

        Reviewed by Oliver Hunt.
        
        Merged r116345 from dfgopt.
        
        This adds support for op_create_arguments to the DFG. No other arguments-related
        opcodes are added by this change, though it does add a lot of the scaffolding
        necessary for the other ops.
        
        This also adds GetByVal/PutByVal optimizations for Arguments.
        
        Finally, this rationalizes slowPathCall with no return. Previously, that would
        work via callOperation() overloads that took InvalidGPRReg as the return GPR.
        But that creates awful ambiguity, since we had template functions that were
        polymorphic over all parameters except the second, which was a GPRReg, and a
        bunch of non-template overloads that also potentially had GPRReg as the second
        argument. I finally started to hit this ambiguity and was getting absolutely
        bizarre compiler errors, that made me feel like I was programming in SML. So,
        I changed the no-argument overloads to take NoResultTag instead, which made
        everything sensible again by eliminating the overload ambiguity.
        
        This is a ~7% speed-up on V8/earley and neutral elsewhere.

        * bytecode/PredictedType.h:
        (JSC::isArgumentsPrediction):
        (JSC):
        (JSC::isActionableMutableArrayPrediction):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCCallHelpers.h:
        (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
        (CCallHelpers):
        * dfg/DFGCSEPhase.cpp:
        (JSC::DFG::CSEPhase::performNodeCSE):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
        (JSC::DFG::canInlineOpcode):
        * dfg/DFGCommon.h:
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::unmodifiedArgumentsRegister):
        (Node):
        (JSC::DFG::Node::shouldSpeculateArguments):
        * dfg/DFGNodeType.h:
        (DFG):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnArguments):
        (DFG):
        (JSC::DFG::SpeculativeJIT::compileGetArgumentsLength):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::silentSpillAllRegistersImpl):
        (SpeculativeJIT):
        (JSC::DFG::SpeculativeJIT::pickCanTrample):
        (JSC::DFG::SpeculativeJIT::callOperation):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedPutById):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedPutById):
        (JSC::DFG::SpeculativeJIT::compile):
        * runtime/Arguments.h:
        (ArgumentsData):
        (Arguments):
        (JSC::Arguments::offsetOfData):

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

        GC allocation trigger should be tuned to system RAM
        https://bugs.webkit.org/show_bug.cgi?id=87039

        Reviewed by Darin Adler.

        This helps avoid OOM crashes on small platforms, and helps avoid "too much GC"
        performance issues on big platforms.

        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::collect):
        * heap/Heap.h:
        (Heap): GC balances between a fixed minimum and a proportional multiplier,
        which are limited based on system RAM.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::createContextGroup):
        (JSC::JSGlobalData::create):
        (JSC::JSGlobalData::createLeaked):
        * runtime/JSGlobalData.h:
        (JSGlobalData): Renamed HeapSize to HeapType because the exact size is
        influenced by the heap type, but not determined by it.

2012-05-21  Gavin Barraclough  <barraclough@apple.com>

        Disable private names by default in WebCore
        https://bugs.webkit.org/show_bug.cgi?id=87088

        Reviewed by Geoff Garen.

        r117859 introduced a preliminary implementation of ES6-like private name objects to JSC.
        These are probably not yet ready to be web-facing, so disabling by default in WebCore.
        Opting-in for JSC & DumpRenderTree so that we can still run the fast/js/names.html test.

        * jsc.cpp:
        (GlobalObject):
        (GlobalObject::javaScriptExperimentsEnabled):
            - Implemented new trap to opt-in to private names support.
        * runtime/JSGlobalObject.cpp:
        (JSC):
        (JSC::JSGlobalObject::reset):
            - Only add the Name property to the global object if experiments are enabled.
        * runtime/JSGlobalObject.h:
        (GlobalObjectMethodTable):
            - Added new trap to enabled experiments.
        (JSGlobalObject):
        (JSC::JSGlobalObject::finishCreation):
            - Set the global object's m_experimentsEnabled state on construction.
        (JSC::JSGlobalObject::javaScriptExperimentsEnabled):
            - Defaults to off.

2012-05-06  Filip Pizlo  <fpizlo@apple.com>

        Truncating multiplication on integers should not OSR exit every time
        https://bugs.webkit.org/show_bug.cgi?id=85752

        Reviewed by Gavin Barraclough.
        
        Merge r116264 from dfgopt.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::mulShouldSpeculateInteger):
        (Graph):
        (JSC::DFG::Graph::mulImmediateShouldSpeculateInteger):
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):
        (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileArithMul):

2012-05-21  Csaba Osztrogonác  <ossy@webkit.org>

        DFG should be able to compute dominators
        https://bugs.webkit.org/show_bug.cgi?id=85269

        Unreviewed trivial 32 bit buildfix after r117861.

        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):

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

        DFG should be able to compute dominators
        https://bugs.webkit.org/show_bug.cgi?id=85269

        Reviewed by Oliver Hunt.
        
        Merged r115754 from dfgopt.
        
        Implements a naive dominator calculator, which is currently just used to
        print information in graph dumps. I've enabled it by default mainly to
        be able to track its performance impact. So far it appears that there is
        none, which is unsurprising given that the number of basic blocks in most
        procedures is small.
        
        Also tweaked bytecode dumping to reveal more useful information about the
        nature of the code block.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * dfg/DFGDominators.cpp: Added.
        (DFG):
        (JSC::DFG::Dominators::Dominators):
        (JSC::DFG::Dominators::~Dominators):
        (JSC::DFG::Dominators::compute):
        (JSC::DFG::Dominators::iterateForBlock):
        * dfg/DFGDominators.h: Added.
        (DFG):
        (Dominators):
        (JSC::DFG::Dominators::invalidate):
        (JSC::DFG::Dominators::computeIfNecessary):
        (JSC::DFG::Dominators::isValid):
        (JSC::DFG::Dominators::dominates):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        (Graph):

2012-05-21  Michael Saboff  <msaboff@apple.com>

        Cleanup of Calls to operationStrCat and operationNewArray and Use Constructor after r117729
        https://bugs.webkit.org/show_bug.cgi?id=87027

        Reviewed by Oliver Hunt.

        Change calls to operationStrCat and operationNewArray to provide the
        pointer to the EncodedJSValue* data buffer instead of the ScratchBuffer
        that contains it.  Added a ScratchBuffer::create() function.
        This is a clean-up to r117729.

        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * runtime/JSGlobalData.h:
        (JSC::ScratchBuffer::create):
        (JSC::ScratchBuffer::dataBuffer):
        (JSC::JSGlobalData::scratchBufferForSize):

2012-05-15  Gavin Barraclough  <barraclough@apple.com>

        Add support for private names
        https://bugs.webkit.org/show_bug.cgi?id=86509

        Reviewed by Oliver Hunt.

        The spec isn't final, but we can start adding support to allow property maps
        to contain keys that aren't identifiers.

        * API/JSCallbackObjectFunctions.h:
        (JSC::::getOwnPropertySlot):
        (JSC::::put):
        (JSC::::deleteProperty):
        (JSC::::getStaticValue):
        (JSC::::staticFunctionGetter):
        (JSC::::callbackGetter):
            - Only expose public named properties over the JSC API.
        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pri:
        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
            - Added new files to build system.
        * dfg/DFGOperations.cpp:
        (JSC::DFG::operationPutByValInternal):
            - Added support for property access with name objects.
        * interpreter/CallFrame.h:
        (JSC::ExecState::privateNamePrototypeTable):
            - Added hash table for NamePrototype
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
            - Added support for property access with name objects.
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
            - Added support for property access with name objects.
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::getByVal):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::opIn):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::symbolTableGet):
        (JSC::JSActivation::symbolTablePut):
        (JSC::JSActivation::symbolTablePutWithAttributes):
            - Added support for property access with name objects.
        * runtime/JSGlobalData.cpp:
        (JSC):
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::~JSGlobalData):
        * runtime/JSGlobalData.h:
        (JSGlobalData):
            - Added hash table for NamePrototype
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        * runtime/JSGlobalObject.h:
        (JSGlobalObject):
        (JSC::JSGlobalObject::privateNameStructure):
        (JSC::JSGlobalObject::symbolTableHasProperty):
            - Added new global properties.
        * runtime/JSType.h:
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::isName):
            - Added type for NameInstances, for fast isName check.
        * runtime/JSVariableObject.cpp:
        (JSC::JSVariableObject::deleteProperty):
        (JSC::JSVariableObject::symbolTableGet):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::symbolTableGet):
        (JSC::JSVariableObject::symbolTablePut):
        (JSC::JSVariableObject::symbolTablePutWithAttributes):
            - symbol table lookup should take a PropertyName.
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
        * runtime/Lookup.h:
        (JSC::HashTable::entry):
            - entry lookup should take a PropertyName.
        * runtime/NameConstructor.cpp: Added.
        (JSC):
        (JSC::NameConstructor::NameConstructor):
        (JSC::NameConstructor::finishCreation):
        (JSC::constructPrivateName):
        (JSC::NameConstructor::getConstructData):
        (JSC::NameConstructor::getCallData):
        * runtime/NameConstructor.h: Added.
        (JSC):
        (NameConstructor):
        (JSC::NameConstructor::create):
        (JSC::NameConstructor::createStructure):
            - Added constructor.
        * runtime/NameInstance.cpp: Added.
        (JSC):
        (JSC::NameInstance::NameInstance):
        (JSC::NameInstance::destroy):
        * runtime/NameInstance.h: Added.
        (JSC):
        (NameInstance):
        (JSC::NameInstance::createStructure):
        (JSC::NameInstance::create):
        (JSC::NameInstance::privateName):
        (JSC::NameInstance::nameString):
        (JSC::NameInstance::finishCreation):
        (JSC::isName):
            - Added instance.
        * runtime/NamePrototype.cpp: Added.
        (JSC):
        (JSC::NamePrototype::NamePrototype):
        (JSC::NamePrototype::finishCreation):
        (JSC::NamePrototype::getOwnPropertySlot):
        (JSC::NamePrototype::getOwnPropertyDescriptor):
        (JSC::privateNameProtoFuncToString):
        * runtime/NamePrototype.h: Added.
        (JSC):
        (NamePrototype):
        (JSC::NamePrototype::create):
        (JSC::NamePrototype::createStructure):
            - Added prototype.
        * runtime/PrivateName.h: Added.
        (JSC):
        (PrivateName):
        (JSC::PrivateName::PrivateName):
        (JSC::PrivateName::uid):
            - A private name object holds a StringImpl that can be used as a unique key in a property map.
        * runtime/PropertyMapHashTable.h:
        (JSC::PropertyTable::find):
        (JSC::PropertyTable::findWithString):
            - Strings should only match keys in the table that are identifiers.
        * runtime/PropertyName.h:
        (JSC::PropertyName::PropertyName):
        (PropertyName):
        (JSC::PropertyName::uid):
        (JSC::PropertyName::publicName):
        (JSC::PropertyName::asIndex):
        (JSC::operator==):
        (JSC::operator!=):
            - replaced impl() & ustring() with uid() [to get the raw impl] and publicName() [impl or null, if not an identifier].
        * runtime/Structure.cpp:
        (JSC::Structure::despecifyDictionaryFunction):
        (JSC::Structure::addPropertyTransitionToExistingStructure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::attributeChangeTransition):
        (JSC::Structure::get):
        (JSC::Structure::despecifyFunction):
        (JSC::Structure::putSpecificValue):
        (JSC::Structure::remove):
        (JSC::Structure::getPropertyNamesFromStructure):
        * runtime/Structure.h:
        (JSC::Structure::get):
            - call uid() to get a PropertyName raw impl, for use as a key.

2012-04-30  Filip Pizlo  <fpizlo@apple.com>

        Bytecode dumps should contain data about the state of get_by_id caches
        https://bugs.webkit.org/show_bug.cgi?id=85246

        Reviewed by Gavin Barraclough.
        
        Merge r115694 from dfgopt.
        
        Changed the DFG bytecode parser (and the code that calls it) to be able
        to call codeBlock->dump() on the code blocks being parsed.
        
        Changed bytecode dumping to be able to print the state of get_by_id
        caches inline with the bytecode.
        
        Removed the old StructureStubInfo dumping code, which no longer worked
        right, and was incapable of telling us information about chain and list
        accesses.
        
        This change does not add dumping for put_by_id caches. We can add that
        at a later time.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::printUnaryOp):
        (JSC::CodeBlock::printBinaryOp):
        (JSC::CodeBlock::printConditionalJump):
        (JSC::CodeBlock::printGetByIdOp):
        (JSC::dumpStructure):
        (JSC):
        (JSC::dumpChain):
        (JSC::CodeBlock::printGetByIdCacheStatus):
        (JSC::CodeBlock::printCallOp):
        (JSC::CodeBlock::printPutByIdOp):
        (JSC::printGlobalResolveInfo):
        (JSC::CodeBlock::printStructure):
        (JSC::CodeBlock::printStructures):
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::visitStructures):
        (JSC::ProgramCodeBlock::jitCompileImpl):
        (JSC::EvalCodeBlock::jitCompileImpl):
        (JSC::FunctionCodeBlock::jitCompileImpl):
        * bytecode/CodeBlock.h:
        (CodeBlock):
        (JSC::CodeBlock::jitCompile):
        (ProgramCodeBlock):
        (EvalCodeBlock):
        (FunctionCodeBlock):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (ByteCodeParser):
        (JSC::DFG::ByteCodeParser::parseCodeBlock):
        (JSC::DFG::parse):
        * dfg/DFGByteCodeParser.h:
        (DFG):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        (JSC::DFG::tryCompile):
        (JSC::DFG::tryCompileFunction):
        * dfg/DFGDriver.h:
        (DFG):
        (JSC::DFG::tryCompile):
        (JSC::DFG::tryCompileFunction):
        * dfg/DFGOSRExitCompiler.cpp:
        * jit/JITDriver.h:
        (JSC::jitCompileIfAppropriate):
        (JSC::jitCompileFunctionIfAppropriate):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::jitCompileAndSetHeuristics):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::jitCompile):
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::jitCompile):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::jitCompileForCall):
        (JSC::FunctionExecutable::jitCompileForConstruct):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        * runtime/Executable.h:
        (EvalExecutable):
        (ProgramExecutable):
        (FunctionExecutable):
        (JSC::FunctionExecutable::jitCompileFor):
        * runtime/ExecutionHarness.h:
        (JSC::prepareForExecution):
        (JSC::prepareFunctionForExecution):

2012-05-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

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

2012-05-21  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        GCC 4.7 and C++11
        https://bugs.webkit.org/show_bug.cgi?id=86465

        Reviewed by Darin Adler.

        Set emptyValueIsZero flag so RegExpKey can be used with the non-copyable RegExp values.

        * runtime/RegExpKey.h:

2012-05-20  Michael Saboff  <msaboff@apple.com>

        JSGlobalData ScratchBuffers Are Not Visited During Garbage Collection
        https://bugs.webkit.org/show_bug.cgi?id=86553

        Reviewed by Gavin Barraclough.

        Scratch buffers can contain the only reference to live objects.
        Therefore visit scratch buffer contents as conservative roots.
        Changed the scratch buffers to be a struct with an "active"
        length and the actual buffer.  The users of the scratch
        buffer emit code where needed to set and clear the active
        length as appropriate.  During marking, the active count is
        used for conservative marking.

        * dfg/DFGAssemblyHelpers.h:
        (JSC::DFG::AssemblyHelpers::debugCall):
        * dfg/DFGOSRExitCompiler32_64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOSRExitCompiler64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGThunks.cpp:
        (JSC::DFG::osrExitGenerationThunkGenerator):
        * heap/Heap.cpp:
        (JSC::Heap::markRoots):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::gatherConservativeRoots):
        * runtime/JSGlobalData.h:
        (JSC::ScratchBuffer::ScratchBuffer):
        (ScratchBuffer):
        (JSC::ScratchBuffer::allocationSize):
        (JSC::ScratchBuffer::setActiveLength):
        (JSC::ScratchBuffer::activeLength):
        (JSC::ScratchBuffer::activeLengthPtr):
        (JSC::ScratchBuffer::dataBuffer):
        (JSGlobalData):
        (JSC::JSGlobalData::scratchBufferForSize):

2012-05-20  Filip Pizlo  <fpizlo@apple.com>

        Predicted types should know about arguments
        https://bugs.webkit.org/show_bug.cgi?id=85165

        Reviewed by Oliver Hunt.
        
        Merge r115604 from dfgopt.

        * bytecode/PredictedType.cpp:
        (JSC::predictionToString):
        (JSC::predictionToAbbreviatedString):
        (JSC::predictionFromClassInfo):
        * bytecode/PredictedType.h:
        (JSC):
        (JSC::isMyArgumentsPrediction):
        (JSC::isArgumentsPrediction):

2012-05-20  Filip Pizlo  <fpizlo@apple.com>

        Bytecompiler should emit trivially fewer jumps in loops
        https://bugs.webkit.org/show_bug.cgi?id=85144

        Reviewed by Oliver Hunt.
        
        Merged r115587 from dfgopt.
        
        1-2% across the board win.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::WhileNode::emitBytecode):
        (JSC::ForNode::emitBytecode):

2012-05-19  Vivek Galatage  <vivekgalatage@gmail.com>

        Windows build broken due to changes in the http://trac.webkit.org/changeset/117646
        https://bugs.webkit.org/show_bug.cgi?id=86939

        The changeset 117646 changed the JSString::toBoolean signature. This
        change is for fixing the windows build break.

        Reviewed by Ryosuke Niwa.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-05-18  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION(117646): fast/canvas/webgl/glsl-conformance.html is crashing in the DFG
        https://bugs.webkit.org/show_bug.cgi?id=86929

        Reviewed by Oliver Hunt.
        
        The problem was that if CFG simplification saw a Branch with identical successors,
        it would always perform a basic block merge. But that's wrong if the successor has
        other predecessors.

        * dfg/DFGCFGSimplificationPhase.cpp:
        (JSC::DFG::CFGSimplificationPhase::run):

2012-05-18  Filip Pizlo  <fpizlo@apple.com>

        DFG CFG simplification crashes if it's trying to remove an unreachable block
        that has an already-killed-off unreachable successor
        https://bugs.webkit.org/show_bug.cgi?id=86918

        Reviewed by Oliver Hunt.
        
        This fixes crashes in:
        inspector/styles/styles-computed-trace.html
        inspector/console/console-big-array.html

        * dfg/DFGCFGSimplificationPhase.cpp:
        (JSC::DFG::CFGSimplificationPhase::fixPhis):

2012-05-18  Filip Pizlo  <fpizlo@apple.com>

        DFG should have control flow graph simplification
        https://bugs.webkit.org/show_bug.cgi?id=84553

        Reviewed by Oliver Hunt.
        
        Merged r115512 from dfgopt.

        This change gives the DFG the ability to simplify the control flow graph
        as part of an optimization fixpoint that includes CSE, CFA, and constant
        folding. This required a number of interesting changes including:
        
        - Solidifying the set of invariants that the DFG obeys. For example, the
          head and tail of each basic block must advertise the set of live locals
          and the set of available locals, respectively. It must do so by
          referring to the first access to the local in the block (for head) and
          the last one (for tail). This patch introduces the start of a
          validation step that may be turned on even with asserts disabled. To
          ensure that these invariants are preserved, I had to remove the
          redundant phi elimination phase. For now I just remove the call, but in
          the future we will probably remove it entirely unless we find a use for
          it.
        
        - Making it easier to get the boolean version of a JSValue. This is a
          pure operation, but we previously did not treat it as such.
        
        - Fixing the merging and filtering of AbstractValues that correspond to
          concrete JSValues. This was previously broken and was limiting the
          effect of running constant folding. Fixing this meant that I had to
          change how constant folding eliminates GetLocal nodes, so as to ensure
          that the resulting graph still obeys DFG rules.
        
        - Introducing simplified getters for some of the things that DFG phases
          want to know about, like the Nth child of a node (now just
          graph.child(...) if you don't care about performance too much) or
          getting successors of a basic block.
        
        The current CFG simplifier can handle almost all of the cases that it
        ought to handle; the noteworthy one that is not yet handled is removing
        basic blocks that just have jumps. To do this right we need to be able
        to remove jump-only blocks that also perform keep-alive on some values.
        To make this work, we need to be able to hoist the keep-alive into (or
        just above) a Branch. This is not fundamentally difficult but I opted to
        let this patch omit this optimization. We can handle this later.
        
        This is a big win on programs that include inline functions that are
        often called with constant arguments. Of course, SunSpider, V8, and
        Kraken don't count. Those benchmarks are completely neutral with this
        change.

        * API/JSValueRef.cpp:
        (JSValueToBoolean):
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::dfgOSREntryDataForBytecodeIndex):
        * bytecode/Operands.h:
        (JSC::Operands::setOperandFirstTime):
        (Operands):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::initialize):
        (JSC::DFG::AbstractState::execute):
        (JSC::DFG::AbstractState::mergeStateAtTail):
        (JSC::DFG::AbstractState::mergeToSuccessors):
        * dfg/DFGAbstractValue.h:
        (JSC::DFG::AbstractValue::isClear):
        (JSC::DFG::AbstractValue::operator!=):
        (JSC::DFG::AbstractValue::merge):
        (JSC::DFG::AbstractValue::filter):
        (JSC::DFG::AbstractValue::validateIgnoringValue):
        (AbstractValue):
        * dfg/DFGAdjacencyList.h:
        (JSC::DFG::AdjacencyList::child):
        (JSC::DFG::AdjacencyList::setChild):
        (AdjacencyList):
        * dfg/DFGBasicBlock.h:
        (JSC::DFG::BasicBlock::~BasicBlock):
        (BasicBlock):
        (JSC::DFG::BasicBlock::numNodes):
        (JSC::DFG::BasicBlock::nodeIndex):
        (JSC::DFG::BasicBlock::isPhiIndex):
        (JSC::DFG::BasicBlock::isInPhis):
        (JSC::DFG::BasicBlock::isInBlock):
        * dfg/DFGByteCodeParser.cpp:
        (ByteCodeParser):
        (DFG):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGCFAPhase.cpp:
        (JSC::DFG::CFAPhase::run):
        (JSC::DFG::CFAPhase::performBlockCFA):
        (JSC::DFG::performCFA):
        * dfg/DFGCFAPhase.h:
        (DFG):
        * dfg/DFGCFGSimplificationPhase.cpp: Added.
        (DFG):
        (CFGSimplificationPhase):
        (JSC::DFG::CFGSimplificationPhase::CFGSimplificationPhase):
        (JSC::DFG::CFGSimplificationPhase::run):
        (JSC::DFG::CFGSimplificationPhase::killUnreachable):
        (JSC::DFG::CFGSimplificationPhase::findOperandSource):
        (JSC::DFG::CFGSimplificationPhase::keepOperandAlive):
        (JSC::DFG::CFGSimplificationPhase::fixPossibleGetLocal):
        (JSC::DFG::CFGSimplificationPhase::jettisonBlock):
        (JSC::DFG::CFGSimplificationPhase::fixPhis):
        (JSC::DFG::CFGSimplificationPhase::fixJettisonedPredecessors):
        (JSC::DFG::CFGSimplificationPhase::removePotentiallyDeadPhiReference):
        (JSC::DFG::CFGSimplificationPhase::OperandSubstitution::OperandSubstitution):
        (OperandSubstitution):
        (JSC::DFG::CFGSimplificationPhase::OperandSubstitution::dump):
        (JSC::DFG::CFGSimplificationPhase::skipGetLocal):
        (JSC::DFG::CFGSimplificationPhase::fixTailOperand):
        (JSC::DFG::CFGSimplificationPhase::mergeBlocks):
        (JSC::DFG::performCFGSimplification):
        * dfg/DFGCFGSimplificationPhase.h: Added.
        (DFG):
        * dfg/DFGCSEPhase.cpp:
        (JSC::DFG::CSEPhase::run):
        (CSEPhase):
        (JSC::DFG::CSEPhase::impureCSE):
        (JSC::DFG::CSEPhase::globalVarLoadElimination):
        (JSC::DFG::CSEPhase::getByValLoadElimination):
        (JSC::DFG::CSEPhase::checkStructureLoadElimination):
        (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
        (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
        (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):
        (JSC::DFG::CSEPhase::performNodeCSE):
        (JSC::DFG::CSEPhase::performBlockCSE):
        (JSC::DFG::performCSE):
        * dfg/DFGCSEPhase.h:
        (DFG):
        * dfg/DFGCommon.h:
        * dfg/DFGConstantFoldingPhase.cpp:
        (JSC::DFG::ConstantFoldingPhase::run):
        (JSC::DFG::performConstantFolding):
        * dfg/DFGConstantFoldingPhase.h:
        (DFG):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * dfg/DFGEdge.h:
        (Edge):
        (JSC::DFG::Edge::operator UnspecifiedBoolType*):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::run):
        (JSC::DFG::FixupPhase::fixupBlock):
        (JSC::DFG::performFixup):
        * dfg/DFGFixupPhase.h:
        (DFG):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        (JSC::DFG::Graph::handleSuccessor):
        (DFG):
        (JSC::DFG::Graph::determineReachability):
        (JSC::DFG::Graph::resetReachability):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::deref):
        (JSC::DFG::Graph::changeIndex):
        (Graph):
        (JSC::DFG::Graph::changeEdge):
        (JSC::DFG::Graph::numSuccessors):
        (JSC::DFG::Graph::successor):
        (JSC::DFG::Graph::successorForCondition):
        (JSC::DFG::Graph::isPredictedNumerical):
        (JSC::DFG::Graph::byValIsPure):
        (JSC::DFG::Graph::clobbersWorld):
        (JSC::DFG::Graph::numChildren):
        (JSC::DFG::Graph::child):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::convertToConstant):
        (JSC::DFG::Node::numSuccessors):
        (Node):
        (JSC::DFG::Node::successor):
        (JSC::DFG::Node::successorForCondition):
        * dfg/DFGNodeType.h:
        (DFG):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGOperations.cpp:
        * dfg/DFGPhase.cpp:
        (JSC::DFG::Phase::endPhase):
        * dfg/DFGPhase.h:
        (JSC::DFG::runPhase):
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::run):
        (JSC::DFG::performPredictionPropagation):
        * dfg/DFGPredictionPropagationPhase.h:
        (DFG):
        * dfg/DFGRedundantPhiEliminationPhase.cpp:
        (JSC::DFG::RedundantPhiEliminationPhase::run):
        (JSC::DFG::performRedundantPhiElimination):
        * dfg/DFGRedundantPhiEliminationPhase.h:
        (DFG):
        * dfg/DFGScoreBoard.h:
        (JSC::DFG::ScoreBoard::use):
        (ScoreBoard):
        (JSC::DFG::ScoreBoard::useIfHasResult):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::createOSREntries):
        (JSC::DFG::SpeculativeJIT::linkOSREntries):
        (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
        (JSC::DFG::SpeculativeJIT::compileRegExpExec):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::nextBlock):
        (SpeculativeJIT):
        (JSC::DFG::SpeculativeJIT::use):
        (JSC::DFG::SpeculativeJIT::jump):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGValidate.cpp: Added.
        (DFG):
        (Validate):
        (JSC::DFG::Validate::Validate):
        (JSC::DFG::Validate::validate):
        (JSC::DFG::Validate::reportValidationContext):
        (JSC::DFG::Validate::dumpData):
        (JSC::DFG::Validate::dumpGraphIfAppropriate):
        (JSC::DFG::validate):
        * dfg/DFGValidate.h: Added.
        (DFG):
        (JSC::DFG::validate):
        * dfg/DFGVirtualRegisterAllocationPhase.cpp:
        (JSC::DFG::VirtualRegisterAllocationPhase::run):
        (JSC::DFG::performVirtualRegisterAllocation):
        * dfg/DFGVirtualRegisterAllocationPhase.h:
        (DFG):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncFilter):
        (JSC::arrayProtoFuncEvery):
        (JSC::arrayProtoFuncSome):
        * runtime/BooleanConstructor.cpp:
        (JSC::constructBoolean):
        (JSC::callBooleanConstructor):
        * runtime/JSCell.h:
        (JSCell):
        * runtime/JSObject.cpp:
        (JSC):
        * runtime/JSObject.h:
        * runtime/JSString.cpp:
        (JSC::JSString::toBoolean):
        * runtime/JSString.h:
        (JSString):
        (JSC::JSCell::toBoolean):
        (JSC::JSValue::toBoolean):
        * runtime/JSValue.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::toPropertyDescriptor):
        * runtime/RegExpConstructor.cpp:
        (JSC::setRegExpConstructorMultiline):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncToString):

2012-05-18  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, build fix.

        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):

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

        DFG should have constant propagation
        https://bugs.webkit.org/show_bug.cgi?id=84004

        Reviewed by Gavin Barraclough.
        
        Merge r114554 from dfgopt.
        
        Changes AbstractValue to be able to hold a "set" of constants, where
        the maximum set size is 1 - so merging a value containing constant A
        with another value containing constant B where A != B will result in
        the AbstractValue claiming that it does not know any constants (i.e.
        it'll just have a predicted type and possible a structure).
        
        Added a constant folding phase that uses this new information to
        replace pure operations known to have constant results with
        JSConstants. This is OSR-exit-aware, in that it will prepend a Phantom
        that refers to all of the kids of the node we replaced.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::beginBasicBlock):
        (JSC::DFG::AbstractState::endBasicBlock):
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGAbstractState.h:
        (AbstractState):
        * dfg/DFGAbstractValue.h:
        (JSC::DFG::AbstractValue::clear):
        (JSC::DFG::AbstractValue::isClear):
        (JSC::DFG::AbstractValue::makeTop):
        (JSC::DFG::AbstractValue::clobberValue):
        (AbstractValue):
        (JSC::DFG::AbstractValue::valueIsTop):
        (JSC::DFG::AbstractValue::value):
        (JSC::DFG::AbstractValue::set):
        (JSC::DFG::AbstractValue::operator==):
        (JSC::DFG::AbstractValue::merge):
        (JSC::DFG::AbstractValue::filter):
        (JSC::DFG::AbstractValue::validate):
        (JSC::DFG::AbstractValue::checkConsistency):
        (JSC::DFG::AbstractValue::dump):
        * dfg/DFGAdjacencyList.h:
        (JSC::DFG::AdjacencyList::initialize):
        (AdjacencyList):
        (JSC::DFG::AdjacencyList::reset):
        * dfg/DFGBasicBlock.h:
        (JSC::DFG::BasicBlock::BasicBlock):
        (BasicBlock):
        * dfg/DFGCSEPhase.cpp:
        (JSC::DFG::CSEPhase::constantCSE):
        (CSEPhase):
        (JSC::DFG::CSEPhase::performNodeCSE):
        * dfg/DFGConstantFoldingPhase.cpp: Added.
        (DFG):
        (ConstantFoldingPhase):
        (JSC::DFG::ConstantFoldingPhase::ConstantFoldingPhase):
        (JSC::DFG::ConstantFoldingPhase::run):
        (JSC::DFG::performConstantFolding):
        * dfg/DFGConstantFoldingPhase.h: Added.
        (DFG):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * dfg/DFGGraph.h:
        (Graph):
        (JSC::DFG::Graph::convertToConstant):
        * dfg/DFGInsertionSet.h:
        (JSC::DFG::InsertionSet::execute):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::convertToConstant):
        (Node):
        * runtime/JSValue.cpp:
        (JSC::JSValue::description):
        * runtime/JSValue.h:
        (JSValue):

2012-05-18  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Fix build for Qt by using ASSERT_UNUSED in DFGSpeculativeJIT
        https://bugs.webkit.org/show_bug.cgi?id=86902

        Reviewed by Andreas Kling.

        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):

2012-04-16  Filip Pizlo  <fpizlo@apple.com>

        DFG should have out-of-line slow paths
        https://bugs.webkit.org/show_bug.cgi?id=83992

        Reviewed by Oliver Hunt.
        
        Merge of r114472 and r114553 from dfgopt.
        
        Introduces the notion of slow path code generation closures in the DFG.
        These are defined in DFGSlowPathGenerator.h, though they are fairly
        extensible so DFGSpeculativeJIT64.cpp and DFGSpeculativeJIT32_64.cpp
        define a couple special-purpose ones. A slow path generation closure
        (DFG::SlowPathGenerator) is executed after the main speculative path is
        generated. This makes them great for scheduling slow path code out of
        the way of the hot paths.
        
        This patch also converts most - but not all - of the DFG to use slow
        path generators instead of inline slow paths.
        
        The result is a sub-1% improvement on SunSpider and V8, and a miniscule
        regression on Kraken.
        
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::TrustedImmPtr::TrustedImmPtr):
        (TrustedImmPtr):
        (JSC::AbstractMacroAssembler::TrustedImm32::TrustedImm32):
        (TrustedImm32):
        * bytecode/StructureStubInfo.h:
        * dfg/DFGCommon.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        (JSC::DFG::JITCompiler::compile):
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGJITCompiler.h:
        (DFG):
        (JSC::DFG::PropertyAccessRecord::PropertyAccessRecord):
        (PropertyAccessRecord):
        (JITCompiler):
        * dfg/DFGSilentRegisterSavePlan.h: Added.
        (DFG):
        (SilentRegisterSavePlan):
        (JSC::DFG::SilentRegisterSavePlan::SilentRegisterSavePlan):
        (JSC::DFG::SilentRegisterSavePlan::spillAction):
        (JSC::DFG::SilentRegisterSavePlan::fillAction):
        (JSC::DFG::SilentRegisterSavePlan::nodeIndex):
        (JSC::DFG::SilentRegisterSavePlan::gpr):
        (JSC::DFG::SilentRegisterSavePlan::fpr):
        * dfg/DFGSlowPathGenerator.h: Added.
        (DFG):
        (SlowPathGenerator):
        (JSC::DFG::SlowPathGenerator::SlowPathGenerator):
        (JSC::DFG::SlowPathGenerator::~SlowPathGenerator):
        (JSC::DFG::SlowPathGenerator::generate):
        (JSC::DFG::SlowPathGenerator::label):
        (JSC::DFG::SlowPathGenerator::call):
        (JumpingSlowPathGenerator):
        (JSC::DFG::JumpingSlowPathGenerator::JumpingSlowPathGenerator):
        (JSC::DFG::JumpingSlowPathGenerator::linkFrom):
        (JSC::DFG::JumpingSlowPathGenerator::jumpTo):
        (CallSlowPathGenerator):
        (JSC::DFG::CallSlowPathGenerator::CallSlowPathGenerator):
        (JSC::DFG::CallSlowPathGenerator::call):
        (JSC::DFG::CallSlowPathGenerator::setUp):
        (JSC::DFG::CallSlowPathGenerator::recordCall):
        (JSC::DFG::CallSlowPathGenerator::tearDown):
        (CallResultAndNoArgumentsSlowPathGenerator):
        (JSC::DFG::CallResultAndNoArgumentsSlowPathGenerator::CallResultAndNoArgumentsSlowPathGenerator):
        (JSC::DFG::CallResultAndNoArgumentsSlowPathGenerator::generateInternal):
        (CallResultAndOneArgumentSlowPathGenerator):
        (JSC::DFG::CallResultAndOneArgumentSlowPathGenerator::CallResultAndOneArgumentSlowPathGenerator):
        (JSC::DFG::CallResultAndOneArgumentSlowPathGenerator::generateInternal):
        (CallResultAndTwoArgumentsSlowPathGenerator):
        (JSC::DFG::CallResultAndTwoArgumentsSlowPathGenerator::CallResultAndTwoArgumentsSlowPathGenerator):
        (JSC::DFG::CallResultAndTwoArgumentsSlowPathGenerator::generateInternal):
        (CallResultAndThreeArgumentsSlowPathGenerator):
        (JSC::DFG::CallResultAndThreeArgumentsSlowPathGenerator::CallResultAndThreeArgumentsSlowPathGenerator):
        (JSC::DFG::CallResultAndThreeArgumentsSlowPathGenerator::generateInternal):
        (CallResultAndFourArgumentsSlowPathGenerator):
        (JSC::DFG::CallResultAndFourArgumentsSlowPathGenerator::CallResultAndFourArgumentsSlowPathGenerator):
        (JSC::DFG::CallResultAndFourArgumentsSlowPathGenerator::generateInternal):
        (CallResultAndFiveArgumentsSlowPathGenerator):
        (JSC::DFG::CallResultAndFiveArgumentsSlowPathGenerator::CallResultAndFiveArgumentsSlowPathGenerator):
        (JSC::DFG::CallResultAndFiveArgumentsSlowPathGenerator::generateInternal):
        (JSC::DFG::slowPathCall):
        (AssigningSlowPathGenerator):
        (JSC::DFG::AssigningSlowPathGenerator::AssigningSlowPathGenerator):
        (JSC::DFG::AssigningSlowPathGenerator::generateInternal):
        (JSC::DFG::slowPathMove):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
        (DFG):
        (JSC::DFG::SpeculativeJIT::~SpeculativeJIT):
        (JSC::DFG::SpeculativeJIT::addSlowPathGenerator):
        (JSC::DFG::SpeculativeJIT::runSlowPathGenerators):
        (JSC::DFG::SpeculativeJIT::compileValueToInt32):
        (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
        * dfg/DFGSpeculativeJIT.h:
        (DFG):
        (SpeculativeJIT):
        (JSC::DFG::SpeculativeJIT::silentSavePlanForGPR):
        (JSC::DFG::SpeculativeJIT::silentSavePlanForFPR):
        (JSC::DFG::SpeculativeJIT::silentSpill):
        (JSC::DFG::SpeculativeJIT::silentFill):
        (JSC::DFG::SpeculativeJIT::silentSpillAllRegistersImpl):
        (JSC::DFG::SpeculativeJIT::silentSpillAllRegisters):
        (JSC::DFG::SpeculativeJIT::pickCanTrample):
        (JSC::DFG::SpeculativeJIT::silentFillAllRegisters):
        (JSC::DFG::SpeculativeJIT::callOperation):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (ValueToNumberSlowPathGenerator):
        (JSC::DFG::ValueToNumberSlowPathGenerator::ValueToNumberSlowPathGenerator):
        (JSC::DFG::ValueToNumberSlowPathGenerator::generateInternal):
        (DFG):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
        (JSC::DFG::SpeculativeJIT::cachedGetById):
        (JSC::DFG::SpeculativeJIT::cachedPutById):
        (CompareAndBoxBooleanSlowPathGenerator):
        (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::CompareAndBoxBooleanSlowPathGenerator):
        (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::generateInternal):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (ValueToNumberSlowPathGenerator):
        (JSC::DFG::ValueToNumberSlowPathGenerator::ValueToNumberSlowPathGenerator):
        (JSC::DFG::ValueToNumberSlowPathGenerator::generateInternal):
        (DFG):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
        (JSC::DFG::SpeculativeJIT::cachedGetById):
        (JSC::DFG::SpeculativeJIT::cachedPutById):
        (CompareAndBoxBooleanSlowPathGenerator):
        (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::CompareAndBoxBooleanSlowPathGenerator):
        (JSC::DFG::CompareAndBoxBooleanSlowPathGenerator::generateInternal):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::compile):

2012-05-18  Tony Chang  <tony@chromium.org>

        remove the CSS_GRID_LAYOUT compiler define, but default grid layout to off
        https://bugs.webkit.org/show_bug.cgi?id=86767

        Reviewed by Ojan Vafai.

        * Configurations/FeatureDefines.xcconfig: Remove ENABLE_CSS_GRID_LAYOUT.

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

        Setting array index -1 and looping over array causes bad behavior
        https://bugs.webkit.org/show_bug.cgi?id=86733
        <rdar://problem/11477670>

        Reviewed by Oliver Hunt.

        * dfg/DFGOperations.cpp:

2012-05-17  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Rolled out r117495 because it caused som out of memory crashes.

        * heap/Heap.cpp:
        (JSC::Heap::collect):

2012-05-17  Geoffrey Garen  <ggaren@apple.com>

        Refactored the Heap to move more MarkedSpace logic into MarkedSpace
        https://bugs.webkit.org/show_bug.cgi?id=86790

        Reviewed by Gavin Barraclough.

        * heap/Heap.cpp:
        (JSC::Heap::lastChanceToFinalize):
        (JSC::Heap::markRoots):
        (JSC):
        (JSC::Heap::objectCount):
        (JSC::Heap::size):
        (JSC::Heap::capacity):
        (JSC::Heap::collect):
        * heap/Heap.h:
        (Heap): Took all the functors from here...

        * heap/MarkedBlock.h:
        (CountFunctor):
        (JSC::MarkedBlock::CountFunctor::CountFunctor):
        (JSC::MarkedBlock::CountFunctor::count):
        (JSC::MarkedBlock::CountFunctor::returnValue):
        (MarkedBlock):
        * heap/MarkedSpace.h:
        (JSC::ClearMarks::operator()):
        (JSC):
        (JSC::Sweep::operator()):
        (JSC::MarkCount::operator()):
        (JSC::Size::operator()):
        (JSC::Capacity::operator()):
        (MarkedSpace):
        (JSC::MarkedSpace::clearMarks):
        (JSC::MarkedSpace::sweep):
        (JSC::MarkedSpace::objectCount):
        (JSC::MarkedSpace::size):
        (JSC::MarkedSpace::capacity): and put them here.

2012-05-17  Geoffrey Garen  <ggaren@apple.com>

        Increase the GC allocation trigger
        https://bugs.webkit.org/show_bug.cgi?id=86699

        Reviewed by Sam Weinig.

        This helps a lot when the heap is growing, and helps to resolve
        the regression caused by r116484.

        * heap/Heap.cpp:
        (JSC::Heap::collect):

2012-05-16  Mark Hahnenberg  <mhahnenberg@apple.com>

        GC in the middle of JSObject::allocatePropertyStorage can cause badness
        https://bugs.webkit.org/show_bug.cgi?id=83839

        Reviewed by Geoff Garen.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * jit/JITStubs.cpp: Making changes to use the new return value of growPropertyStorage.
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSObject.cpp:
        (JSC::JSObject::growPropertyStorage): Renamed to more accurately reflect that we're 
        growing our already-existing PropertyStorage.
        * runtime/JSObject.h:
        (JSObject):
        (JSC::JSObject::setPropertyStorage): "Atomically" sets the new property storage 
        and the new structure so that we can be sure a GC never occurs when our Structure
        info is out of sync with our PropertyStorage.
        (JSC):
        (JSC::JSObject::putDirectInternal): Moved the check to see if we should 
        allocate more backing store before the actual property insertion into 
        the structure.
        (JSC::JSObject::putDirectWithoutTransition): Ditto.
        (JSC::JSObject::transitionTo): Ditto.
        * runtime/Structure.cpp:
        (JSC::Structure::suggestedNewPropertyStorageSize): Added to keep the resize policy 
        for property backing stores contained within the Structure class.
        (JSC):
        * runtime/Structure.h:
        (JSC::Structure::shouldGrowPropertyStorage): Lets clients know if another insertion 
        into the Structure would require resizing the property backing store so that they can 
        preallocate the required storage.
        (Structure):

2012-05-16  Geoffrey Garen  <ggaren@apple.com>

        GC is not thread-safe when moving values between C stacks
        https://bugs.webkit.org/show_bug.cgi?id=86672

        Reviewed by Phil Pizlo.

        GC pauses thread A while marking thread A, and then B while marking B,
        which isn't safe against A and B moving values between each others'
        stacks.

        This is a theoretical bug -- I haven't been able to reproduce it
        in the wild.

        * heap/MachineStackMarker.cpp:
        (JSC::MachineThreads::gatherFromOtherThread):
        (JSC::MachineThreads::gatherConservativeRoots): Pause all C stacks for the
        duration of stack marking, to avoid missing values that might be moving
        between C stacks.

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

        Block freeing thread should not free blocks when we are actively requesting them
        https://bugs.webkit.org/show_bug.cgi?id=86519

        Reviewed by Geoff Garen.

        * heap/BlockAllocator.h:
        (JSC::BlockAllocator::allocate): Reordering the setting of the flag so its done 
        while we hold the lock to ensure proper locking.

2012-05-15  Filip Pizlo  <fpizlo@apple.com>

        shrinkToFit() is often not called for Vectors in CodeBlock
        https://bugs.webkit.org/show_bug.cgi?id=86436

        Reviewed by Oliver Hunt.
        
        The vectors in CodeBlock are often appended to during various stages of
        compilation, but we neglect to shrink them after compilation finishes. This
        patch takes the most brutal possible approach: shrink all the vectors after
        the bytecompile phase, and then shrink them again after the appropriate
        JITing phase. The two shrinks are necessary because the JIT may append more
        stuff, but may also generate code that directly references things in other
        vectors; hence some can only be shrunk before JIT and some after. Also,
        we may allow a CodeBlock to sit around for a long time - possibly forever -
        before invoking the JIT, hence it makes sense to have two shrinks.
        
        This is performance neutral on the major benchmarks we track.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (CodeBlock):
        (JSC::CodeBlock::appendWeakReferenceTransition):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):

2012-05-15  Oliver Hunt  <oliver@apple.com>

        Make error information available even if all we have is line number information.
        https://bugs.webkit.org/show_bug.cgi?id=86547

        Reviewed by Filip Pizlo.

        We don't need expression information to generate useful line, file, and stack information,
        so only require that we have line number info available.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException):
        * runtime/Executable.h:
        (JSC):

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

        Block freeing thread should not free blocks when we are actively requesting them
        https://bugs.webkit.org/show_bug.cgi?id=86519

        Reviewed by Geoffrey Garen.

        The block freeing thread shoots us in the foot if it decides to run while we're actively 
        requesting blocks and returning them. This situation can arise when there is a lot of copying 
        collection going on in steady state. We allocate a large swath of pages to copy into, then we 
        return all the newly free old pages to the BlockAllocator. In this state, if the block freeing 
        thread wakes up in between collections (which is more likely than it waking up during a 
        collection) and frees half of these pages, they will be needed almost immediately during the 
        next collection, causing a storm of VM allocations which we know are going to be very slow.

        What we'd like is for when things have quieted down the block freeing thread can then return 
        memory to the OS. Usually this will be when a page has fully loaded and has a low allocation 
        rate. In this situation, our opportunistic collections will only be running at least every few 
        seconds, thus the extra time spent doing VM allocations won't matter nearly as much as, say, 
        while a page is loading.

        * heap/BlockAllocator.cpp:
        (JSC::BlockAllocator::BlockAllocator): Initialize our new field.
        (JSC::BlockAllocator::blockFreeingThreadMain): We check if we've seen any block requests recently.
        If so, reset our flag and go back to sleep. We also don't bother with locking here. If we miss out 
        on an update, we'll see it when we wake up again.
        * heap/BlockAllocator.h: Add new field to track whether or not we've received recent block requests.
        (BlockAllocator):
        (JSC::BlockAllocator::allocate): If we receive a request for a block, set our field that tracks 
        that to true. We don't bother locking since we assume that writing to a bool is atomic.

2012-05-14  Luke Macpherson  <macpherson@chromium.org>

        Introduce ENABLE_CSS_VARIABLES compile flag.
        https://bugs.webkit.org/show_bug.cgi?id=86338

        Reviewed by Dimitri Glazkov.

        Add a configuration option for CSS Variables support, disabling it by default.

        * Configurations/FeatureDefines.xcconfig:

2012-05-14  Gavin Barraclough  <barraclough@apple.com>

        Cannot login to iCloud
        https://bugs.webkit.org/show_bug.cgi?id=86321

        Reviewed by Filip Pizlo.

        This is a bug introduced by bug#85853, we shouldn't allow assignment to
        the prototype property of functions to be cached, since we need to clear
        the cached inheritorID.

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::put):

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

        Enh: Add the Ability to Disable / Enable JavaScript GC Timer
        https://bugs.webkit.org/show_bug.cgi?id=86382

        Reviewed by Darin Adler.

        Add flag to GCActivityCallback to enable / disable activity timer.
        Add api via Heap to set the flag's value.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Windows export
        * heap/Heap.cpp:
        (JSC::Heap::setGarbageCollectionTimerEnabled):
        * heap/Heap.h:
        * runtime/GCActivityCallback.h:
        (JSC::GCActivityCallback::isEnabled):
        (JSC::GCActivityCallback::setEnabled):
        (JSC::GCActivityCallback::GCActivityCallback):
        * runtime/GCActivityCallbackCF.cpp:
        (JSC::DefaultGCActivityCallbackPlatformData::timerDidFire):

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

        Increase Debug Logging in MarkStack::validate()
        https://bugs.webkit.org/show_bug.cgi?id=86408

        Rubber-stamped by Filip Pizlo.

        Added some descriptive debug messages for the conditions and
        values when a cell validation fails.

        * heap/MarkStack.cpp:
        (JSC::MarkStack::validate):

2012-05-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing header file.

2012-05-14  Yong Li  <yoli@rim.com>

        DFG JIT didn't work with ARM EABI.
        https://bugs.webkit.org/show_bug.cgi?id=84449

        Reviewed by Filip Pizlo.

        Add a 32-bit dummy argument for some callOperation()
        methods to make it work for ARM EABI.

        * dfg/DFGCCallHelpers.h:
        (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
        (CCallHelpers):
        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT.h:
        (SpeculativeJIT):
        (JSC::DFG::SpeculativeJIT::callOperation):

2012-05-13  Gavin Barraclough  <barraclough@apple.com>

        Introduce PropertyName class
        https://bugs.webkit.org/show_bug.cgi?id=86241

        Reviewed by Darin Adler.

        This patch introduced a couple of small bugs.

        * runtime/PropertyName.h:
        (JSC::toUInt32FromCharacters):
            - Returning wrong value for "" - should not convert to 0.
        (JSC::PropertyName::PropertyName):
            - Remove the ASSERT, it was a little too aspirational.

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

        DFG performs incorrect constant folding on double-to-uint32 conversion in
        Uint32Array PutByVal
        https://bugs.webkit.org/show_bug.cgi?id=86330

        Reviewed by Darin Adler.
        
        static_cast<int>(d) is wrong, since JS semantics require us to use toInt32(d).
        In particular, C++ casts on typical hardware (like x86 and similar) will
        return 0x80000000 for double values that are out of range of the int32 domain
        (i.e. less than -2^31 or greater than or equal to 2^31). But JS semantics call
        for wrap-around; for example the double value 4294967297 ought to become the
        int32 value 1, not 0x80000000.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):

2012-05-11  Gavin Barraclough  <barraclough@apple.com>

        Introduce PropertyName class
        https://bugs.webkit.org/show_bug.cgi?id=86241

        Reviewed by Geoff Garen.

        Replace 'const Identifier&' arguments to functions accessing object properties with a new 'PropertyName' type.
        This change paves the way to allow for properties keyed by values that are not Identifiers.

        This change is largely a mechanical find & replace.
        It also changes JSFunction's constructor to take a UString& instead of an Identifier&
        (since in some cases we can no longer guarantee that we'lll have an Identifier), and
        unifies Identifier's methods to obtain array indices onto PropertyName.

        The new PropertyName class retains the ability to support .impl() and .ustring(), but
        in a future patch we may need to rework this, since not all PropertyNames should be
        equal based on their string representation.

        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::finishCreation):
        * API/JSCallbackFunction.h:
        (JSCallbackFunction):
        (JSC::JSCallbackFunction::create):
        * API/JSCallbackObject.h:
        (JSCallbackObject):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::getOwnPropertySlot):
        (JSC::::getOwnPropertyDescriptor):
        (JSC::::put):
        (JSC::::deleteProperty):
        (JSC::::getStaticValue):
        (JSC::::staticFunctionGetter):
        (JSC::::callbackGetter):
        * API/JSObjectRef.cpp:
        (JSObjectMakeFunctionWithCallback):
        * JSCTypedArrayStubs.h:
        (JSC):
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::getOwnPropertySlot):
        (JSC::DebuggerActivation::put):
        (JSC::DebuggerActivation::putDirectVirtual):
        (JSC::DebuggerActivation::deleteProperty):
        (JSC::DebuggerActivation::getOwnPropertyDescriptor):
        (JSC::DebuggerActivation::defineOwnProperty):
        * debugger/DebuggerActivation.h:
        (DebuggerActivation):
        * jsc.cpp:
        (GlobalObject::addFunction):
        (GlobalObject::addConstructableFunction):
        * runtime/Arguments.cpp:
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::getOwnPropertyDescriptor):
        (JSC::Arguments::put):
        (JSC::Arguments::deleteProperty):
        (JSC::Arguments::defineOwnProperty):
        * runtime/Arguments.h:
        (Arguments):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::finishCreation):
        (JSC::ArrayConstructor::getOwnPropertySlot):
        (JSC::ArrayConstructor::getOwnPropertyDescriptor):
        * runtime/ArrayConstructor.h:
        (ArrayConstructor):
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::getOwnPropertySlot):
        (JSC::ArrayPrototype::getOwnPropertyDescriptor):
        (JSC::putProperty):
        * runtime/ArrayPrototype.h:
        (ArrayPrototype):
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::finishCreation):
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::getOwnPropertySlot):
        (JSC::BooleanPrototype::getOwnPropertyDescriptor):
        * runtime/BooleanPrototype.h:
        (BooleanPrototype):
        * runtime/ClassInfo.h:
        (MethodTable):
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::finishCreation):
        (JSC::DateConstructor::getOwnPropertySlot):
        (JSC::DateConstructor::getOwnPropertyDescriptor):
        * runtime/DateConstructor.h:
        (DateConstructor):
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::getOwnPropertySlot):
        (JSC::DatePrototype::getOwnPropertyDescriptor):
        * runtime/DatePrototype.h:
        (DatePrototype):
        * runtime/Error.h:
        (JSC::StrictModeTypeErrorFunction::create):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::finishCreation):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::getOwnPropertySlot):
        (JSC::ErrorPrototype::getOwnPropertyDescriptor):
        * runtime/ErrorPrototype.h:
        (ErrorPrototype):
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::finishCreation):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::finishCreation):
        (JSC::FunctionPrototype::addFunctionProperties):
        (JSC::functionProtoFuncBind):
        * runtime/FunctionPrototype.h:
        (JSC::FunctionPrototype::create):
        (FunctionPrototype):
        * runtime/Identifier.cpp:
        (JSC):
        * runtime/Identifier.h:
        (Identifier):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::finishCreation):
        * runtime/InternalFunction.h:
        (InternalFunction):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::symbolTableGet):
        (JSC::JSActivation::symbolTablePut):
        (JSC::JSActivation::symbolTablePutWithAttributes):
        (JSC::JSActivation::getOwnPropertySlot):
        (JSC::JSActivation::put):
        (JSC::JSActivation::putDirectVirtual):
        (JSC::JSActivation::deleteProperty):
        (JSC::JSActivation::argumentsGetter):
        * runtime/JSActivation.h:
        (JSActivation):
        * runtime/JSArray.cpp:
        (JSC::JSArray::defineOwnProperty):
        (JSC::JSArray::getOwnPropertySlot):
        (JSC::JSArray::getOwnPropertyDescriptor):
        (JSC::JSArray::put):
        (JSC::JSArray::deleteProperty):
        * runtime/JSArray.h:
        (JSArray):
        (JSC):
        * runtime/JSBoundFunction.cpp:
        (JSC::JSBoundFunction::create):
        (JSC::JSBoundFunction::finishCreation):
        * runtime/JSBoundFunction.h:
        (JSBoundFunction):
        * runtime/JSCell.cpp:
        (JSC::JSCell::getOwnPropertySlot):
        (JSC::JSCell::put):
        (JSC::JSCell::deleteProperty):
        (JSC::JSCell::putDirectVirtual):
        (JSC::JSCell::defineOwnProperty):
        (JSC::JSCell::getOwnPropertyDescriptor):
        * runtime/JSCell.h:
        (JSCell):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::create):
        (JSC::JSFunction::finishCreation):
        (JSC::JSFunction::argumentsGetter):
        (JSC::JSFunction::callerGetter):
        (JSC::JSFunction::lengthGetter):
        (JSC::JSFunction::getOwnPropertySlot):
        (JSC::JSFunction::getOwnPropertyDescriptor):
        (JSC::JSFunction::put):
        (JSC::JSFunction::deleteProperty):
        (JSC::JSFunction::defineOwnProperty):
        (JSC::getCalculatedDisplayName):
        * runtime/JSFunction.h:
        (JSFunction):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::put):
        (JSC::JSGlobalObject::putDirectVirtual):
        (JSC::JSGlobalObject::defineOwnProperty):
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::createThrowTypeError):
        (JSC::JSGlobalObject::getOwnPropertySlot):
        (JSC::JSGlobalObject::getOwnPropertyDescriptor):
        * runtime/JSGlobalObject.h:
        (JSGlobalObject):
        (JSC::JSGlobalObject::hasOwnPropertyForWrite):
        (JSC::JSGlobalObject::symbolTableHasProperty):
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::getOwnPropertySlot):
        (JSC::JSNotAnObject::getOwnPropertyDescriptor):
        (JSC::JSNotAnObject::put):
        (JSC::JSNotAnObject::deleteProperty):
        * runtime/JSNotAnObject.h:
        (JSNotAnObject):
        * runtime/JSONObject.cpp:
        (JSC::JSONObject::getOwnPropertySlot):
        (JSC::JSONObject::getOwnPropertyDescriptor):
        * runtime/JSONObject.h:
        (JSONObject):
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
        (JSC::JSObject::putDirectVirtual):
        (JSC::JSObject::putDirectAccessor):
        (JSC::JSObject::hasProperty):
        (JSC::JSObject::deleteProperty):
        (JSC::JSObject::hasOwnProperty):
        (JSC::callDefaultValueFunction):
        (JSC::JSObject::findPropertyHashEntry):
        (JSC::JSObject::getPropertySpecificValue):
        (JSC::JSObject::removeDirect):
        (JSC::JSObject::getOwnPropertyDescriptor):
        (JSC::JSObject::getPropertyDescriptor):
        (JSC::putDescriptor):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        (JSObject):
        (JSC::JSObject::getDirect):
        (JSC::JSObject::getDirectLocation):
        (JSC::JSObject::inlineGetOwnPropertySlot):
        (JSC::JSObject::getOwnPropertySlot):
        (JSC::JSCell::fastGetOwnPropertySlot):
        (JSC::JSObject::getPropertySlot):
        (JSC::JSObject::get):
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::putOwnDataProperty):
        (JSC::JSObject::putDirect):
        (JSC::JSObject::putDirectWithoutTransition):
        (JSC::JSValue::get):
        (JSC::JSValue::put):
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::put):
        (JSC::JSStaticScopeObject::putDirectVirtual):
        (JSC::JSStaticScopeObject::getOwnPropertySlot):
        * runtime/JSStaticScopeObject.h:
        (JSStaticScopeObject):
        * runtime/JSString.cpp:
        (JSC::JSString::getOwnPropertySlot):
        (JSC::JSString::getStringPropertyDescriptor):
        * runtime/JSString.h:
        (JSString):
        (JSC::JSString::getStringPropertySlot):
        * runtime/JSValue.cpp:
        (JSC::JSValue::putToPrimitive):
        * runtime/JSValue.h:
        (JSC):
        (JSValue):
        * runtime/JSVariableObject.cpp:
        (JSC::JSVariableObject::deleteProperty):
        (JSC::JSVariableObject::symbolTableGet):
        (JSC::JSVariableObject::putDirectVirtual):
        * runtime/JSVariableObject.h:
        (JSVariableObject):
        (JSC::JSVariableObject::symbolTableGet):
        (JSC::JSVariableObject::symbolTablePut):
        (JSC::JSVariableObject::symbolTablePutWithAttributes):
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
        * runtime/Lookup.h:
        (JSC::HashTable::entry):
        (JSC):
        (JSC::getStaticPropertySlot):
        (JSC::getStaticPropertyDescriptor):
        (JSC::getStaticFunctionSlot):
        (JSC::getStaticFunctionDescriptor):
        (JSC::getStaticValueSlot):
        (JSC::getStaticValueDescriptor):
        (JSC::lookupPut):
        * runtime/MathObject.cpp:
        (JSC::MathObject::getOwnPropertySlot):
        (JSC::MathObject::getOwnPropertyDescriptor):
        * runtime/MathObject.h:
        (MathObject):
        * runtime/NativeErrorConstructor.h:
        (JSC::NativeErrorConstructor::finishCreation):
        * runtime/NumberConstructor.cpp:
        (JSC):
        (JSC::NumberConstructor::finishCreation):
        (JSC::NumberConstructor::getOwnPropertySlot):
        (JSC::NumberConstructor::getOwnPropertyDescriptor):
        (JSC::NumberConstructor::put):
        (JSC::numberConstructorNaNValue):
        (JSC::numberConstructorNegInfinity):
        (JSC::numberConstructorPosInfinity):
        (JSC::numberConstructorMaxValue):
        (JSC::numberConstructorMinValue):
        * runtime/NumberConstructor.h:
        (NumberConstructor):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::getOwnPropertySlot):
        (JSC::NumberPrototype::getOwnPropertyDescriptor):
        * runtime/NumberPrototype.h:
        (NumberPrototype):
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::finishCreation):
        (JSC::ObjectConstructor::getOwnPropertySlot):
        (JSC::ObjectConstructor::getOwnPropertyDescriptor):
        * runtime/ObjectConstructor.h:
        (ObjectConstructor):
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::put):
        (JSC::ObjectPrototype::defineOwnProperty):
        (JSC::ObjectPrototype::getOwnPropertySlot):
        (JSC::ObjectPrototype::getOwnPropertyDescriptor):
        * runtime/ObjectPrototype.h:
        (ObjectPrototype):
        * runtime/PropertySlot.h:
        (PropertySlot):
        (JSC::PropertySlot::getValue):
        * runtime/RegExpConstructor.cpp:
        (JSC):
        (JSC::RegExpConstructor::finishCreation):
        (JSC::RegExpConstructor::getOwnPropertySlot):
        (JSC::RegExpConstructor::getOwnPropertyDescriptor):
        (JSC::regExpConstructorDollar1):
        (JSC::regExpConstructorDollar2):
        (JSC::regExpConstructorDollar3):
        (JSC::regExpConstructorDollar4):
        (JSC::regExpConstructorDollar5):
        (JSC::regExpConstructorDollar6):
        (JSC::regExpConstructorDollar7):
        (JSC::regExpConstructorDollar8):
        (JSC::regExpConstructorDollar9):
        (JSC::regExpConstructorInput):
        (JSC::regExpConstructorMultiline):
        (JSC::regExpConstructorLastMatch):
        (JSC::regExpConstructorLastParen):
        (JSC::regExpConstructorLeftContext):
        (JSC::regExpConstructorRightContext):
        (JSC::RegExpConstructor::put):
        * runtime/RegExpConstructor.h:
        (RegExpConstructor):
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::getOwnPropertySlot):
        (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
        (JSC::RegExpMatchesArray::put):
        (JSC::RegExpMatchesArray::deleteProperty):
        (JSC::RegExpMatchesArray::defineOwnProperty):
        * runtime/RegExpObject.cpp:
        (JSC):
        (JSC::RegExpObject::getOwnPropertySlot):
        (JSC::RegExpObject::getOwnPropertyDescriptor):
        (JSC::RegExpObject::deleteProperty):
        (JSC::RegExpObject::defineOwnProperty):
        (JSC::regExpObjectGlobal):
        (JSC::regExpObjectIgnoreCase):
        (JSC::regExpObjectMultiline):
        (JSC::regExpObjectSource):
        (JSC::RegExpObject::put):
        * runtime/RegExpObject.h:
        (RegExpObject):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::getOwnPropertySlot):
        (JSC::RegExpPrototype::getOwnPropertyDescriptor):
        * runtime/RegExpPrototype.h:
        (RegExpPrototype):
        * runtime/StrictEvalActivation.cpp:
        (JSC::StrictEvalActivation::deleteProperty):
        * runtime/StrictEvalActivation.h:
        (StrictEvalActivation):
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::finishCreation):
        (JSC::StringConstructor::getOwnPropertySlot):
        (JSC::StringConstructor::getOwnPropertyDescriptor):
        * runtime/StringConstructor.h:
        (StringConstructor):
        * runtime/StringObject.cpp:
        (JSC::StringObject::getOwnPropertySlot):
        (JSC::StringObject::getOwnPropertyDescriptor):
        (JSC::StringObject::put):
        (JSC::StringObject::defineOwnProperty):
        (JSC::StringObject::deleteProperty):
        * runtime/StringObject.h:
        (StringObject):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::getOwnPropertySlot):
        (JSC::StringPrototype::getOwnPropertyDescriptor):
        * runtime/StringPrototype.h:
        (StringPrototype):
        * runtime/Structure.cpp:
        (JSC::Structure::despecifyDictionaryFunction):
        (JSC::Structure::addPropertyTransitionToExistingStructure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::removePropertyTransition):
        (JSC::Structure::despecifyFunctionTransition):
        (JSC::Structure::attributeChangeTransition):
        (JSC::Structure::addPropertyWithoutTransition):
        (JSC::Structure::removePropertyWithoutTransition):
        (JSC::Structure::get):
        (JSC::Structure::despecifyFunction):
        (JSC::Structure::putSpecificValue):
        (JSC::Structure::remove):
        * runtime/Structure.h:
        (Structure):
        (JSC::Structure::get):

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

        Rolling out r116659.

        Causes ASSERT failures on bots.

        Rubber stamped by Geoff Garen.

        * heap/Heap.cpp:
        (JSC::Heap::markRoots):
        * heap/MarkStack.cpp:
        (JSC::MarkStackThreadSharedData::markingThreadMain):
        (JSC::MarkStackThreadSharedData::markingThreadStartFunc):
        (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
        (JSC::MarkStackThreadSharedData::reset):
        (JSC::MarkStack::reset):
        (JSC):
        (JSC::SlotVisitor::copyAndAppend):
        * heap/MarkStack.h:
        (MarkStackThreadSharedData):
        (MarkStack):
        * runtime/JSString.h:
        (JSString):
        (JSC::JSString::finishCreation):
        (JSC::JSString::is8Bit):
        (JSC::JSRopeString::finishCreation):

2012-05-11  Oliver Hunt  <oliver@apple.com>

        Appease thread verifier when dealing with the JSC API's shared VM
        https://bugs.webkit.org/show_bug.cgi?id=86268

        Reviewed by Geoffrey Garen.

        If we're the shared VM, just disable the verifier.  This makes debug builds
        livable against non-webkit clients.

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

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

        JIT memory allocator is not returning memory to the OS on Darwin
        https://bugs.webkit.org/show_bug.cgi?id=86047

        Reviewed by Geoff Garen.

        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolExecutableAllocator::notifyPageIsFree):

2012-05-11  Geoffrey Garen  <ggaren@apple.com>

        Clarified JSGlobalData (JavaScript VM) lifetime
        https://bugs.webkit.org/show_bug.cgi?id=85142

        Reviewed by Alexey Proskuryakov.

        (Follow-up fix.)

        * API/JSContextRef.cpp:
        (JSGlobalContextCreate): Restored some code I removed because I misread an #ifdef.
        (We don't need to test BUILDING_ON_LEOPARD, but we still need the linked-on
        test, because apps might have been linked on older OS's.)

2012-05-11  Sam Weinig  <sam@webkit.org>

        Fix crash seen when running with libgmalloc
        <rdar://problem/11435411>
        https://bugs.webkit.org/show_bug.cgi?id=86232

        Reviewed by Gavin Barraclough.

        * heap/MarkStack.cpp:
        (JSC::MarkStackThreadSharedData::markingThreadMain):
        Don't delete the SlotVisitor before the ParallelModeEnabler has had a chance to run its
        destructor.

2012-05-10  Gavin Barraclough  <barraclough@apple.com>

        Remove op_get_callee

        Rubber stamped by Geoff Garen.
        
        This is now redundant.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/Opcode.h:
        (JSC):
        (JSC::padOpcodeName):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC):
        * jit/JITOpcodes32_64.cpp:
        (JSC):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:

2012-05-10  Gavin Barraclough  <barraclough@apple.com>

        Cache inheritorID on JSFunction
        https://bugs.webkit.org/show_bug.cgi?id=85853

        Reviewed by Geoff Garen & Filip Pizlo.

        An object's prototype is indicated via its structure.  To create an otherwise
        empty object with object A as its prototype, we require a structure with its
        prototype set to point to A.  We wish to use this same structure for all empty
        objects created with a prototype of A, so we presently store this structure as
        a property of A, known as the inheritorID.

        When a function F is invoked as a constructor, where F has a property 'prototype'
        set to point to A, in order to create the 'this' value for the constructor to
        use the following steps are taken:
          - the 'prototype' proptery of F is read, via a regular [[Get]] access.
          - the inheritorID internal property of the prototype is read.
          - a new, empty object is constructed with its structure set to point to inheritorID.

        There are two drawbacks to the current approach:
          - it requires that every object has an inheritorID field.
          - it requires a [[Get]] access on every constructor call to access the 'prototype' property.

        Instead, switch to caching a copy of the inheritorID on the function.  Constructor
        calls now only need read the internal property from the callee, saving a [[Get]].
        This also means that JSObject::m_inheritorID is no longer commonly read, and in a
        future patch we can move to storing this in a more memory efficient fashion.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/Opcode.h:
        (JSC):
        (JSC::padOpcodeName):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGNodeType.h:
        (DFG):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitAllocateJSFunction):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_create_this):
        (JSC::JIT::emitSlow_op_create_this):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_create_this):
        (JSC::JIT::emitSlow_op_create_this):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::cacheInheritorID):
        (JSC):
        (JSC::JSFunction::put):
        (JSC::JSFunction::defineOwnProperty):
        * runtime/JSFunction.h:
        (JSC::JSFunction::cachedInheritorID):
        (JSFunction):
        (JSC::JSFunction::offsetOfCachedInheritorID):

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

        Enh: Hash Const JSString in Backing Stores to Save Memory
        https://bugs.webkit.org/show_bug.cgi?id=86024

        Reviewed by Filip Pizlo.

        During garbage collection, each marking thread keeps a HashMap of
        strings.  While visiting via MarkStack::copyAndAppend(), we check to
        see if the string we are visiting is already in the HashMap.  If not
        we add it.  If so, we change the reference to the current string we're
        visiting to the prior string.

        To somewhat reduce the performance impact of this change, if a string
        is unique at the end of a marking it will not be checked during further
        GC phases.  In some cases this won't catch all duplicates, but we are
        trying to catch the growth of duplicate strings.

        * heap/Heap.cpp:
        (JSC::Heap::markRoots):
        * heap/MarkStack.cpp:
        (JSC::MarkStackThreadSharedData::resetChildren): New method called by the 
        main thread to reset the slave threads.  This is primarily done to
        clear the m_uniqueStrings HashMap.
        (JSC):
        (JSC::MarkStackThreadSharedData::markingThreadMain):
        (JSC::MarkStackThreadSharedData::markingThreadStartFunc):
        (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
        (JSC::MarkStackThreadSharedData::reset):
        (JSC::MarkStack::reset): Added call to clear m_uniqueStrings.
        (JSC::MarkStack::internalAppend): New method that performs the hash consting.
        (JSC::SlotVisitor::copyAndAppend): Changed to call the new hash consting
        internalAppend()
        * heap/MarkStack.h:
        (MarkStackThreadSharedData):
        (MarkStack):
        (JSC::MarkStack::sharedData):
        * runtime/JSString.h:
        (JSString): Added m_isHashConstSingleton flag, accessors for the flag and
        code to initialize the flag.
        (JSC::JSString::finishCreation):
        (JSC::JSString::isHashConstSingleton):
        (JSC::JSString::clearHashConstSingleton):
        (JSC::JSString::setHashConstSingleton):
        (JSC::JSRopeString::finishCreation):

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

        JIT memory allocator is not returning memory to the OS on Darwin
        https://bugs.webkit.org/show_bug.cgi?id=86047
        <rdar://problem/11414948>

        Reviewed by Geoff Garen.
        
        Work around the problem by using a different madvise() flag, but only for the JIT memory
        allocator. Also put in ASSERTs that the call is actually working.

        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolExecutableAllocator::notifyNeedPage):
        (JSC::FixedVMPoolExecutableAllocator::notifyPageIsFree):

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

        It should be possible to get useful debug logging from the JIT memory allocator
        https://bugs.webkit.org/show_bug.cgi?id=86042

        Reviewed by Geoff Garen.

        * jit/ExecutableAllocator.h:

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

        GC race condition in OpaqueJSClass::prototype
        https://bugs.webkit.org/show_bug.cgi?id=86034

        Build fix.

        * API/JSClassRef.cpp:
        (OpaqueJSClass::prototype):
            - Eeeep, landed bad version of patch!

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

        GC race condition in OpaqueJSClass::prototype
        https://bugs.webkit.org/show_bug.cgi?id=86034

        Reviewed by Filip Pizlo.

        The bug here is basically:
            if (weakref) weakref->method()
        where a GC may occur between the if & the method call.

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

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

        CopiedSpace does not add pinned blocks back to the to-space filter
        https://bugs.webkit.org/show_bug.cgi?id=86011

        Reviewed by Geoffrey Garen.

        After a collection has finished, we go through the blocks in from-space 
        and move any of them that are pinned into to-space. At the beginning of 
        collection, we reset the to-space block filter that is used during 
        conservative scanning and add back the blocks that are filled during the 
        collection. However, we neglect to add back those blocks that are moved 
        from from-space to to-space, which can cause the conservative scan to 
        think that some pinned items are not actually in CopiedSpace.

        * heap/CopiedSpace.cpp:
        (JSC::CopiedSpace::doneCopying): Add the pinned blocks back to the 
        to-space filter. Also added a comment and assert for future readers that 
        indicates that it's okay that we don't also add the block to the 
        to-space block set since it was never removed.


2012-05-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Use independent version numbers for public libraries
        https://bugs.webkit.org/show_bug.cgi?id=85984

        Reviewed by Gustavo Noronha Silva.

        * GNUmakefile.am: Use LIBJAVASCRIPTCOREGTK_VERSION for library
        version.

2012-05-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Do not install JavaScriptCore platform-specific headers
        https://bugs.webkit.org/show_bug.cgi?id=85983

        Reviewed by Gustavo Noronha Silva.

        JavaScriptCore.h includes JSStringRefCF.h unconditionally. It was
        renamed to JavaScript.h in r29234 and it still exists for
        compatibility with mac and windows users.

        * GNUmakefile.list.am: Remove JavaScriptCore.h, JSStringRefCF.h
        and JSStringRefBSTR.h from the sources and headers list.

2012-05-08  Gavin Barraclough  <barraclough@apple.com>

        ROLLING OUT r114255
        
        GC in the middle of JSObject::allocatePropertyStorage can cause badness
        https://bugs.webkit.org/show_bug.cgi?id=83839

        Reviewed by nobody.

        This breaks the world, with COLLECT_ON_EVERY_ALLOCATION enabled.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSObject.cpp:
        (JSC::JSObject::allocatePropertyStorage):
        * runtime/JSObject.h:
        (JSObject):
        (JSC::JSObject::isUsingInlineStorage):
        (JSC):
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::putDirectWithoutTransition):
        (JSC::JSObject::transitionTo):
        * runtime/Structure.cpp:
        (JSC):
        * runtime/Structure.h:
        (JSC::Structure::didTransition):

2012-05-08  Mark Hahnenberg  <mhahnenberg@apple.com>

        Heap should not continually allocate new pages in steady state
        https://bugs.webkit.org/show_bug.cgi?id=85936

        Reviewed by Geoff Garen.

        Currently, in steady state (i.e. a constant amount of live GC 
        memory with a constant rate of allocation) assuming we've just 
        finished a collection with X live blocks in CopiedSpace, we 
        increase our working set by X blocks in CopiedSpace with each 
        collection we perform. This is due to the fact that we allocate 
        until we run out of free blocks to use in the Heap before we 
        consider whether we should run a collection. 

        In the longer term, this issue will be mostly resolved by 
        implementing quick release for the CopiedSpace. In the shorter 
        term, we should change our policy to check whether we should 
        allocate before trying to use a free block from the Heap. We 
        can change our policy to something more appropriate once we 
        have implemented quick release.

        This change should also have the convenient side effect of 
        reducing the variance in GC-heavy tests (e.g. v8-splay) due 
        to fact that we are doing less VM allocation during copying 
        collection. Overall, this patch is performance neutral across 
        the benchmarks we track.

        * heap/CopiedSpace.cpp: 
        (JSC::CopiedSpace::getFreshBlock): Shuffle the request from the BlockAllocator
        around so that we only do it if the block request must succeed 
        i.e. after we've already checked whether we should do a collection.
        * heap/MarkedAllocator.cpp:
        (JSC::MarkedAllocator::allocateSlowCase): Ditto.
        (JSC::MarkedAllocator::allocateBlock): We no longer have a failure mode in this 
        function because by the time we've called it, we've already checked whether we 
        should run a collection so there's no point in returning null.
        * heap/MarkedAllocator.h: Removing old arguments from function declaration.
        (MarkedAllocator):

2012-05-08  Gavin Barraclough  <barraclough@apple.com>

        SIGFPE on divide in classic interpreter
        https://bugs.webkit.org/show_bug.cgi?id=85917

        Rubber stamped by Oliver Hunt.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
            - check for divisor of -1.

2012-05-07  Oliver Hunt  <oliver@apple.com>

        Rolling out r110287

        RS=Filip Pizlo

        r110287 was meant to be refactoring only, but changed behavior
        enough to break some websites, including qq.com.

2012-05-07  Andy Estes  <aestes@apple.com>

        ENABLE_IFRAME_SEAMLESS should be part of FEATURE_DEFINES.

        * Configurations/FeatureDefines.xcconfig:

2012-05-07  Oliver Hunt  <oliver@apple.com>

        Fix release build.

        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):

2012-05-07  Oliver Hunt  <oliver@apple.com>

        LLInt doesn't check for Ropes when performing a character switch
        https://bugs.webkit.org/show_bug.cgi?id=85837

        Reviewed by Filip Pizlo.

        Make LLint check if the scrutinee of a char switch is a rope, and if
        so fall back to a slow case.

        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (LLInt):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:

2012-05-07  Eric Seidel  <eric@webkit.org>

        Add ENABLE_IFRAME_SEAMLESS so Apple can turn off SEAMLESS if needed
        https://bugs.webkit.org/show_bug.cgi?id=85822

        Reviewed by Adam Barth.

        * Configurations/FeatureDefines.xcconfig:

2012-05-05  Gavin Barraclough  <barraclough@apple.com>

        Remove TrustedImm32::m_isPointer
        https://bugs.webkit.org/show_bug.cgi?id=85726

        Rubber stamped by Sam Weinig.

        We used to rely on being able to generate code with known, fixed offsets – to do so we
        would inhibit more optimal code generation for pointers. This is no longer necessary.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::TrustedImm32::TrustedImm32):
        (TrustedImm32):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::store32):
        (JSC::MacroAssemblerARM::move):
        (JSC::MacroAssemblerARM::branch32):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::move):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::add32):
        (JSC::MacroAssemblerMIPS::and32):
        (JSC::MacroAssemblerMIPS::mul32):
        (JSC::MacroAssemblerMIPS::or32):
        (JSC::MacroAssemblerMIPS::sub32):
        (JSC::MacroAssemblerMIPS::store32):
        (JSC::MacroAssemblerMIPS::move):

2012-05-04  Filip Pizlo  <fpizlo@apple.com>

        DFG should not Flush GetLocal's
        https://bugs.webkit.org/show_bug.cgi?id=85663
        <rdar://problem/11373600>

        Reviewed by Oliver Hunt.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::flushArgument):
        (JSC::DFG::ByteCodeParser::handleCall):

2012-05-04  Allan Sandfeld Jensen  <allan.jensen@nokia.com>

        Doesn't build with ENABLE_JIT=0 
        https://bugs.webkit.org/show_bug.cgi?id=85042

        Reviewed by Gavin Barraclough.

        * bytecode/Operands.h:

2012-05-03  Oliver Hunt  <oliver@apple.com>

        Regression(r114702): Clobbering the caller frame register before we've stored it.
        https://bugs.webkit.org/show_bug.cgi?id=85564

        Reviewed by Filip Pizlo.

        Don't use t0 as a temporary, when we're about to use the value in t0.

        * llint/LowLevelInterpreter32_64.asm:

2012-05-03  Mark Hahnenberg  <mhahnenberg@apple.com>

        Removing remainder of accidental printfs.

        * heap/Heap.cpp:
        (JSC::Heap::collect):

2012-05-03  Andy Estes  <aestes@apple.com>

        If you add printf()s to your garbage collector, the layout tests are gonna have a bad time.

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

2012-05-03  Mark Hahnenberg  <mhahnenberg@apple.com>

        Heap::reportAbandonedObjectGraph should not hasten an allocation-triggered collection
        https://bugs.webkit.org/show_bug.cgi?id=85543

        Reviewed by Filip Pizlo.

        Currently reportAbandonedObjectGraph causes the Heap to think it is closer to its 
        allocation limit for the current cycle, thus hastening an allocation-triggered collection. 
        In reality, it should just affect the opportunistic GC timer. We should track the bytes 
        we think have been abandoned and the bytes that have been allocated separately.

        * heap/Heap.cpp: Added a new field m_abandonedBytes to Heap to keep track of how much 
        we think we've abandoned.
        (JSC::Heap::Heap): 
        (JSC::Heap::reportAbandonedObjectGraph): 
        (JSC):
        (JSC::Heap::didAbandon): Added this function for reportAbandonedObjectGraph to call 
        rather than didAllocate. Works the same as didAllocate, but modifies bytes abandoned rather 
        than bytes allocated. Also notifies the timer, summing the two values together.
        (JSC::Heap::collect):
        (JSC::Heap::didAllocate): Now adds the bytes allocated and bytes abandoned when reporting 
        to GCActivityCallback.
        * heap/Heap.h:
        (Heap):

2012-05-02  Eric Seidel  <eric@webkit.org>

        Sort ENABLE_ defines in FeatureDefines.xcconfig files to make them easier to compare with one another (and easier to autogenerate)
        https://bugs.webkit.org/show_bug.cgi?id=85433

        Reviewed by Adam Barth.

        I have a script which can autogenerate these xcconfig files as well as the
        vsprops files (and soon the Chromium, cmake, gnumake and qmake) feature lists
        from a central feature list file.
        In preparation for posting such a tool, I'm re-sorting these xcconfig files to be
        alphabetically ordered (currently they're close, but not quite).
        There is also at least one inconsistency between these files (CSS_LEGACY_PREFIXES) which
        I will fix in a second pass.  I will also sort the FEATURE_DEFINES = line in a follow-up patch.

        * Configurations/FeatureDefines.xcconfig:

2012-05-02  Hojong Han  <hojong.han@samsung.com>

        ARM_TRADITIONAL build fix
        https://bugs.webkit.org/show_bug.cgi?id=85358

        Reviewed by Gavin Barraclough.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::lshift32):
        (MacroAssemblerARM):
        (JSC::MacroAssemblerARM::or32):
        (JSC::MacroAssemblerARM::urshift32):
        (JSC::MacroAssemblerARM::xor32):
        (JSC::MacroAssemblerARM::branchSub32):

2012-05-02  Mark Hahnenberg  <mhahnenberg@apple.com>

        Opportunistic GC should give up if the Heap is paged out
        https://bugs.webkit.org/show_bug.cgi?id=85411

        Reviewed by Filip Pizlo.

        Opportunistic GC is punishing us severely in limited memory situations because its 
        assumptions about how much time a collection will take are way out of whack when the Heap 
        has been paged out by the OS. We should add a simple detection function to the Heap that 
        detects if its is paged out. It will do this by iterating each block of both the MarkedSpace 
        and CopiedSpace. If that operation takes longer than a fixed amount of time (e.g. 100ms), 
        the function returns true. This function will only be run prior to an opportunistic 
        collection (i.e. it will not run during our normal allocation-triggered collections).

        In my tests, steady state was drastically improved in high memory pressure situations (i.e. 
        the browser was still usable, significant reduction in SPODs). Occasionally, a normal GC
        would be triggered due to pages doing things in the background, which would cause a 
        significant pause. As we close pages we now cause normal collections rather than full 
        collections, which prevents us from collecting all of the dead memory immediately. One 
        nice way to deal with this issue might be to do incremental sweeping.


        * heap/CopiedSpace.cpp:
        (JSC::isBlockListPagedOut): Helper function to reduce code duplication when iterating over 
        to-space, from-space, and the oversize blocks.
        (JSC):
        (JSC::CopiedSpace::isPagedOut): Tries to determine whether or not CopiedSpace is paged out
        by iterating all of the blocks.
        * heap/CopiedSpace.h:
        (CopiedSpace):
        * heap/Heap.cpp:
        (JSC::Heap::isPagedOut): Tries to determine whether the Heap is paged out by asking the 
        MarkedSpace and CopiedSpace if they are paged out.
        (JSC):
        * heap/Heap.h:
        (Heap):
        (JSC::Heap::increaseLastGCLength): Added this so that the GC timer can linearly back off 
        each time it determines that the Heap is paged out.
        * heap/MarkedAllocator.cpp:
        (JSC::MarkedAllocator::isPagedOut): Tries to determine if this particular MarkedAllocator's
        list of blocks are paged out.
        (JSC):
        * heap/MarkedAllocator.h:
        (MarkedAllocator):
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::isPagedOut): For each MarkedAllocator, check to see if they're paged out.
        * heap/MarkedSpace.h:
        (MarkedSpace):
        * runtime/GCActivityCallback.cpp:
        (JSC::DefaultGCActivityCallback::cancel):
        (JSC):
        * runtime/GCActivityCallback.h:
        (JSC::GCActivityCallback::cancel):
        (DefaultGCActivityCallback):
        * runtime/GCActivityCallbackCF.cpp: Added a constant of 100ms for the timeout in determining
        whether the Heap is paged out or not.
        (JSC):
        (JSC::DefaultGCActivityCallbackPlatformData::timerDidFire): Added the check to see if we 
        should attempt a collection based on whether or not we can iterate the blocks of the Heap in 
        100ms. If we can't, we cancel the timer and tell the Heap we just wasted 100ms more trying to 
        do a collection. This gives us a nice linear backoff so we're not constantly re-trying in
        steady state paged-out-ness.
        (JSC::DefaultGCActivityCallback::cancel): Added this function which, while currently doing 
        exactly the same thing as willCollect, is more obvious as to what it's doing when we call it 
        in timerDidFire.

2012-05-02  Yong Li  <yoli@rim.com>

        Fix GCC X86 build error
        https://bugs.webkit.org/show_bug.cgi?id=85379

        Reviewed by Rob Buis.

        Always explicitly claim ".text" to make sure
        functions defined with inline assembly will be
        created in the correct section.

        * dfg/DFGOperations.cpp:
        (JSC):

2012-05-02  Oliver Hunt  <oliver@apple.com>

        Unreviewed, rolling out r115388.
        http://trac.webkit.org/changeset/115388
        https://bugs.webkit.org/show_bug.cgi?id=85011

        This caused many weird performance problems, and needs to be
        landed in pieces.

        * dfg/DFGOperations.cpp:
        * heap/Heap.cpp:
        (JSC::Heap::getConservativeRegisterRoots):
        (JSC::Heap::markRoots):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::dumpCaller):
        (JSC):
        * interpreter/CallFrame.h:
        (JSC::ExecState::init):
        (ExecState):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::prepareForRepeatCall):
        (JSC::Interpreter::privateExecute):
        * interpreter/Interpreter.h:
        (JSC::Interpreter::execute):
        * interpreter/RegisterFile.cpp:
        (JSC::RegisterFile::growSlowCase):
        (JSC::RegisterFile::gatherConservativeRoots):
        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::end):
        (JSC::RegisterFile::size):
        (JSC::RegisterFile::addressOfEnd):
        (RegisterFile):
        (JSC::RegisterFile::RegisterFile):
        (JSC::RegisterFile::shrink):
        (JSC::RegisterFile::grow):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        (JSC::jitCompileFor):
        (JSC::lazyLinkFor):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::handleHostCall):
        * llint/LowLevelInterpreter.asm:
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::arityCheckFor):

2012-05-01  Oliver Hunt  <oliver@apple.com>

        Physijs demo crashes due to DFG not updating topCallFrame correctly.
        https://bugs.webkit.org/show_bug.cgi?id=85311

        Reviewed by Filip Pizlo.

        A few of the dfg operations failed to correctly set the topCallFrame,
        and so everything goes wrong.  This patch corrects the effected operations,
        and makes debug builds poison topCallFrame before calling a dfg operation.

        * dfg/DFGOperations.cpp:
        (JSC::DFG::putByVal):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        (SpeculativeJIT):
        (JSC::DFG::SpeculativeJIT::prepareForExternalCall):
        (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
        (JSC::DFG::SpeculativeJIT::appendCallSetResult):

2012-04-30  Gavin Barraclough  <barraclough@apple.com>

        Should be able to use YARR JIT without the JS language JIT
        https://bugs.webkit.org/show_bug.cgi?id=85252

        Reviewed by Geoff Garen.

        Need to split canUseRegExpJIT out of canUseJIT.

        * runtime/JSGlobalData.cpp:
        (JSC):
        (JSC::useJIT):
        (JSC::JSGlobalData::JSGlobalData):
            - replace m_canUseJIT with m_canUseAssembler
        * runtime/JSGlobalData.h:
        (JSGlobalData):
        (JSC::JSGlobalData::canUseRegExpJIT):
            - Added canUseRegExpJIT, distinct from canUseJIT.
        * runtime/RegExp.cpp:
        (JSC::RegExp::compile):
        (JSC::RegExp::compileMatchOnly):
            - Call canUseRegExpJIT instead of canUseJIT.

2012-04-30  Gavin Barraclough  <barraclough@apple.com>

        Should be able to build YARR JIT without the JS language JIT
        https://bugs.webkit.org/show_bug.cgi?id=85242

        Reviewed by Michael Saboff.

        Some build macros are wrong.

        * assembler/RepatchBuffer.h:
        * jit/ExecutableAllocator.h:
        (JSC):
        * jit/JITExceptions.cpp:
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreadingOnce):

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

        Arguments object resets attributes on redefinition of a parameter
        https://bugs.webkit.org/show_bug.cgi?id=84994

        Rubber stamped by Oliver Hunt.

        There is a bug that we always re-add the original property before
        redefinition, doing so in a way that will reset the attributes
        without checking configurability.

        * runtime/Arguments.cpp:
        (JSC::Arguments::defineOwnProperty):
            - Only instantiate the property once - do not re-add if
              it has already been added, or if it has been deleted.

2012-04-30  Ryosuke Niwa  <rniwa@webkit.org>

        Remove an erroneous assertion after r115655.

        * runtime/NumberPrototype.cpp:
        (JSC::toUStringWithRadix):

2012-04-30  Myles Maxfield  <mmaxfield@google.com>

        End of Interpreter::tryCacheGetByID can trigger the garbage collector
        https://bugs.webkit.org/show_bug.cgi?id=84927

        Reviewed by Oliver Hunt.

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

2012-04-30  Benjamin Poulain  <benjamin@webkit.org>

        jsSingleCharacterString and jsSingleCharacterSubstring are not inlined
        https://bugs.webkit.org/show_bug.cgi?id=85147

        Reviewed by Darin Adler.

        The functions jsSingleCharacterString() and jsSingleCharacterSubstring() were not inlined
        by the compiler. This annihilate the gains of using SmallStrings.

        On stringProtoFuncCharAt(), this patch improves the performance by 11%.

        * runtime/JSString.h:
        (JSC::jsSingleCharacterString):
        (JSC::jsSingleCharacterSubstring):

2012-04-30  Benjamin Poulain  <bpoulain@apple.com>

        Add fast patch for radix == 10 on numberProtoFuncToString
        https://bugs.webkit.org/show_bug.cgi?id=85120

        Reviewed by Darin Adler.

        When radix, we use to turn the doubleValue into a JSValue just to convert
        it to a String. The problem is that was using the slow path for conversion and
        for the toString() operation.

        This patch shortcuts the creation of a JSValue and uses NumericStrings directly.
        The conversion is split between Integer and Double to ensure the fastest conversion
        for the common case of integer arguments.

        Converting number with radix 10 becomes 5% faster.

        Due to the simpler conversion of number to string for integer, converting
        integers that do not fall in the two previous optimizations get 32% faster.

        * runtime/NumberPrototype.cpp:
        (JSC::extractRadixFromArgs):
        (JSC::integerValueToString):
        (JSC::numberProtoFuncToString):

2012-04-30  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing header.

2012-04-28  Geoffrey Garen  <ggaren@apple.com>

        Factored threaded block allocation into a separate object
        https://bugs.webkit.org/show_bug.cgi?id=85148

        Reviewed by Sam Weinig.

        99% of this patch just moves duplicated block allocation and 
        deallocation code into a new object named BlockAllocator, with these 
        exceptions:

        * heap/BlockAllocator.h: Added.
        (BlockAllocator::BlockAllocator): The order of declarations here now 
        guards us against an unlikely race condition during startup.

        * heap/BlockAllocator.cpp:
        JSC::BlockAllocator::blockFreeingThreadMain): Added a FIXME to 
        highlight a lack of clarity we have in our block deallocation routines.

2012-04-28  Sam Weinig  <sam@webkit.org>

        Try to fix the Qt build.

        * heap/Heap.cpp:
        (JSC::Heap::lastChanceToFinalize):

2012-04-28  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-04-28  Geoffrey Garen  <ggaren@apple.com>

        Clarified JSGlobalData (JavaScript VM) lifetime
        https://bugs.webkit.org/show_bug.cgi?id=85142

        Reviewed by Anders Carlsson.

        This was so confusing that I didn't feel like I could reason about 
        memory lifetime in the heap without fixing it.

        The rules are:

        (1) JSGlobalData owns the virtual machine and all memory in it.

        (2) Deleting a JSGlobalData frees the virtual machine and all memory 
        in it.

        (Caveat emptor: if you delete the virtual machine while you're running 
        JIT code or accessing GC objects, you're gonna have a bad time.)

        (I opted not to make arbitrary sub-objects keep the virtual machine 
        alive automatically because:

                (a) doing that right would be complex and slow;

                (b) in the case of an exiting thread or process, there's no 
                clear way to give the garbage collector a chance to try again 
                later; 

                (c) continuing to run the garbage collector after we've been 
                asked to shut down the virtual machine seems rude;

                (d) we've never really supported that feature, anyway.)

        (3) Normal ref-counting will do. No need to call a battery of 
        specialty functions to tear down a JSGlobalData. Its foibles 
        notwithstanding, C++ does in fact know how to execute destructors in 
        order.

        * API/JSContextRef.cpp:
        (JSGlobalContextCreate): Removed compatibility shim for older 
        operating systems because it's no longer used.

        (JSGlobalContextRelease): Now that we can rely on JSGlobalData to "do 
        the right thing", this code is much simpler. We still have one special 
        case to notify the garbage collector if we're removing the last 
        reference to the global object, since this can improve memory behavior.

        * heap/CopiedSpace.cpp:
        (JSC::CopiedSpace::freeAllBlocks):
        * heap/CopiedSpace.h:
        (CopiedSpace): Renamed "destroy" => "freeAllBlocks" because true 
        destruction-time behaviors should be limited to our C++ destructor.

        * heap/Heap.cpp:
        (JSC::Heap::~Heap):
        (JSC):
        (JSC::Heap::lastChanceToFinalize):
        * heap/Heap.h:
        (Heap):
        (JSC::Heap::heap): Renamed "destroy" => "lastChanceToFinalize" because 
        true destruction-time behaviors should be limited to our C++ 
        destructor.

        Reorganized the code, putting code that must run before any objects 
        get torn down into lastChanceToFinalize, and code that just tears down 
        objects into our destructor.

        * heap/Local.h:
        (JSC::LocalStack::LocalStack):
        (JSC::LocalStack::push):
        (LocalStack): See rule (2).

        * jsc.cpp:
        (functionQuit):
        (main):
        (printUsageStatement):
        (parseArguments):
        (jscmain):
        * testRegExp.cpp:
        (main):
        (printUsageStatement):
        (parseArguments):
        (realMain): See rule (3).

        I removed the feature of ensuring orderly tear-down when calling quit()
        or running in --help mode because it didn't seem very useful and 
        making it work with Windows structured exception handling and 
        NO_RETURN didn't seem like a fun way to spend a Saturday.

        * runtime/JSGlobalData.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData): Moved heap to be the first data 
        member in JSGlobalData to ensure that it's destructed last, so other 
        objects that reference it destruct without crashing. This allowed me 
        to remove clearBuiltinStructures() altogether, and helped guarantee 
        rule (3).

        (JSC::JSGlobalData::~JSGlobalData): Explicitly call 
        lastChanceToFinalize() at the head of our destructor to ensure that 
        all pending finalizers run while the virtual machine is still in a 
        valid state. Trying to resurrect (re-ref) the virtual machine at this 
        point is not valid, but all other operations are.

        Changed a null to a 0xbbadbeef to clarify just how bad this beef is.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        * runtime/JSGlobalObject.h:
        (JSGlobalObject):
        (JSC::JSGlobalObject::globalData): See rule (3).

2012-04-27  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Windows build.

        * heap/WeakBlock.h:
        (WeakBlock):

2012-04-27  Geoffrey Garen  <ggaren@apple.com>

        Made WeakSet::allocate() static and removed its JSGlobalData argument
        https://bugs.webkit.org/show_bug.cgi?id=85128

        Reviewed by Anders Carlsson.

        This is a step toward faster finalization.

        WeakSet::allocate() now deduces which WeakSet to allocate from based on
        its JSCell* argument. (Currently, there's only one WeakSet, but soon
        there will be many.)

        This was a global replace of "globalData.heap.weakSet()->allocate" with
        "WeakSet::allocate", plus by-hand removal of the JSGlobalData argument.

        * heap/WeakSetInlines.h: Copied from Source/JavaScriptCore/heap/WeakSet.h.

        I had to split out WeakSet::allocate() in to a separate header to avoid
        a cycle.

        (JSC::WeakSet::allocate): We can mask the pointer we're passed to
        figure out where to allocate our WeakImpl. (Soon, we'll use this to
        associate the WeakImpl with the GC block it references.)

2012-04-27  Geoffrey Garen  <ggaren@apple.com>

        Stop using aligned allocation for WeakBlock
        https://bugs.webkit.org/show_bug.cgi?id=85124

        Reviewed by Anders Carlsson.

        We don't actually use the alignment for anything.

        * heap/WeakBlock.cpp:
        (JSC::WeakBlock::create):
        (JSC::WeakBlock::WeakBlock): Switched from aligned allocation to regular
        allocation.

        * heap/WeakBlock.h:
        (WeakBlock): Don't use HeapBlock because HeapBlock requires aligned
        allocation. This change required me to add some declarations that we used
        to inherit from HeapBlock.

        (WeakBlock::blockFor): Removed. This function relied on aligned allocation
        but didn't do anything for us.

        (WeakBlock::deallocate): Removed. WeakBlock doesn't own any of the deallocation
        logic, so it shouldn't own the function.

        * heap/WeakSet.cpp:
        (JSC::WeakSet::~WeakSet):
        (JSC::WeakSet::finalizeAll):
        (JSC::WeakSet::visitLiveWeakImpls):
        (JSC::WeakSet::visitDeadWeakImpls):
        (JSC::WeakSet::sweep):
        (JSC::WeakSet::shrink):
        (JSC::WeakSet::resetAllocator):
        (JSC::WeakSet::tryFindAllocator):
        * heap/WeakSet.h:
        (WeakSet): Updated declarations to reflect WeakBlock not inheriting from
        HeapBlock. This allowed me to remove some casts, which was nice.

        (JSC::WeakSet::deallocate): Directly set the deallocated flag instead of
        asking WeakBlock to do it for us.  We don't need to have a WeakBlock
        pointer to set the flag, so stop asking for one.

2012-04-27  Kentaro Hara  <haraken@chromium.org>

        [JSC] Implement a helper method createNotEnoughArgumentsError()
        https://bugs.webkit.org/show_bug.cgi?id=85102

        Reviewed by Geoffrey Garen.

        In bug 84787, kbr@ requested to avoid hard-coding
        createTypeError(exec, "Not enough arguments") here and there.
        This patch implements createNotEnoughArgumentsError(exec)
        and uses it in JSC bindings.

        c.f. a corresponding bug for V8 bindings is bug 85097.

        * runtime/Error.cpp:
        (JSC::createNotEnoughArgumentsError):
        (JSC):
        * runtime/Error.h:
        (JSC):

2012-04-27  Geoffrey Garen  <ggaren@apple.com>

        Only allow non-null pointers in the WeakSet
        https://bugs.webkit.org/show_bug.cgi?id=85119

        Reviewed by Darin Adler.

        This is a step toward more efficient finalization.

        No clients put non-pointers (JSValues) into Weak<T> and PassWeak<T>.

        Some clients put null pointers into Weak<T> and PassWeak<T>, but this is
        more efficient and straight-forward to model with a null in the Weak<T>
        or PassWeak<T> instead of allocating a WeakImpl just to hold null.

        * heap/PassWeak.h:
        (JSC): Removed the Unknown (JSValue) type of weak pointer because it's
        unused now.

        (PassWeak): Don't provide a default initializer for our JSCell* argument.
        This feature was only used in one place, and it was a bug.

        (JSC::::get): Don't check for a null stored inside our WeakImpl: that's 
        not allowed anymore.

        (JSC::PassWeak::PassWeak): Handle null as a null WeakImpl instead of
        allocating a WeakImpl and storing null into it.

        * heap/Weak.h:
        (Weak):
        (JSC::::Weak): Same changes as in PassWeak<T>.

        * heap/WeakBlock.cpp:
        (JSC::WeakBlock::visitLiveWeakImpls):
        (JSC::WeakBlock::visitDeadWeakImpls): Only non-null cells are valid in
        the WeakSet now, so no need to check for non-cells and null cell pointers.

        * heap/WeakImpl.h:
        (JSC::WeakImpl::WeakImpl): Only non-null cells are valid in the WeakSet
        now, so ASSERT that.

2012-04-27  Gavin Barraclough  <barraclough@apple.com>

        <rdar://problem/7909395> Math in JavaScript is inaccurate on iOS

        By defalut IEEE754 denormal support is disabled on iOS;
        turn it on.

        Reviewed by Filip Pizlo.

        * jsc.cpp:
        (main):
            - clear the appropriate bit in the fpscr.

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

        Memory wasted in JSString for non-rope strings
        https://bugs.webkit.org/show_bug.cgi?id=84907

        Reviewed by Geoffrey Garen.

        Split JSString into two classes, JSString as a base class that does not
        include the fibers of a Rope, and a subclass JSRopeString that has the
        rope functionality.  Both classes "share" the same ClassInfo.  Added
        a bool to JSString to indicate that the string was allocated as a JSRopeString
        to properly handle visiting the fiber children when the rope is resolved and
        the JSRopeString appears as a JSString.  Didn't change the interface of JSString
        to require any JIT changes.

        As part of this change, removed "cellSize" from ClassInfo since both classes
        share the same ClassInfo, but have different sizes.  The only use I could find
        for cellSize was an ASSERT in allocateCell().

        This appears to be neutral on performance tests.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Changed JSString::resolveRope
                to JSRopeString::resolveRope
        * runtime/ClassInfo.h:
        (JSC):
        (ClassInfo):
        * runtime/JSCell.h:
        (JSC::allocateCell):
        * runtime/JSString.cpp:
        (JSC::JSRopeString::RopeBuilder::expand):
        (JSC::JSString::visitChildren):
        (JSC):
        (JSC::JSRopeString::visitFibers):
        (JSC::JSRopeString::resolveRope):
        (JSC::JSRopeString::resolveRopeSlowCase8):
        (JSC::JSRopeString::resolveRopeSlowCase):
        (JSC::JSRopeString::outOfMemory):
        (JSC::JSRopeString::getIndexSlowCase):
        * runtime/JSString.h:
        (JSC):
        (JSString):
        (JSC::JSString::finishCreation):
        (JSC::JSString::create):
        (JSC::JSString::isRope):
        (JSC::JSString::is8Bit):
        (JSRopeString):
        (RopeBuilder):
        (JSC::JSRopeString::RopeBuilder::RopeBuilder):
        (JSC::JSRopeString::RopeBuilder::append):
        (JSC::JSRopeString::RopeBuilder::release):
        (JSC::JSRopeString::RopeBuilder::length):
        (JSC::JSRopeString::JSRopeString):
        (JSC::JSRopeString::finishCreation):
        (JSC::JSRopeString::createNull):
        (JSC::JSRopeString::create):
        (JSC::JSString::value):
        (JSC::JSString::tryGetValue):
        (JSC::JSString::getIndex):
        (JSC::jsStringBuilder):
        * runtime/Operations.h:
        (JSC::jsString):
        (JSC::jsStringFromArguments):

2012-04-27  Oliver Hunt  <oliver@apple.com>

        Correct assertion.

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

2012-04-27  Oliver Hunt  <oliver@apple.com>

        Lazy link phase of baseline jit fails to propagate exception
        https://bugs.webkit.org/show_bug.cgi?id=85092

        Reviewed by Filip Pizlo.

        Very simple patch, when linking produces an error we need to actually store
        the exception prior to throwing it.  I can't find any other examples of this,
        but as we're already in the slow path when throwing an exception I've hardened
        exception throwing against null exceptions.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException):
        * jit/JITStubs.cpp:
        (JSC::lazyLinkFor):

2012-04-27  Benjamin Poulain  <benjamin@webkit.org>

        Generalize the single character optimization of numberProtoFuncToString
        https://bugs.webkit.org/show_bug.cgi?id=85027

        Reviewed by Geoffrey Garen.

        The function numberProtoFuncToString() has an optimization to use SmallStrings::singleCharacterString()
        when the radix is 36.

        This patch generalize the optimization for any radix. Any positive number smaller than its radix
        can be represented by a single character of radixDigits.

        This makes numberProtoFuncToString() about twice as fast for this case of single digit conversion.

        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToString):

2012-04-27  Gavin Peters  <gavinp@chromium.org>

        Add new ENABLE_LINK_PRERENDER define to control the Prerendering API
        https://bugs.webkit.org/show_bug.cgi?id=84871

        Reviewed by Adam Barth.

        Prerendering is currently covered by the ENABLE_LINK_PREFETCH macro, but the new Prerendering
        API separates it from prefetching.  Having separate include guards lets ports enable prefetching,
        a relatively easy change, without needing to build the infrastructure for prerendering, which
        is considerably more complicated.

        * Configurations/FeatureDefines.xcconfig:

2012-04-26  Oliver Hunt  <oliver@apple.com>

        Allocating WeakImpl should not trigger GC, as that makes the world very tricksy.
        https://bugs.webkit.org/show_bug.cgi?id=85020

        Reviewed by Gavin Barraclough.

        Now in the event that we are unable to find an allocator for a new handle, just
        add a new allocator rather than trying to recover "dead" handles through a GC.

        Find allocator is now much simpler, and addAllocator directly reports the
        increased memory usage to the heap without causing any GC to happen immediately.

        * heap/WeakSet.cpp:
        (JSC::WeakSet::findAllocator):
        (JSC::WeakSet::addAllocator):

2012-04-26  Oliver Hunt  <oliver@apple.com>

        Remove RegisterFile::end()/m_end
        https://bugs.webkit.org/show_bug.cgi?id=85011

        Reviewed by Gavin Barraclough.

        Get rid of end() and m_end from RegisterFile.  From now on
        we only care about the end of the committed region when calling
        code.  When re-entering the VM we now plant the new CallFrame
        immediately after whatever the current topCallFrame is.  This
        required adding a routine to CallFrame to determine exactly what
        we should be doing (in the absence of an existing CallFrame, we
        can't reason about the frameExtent() so we check for that).

        This also now means that the GC only marks the portion of the
        RegisterFile that is actually in use, and that VM re-entry doesn't
        exhaust the RegisterFile as rapidly.

        * dfg/DFGOperations.cpp:
        * heap/Heap.cpp:
        (JSC::Heap::getConservativeRegisterRoots):
        (JSC::Heap::markRoots):
        * interpreter/CallFrame.h:
        (JSC::ExecState::init):
        (JSC::ExecState::startOfReusableRegisterFile):
        (ExecState):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::prepareForRepeatCall):
        (JSC::Interpreter::privateExecute):
        * interpreter/Interpreter.h:
        (JSC::Interpreter::execute):
        * interpreter/RegisterFile.cpp:
        (JSC::RegisterFile::growSlowCase):
        (JSC::RegisterFile::gatherConservativeRoots):
        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::commitEnd):
        (JSC::RegisterFile::addressOfEnd):
        (RegisterFile):
        (JSC::RegisterFile::RegisterFile):
        (JSC::RegisterFile::shrink):
        (JSC::RegisterFile::grow):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        (JSC::jitCompileFor):
        (JSC::lazyLinkFor):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::handleHostCall):
        * llint/LowLevelInterpreter.asm:
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::arityCheckFor):

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

        DFG ARMv7 backend should optimize Float32 arrays
        https://bugs.webkit.org/show_bug.cgi?id=85000
        <rdar://problem/10652827>

        Reviewed by Gavin Barraclough.

        * assembler/ARMv7Assembler.h:
        (ARMv7Assembler):
        (JSC::ARMv7Assembler::flds):
        (JSC::ARMv7Assembler::fsts):
        (JSC::ARMv7Assembler::vcvtds):
        (JSC::ARMv7Assembler::vcvtsd):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::loadFloat):
        (MacroAssemblerARMv7):
        (JSC::MacroAssemblerARMv7::storeFloat):
        (JSC::MacroAssemblerARMv7::convertFloatToDouble):
        (JSC::MacroAssemblerARMv7::convertDoubleToFloat):
        * bytecode/PredictedType.h:
        (JSC::isActionableFloatMutableArrayPrediction):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateFloat32Array):

2012-04-25  Benjamin Poulain  <benjamin@webkit.org>

        Add a version of StringImpl::find() without offset
        https://bugs.webkit.org/show_bug.cgi?id=83968

        Reviewed by Sam Weinig.

        Add support for the new StringImpl::find() to UString.

        Change stringProtoFuncIndexOf() to specifically take advatage of the feature.
        This gives a 12% gains on a distribution of strings between 30 and 100 characters.

        * runtime/StringPrototype.cpp:
        (JSC::substituteBackreferences):
        (JSC::stringProtoFuncIndexOf):
        * runtime/UString.h:
        (UString):
        (JSC::UString::find):

2012-04-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        WebCore shouldn't call collectAllGarbage directly
        https://bugs.webkit.org/show_bug.cgi?id=84897

        Reviewed by Geoffrey Garen.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Exported symbol 
        for reportAbanondedObjectGraph so WebCore can use it.
        * heap/Heap.h: Ditto.

2012-04-25  Oliver Hunt  <oliver@apple.com>

        Biolab disaster crashes on ToT
        https://bugs.webkit.org/show_bug.cgi?id=84898

        Reviewed by Filip Pizlo.

        Whoops, committed without saving reviewer requested change.

        * dfg/DFGVirtualRegisterAllocationPhase.cpp:
        (JSC::DFG::VirtualRegisterAllocationPhase::run):

2012-04-25  Oliver Hunt  <oliver@apple.com>

        Biolab disaster crashes on ToT
        https://bugs.webkit.org/show_bug.cgi?id=84898

        Reviewed by Filip Pizlo.

        I recently added an assertion to the Interpreter to catch incorrect
        updates of topCallFrame.  This caused a bunch of sites (including biolab
        disaster) to crash as we were not correctly handling callee registers
        of inlined functions, leading to a mismatch.

        I could not actually make this trigger directly, although it does trigger
        already on some of the GTK and QT bots.

        * dfg/DFGVirtualRegisterAllocationPhase.cpp:
        (JSC::DFG::VirtualRegisterAllocationPhase::run):

2012-04-25  Kenneth Russell  <kbr@google.com>

        Delete CanvasPixelArray, ByteArray, JSByteArray and JSC code once unreferenced
        https://bugs.webkit.org/show_bug.cgi?id=83655

        Reviewed by Oliver Hunt.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.order:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * bytecode/PredictedType.cpp:
        (JSC::predictionToString):
        (JSC::predictionToAbbreviatedString):
        (JSC::predictionFromClassInfo):
        * bytecode/PredictedType.h:
        (JSC):
        (JSC::isActionableIntMutableArrayPrediction):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::initialize):
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGCSEPhase.cpp:
        (JSC::DFG::CSEPhase::performNodeCSE):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNode.h:
        * dfg/DFGNodeType.h:
        (DFG):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::putByVal):
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::ValueSource::forPrediction):
        (SpeculativeJIT):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::getByVal):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/JSByteArray.cpp: Removed.
        * runtime/JSByteArray.h: Removed.
        * runtime/JSGlobalData.cpp:

2012-04-25  Filip Pizlo  <fpizlo@apple.com>

        http://bellard.org/jslinux/ triggers an assertion failure in the DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=84815
        <rdar://problem/11319514>

        Reviewed by Gavin Barraclough.

        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::forwardSpeculationCheck):

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

        Closure in try {} with catch captures all locals from the enclosing function
        https://bugs.webkit.org/show_bug.cgi?id=84804

        Reviewed by Oliver Hunt.

        Changed the capturing of local variables from capturing when eval is used,
        within a "with" or within a "catch" to be just when an eval is used.
        Renamed the function returning that we should capture from
        getCapturedVariables() to usesEval(), since that what it noew returns.
        Needed to fix the "with" code to only range check when the activation
        has actually been torn off.  Added m_isTornOff to JSActivation to
        track this.

        * parser/Parser.h:
        (JSC::Scope::usesEval):
        (JSC::Scope::getCapturedVariables):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::JSActivation):
        (JSC::JSActivation::symbolTableGet):
        (JSC::JSActivation::symbolTablePut):
        * runtime/JSActivation.h:
        (JSActivation):
        (JSC::JSActivation::tearOff):

2012-04-24  Mark Hahnenberg  <mhahnenberg@apple.com>

        GC Activity Callback timer should be based on how much has been allocated since the last collection
        https://bugs.webkit.org/show_bug.cgi?id=84763

        Reviewed by Geoffrey Garen.

        The desired behavior for the GC timer is to collect at some point in the future, 
        regardless of how little we've allocated. A secondary goal, which is almost if not 
        as important, is for the timer to collect sooner if there is the potential to 
        collect a greater amount of memory. Conversely, as we allocate more memory we'd 
        like to reduce the delay to the next collection. If we're allocating quickly enough, 
        the timer should be preempted in favor of a normal allocation-triggered collection. 
        If allocation were to slow or stop, we'd like the timer to be able to opportunistically 
        run a collection without us having to allocate to the hard limit set by the Heap.

        This type of policy can be described in terms of the amount of CPU we are willing 
        to dedicate to reclaim a single MB of memory. For example, we might be willing to 
        dedicate 1% of our CPU to reclaim 1 MB. We base our CPU usage off of the length of 
        the last collection, e.g. if our last collection took 1ms, we would want to wait about 
        100ms before running another collection to reclaim 1 MB. These constants should be 
        tune-able, e.g. 0.1% CPU = 1 MB vs. 1% CPU = 1 MB vs. 10% CPU = 1 MB.

        * API/JSBase.cpp: Use the new reportAbandonedObjectGraph.
        (JSGarbageCollect):
        * API/JSContextRef.cpp: Ditto.
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::reportAbandonedObjectGraph): Similar to reportExtraMemoryCost. Clients call
        this function to notify the Heap that some unknown number of JSC objects might have just 
        been abandoned and are now garbage. The Heap might schedule a new collection timer based 
        on this notification.
        (JSC):
        (JSC::Heap::collect): Renamed m_lastFullGCSize to the less confusing m_sizeAfterLastCollect.
        * heap/Heap.h:
        (Heap):
        * heap/MarkedAllocator.h:
        (JSC::MarkedAllocator::zapFreeList): Fixed a bug in zapFreeList that failed to nullify the 
        current allocator's FreeList once zapping was complete.
        * runtime/GCActivityCallback.cpp: Removed didAbandonObjectGraph because it was replaced by 
        Heap::reportAbandonedObjectGraph.
        (JSC):
        * runtime/GCActivityCallback.h:
        (JSC::GCActivityCallback::willCollect):
        (DefaultGCActivityCallback):
        * runtime/GCActivityCallbackCF.cpp: Refactored the GC timer code so that we now schedule the 
        timer based on how much we have allocated since the last collection up to a certain amount. 
        We use the length of the previous GC to try to keep our total cost of opportunistic timer-triggered
        collections around 1% of the CPU per MB of garbage we expect to reclaim up to a maximum of 5 MB.
        (DefaultGCActivityCallbackPlatformData):
        (JSC):
        (JSC::DefaultGCActivityCallback::~DefaultGCActivityCallback):
        (JSC::DefaultGCActivityCallback::commonConstructor):
        (JSC::scheduleTimer):
        (JSC::cancelTimer):
        (JSC::DefaultGCActivityCallback::didAllocate):

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

        objectProtoFuncToString creates new string every invocation
        https://bugs.webkit.org/show_bug.cgi?id=84781

        Reviewed by Geoffrey Garen.

        Cache the results of object toString() in the attached Structure.

        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncToString):
        * runtime/Structure.cpp:
        (JSC::Structure::visitChildren): visit new m_hasObjectToStringValue.
        * runtime/Structure.h: Added new member m_hasObjectToStringValue
        (JSC):
        (JSC::Structure::objectToStringValue):
        (Structure):
        (JSC::Structure::setObjectToStringValue):

2012-04-24  Thouraya ANDOLSI  <thouraya.andolsi@st.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=84727.
        Fix build when ENABLE_JIT_CONSTANT_BLINDING enabled.

        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::or32):
        (JSC::MacroAssemblerSH4::and32):
        (JSC::MacroAssemblerSH4::lshift32):
        (JSC::MacroAssemblerSH4::xor32):
        (JSC::MacroAssemblerSH4::branchSub32):
        (JSC::MacroAssemblerSH4::urshift32):

2012-04-24  Gavin Barraclough  <barraclough@apple.com>

        Add explicit patchableBranchPtrWithPatch/patchableJump methods
        https://bugs.webkit.org/show_bug.cgi?id=84498

        Reviewed by Filip Pizlo.

        Don't rely on inUninterruptedSequence to distinguish which jumps we need to be able to repatch.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::PatchableJump::PatchableJump):
        (PatchableJump):
        (JSC::AbstractMacroAssembler::PatchableJump::operator Jump&):
        (AbstractMacroAssembler):
        (JSC::AbstractMacroAssembler::AbstractMacroAssembler):
            - Added PatchableJump type, removed inUninterruptedSequence.
        * assembler/LinkBuffer.h:
        (LinkBuffer):
        (JSC::LinkBuffer::locationOf):
            - Only allow the location to be taken of patchable branches
        * assembler/MacroAssembler.h:
        (MacroAssembler):
        (JSC::MacroAssembler::patchableBranchPtrWithPatch):
        (JSC::MacroAssembler::patchableJump):
        (JSC::MacroAssembler::shouldBlind):
            - Added default implementation of patchableBranchPtrWithPatch, patchableJump.
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::MacroAssemblerARMv7):
        (MacroAssemblerARMv7):
        (JSC::MacroAssemblerARMv7::patchableBranchPtrWithPatch):
        (JSC::MacroAssemblerARMv7::patchableJump):
        (JSC::MacroAssemblerARMv7::jump):
        (JSC::MacroAssemblerARMv7::makeBranch):
            - Added ARMv7 implementation of patchableBranchPtrWithPatch, patchableJump.
        * dfg/DFGCorrectableJumpPoint.h:
        (DFG):
        (JSC::DFG::CorrectableJumpPoint::switchToLateJump):
            - Late jumps are PatchableJumps.
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::linkOSRExits):
            - replace use of inUninterruptedSequence
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::PropertyAccessRecord::PropertyAccessRecord):
        (PropertyAccessRecord):
            - replace use of inUninterruptedSequence
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetById):
        (JSC::DFG::SpeculativeJIT::cachedPutById):
            - replace use of inUninterruptedSequence
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetById):
        (JSC::DFG::SpeculativeJIT::cachedPutById):
            - replace use of inUninterruptedSequence
        * jit/JIT.h:
        (PropertyStubCompilationInfo):
            - replace use of inUninterruptedSequence
        * jit/JITInlineMethods.h:
        (JSC::JIT::beginUninterruptedSequence):
        (JSC::JIT::endUninterruptedSequence):
            - replace use of inUninterruptedSequence
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetByIdHotPath):
            - replace use of inUninterruptedSequence
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::compileGetByIdHotPath):
            - replace use of inUninterruptedSequence

2012-04-24  Benjamin Poulain  <bpoulain@apple.com>

        Generalize the single character optimization of r114072
        https://bugs.webkit.org/show_bug.cgi?id=83961

        Reviewed by Eric Seidel.

        Use the regular String::find(StringImpl*) in all cases now that it has been made faster.

        * runtime/StringPrototype.cpp:
        (JSC::replaceUsingStringSearch):

2012-04-24  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, 32-bit build fix.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2012-04-24  Filip Pizlo  <fpizlo@apple.com>

        DFG performs incorrect DCE on (some?) intrinsics
        https://bugs.webkit.org/show_bug.cgi?id=84746
        <rdar://problem/11310772>

        Reviewed by Oliver Hunt.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGByteCodeParser.cpp:
        (ByteCodeParser):
        (JSC::DFG::ByteCodeParser::setIntrinsicResult):
        (JSC::DFG::ByteCodeParser::handleMinMax):
        (JSC::DFG::ByteCodeParser::handleIntrinsic):
        * dfg/DFGNodeType.h:
        (DFG):
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2012-04-24  Mark Hahnenberg  <mhahnenberg@apple.com>

        Failure to allocate ArrayStorage in emit_op_new_array leads to poisonous JSArray
        https://bugs.webkit.org/show_bug.cgi?id=84648

        Reviewed by Geoffrey Garen.

        When emit_op_new_array successfully allocates a new JSArray but fails to allocate 
        the corresponding ArrayStorage for it, it falls back to the out-of-line stub call 
        to constructArray, which constructs and entirely new JSArray/ArrayStorage pair. 
        This leaves us with a JSArray hanging around on the stack or in a register that 
        did not go through its own constructor, thus giving it uninitialized memory in the 
        two fields that are checked in JSArray::visitChildren.

        * jit/JITInlineMethods.h:
        (JSC::JIT::emitAllocateJSArray): We try to allocate the ArrayStorage first, so that 
        if we fail we haven't generated the poisonous JSArray that can cause a GC crash.
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emitSlow_op_new_array):

2012-04-23  Filip Pizlo  <fpizlo@apple.com>

        DFG on ARMv7 should not OSR exit on every integer division
        https://bugs.webkit.org/show_bug.cgi?id=84661

        Reviewed by Oliver Hunt.
        
        On ARMv7, ArithDiv no longer has to know whether or not to speculate integer (since
        that was broken with the introduction of Int32ToDouble) nor does it have to know
        whether or not to convert its result to integer. This is now taken care of for free
        with the addition of the DoubleAsInt32 node, which represents a double-is-really-int
        speculation.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGCSEPhase.cpp:
        (JSC::DFG::CSEPhase::performNodeCSE):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGNodeType.h:
        (DFG):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::OSRExit):
        (JSC::DFG::OSRExit::considerAddingAsFrequentExitSiteSlow):
        * dfg/DFGOSRExit.h:
        (OSRExit):
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        (JSC::DFG::SpeculativeJIT::compileDoubleAsInt32):
        (DFG):
        * dfg/DFGSpeculativeJIT.h:
        (SpeculativeJIT):
        (JSC::DFG::SpeculativeJIT::speculationCheck):
        (JSC::DFG::SpeculativeJIT::forwardSpeculationCheck):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2012-04-24  Geoffrey Garen  <ggaren@apple.com>

        "GlobalHandle" HandleHeap (now WeakSet) allocations grow but do not shrink
        https://bugs.webkit.org/show_bug.cgi?id=84740
        <rdar://problem/9917638>

        Reviewed by Gavin Barraclough.

        Shrink!

        * heap/Heap.cpp:
        (JSC::Heap::destroy): Be more specific about what's shrinking, since we
        can also shrink the WeakSet, but we don't do so here.

        (JSC::Heap::collect): If we're going to shrink the heap, shrink the
        WeakSet too. Otherwise, its footprint is permanent.

        * heap/Heap.h:
        (Heap): Removed shrink() as a public interface, since it's vague about
        which parts of the heap it affects, and it's really an internal detail.

        * heap/WeakSet.cpp:
        (JSC::WeakSet::shrink): Nix any free blocks. We assume that sweep() has
        already taken place, since that's the convention for shrink() in the heap.

        * heap/WeakSet.h:
        (WeakSet): New function!

2012-04-24  Adam Klein  <adamk@chromium.org>

        Fix includes in StrongInlines.h and ScriptValue.h
        https://bugs.webkit.org/show_bug.cgi?id=84659

        Reviewed by Geoffrey Garen.

        * heap/StrongInlines.h: Include JSGlobalData.h, since JSGlobalData's
        definiition is required here.

2012-04-23  Filip Pizlo  <fpizlo@apple.com>

        DFG OSR exit should ensure that all variables have been initialized
        https://bugs.webkit.org/show_bug.cgi?id=84653
        <rdar://problem/11258183>

        Reviewed by Gavin Barraclough.
        
        Initialize all uncaptured dead variables to undefined on OSR exit.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::ValueSource::dump):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        * dfg/DFGSpeculativeJIT.h:

2012-04-23  Oliver Hunt  <oliver@apple.com>

        Call instruction for the baseline JIT stores origin info in wrong callframe
        https://bugs.webkit.org/show_bug.cgi?id=84645

        Reviewed by Gavin Barraclough.

        The baseline JIT was updating the wrong callframe when making a call.  If the
        call failed during dispatch (unable to perform codegen, calling a non-object)
        we would attempt to use this information, but it would be completely wrong.

        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCall):

2012-04-23  Filip Pizlo  <fpizlo@apple.com>

        DFG must keep alive values that it will perform speculations on
        https://bugs.webkit.org/show_bug.cgi?id=84638
        <rdar://problem/11258183>

        Reviewed by Oliver Hunt.

        * dfg/DFGNodeType.h:
        (DFG):

2012-04-23  Oliver Hunt  <oliver@apple.com>

        Fix non-LLInt builds by temporarily removing an over-enthusiastic assertion

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

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

        Remove notifications support on Mac Lion.
        https://bugs.webkit.org/show_bug.cgi?id=84554
        <rdar://problem/11297128>

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2012-04-21  Darin Adler  <darin@apple.com>

        Change JavaScript lexer to use 0 instead of -1 for sentinel, eliminating the need to put characters into ints
        https://bugs.webkit.org/show_bug.cgi?id=84523

        Reviewed by Oliver Hunt.

        Profiles showed that checks against -1 were costly, and I saw they could be eliminated.
        Streamlined this code to use standard character types and 0 rather than -1. One benefit
        of this is that there's no widening and narrowing. Another is that there are many cases
        where we already have the correct behavior for 0, so can eliminate a branch that was
        used to test for -1 before. Also eliminates typecasts in the code.

        * parser/Lexer.cpp:
        (JSC::Lexer::invalidCharacterMessage): Updated use of String::format since m_current is now a
        character type, not an int.
        (JSC::Lexer::setCode): Use 0 rather than -1 when past the end.
        (JSC::Lexer::shift): Ditto. Also spruced up the comment a bit.
        (JSC::Lexer::atEnd): Added. New function that distinguishes an actual 0 character from the end
        of the code. This can be used places we used to cheeck for -1.
        (JSC::Lexer::peek): Updated to use -1 instead of 0. Removed meaningless comment.
        (JSC::Lexer::parseFourDigitUnicodeHex): Changed to use character types instead of int.
        (JSC::Lexer::shiftLineTerminator): Removed now-unneeded type casts. Changed local variable that
        had a data-member-style name.
        (JSC::Lexer::parseIdentifier): Removed now-unneeded explicit checks for -1, since the isIdentPart
        function already returns false for the 0 character. Updated types in a couple other places. Used
        the atEnd function where needed.
        (JSC::Lexer::parseIdentifierSlowCase): More of the same.
        (JSC::characterRequiresParseStringSlowCase): Added overloaded helper function for parseString.
        (JSC::Lexer::parseString): Ditto.
        (JSC::Lexer::parseStringSlowCase): Ditto.
        (JSC::Lexer::parseMultilineComment): Ditto.
        (JSC::Lexer::lex): More of the same. Also changed code to set the startOffset directly in
        the tokenInfo instead of putting it in a local variable first, saving some memory access.
        (JSC::Lexer::scanRegExp): Ditto.
        (JSC::Lexer::skipRegExp): Ditto.

        * parser/Lexer.h: Changed return type of the peek function and type of m_current from int to
        the character type. Added atEnd function.
        (JSC::Lexer::setOffset): Used 0 instead of -1 and removed an overzealous attempt to optimize. 
        (JSC::Lexer::lexExpectIdentifier): Used 0 instead of -1.

2012-04-21  Darin Adler  <darin@apple.com>

        Change JavaScript lexer to use 0 instead of -1 for sentinel, eliminating the need to put characters into ints
        https://bugs.webkit.org/show_bug.cgi?id=84523

        Reviewed by Oliver Hunt.

        Separate preparation step of copyright dates, renaming, and other small tweaks.

        * parser/Lexer.cpp:
        (JSC::Lexer::invalidCharacterMessage): Removed "get" from name to match WebKit naming conventions.
        (JSC::Lexer::peek): Removed meaningless comment.
        (JSC::Lexer::parseFourDigitUnicodeHex): Renamed from getUnicodeCharacter to be more precise about
        what this function does.
        (JSC::Lexer::shiftLineTerminator): Renamed local variable that had a data-member-style name.
        (JSC::Lexer::parseStringSlowCase): Updated for new name of parseFourDigitUnicodeHex.
        (JSC::Lexer::lex): Updated for new name of invalidCharacterMessage.

        * parser/Lexer.h: Removed an unneeded forward declaration of the RegExp class.
        Renamed getInvalidCharMessage to invalidCharacterMessage and made it const. Renamed
        getUnicodeCharacter to parseFourDigitUnicodeHex.

2012-04-20  Filip Pizlo  <fpizlo@apple.com>

        DFG should optimize int8 and int16 arrays on ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=84503

        Reviewed by Oliver Hunt.

        * assembler/ARMv7Assembler.h:
        (ARMv7Assembler):
        (JSC::ARMv7Assembler::ldrsb):
        (JSC::ARMv7Assembler::ldrsh):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::load16Signed):
        (JSC::MacroAssemblerARMv7::load8Signed):
        * bytecode/PredictedType.h:
        (JSC::isActionableIntMutableArrayPrediction):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateInt8Array):
        (JSC::DFG::Node::shouldSpeculateInt16Array):

2012-04-20  Oliver Hunt  <oliver@apple.com>

        Add an ability to find the extent of a callframe
        https://bugs.webkit.org/show_bug.cgi?id=84513

        Reviewed by Filip Pizlo.

        Add a function to get the extent of a callframe and
        use that function for a new assertion to make sure the
        RegisterFile makes sense using that information.

        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::frameExtentInternal):
        (JSC):
        * interpreter/CallFrame.h:
        (JSC::ExecState::frameExtent):
        (ExecState):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeCall):

2012-04-20  Benjamin Poulain  <bpoulain@apple.com>

        Inline the JSArray constructor
        https://bugs.webkit.org/show_bug.cgi?id=84416

        Reviewed by Geoffrey Garen.

        The constructor is trivial, no reason to jump for it.

        This makes the creation of array ~5% faster (on non-trivial cases, no empty arrays).

        * runtime/JSArray.cpp:
        (JSC):
        * runtime/JSArray.h:
        (JSC::JSArray::JSArray):
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-04-20  Mark Hahnenberg  <mhahnenberg@apple.com>

        Heap should cancel GC timer at the start of the collection
        https://bugs.webkit.org/show_bug.cgi?id=84477

        Reviewed by Geoffrey Garen.

        Currently the Heap cancels the GC timer at the conclusion of a collection. 
        We should change this to be at the beginning because something (e.g. a finalizer) 
        could call didAbandonObjectGraph(), which will schedule the timer, but then 
        we'll immediately unschedule the timer at the conclusion of the collection, 
        thus potentially preventing large swaths of memory from being reclaimed in a timely manner.

        * API/JSBase.cpp:
        (JSGarbageCollect): Remove outdated fix-me and remove check for whether the Heap is 
        busy or not, since we're just scheduling a timer to run a GC in the future.
        * heap/Heap.cpp:
        (JSC::Heap::collect): Rename didCollect to willCollect and move the call to the 
        top of Heap::collect.
        * runtime/GCActivityCallback.cpp: Renamed didCollect to willCollect.
        (JSC::DefaultGCActivityCallback::willCollect):
        * runtime/GCActivityCallback.h: Ditto.
        (JSC::GCActivityCallback::willCollect):
        (DefaultGCActivityCallback): 
        * runtime/GCActivityCallbackCF.cpp: Ditto.
        (JSC::DefaultGCActivityCallback::willCollect):

2012-04-20  Mark Hahnenberg  <mhahnenberg@apple.com>

        JSGarbageCollect should not call collectAllGarbage()
        https://bugs.webkit.org/show_bug.cgi?id=84476

        Reviewed by Geoffrey Garen.

        * API/JSBase.cpp:
        (JSGarbageCollect): Notify the Heap's GCActivityCallback using didAbandonObjectGraph.

2012-04-19  Oliver Hunt  <oliver@apple.com>

        Exception stack traces aren't complete when the exception starts in native code
        https://bugs.webkit.org/show_bug.cgi?id=84073

        Reviewed by Filip Pizlo.

        Refactored building the stack trace to so that we can construct
        it earlier, and don't rely on any prior work performed in the
        exception handling machinery. Also updated LLInt and the DFG to
        completely initialise the callframes of host function calls.

        Also fixed a few LLInt paths that failed to correctly update the
        topCallFrame.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * dfg/DFGJITCompiler.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * interpreter/Interpreter.cpp:
        (JSC::eval):
        (JSC::Interpreter::getStackTrace):
        (JSC::Interpreter::addStackTraceIfNecessary):
        (JSC):
        (JSC::Interpreter::throwException):
        * interpreter/Interpreter.h:
        (Interpreter):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCall):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTINativeCall):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTINativeCall):
        * jsc.cpp:
        (functionJSCStack):
        * llint/LLIntExceptions.cpp:
        (JSC::LLInt::interpreterThrowInCaller):
        (JSC::LLInt::returnToThrow):
        (JSC::LLInt::callToThrow):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::handleHostCall):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * parser/Parser.h:
        (JSC::::parse):
        * runtime/Error.cpp:
        (JSC::addErrorInfo):
        (JSC::throwError):
        * runtime/Error.h:
        (JSC):

2012-04-19  Mark Hahnenberg  <mhahnenberg@apple.com>

        We're collecting pathologically due to small allocations
        https://bugs.webkit.org/show_bug.cgi?id=84404

        Reviewed by Geoffrey Garen.

        No change in performance on run-jsc-benchmarks.

        * dfg/DFGSpeculativeJIT.h: Replacing m_firstFreeCell with m_freeList.
        (JSC::DFG::SpeculativeJIT::emitAllocateBasicJSObject):
        * heap/CopiedSpace.cpp: Getting rid of any water mark related stuff, since it's no 
        longer useful. 
        (JSC::CopiedSpace::CopiedSpace):
        (JSC::CopiedSpace::tryAllocateSlowCase): We now only call didAllocate here rather than 
        carrying out a somewhat complicated accounting job for our old water mark throughout CopiedSpace.
        (JSC::CopiedSpace::tryAllocateOversize):  Call the new didAllocate to notify the Heap of 
        newly allocated stuff.
        (JSC::CopiedSpace::tryReallocateOversize):
        (JSC::CopiedSpace::doneFillingBlock):
        (JSC::CopiedSpace::doneCopying):
        (JSC::CopiedSpace::destroy):
        * heap/CopiedSpace.h:
        (CopiedSpace):
        * heap/CopiedSpaceInlineMethods.h:
        (JSC::CopiedSpace::startedCopying):
        * heap/Heap.cpp: Removed water mark related stuff, replaced with new bytesAllocated and 
        bytesAllocatedLimit to track how much memory has been allocated since the last collection.
        (JSC::Heap::Heap):
        (JSC::Heap::reportExtraMemoryCostSlowCase):
        (JSC::Heap::collect): We now set the new limit of bytes that we can allocate before triggering 
        a collection to be the size of the Heap after the previous collection. Thus, we still have our 
        2x allocation amount.
        (JSC::Heap::didAllocate): Notifies the GC activity timer of how many bytes have been allocated 
        thus far and then adds the new number of bytes to the current total.
        (JSC):
        * heap/Heap.h: Removed water mark related stuff.
        (JSC::Heap::notifyIsSafeToCollect):
        (Heap):
        (JSC::Heap::shouldCollect):
        (JSC):
        * heap/MarkedAllocator.cpp: 
        (JSC::MarkedAllocator::tryAllocateHelper): Refactored to use MarkedBlock's new FreeList struct.
        (JSC::MarkedAllocator::allocateSlowCase):
        (JSC::MarkedAllocator::addBlock):
        * heap/MarkedAllocator.h: 
        (MarkedAllocator):
        (JSC::MarkedAllocator::MarkedAllocator):
        (JSC::MarkedAllocator::allocate): 
        (JSC::MarkedAllocator::zapFreeList): Refactored to take in a FreeList instead of a FreeCell.
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::specializedSweep):
        (JSC::MarkedBlock::sweep):
        (JSC::MarkedBlock::sweepHelper):
        (JSC::MarkedBlock::zapFreeList):
        * heap/MarkedBlock.h:
        (FreeList): Added a new struct that keeps track of the current MarkedAllocator's
        free list including the number of bytes of stuff in the free list so that when the free list is 
        exhausted, the correct amount can be reported to Heap.
        (MarkedBlock):
        (JSC::MarkedBlock::FreeList::FreeList):
        (JSC):
        * heap/MarkedSpace.cpp: Removing all water mark related stuff.
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::resetAllocators):
        * heap/MarkedSpace.h:
        (MarkedSpace):
        (JSC):
        * heap/WeakSet.cpp:
        (JSC::WeakSet::findAllocator): Refactored to use the didAllocate interface with the Heap. This 
        function still needs work though now that the Heap knows how many bytes have been allocated 
        since the last collection.
        * jit/JITInlineMethods.h: Refactored to use MarkedBlock's new FreeList struct.
        (JSC::JIT::emitAllocateBasicJSObject): Ditto.
        * llint/LowLevelInterpreter.asm: Ditto.
        * runtime/GCActivityCallback.cpp: 
        (JSC::DefaultGCActivityCallback::didAllocate): 
        * runtime/GCActivityCallback.h:
        (JSC::GCActivityCallback::didAllocate): Renamed willAllocate to didAllocate to indicate that 
        the allocation that is being reported has already taken place.
        (DefaultGCActivityCallback):
        * runtime/GCActivityCallbackCF.cpp:
        (JSC):
        (JSC::DefaultGCActivityCallback::didAllocate): Refactored to return early if the amount of 
        allocation since the last collection is not above a threshold (initially arbitrarily chosen to 
        be 128KB). 

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

        MacroAssemblerARMv7::branchTruncateDoubleToUint32 should obey the overflow signal
        https://bugs.webkit.org/show_bug.cgi?id=84401

        Reviewed by Gavin Barraclough.

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::branchTruncateDoubleToUint32):

2012-04-19  Don Olmstead  <don.olmstead@am.sony.com>

        KeywordLookupGenerator.py should take an output file as an argument
        https://bugs.webkit.org/show_bug.cgi?id=84292

        Reviewed by Eric Seidel.

        Extended KeywordLookupGenerator to accept an additional argument specifying an output file. If this argument is found stdout is redirected to a file for the duration of the script.

        * KeywordLookupGenerator.py:

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

        It should be possible to perform debugCall on ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=84381

        Reviewed by Oliver Hunt.
        
        debugCall() was clobbering the argument to the call it was making, leading to a
        corrupt ExecState*. This change fixes that issue by using a scratch register that
        does not clobber arguments, and it also introduces more assertions that we have
        a valid call frame.

        * dfg/DFGAssemblyHelpers.cpp:
        (DFG):
        (JSC::DFG::AssemblyHelpers::jitAssertHasValidCallFrame):
        * dfg/DFGAssemblyHelpers.h:
        (JSC::DFG::AssemblyHelpers::selectScratchGPR):
        (AssemblyHelpers):
        (JSC::DFG::AssemblyHelpers::debugCall):
        (JSC::DFG::AssemblyHelpers::jitAssertHasValidCallFrame):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::linkOSRExits):
        * dfg/DFGOSRExitCompiler.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::selectScratchGPR):

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

        LLInt no-JIT fallback native call trampoline's exception handler incorrectly assumes that
        the PB/PC has been preserved
        https://bugs.webkit.org/show_bug.cgi?id=84367

        Reviewed by Oliver Hunt.

        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:

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

        It should be possible to load from Float64 arrays on ARMv7 without crashing
        https://bugs.webkit.org/show_bug.cgi?id=84361

        Reviewed by Oliver Hunt.

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::loadDouble):
        (JSC::MacroAssemblerARMv7::storeDouble):

2012-04-19  Dominik Röttsches  <dominik.rottsches@linux.intel.com>

        [CMake] Build fix after r114575
        https://bugs.webkit.org/show_bug.cgi?id=84322

        Reviewed by Simon Hausmann.

        Build fix, adding WTF when linking jsc shell.

        * shell/CMakeLists.txt:

2012-04-18  Filip Pizlo  <fpizlo@apple.com>

        JSC testing should have complete coverage over typed array types
        https://bugs.webkit.org/show_bug.cgi?id=84302

        Reviewed by Geoff Garen.
        
        Added Uint8ClampedArray to the set of typed arrays that are supported by jsc
        command-line.

        * JSCTypedArrayStubs.h:
        (JSC):
        * jsc.cpp:
        (GlobalObject::finishCreation):

2012-04-18  Filip Pizlo  <fpizlo@apple.com>

        jsc command line should support typed arrays by default
        https://bugs.webkit.org/show_bug.cgi?id=84298

        Rubber stamped by Gavin Barraclough.

        * JSCTypedArrayStubs.h:
        (JSC):
        * jsc.cpp:
        (GlobalObject::finishCreation):

2012-04-18  Filip Pizlo  <fpizlo@apple.com>

        JSVALUE32_64 should be able to perform division on ARM without crashing, and variables
        forced double should not be scrambled when performing OSR entry
        https://bugs.webkit.org/show_bug.cgi?id=84272

        Reviewed by Geoff Garen.

        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):

2012-04-18  Don Olmstead  <don.olmstead@am.sony.com> 

        JavaScriptCore.gypi not current
        https://bugs.webkit.org/show_bug.cgi?id=84224

        Reviewed by Eric Seidel.

        Updated JavaScriptCore.gypi to contain the latest sources. Removed os-win32 as it wasn't used. Also removed references to ICU files in the gypi file as ICU is most likely specified by the port itself.

        Private and public header files were determined by looking at copy-files.cmd within Apple's Visual Studio directory.

        * JavaScriptCore.gypi:

2012-04-18  Benjamin Poulain  <bpoulain@apple.com>

        Remove m_subclassData from JSArray, move the attribute to subclass as needed
        https://bugs.webkit.org/show_bug.cgi?id=84249

        Reviewed by Geoffrey Garen.

        JSArray's m_subclassData is only used by WebCore's RuntimeArray. This patch moves
        the attribute to RuntimeArray to avoid allocating memory for the pointer in the common
        case.

        This gives ~1% improvement in JSArray creation microbenchmark thanks to fewer allocations
        of CopiedSpace.

        * jit/JITInlineMethods.h:
        (JSC::JIT::emitAllocateJSArray):
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        * runtime/JSArray.h:

2012-04-18  Benjamin Poulain  <bpoulain@apple.com>

        replaceUsingStringSearch: delay the creation of the replace string until needed
        https://bugs.webkit.org/show_bug.cgi?id=83841

        Reviewed by Geoffrey Garen.

        We do not need to obtain the replaceValue until we have a match. By moving the intialization
        of replaceValue when needed, we save a few instructions when there is no match.

        * runtime/StringPrototype.cpp:
        (JSC::replaceUsingRegExpSearch):
        (JSC::replaceUsingStringSearch):
        (JSC::stringProtoFuncReplace):

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

        GC activity timer should be tied to allocation, not collection
        https://bugs.webkit.org/show_bug.cgi?id=83919

        Reviewed by Geoffrey Garen.

        * API/JSContextRef.cpp: Used the new didAbandonObjectGraph callback to indicate that now that we've 
        released a global object, we're abandoning a potentially large number of objects that JSC might want 
        to collect.
        * heap/CopiedSpace.cpp:
        (JSC::CopiedSpace::tryAllocateSlowCase): Added the call to timer's willAllocate function to indicate 
        that we've hit a slow path and are allocating now, so schedule the timer.
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::collectAllGarbage): Removed the call to discardAllCompiledCode because it was causing us to 
        throw away too much code during our benchmarks (especially vp8, which is very large and thus has large 
        amounts of compiled code).
        (JSC::Heap::collect): Added the new call to didCollect at the conclusion of a collection so that we 
        can cancel the timer if we no longer need to run a collection. Also added a check at the beginning of a 
        collection to see if we should throw away our compiled code. Currently this is set to happen about once 
        every minute.
        * heap/Heap.h: Added field to keep track of the last time we threw away our compiled code.
        * heap/MarkedAllocator.cpp:
        (JSC::MarkedAllocator::allocateSlowCase): Added call to willAllocate on the allocation slow path, just like 
        in CopiedSpace.
        * runtime/GCActivityCallback.cpp: Added default stubs for non-CF platforms.
        (JSC::DefaultGCActivityCallback::willAllocate):
        (JSC):
        (JSC::DefaultGCActivityCallback::didCollect):
        (JSC::DefaultGCActivityCallback::didAbandonObjectGraph):
        * runtime/GCActivityCallback.h: Added new functions to make JSC's GC timer less arcane. This includes replacing 
        the operator () with willAllocate() and adding an explicit didCollect() to cancel the timer after a collection 
        occurs rather than relying on the way the timer is invoked to cancel itself. Also added a callback for 
        when somebody else (e.g. WebCore or the JSC API) to notify JSC that they have just abandoned an entire graph of 
        objects and that JSC might want to clean them up.
        (JSC::GCActivityCallback::~GCActivityCallback):
        (JSC::GCActivityCallback::willAllocate):
        (JSC::GCActivityCallback::didCollect):
        (JSC::GCActivityCallback::didAbandonObjectGraph):
        (JSC::GCActivityCallback::synchronize):
        (DefaultGCActivityCallback):
        * runtime/GCActivityCallbackCF.cpp: Re-wired all the run loop stuff to implement the aforementioned functions. 
        We added a flag to check whether the timer was active because the call to CFRunLoopTimerSetNextFireDate actually 
        turned out to be quite expensive (although Instruments couldn't tell us this).
        (DefaultGCActivityCallbackPlatformData):
        (JSC):
        (JSC::DefaultGCActivityCallbackPlatformData::timerDidFire):
        (JSC::DefaultGCActivityCallback::commonConstructor):
        (JSC::scheduleTimer):
        (JSC::cancelTimer):
        (JSC::DefaultGCActivityCallback::willAllocate):
        (JSC::DefaultGCActivityCallback::didCollect):
        (JSC::DefaultGCActivityCallback::didAbandonObjectGraph):

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

        DFG should not attempt to get rare case counts for op_mod on ARM
        https://bugs.webkit.org/show_bug.cgi?id=84218

        Reviewed by Geoff Garen.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::makeSafe):
        * dfg/DFGCommon.h:
        (JSC::DFG::isX86):
        (DFG):

2012-04-17  Myles Maxfield  <mmaxfield@google.com>

        BumpPointerAllocator assumes page size is less than MINIMUM_BUMP_POOL_SIZE
        https://bugs.webkit.org/show_bug.cgi?id=80912

        Reviewed by Hajime Morita.

        * wtf/BumpPointerAllocator.h:
        (WTF::BumpPointerPool::create):

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

        Attempt to fix Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        It should be possible to create an inheritorID for the global this object without crashing
        https://bugs.webkit.org/show_bug.cgi?id=84200
        <rdar://problem/11251082>

        Reviewed by Oliver Hunt.

        * runtime/JSGlobalThis.cpp:
        (JSC::JSGlobalThis::setUnwrappedObject):
        * runtime/JSGlobalThis.h:
        (JSC::JSGlobalThis::unwrappedObject):
        (JSGlobalThis):
        * runtime/JSObject.cpp:
        (JSC::JSObject::createInheritorID):
        * runtime/JSObject.h:
        (JSObject):
        (JSC::JSObject::resetInheritorID):

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

        DFG and LLInt should not clobber the frame pointer on ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=84185
        <rdar://problem/10767252>

        Reviewed by Gavin Barraclough.
        
        Changed LLInt to use a different register. Changed DFG to use one fewer
        registers. We should revisit this and switch the DFG to use a different
        register instead of r7, but we can do that in a subsequent step since
        the performance effect is tiny.

        * dfg/DFGGPRInfo.h:
        (GPRInfo):
        (JSC::DFG::GPRInfo::toRegister):
        (JSC::DFG::GPRInfo::toIndex):
        * offlineasm/armv7.rb:

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

        use after free in JSC::DFG::Node::op / JSC::DFG::ByteCodeParser::flushArgument
        https://bugs.webkit.org/show_bug.cgi?id=83942
        <rdar://problem/11247370>

        Reviewed by Gavin Barraclough.
        
        Don't use references to the graph after resizing the graph.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::flushArgument):

2012-04-16  Gavin Barraclough  <barraclough@apple.com>

        Array.prototype.toString should be generic
        https://bugs.webkit.org/show_bug.cgi?id=81588

        Reviewed by Sam Weinig.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
            - check for join function, use fast case if base object is array & join is present & default.
        * runtime/CommonIdentifiers.h:
            - added 'join'.

2012-04-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck issues.

        * GNUmakefile.list.am: Add missing files.

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

        Unreviewed, rolling out r114309.
        http://trac.webkit.org/changeset/114309
        https://bugs.webkit.org/show_bug.cgi?id=84097

        it broke everything (Requested by olliej on #webkit).

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * bytecode/CodeBlock.h:
        * dfg/DFGOperations.cpp:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::getStackTrace):
        (JSC::Interpreter::throwException):
        * interpreter/Interpreter.h:
        (Interpreter):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jsc.cpp:
        (functionJSCStack):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::handleHostCall):
        * parser/Parser.h:
        (JSC::::parse):
        * runtime/Error.cpp:
        (JSC::addErrorInfo):
        (JSC::throwError):
        * runtime/Error.h:
        (JSC):

2012-04-16  Oliver Hunt  <oliver@apple.com>

        Exception stack traces aren't complete when the exception starts in native code
        https://bugs.webkit.org/show_bug.cgi?id=84073

        Reviewed by Gavin Barraclough.

        Refactored building the stack trace to so that we can construct
        it earlier, and don't rely on any prior work performed in the
        exception handling machinery. Also updated LLInt and the DFG to
        completely initialise the callframes of host function calls.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::codeOriginIndexForReturn):
        (CodeBlock):
        * dfg/DFGOperations.cpp:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::getStackTrace):
        (JSC::Interpreter::addStackTraceIfNecessary):
        (JSC):
        (JSC::Interpreter::throwException):
        * interpreter/Interpreter.h:
        (Interpreter):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jsc.cpp:
        (functionJSCStack):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::handleHostCall):
        * parser/Parser.h:
        (JSC::::parse):
        * runtime/Error.cpp:
        (JSC::addErrorInfo):
        (JSC::throwError):
        * runtime/Error.h:
        (JSC):

2012-04-16  Oliver Hunt  <oliver@apple.com>

        Fix COMMANDLINE_TYPEDARRAYS build
        https://bugs.webkit.org/show_bug.cgi?id=84051

        Reviewed by Gavin Barraclough.

        Update for new putByIndex API and wtf changes.

        * JSCTypedArrayStubs.h:
        (JSC):

2012-04-16  Mark Hahnenberg  <mhahnenberg@apple.com>

        GC in the middle of JSObject::allocatePropertyStorage can cause badness
        https://bugs.webkit.org/show_bug.cgi?id=83839

        Reviewed by Geoffrey Garen.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * jit/JITStubs.cpp: Making changes to use the new return value of growPropertyStorage.
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSObject.cpp:
        (JSC::JSObject::growPropertyStorage): Renamed to more accurately reflect that we're 
        growing our already-existing PropertyStorage.
        * runtime/JSObject.h:
        (JSObject):
        (JSC::JSObject::setPropertyStorage): "Atomically" sets the new property storage 
        and the new structure so that we can be sure a GC never occurs when our Structure
        info is out of sync with our PropertyStorage.
        (JSC):
        (JSC::JSObject::putDirectInternal): Moved the check to see if we should 
        allocate more backing store before the actual property insertion into 
        the structure.
        (JSC::JSObject::putDirectWithoutTransition): Ditto.
        (JSC::JSObject::transitionTo): Ditto.
        * runtime/Structure.cpp:
        (JSC::Structure::suggestedNewPropertyStorageSize): Added to keep the resize policy 
        for property backing stores contained within the Structure class.
        (JSC):
        * runtime/Structure.h:
        (JSC::Structure::shouldGrowPropertyStorage): Lets clients know if another insertion 
        into the Structure would require resizing the property backing store so that they can 
        preallocate the required storage.
        (Structure):

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

        Unreviewed, rolling out r114185.
        http://trac.webkit.org/changeset/114185
        https://bugs.webkit.org/show_bug.cgi?id=83967

        Broke a bunch of JavaScript related tests (Requested by
        andersca on #webkit).

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        (JSC::arrayProtoFuncToLocaleString):
        * runtime/CommonIdentifiers.h:
        * tests/mozilla/ecma/Array/15.4.4.2.js:
        (getTestCases):

2012-04-13  Gavin Barraclough  <barraclough@apple.com>

        Don't rely on fixed offsets to patch calls
        https://bugs.webkit.org/show_bug.cgi?id=83966

        Rubber stamped by Oliver Hunt.

        These aren't being used anywhere!

        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCall):

2012-04-13  Hojong Han  <hojong.han@samsung.com>

        Array.prototype.toString and Array.prototype.toLocaleString should be generic
        https://bugs.webkit.org/show_bug.cgi?id=81588

        Reviewed by Gavin Barraclough.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        (JSC::arrayProtoFuncToLocaleString):
        * runtime/CommonIdentifiers.h:
        * tests/mozilla/ecma/Array/15.4.4.2.js:
        (getTestCases.array.item.new.TestCase):
        (getTestCases):

2012-04-13  Gavin Barraclough  <barraclough@apple.com>

        Don't rely on fixed offsets to patch method checks
        https://bugs.webkit.org/show_bug.cgi?id=83958

        Reviewed by Oliver Hunt.

        * bytecode/StructureStubInfo.h:
            - Add fields for the method check info.
        * jit/JIT.cpp:
        (JSC::PropertyStubCompilationInfo::copyToStubInfo):
            - Store the offsets on the stub info, instead of asserting.
        * jit/JIT.h:
            - Delete all the method check related offsets.
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::patchMethodCallProto):
            - Use the offset from the stubInfo.
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
            - Pass the stubInfo to patchMethodCallProto.

2012-04-13  Gavin Barraclough  <barraclough@apple.com>

        Don't rely on fixed offsets to patch get_by_id/put_by_id
        https://bugs.webkit.org/show_bug.cgi?id=83924

        Reviewed by Oliver Hunt.

        Store offsets in the structure stub info, as we do for the DFG JIT.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::differenceBetween):
            - this method can be static (now used from PropertyStubCompilationInfo::copyToStubInfo, will be removed soon!)
        * bytecode/StructureStubInfo.h:
            - added new fields for baseline JIT offsets.
        * jit/JIT.cpp:
        (JSC::PropertyStubCompilationInfo::copyToStubInfo):
            - moved out from JIT::privateCompile.
        (JSC::JIT::privateCompile):
            - moved out code to PropertyStubCompilationInfo::copyToStubInfo.
        * jit/JIT.h:
        (PropertyStubCompilationInfo):
            - added helper functions to initializae PropertyStubCompilationInfo, state to store more offset info.
            - removed many offsets.
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::patchGetByIdSelf):
        (JSC::JIT::patchPutByIdReplace):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        (JSC::JIT::resetPatchGetById):
        (JSC::JIT::resetPatchPutById):
            - changed code generation to use new interface to store info on PropertyStubCompilationInfo.
            - changed repatch functions to read offsets from the structure stub info.
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::patchGetByIdSelf):
        (JSC::JIT::patchPutByIdReplace):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        (JSC::JIT::resetPatchGetById):
        (JSC::JIT::resetPatchPutById):
            - changed code generation to use new interface to store info on PropertyStubCompilationInfo.
            - changed repatch functions to read offsets from the structure stub info.

2012-04-13  Rob Buis  <rbuis@rim.com>

        Fix some compiler warnings (miscellaneous)
        https://bugs.webkit.org/show_bug.cgi?id=80790

        Reviewed by Antonio Gomes.

        Fix signed/unsigned comparison warning.

        * parser/Lexer.cpp:
        (JSC::::record16):

2012-04-12  Benjamin Poulain  <bpoulain@apple.com>

        Improve replaceUsingStringSearch() for case of a single character searchValue
        https://bugs.webkit.org/show_bug.cgi?id=83738

        Reviewed by Geoffrey Garen.

        This patch improves replaceUsingStringSearch() with the following:
        -Add a special case for single character search, taking advantage of the faster WTF::find().
        -Inline replaceUsingStringSearch().
        -Use StringImpl::create() instead of UString::substringSharingImpl() since we know we are in the bounds
         by definition.

        This gives less than 1% improvement for the multicharacter replace.
        The single character search show about 9% improvement.

        * runtime/StringPrototype.cpp:
        (JSC::replaceUsingStringSearch):

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

        StructureStubInfo::reset() causes leaks of PolymorphicAccessStructureList and ExecutableMemoryHandle objects
        https://bugs.webkit.org/show_bug.cgi?id=83823

        Reviewed by Gavin Barraclough.

        Put the clearing of the accessType to after the call to deref() so that
        deref() can use the accessType to delete referenced objects as needed.

        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::reset):

2012-04-12  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Fix WebKit1 build with V8
        https://bugs.webkit.org/show_bug.cgi?id=83322

        Reviewed by Adam Barth.

        * yarr/yarr.pri:

2012-04-12  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=83821
        Move dfg repatching properties of structure stub info into a union

        Reviewed by Oliver Hunt.

        We want to be able to have similar properties for the baseline JIT, some restructuring to prepare for this.

        * bytecode/StructureStubInfo.h:
        (StructureStubInfo):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::dfgRepatchByIdSelfAccess):
        (JSC::DFG::linkRestoreScratch):
        (JSC::DFG::generateProtoChainAccessStub):
        (JSC::DFG::tryCacheGetByID):
        (JSC::DFG::tryBuildGetByIDList):
        (JSC::DFG::tryBuildGetByIDProtoList):
        (JSC::DFG::emitPutReplaceStub):
        (JSC::DFG::emitPutTransitionStub):
        (JSC::DFG::tryCachePutByID):
        (JSC::DFG::tryBuildPutByIdList):
        (JSC::DFG::dfgResetGetByID):
        (JSC::DFG::dfgResetPutByID):

2012-04-12  Gavin Barraclough  <barraclough@apple.com>

        Delete a bunch of unused, copy & pasted values in JIT.h
        https://bugs.webkit.org/show_bug.cgi?id=83822

        Reviewed by Oliver Hunt.
        
        The only architecture we support the JSVALUE64 JIT on is x86-64, all the patch offsets for other architectures are just nonsense.

        * jit/JIT.h:
        (JIT):

2012-04-12  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][ARM] Buildfix after r113934.

        Reviewed by Zoltan Herczeg.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::compare8):
        (MacroAssemblerARM):

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

        It is incorrect to short-circuit Branch(LogicalNot(@a)) if boolean speculations on @a may fail
        https://bugs.webkit.org/show_bug.cgi?id=83744
        <rdar://problem/11206946>

        Reviewed by Andy Estes.
        
        This does the conservative thing: it only short-circuits Branch(LogicalNot(@a)) if @a is a node
        that is statically known to return boolean results.

        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):

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

        Invalid Union Reference in StructureStubInfo.{cpp.h}
        https://bugs.webkit.org/show_bug.cgi?id=83735

        Reviewed by Filip Pizlo.

        Changed the references to u.getByIdProtoList and u.getByIdSelfList
        to be consistent.

        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::visitWeakReferences):
        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::initGetByIdSelfList):

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

        Unreviewed attempting to make Qt's eccentric hardware work.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::compare8):
        (MacroAssemblerARM):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::compare8):
        (MacroAssemblerMIPS):
        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::compare8):
        (MacroAssemblerSH4):

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

        op_is_foo should be optimized
        https://bugs.webkit.org/show_bug.cgi?id=83666

        Reviewed by Gavin Barraclough.
        
        This implements inlining of op_is_undefined, op_is_string, op_is_number,
        and op_is_boolean in LLInt and the baseline JIT. op_is_object and
        op_is_function are not inlined because they are quite a bit more complex.
        
        This also implements all of the op_is_foo opcodes in the DFG, but it does
        not do any type profiling based optimizations, yet.

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::compare8):
        (MacroAssemblerARMv7):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::compare8):
        (MacroAssemblerX86Common):
        * assembler/MacroAssemblerX86_64.h:
        (MacroAssemblerX86_64):
        (JSC::MacroAssemblerX86_64::testPtr):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCCallHelpers.h:
        (JSC::DFG::CCallHelpers::setupArguments):
        (CCallHelpers):
        * dfg/DFGCSEPhase.cpp:
        (JSC::DFG::CSEPhase::performNodeCSE):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
        * dfg/DFGNodeType.h:
        (DFG):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        (JSC::DFG::SpeculativeJIT::appendCallSetResult):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        (JIT):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_is_undefined):
        (JSC):
        (JSC::JIT::emit_op_is_boolean):
        (JSC::JIT::emit_op_is_number):
        (JSC::JIT::emit_op_is_string):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_is_undefined):
        (JSC):
        (JSC::JIT::emit_op_is_boolean):
        (JSC::JIT::emit_op_is_number):
        (JSC::JIT::emit_op_is_string):
        * jit/JITStubs.cpp:
        (JSC):
        * llint/LLIntSlowPaths.cpp:
        (LLInt):
        * llint/LLIntSlowPaths.h:
        (LLInt):
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * offlineasm/armv7.rb:
        * offlineasm/instructions.rb:
        * offlineasm/x86.rb:

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

        If you use an IntegerOperand and want to return it with integerResult, you need to
        zero extend to get rid of the box
        https://bugs.webkit.org/show_bug.cgi?id=83734
        <rdar://problem/11232296>

        Reviewed by Oliver Hunt.

        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::fillInteger):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):

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

        SpeculativeJIT::fillStorage() should work with all the states that a cell may be in
        https://bugs.webkit.org/show_bug.cgi?id=83722

        Reviewed by Gavin Barraclough.
        
        It's now possible to do StorageOperand on a cell, in the case that the storage is
        inline. But this means that fillStorage() must be able to handle all of the states
        that a cell might be in. Previously it didn't.
        
        With this change, it now does handle all of the states, and moreover, it does so
        by preserving the DataFormat of cells and performing all of the cell speculations
        that should be performed if you're using a cell as storage. But if you use this on
        something that is known to be storage already then it behaves as it did before.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillStorage):

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

        Global variable predictions should not be coalesced unnecessarily
        https://bugs.webkit.org/show_bug.cgi?id=83678

        Reviewed by Geoff Garen.
        
        Removed the PredictionTracker and everyone who used it. Converted GetGlobalVar
        to have a heapPrediction like a civilized DFG opcode ought to.
        
        No performance effect.

        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.h:
        * bytecode/PredictionTracker.h: Removed.
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGenerationInfo.h:
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        (Graph):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasHeapPrediction):
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):

2012-04-11  Benjamin Poulain  <bpoulain@apple.com>

        Optimize String.split() for 1 character separator
        https://bugs.webkit.org/show_bug.cgi?id=83546

        Reviewed by Gavin Barraclough.

        This patch adds a serie of optimizations to make stringProtoFuncSplit() faster in the common case
        where the separator is a single character.

        The two main gains are:
        -Use of the find() function with a single character instead of doing a full string matching.
        -Use of WTF::find() instead of UString::find() to avoid branching on is8Bit() and have a simpler inline
         function.

        The code is also changed to avoid making unnecessary allocations by converting the 8bit string to 16bits.

        This makes String.split() faster by about 13% in that particular case.

        * runtime/StringPrototype.cpp:
        (JSC):
        (JSC::splitStringByOneCharacterImpl):
        (JSC::stringProtoFuncSplit):

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

        Unreviewed. Fix make distcheck issues.

        * GNUmakefile.list.am: Ad missing files.

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

        Attempt to fix the Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-04-10  Patrick Gansterer  <paroga@webkit.org>

        Cleanup wtf/Platform.h and config.h files
        https://bugs.webkit.org/show_bug.cgi?id=83431

        Reviewed by Eric Seidel.

        The ENABLE() and USE() macros take care about the case when the flag
        isn't defined. So there is no need to define anything with 0.

        Also move duplicated code from the config.h files to Platform.h and
        merge a few preprocessor commands to make the file more readable.

        * config.h:

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

        DFG should flush SetLocals to arguments
        https://bugs.webkit.org/show_bug.cgi?id=83554

        Reviewed by Gavin Barraclough.
        
        This is necessary to match baseline JIT argument capture behavior.
        
        But to make this work right we need to have a story for arguments into
        which we store values of different formats. This patch introduces the
        notion of an ArgumentPosition - i.e. an argument in a particular inline
        call frame - and forces unification of all data pertinent to selecting
        the argument's data format.
        
        Also fixed an amusing bug in the handling of OSR on SetLocals if there
        was any insertion/deletion of nodes in the basic block. This is benign
        for now but won't be eventually since the DFG is getting smarter. So
        better fix it now.
        
        Also fixed an amusing bug in the handling of OSR on SetLocals if they
        are immediately followed by a Flush. I think this bug might have always
        been there but now it'll happen more commonly, and it's covered by the
        run-javascriptcore-tests.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGArgumentPosition.h: Added.
        (DFG):
        (ArgumentPosition):
        (JSC::DFG::ArgumentPosition::ArgumentPosition):
        (JSC::DFG::ArgumentPosition::addVariable):
        (JSC::DFG::ArgumentPosition::mergeArgumentAwareness):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::setLocal):
        (JSC::DFG::ByteCodeParser::setArgument):
        (InlineStackEntry):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        * dfg/DFGDoubleFormatState.h: Added.
        (DFG):
        (JSC::DFG::mergeDoubleFormatStates):
        (JSC::DFG::mergeDoubleFormatState):
        (JSC::DFG::doubleFormatStateToString):
        * dfg/DFGGraph.h:
        (Graph):
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGVariableAccessData.h:
        (JSC::DFG::VariableAccessData::VariableAccessData):
        (JSC::DFG::VariableAccessData::predict):
        (JSC::DFG::VariableAccessData::argumentAwarePrediction):
        (VariableAccessData):
        (JSC::DFG::VariableAccessData::mergeArgumentAwarePrediction):
        (JSC::DFG::VariableAccessData::doubleFormatState):
        (JSC::DFG::VariableAccessData::shouldUseDoubleFormat):
        (JSC::DFG::VariableAccessData::tallyVotesForShouldUseDoubleFormat):
        (JSC::DFG::VariableAccessData::mergeDoubleFormatState):
        (JSC::DFG::VariableAccessData::makePredictionForDoubleFormat):

2012-04-10  Adam Klein  <adamk@chromium.org>

        Remove unused NonNullPassRefPtr from WTF
        https://bugs.webkit.org/show_bug.cgi?id=82389

        Reviewed by Kentaro Hara.

        * JavaScriptCore.order: Remove nonexistent symbols referencing NonNullPassRefPtr.

2012-04-10  Darin Adler  <darin@apple.com>

        Remove unused data member from Lexer class
        https://bugs.webkit.org/show_bug.cgi?id=83429

        Reviewed by Kentaro Hara.

        I noticed that m_delimited was "write-only", so I deleted it.

        * parser/Lexer.cpp:
        (JSC::Lexer::setCode): Removed code to set m_delimited.
        (JSC::Lexer::parseIdentifier): Ditto.
        (JSC::Lexer::parseIdentifierSlowCase): Ditto.
        (JSC::Lexer::lex): Ditto.
        * parser/Lexer.h: Deleted m_delimited.

2012-04-10  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Enable USE_FOLDERS property
        https://bugs.webkit.org/show_bug.cgi?id=83571

        Reviewed by Daniel Bates.

        Setting the FOLDER property on targets gives more structure 
        to the generated Visual Studio solutions.
        This does not affect other CMake generators.

        * CMakeLists.txt:
        * shell/CMakeLists.txt:

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

        It should be possible to see why a code block was not compiled by the DFG
        https://bugs.webkit.org/show_bug.cgi?id=83553

        Reviewed by Geoff Garen.
        
        If DFG_ENABLE(DEBUG_VERBOSE) and a code block is rejected, then print the
        opcode that caused the rejection.

        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::debugFail):
        (DFG):
        (JSC::DFG::canHandleOpcodes):

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

        If a callback constructor returns a C++ null, throw a type error.
        https://bugs.webkit.org/show_bug.cgi?id=83537

        Rubber Stamped by Geoff Garen.

        * API/JSCallbackConstructor.cpp:
        (JSC::constructJSCallback):
            - If a callback constructor returns a C++ null, throw a type error.
        * API/tests/testapi.c:
        (Base_returnHardNull):
        * API/tests/testapi.js:
            - Add a test case for callback constructors that return a C++ null.

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

        If a callback function returns a C++ null, convert to undefined.
        https://bugs.webkit.org/show_bug.cgi?id=83534

        Reviewed by Geoff Garen.

        * API/JSCallbackFunction.cpp:
            - If a callback function returns a C++ null, convert to undefined.
        (JSC::JSCallbackFunction::call):
        * API/tests/testapi.c:
        (Base_returnHardNull):
        * API/tests/testapi.js:
            - Add a test case for callback functions that return a C++ null.

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

        Classic interpreter's GC hooks shouldn't attempt to scan instructions for code blocks that
        are currently being generated
        https://bugs.webkit.org/show_bug.cgi?id=83531
        <rdar://problem/11215200>

        Reviewed by Gavin Barraclough.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::stronglyVisitStrongReferences):

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

        Unreviewed, modernize and clean up uses of ARM assembly mnemonics in inline asm blocks.

        * dfg/DFGOperations.cpp:
        (JSC):
        * offlineasm/armv7.rb:

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

        Remove HAVE_STDINT_H
        https://bugs.webkit.org/show_bug.cgi?id=83434

        Reviewed by Kentaro Hara.

        HAVE_STDINT_H is defined with 1 all the time and we us stdint.h without HAVE(STDINT_H) already.

        * config.h:

2012-04-08  Filip Pizlo  <fpizlo@apple.com>

        DFG should not load the property storage if it is inline.
        https://bugs.webkit.org/show_bug.cgi?id=83455

        Reviewed by Gavin Barraclough.
        
        We had previously decided to have all property storage accesses go through
        the property storage pointer even if they don't "really" have to, because
        we were thinking this would help GC barriers somehow. Well, we never ended
        up doing anything with that. Hence, doing these wasted loads of the
        property storage pointer when the storage is inline is just a waste of CPU
        cycles.
        
        This change makes the DFG's inline property accesses (GetByOffset and
        PutByOffset) go directly to the inline property storage if the structure(s)
        tell us that it's OK.
        
        This looks like an across-the-board 1% win.

        * bytecode/StructureSet.h:
        (JSC):
        (JSC::StructureSet::allAreUsingInlinePropertyStorage):
        (StructureSet):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillStorage):

2012-04-08  Filip Pizlo  <fpizlo@apple.com>

        Command-line jsc's exception handling should be rationalized
        https://bugs.webkit.org/show_bug.cgi?id=83437

        Reviewed by Dan Bernstein.
        
        - If an exception is thrown during run() execution, it is now propagated,
          so that it will terminate program execution unless it is caught.
          
        - If program execution terminates with an exception, the exception is now
          always printed.
          
        - When printing the exception, the backtrace is now also printed if one is
          available. It will only not be available if you use something akin to my
          favorite line of code, 'throw "error"', since primitives don't have
          properties and hence we cannot attach a "stack" property to them.

        * jsc.cpp:
        (functionRun):
        (runWithScripts):

2012-04-04  Filip Pizlo  <fpizlo@apple.com>

        Forced OSR exits should lead to recompilation based on count, not rate
        https://bugs.webkit.org/show_bug.cgi?id=83247
        <rdar://problem/10720925>

        Reviewed by Geoff Garen.
        
        Track which OSR exits happen because of inadequate coverage. Count them
        separately. If the count reaches a threshold, immediately trigger
        reoptimization.
        
        This is in contrast to the recompilation trigger for all other OSR exits.
        Normally recomp is triggered when the exit rate exceeds a certain ratio.
        
        Looks like a slight V8 speedup (sub 1%).

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::forcedOSRExitCounter):
        (JSC::CodeBlock::addressOfForcedOSRExitCounter):
        (JSC::CodeBlock::offsetOfForcedOSRExitCounter):
        (JSC::CodeBlock::shouldReoptimizeNow):
        (JSC::CodeBlock::shouldReoptimizeFromLoopNow):
        (CodeBlock):
        * bytecode/DFGExitProfile.h:
        (JSC::DFG::exitKindToString):
        * dfg/DFGOSRExitCompiler.cpp:
        (JSC::DFG::OSRExitCompiler::handleExitCounts):
        (DFG):
        * dfg/DFGOSRExitCompiler.h:
        (OSRExitCompiler):
        * dfg/DFGOSRExitCompiler32_64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOSRExitCompiler64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * runtime/Options.cpp:
        (Options):
        (JSC::Options::initializeOptions):
        * runtime/Options.h:
        (Options):

2012-04-06  Benjamin Poulain  <bpoulain@apple.com>

        Do not abuse ArrayStorage's m_length for testing array consistency
        https://bugs.webkit.org/show_bug.cgi?id=83403

        Reviewed by Geoffrey Garen.

        Array creation from a list of values is a 3 steps process:
        -JSArray::tryCreateUninitialized()
        -JSArray::initializeIndex() for each values
        -JSArray::completeInitialization()

        Previously, the attribute m_length was not set to the final size
        JSArray::tryCreateUninitialized() because it was used to test the array
        consistency JSArray::initializeIndex().

        This caused the initialization loop using JSArray::initializeIndex() maintain
        two counters:
        -index of the loop
        -storage->m_length++

        This patch fixes this by using the index of the initialization loop for the indinces of
        JSArray::initializeIndex(). For testing consistency, the variable m_initializationIndex
        is introduced if CHECK_ARRAY_CONSISTENCY is defined.

        The patch also fixes minor unrelated build issue when CHECK_ARRAY_CONSISTENCY is defined.

        This improves the performance of JSArray creation from literals by 8%.

        * runtime/JSArray.cpp:
        (JSC::JSArray::tryFinishCreationUninitialized):
        (JSC::JSArray::checkConsistency):
        * runtime/JSArray.h:
        (ArrayStorage):
        (JSC::JSArray::initializeIndex):
        (JSC::JSArray::completeInitialization):

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

        Build fix for Windows bots.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: export missing symbol.

2012-04-06  Geoffrey Garen  <ggaren@apple.com>

        Renamed

                WeakHeap => WeakSet
                HandleHeap => HandleSet

        Reviewed by Sam Weinig.

        These sets do have internal allocators, but it's confusing to call them
        heaps because they're sub-objects of an object called "heap".

        * heap/HandleHeap.cpp: Removed.
        * heap/HandleHeap.h: Removed.
        * heap/HandleSet.cpp: Copied from JavaScriptCore/heap/HandleHeap.cpp.
        * heap/WeakHeap.cpp: Removed.
        * heap/WeakHeap.h: Removed.
        * heap/WeakSet.cpp: Copied from JavaScriptCore/heap/WeakHeap.cpp.
        * heap/WeakSet.h: Copied from JavaScriptCore/heap/WeakHeap.h.

        Plus global rename using grep.

2012-04-06  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10912476> HiDPI: Have canvas use a hidpi backing store, but downsample upon access

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig: Added ENABLE_HIGH_DPI_CANVAS.

2012-04-06  Rob Buis  <rbuis@rim.com>

        Fix cast-align warnings in JSC
        https://bugs.webkit.org/show_bug.cgi?id=80790

        Reviewed by George Staikos.

        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::computeJumpType):
        (JSC::ARMv7Assembler::link):
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::linkCode):
        * heap/MarkStack.cpp:
        (JSC::SlotVisitor::copyAndAppend):
        * runtime/JSArray.cpp:
        (JSC::JSArray::visitChildren):
        * wtf/RefCountedArray.h:
        (WTF::RefCountedArray::Header::payload):

2012-04-06  Darin Adler  <darin@apple.com>

        Streamline strtod and fix some related problems
        https://bugs.webkit.org/show_bug.cgi?id=82857

        Reviewed by Geoffrey Garen.

        * parser/Lexer.cpp:
        (JSC::Lexer<>::lex): Use parseDouble. Since we have already scanned the number
        and we know it has only correct characters, leading spaces, trailing junk, and
        trailing spaces are not a possibility. No need to add a trailing null character.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::parseInt): Changed overflow based 10 case to use parseDouble. No need
        to allow trailing junk since the code above already allows only numeric digits
        in the string. This code path is used only in unusual cases, so it's not
        optimized for 8-bit strings, but easily could be.
        (JSC::jsStrDecimalLiteral): Removed the allow trailing junk argument to this
        function template because all the callers are OK with trailing junk. Use the
        parseDouble function. No need to copy the data into a byte buffer, because
        parseDouble handles that.
        (JSC::toDouble): Got rid of the DisallowTrailingJunk argument to the
        jsStrDecimalLiteral function template. That's OK because this function
        already checks for trailing junk and handles it appropriately. The old code
        path was doing it twice.
        (JSC::parseFloat): Got rid of the AllowTrailingJunk argument to the
        jsStrDecimalLiteral function template; the template allows junk unconditionally.

        * runtime/LiteralParser.cpp:
        (JSC::::Lexer::lexNumber): Use parseDouble. Since we have already scanned the number
        and we know it has only correct characters, leading spaces, trailing junk, and
        trailing spaces are not a possibility. No need to add a trailing null character.
        No need to copy the data into a byte buffer, because parseDouble handles that.
        We could optimize the UChar case even more because we know all the characters
        are ASCII, but not doing that at this time.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Updated.

2012-04-06  Patrick Gansterer  <paroga@webkit.org>

        Remove JSC dependency from GregorianDateTime
        https://bugs.webkit.org/show_bug.cgi?id=83290

        Reviewed by Geoffrey Garen.

        This allows us to move it to WTF later.

        * runtime/DateConstructor.cpp:
        (JSC::callDate):
        * runtime/JSDateMath.h:

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

        Call Heap::discardAllCompiledCode() in low memory situations
        https://bugs.webkit.org/show_bug.cgi?id=83335

        Reviewed by Geoffrey Garen.

        Restructured Heap::discardAllCompiledCode() to do the "Is JavaScriptRunning?"
        check inline so that it can be called directly without this check.

        * heap/Heap.cpp:
        (JSC::Heap::discardAllCompiledCode):
        (JSC::Heap::collectAllGarbage):
        * heap/Heap.h: Added JS_EXPORT_PRIVATE to discardAllCompiledCode() so it can be
        called from WebCore.
        (Heap):
        * runtime/JSGlobalData.h: Removed unused " void discardAllCompiledCode()" declaration.
        (JSGlobalData):

2012-04-05  Benjamin Poulain  <bpoulain@apple.com>

        Speed up the conversion from JSValue to String for bulk operations
        https://bugs.webkit.org/show_bug.cgi?id=83243

        Reviewed by Geoffrey Garen.

        When making operations on primitive types, we loose some time converting
        values to JSString in order to extract the string.

        This patch speeds up some basic Array operations by avoiding the creation
        of intermediary JSString when possible.

        For the cases where we need to convert a lot of JSValue in a tight loop,
        an inline conversion is used.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        (JSC::arrayProtoFuncToLocaleString):
        (JSC::arrayProtoFuncJoin):
        (JSC::arrayProtoFuncPush):
        (JSC::arrayProtoFuncSort):
        * runtime/CommonIdentifiers.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::sort):
        * runtime/JSString.h:
        (JSC::JSValue::toUString):
        (JSC):
        (JSC::inlineJSValueNotStringtoUString):
        (JSC::JSValue::toUStringInline):
        * runtime/JSValue.cpp:
        (JSC::JSValue::toUStringSlowCase):
        (JSC):
        * runtime/JSValue.h:
        (JSValue):

2012-04-05  Benjamin Poulain  <bpoulain@apple.com>

        Use QuickSort when sorting primitive values by string representation
        https://bugs.webkit.org/show_bug.cgi?id=83312

        Reviewed by Gavin Barraclough.

        When the value we are sorting are all primitive values, we do not need to
        ensure a stable sort as two values with equal string representation are
        indistinguishable from JavaScript.

        This gives about 16% performance increase when sorting primitive values.

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

2012-04-05  Oliver Hunt  <oliver@apple.com>

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

        Reviewed by Gavin Barraclough.

        Don't attempt to use the DFG when SSE2 is not available.

        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::canCompileOpcodes):

2012-04-05  Oliver Hunt  <oliver@apple.com>

        Fix 32-bit build.

        * API/APICast.h:
        (toJS):

2012-04-05  Oliver Hunt  <oliver@apple.com>

        Replace static_cast with jsCast when casting JSCell subclasses in JSC
        https://bugs.webkit.org/show_bug.cgi?id=83307

        Reviewed by Gavin Barraclough.

        Replace all usage of static_cast<JSCell subtype*> with jsCast<> in JavaScriptCore.
        This results in assertions when unsafe casts are performed, but simply leaves
        a static_cast<> in release builds.

        * API/APICast.h:
        (toJS):
        * API/JSCallbackConstructor.cpp:
        (JSC::constructJSCallback):
        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::call):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::asCallbackObject):
        (JSC::::finishCreation):
        (JSC::::construct):
        (JSC::::call):
        * API/JSObjectRef.cpp:
        (JSObjectGetPrivate):
        (JSObjectSetPrivate):
        (JSObjectGetPrivateProperty):
        (JSObjectSetPrivateProperty):
        (JSObjectDeletePrivateProperty):
        * API/JSValueRef.cpp:
        (JSValueIsObjectOfClass):
        * API/JSWeakObjectMapRefPrivate.cpp:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::resolve):
        (JSC::BytecodeGenerator::resolveConstDecl):
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::finishCreation):
        * dfg/DFGOperations.cpp:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Executable.h:
        (JSC::isHostFunction):
        * runtime/JSActivation.h:
        (JSC::asActivation):
        * runtime/JSArray.cpp:
        (JSC::JSArray::defineOwnProperty):
        * runtime/JSArray.h:
        (JSC::asArray):
        * runtime/JSBoundFunction.cpp:
        (JSC::boundFunctionCall):
        (JSC::boundFunctionConstruct):
        * runtime/JSByteArray.h:
        (JSC::asByteArray):
        * runtime/JSCell.cpp:
        (JSC::JSCell::toObject):
        * runtime/JSCell.h:
        (JSC::jsCast):
        * runtime/JSGlobalObject.h:
        (JSC::asGlobalObject):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * runtime/JSObject.cpp:
        (JSC::JSObject::setPrototypeWithCycleCheck):
        (JSC::JSObject::allowsAccessFrom):
        (JSC::JSObject::toThisObject):
        (JSC::JSObject::unwrappedObject):
        * runtime/JSObject.h:
        (JSC::asObject):
        * runtime/JSPropertyNameIterator.h:
        (JSC::Register::propertyNameIterator):
        * runtime/JSString.h:
        (JSC::asString):
        (JSC::JSValue::toString):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncSubstr):

2012-04-05  Benjamin Poulain  <bpoulain@apple.com>

        Make something faster than JSStringBuilder for joining an array of JSValue
        https://bugs.webkit.org/show_bug.cgi?id=83180

        Reviewed by Geoffrey Garen.

        This patch add the class JSStringJoiner optimized for join() operations.

        This class makes stricter constraints than JSStringBuilder in order avoid
        memory allocations.

        In the best case, the class allocate memory only twice:
        -Allocate an array to keep a list of UString to join.
        -Allocate the final string.

        We also avoid the conversion from 8bits strings to 16bits strings since
        they are costly and unlikly to help for subsequent calls.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToLocaleString):
        (JSC::arrayProtoFuncJoin):
        * runtime/JSStringJoiner.cpp: Added.
        (JSC):
        (JSC::appendStringToData):
        (JSC::joinStrings):
        (JSC::JSStringJoiner::build):
        * runtime/JSStringJoiner.h: Added.
        (JSC):
        (JSStringJoiner):
        (JSC::JSStringJoiner::JSStringJoiner):
        (JSC::JSStringJoiner::append):

2012-04-05  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=77293
        [Un]Reserve 'let'

        Rubber stamped by Oliver Hunt.

        Revert r106198.
        This does break the web - e.g. https://bvi.bnc.ca/index/bnc/indexen.html
        If we're going to reserve let, we're going to have to do so in a more
        circumspect fashion.

        * parser/Keywords.table:

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

        Rolling out http://trac.webkit.org/changeset/113262.
        Original code was fine.

        Rubber-stamped by Oliver Hunt.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::additionBlindedConstant):

2012-04-05  Patrick Gansterer  <paroga@webkit.org>

        [WinCE] Remove unnecessary function decleration
        https://bugs.webkit.org/show_bug.cgi?id=83155

        Reviewed by Kentaro Hara.

        * runtime/JSDateMath.cpp:

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

        Add WTF::getCurrentLocalTime()
        https://bugs.webkit.org/show_bug.cgi?id=83164

        Reviewed by Alexey Proskuryakov.

        Replace the calls to WTF::getLocalTime() with time(0) with the new function.
        This allows us to use Win32 API on windows to get the same result in a next step.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/DateConstructor.cpp:
        (JSC::callDate):

2012-04-04  Oliver Hunt  <oliver@apple.com>

        Parser fails to revert some state after parsing expression and object literals.
        https://bugs.webkit.org/show_bug.cgi?id=83236

        Reviewed by Gavin Barraclough.

        Reset left hand side counter after parsing the literals.

        * parser/Parser.cpp:
        (JSC::::parseObjectLiteral):
        (JSC::::parseStrictObjectLiteral):
        (JSC::::parseArrayLiteral):

2012-04-04  Filip Pizlo  <fpizlo@apple.com>

        DFG InstanceOf should not uselessly speculate cell
        https://bugs.webkit.org/show_bug.cgi?id=83234

        Reviewed by Oliver Hunt.
        
        If InstanceOf is the only user of its child then don't speculate cell, since
        the not-cell case is super easy to handle.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileInstanceOf):

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

        Fixed minor error: "& 3" should be "& 2".

        Rubber-stamped by Oliver Hunt.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::additionBlindedConstant):

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

        Constant Blinding for add/sub immediate crashes in ArmV7 when dest is SP
        https://bugs.webkit.org/show_bug.cgi?id=83191

        Reviewed by Oliver Hunt.

        Make are that blinded constant pairs are similarly aligned to the
        original immediate values so that instructions that expect that
        alignment work correctly.  One example is ARMv7 add/sub imm to SP.

        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::add): Added ASSERT that immediate is word aligned.
        (JSC::ARMv7Assembler::sub): Added ASSERT that immediate is word aligned.
        (JSC::ARMv7Assembler::sub_S): Added ASSERT that immediate is word aligned.
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::additionBlindedConstant):

2012-04-04  Filip Pizlo  <fpizlo@apple.com>

        DFG should short-circuit Branch(LogicalNot(...))
        https://bugs.webkit.org/show_bug.cgi?id=83181

        Reviewed by Geoff Garen.
        
        Slight (sub 1%) speed-up on V8.

        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::fixupNode):

2012-04-04  Geoffrey Garen  <ggaren@apple.com>

        [Qt] REGRESSION(r113141): All tests assert on 32 bit debug mode
        https://bugs.webkit.org/show_bug.cgi?id=83139

        Reviewed by Sam Weinig.

        * heap/PassWeak.h:
        (JSC::::get): 32-bit JSValue treats JSValue(nullptr).asCell() as an error,
        so work around that here. (Long-term, we should make 32-bit and 64-bit
        agree on the right behavior.)

2012-04-03  Geoffrey Garen  <ggaren@apple.com>

        Updated JSC expected test results to reflect recent bug fixes <disapproving look>.

        Reviewed by Sam Weinig.

        * tests/mozilla/expected.html:

2012-03-29  Geoffrey Garen  <ggaren@apple.com>

        First step toward incremental Weak<T> finalization
        https://bugs.webkit.org/show_bug.cgi?id=82670

        Reviewed by Filip Pizlo.

        This patch implements a Weak<T> heap that is compatible with incremental
        finalization, while making as few behavior changes as possible. The behavior
        changes it makes are:

        (*) Weak<T>'s raw JSValue no longer reverts to JSValue() automatically --
        instead, a separate flag indicates that the JSValue is no longer valid.
        (This is required so that the JSValue can be preserved for later finalization.)
        Objects dealing with WeakImpls directly must change to check the flag.

        (*) Weak<T> is no longer a subclass of Handle<T>.

        (*) DOM GC performance is different -- 9% faster in the geometric mean,
        but 15% slower in one specific case:
                gc-dom1.html: 6%  faster
                gc-dom2.html: 23% faster
                gc-dom3.html: 17% faster
                gc-dom4.html: 15% *slower*

        The key features of this new heap are:

        (*) Each block knows its own state, independent of any other blocks.

        (*) Each block caches its own sweep result.

        (*) The heap visits dead Weak<T>s at the end of GC. (It doesn't
        mark them yet, since that would be a behavior change.)

        * API/JSCallbackObject.cpp:
        (JSC::JSCallbackObjectData::finalize):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::init): Updated to use the new WeakHeap API.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri: Paid the build system tax since I added some new files.

        * heap/Handle.h: Made WeakBlock a friend and exposed slot() as public,
        so we can keep passing a Handle<T> to finalizers, to avoid more surface
        area change in this patch. A follow-up patch should change the type we
        pass to finalizers.

        * heap/HandleHeap.cpp:
        (JSC):
        (JSC::HandleHeap::writeBarrier):
        (JSC::HandleHeap::isLiveNode):
        * heap/HandleHeap.h:
        (JSC):
        (HandleHeap):
        (Node):
        (JSC::HandleHeap::Node::Node): Removed all code related to Weak<T>, since
        we have a separate WeakHeap now.

        * heap/Heap.cpp:
        (JSC::Heap::Heap): Removed m_extraCost because extra cost is accounted
        for through our watermark now. Removed m_waterMark because it was unused.

        (JSC::Heap::destroy): Updated for addition of WeakHeap.

        (JSC::Heap::reportExtraMemoryCostSlowCase): Changed from using its own
        variable to participating in the watermark strategy. I wanted to standardize
        WeakHeap and all other Heap clients on this strategy, to make sure it's
        accurate.
 
        (JSC::Heap::markRoots): Updated for addition of WeakHeap. Added WeakHeap
        dead visit pass, as explained above.

        (JSC::Heap::collect):
        (JSC::Heap::resetAllocators): Updated for addition of WeakHeap.

        (JSC::Heap::addFinalizer):
        (JSC::Heap::FinalizerOwner::finalize): Updated for new Weak<T> API.

        * heap/Heap.h:
        (JSC::Heap::weakHeap):
        (Heap):
        (JSC::Heap::addToWaterMark): Added a way to participate in the watermarking
        strategy, since this is the best way for WeakHeap to report its memory
        cost. (I plan to update this in a follow-up patch to make it more accurate,
        but for now it is not less accurate than it used to be.)

        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::resetAllocators):
        * heap/MarkedSpace.h:
        (MarkedSpace):
        (JSC::MarkedSpace::addToWaterMark):
        (JSC::MarkedSpace::didConsumeFreeList): Removed m_nurseryWaterMark because
        it was unused, and I didn't want to update WeakHeap to keep an usused
        variable working. Added API for above.

        * heap/PassWeak.h:
        (JSC):
        (WeakImplAccessor):
        (PassWeak):
        (JSC::::operator):
        (JSC::::get):
        (JSC::::was):
        (JSC::::PassWeak):
        (JSC::::~PassWeak):
        (JSC::UnspecifiedBoolType):
        (JSC::::leakImpl):
        (JSC::adoptWeak):
        * heap/Strong.h:
        (JSC::Strong::operator!):
        (Strong):
        (JSC::Strong::operator UnspecifiedBoolType*):
        (JSC::Strong::get):
        * heap/Weak.h:
        (Weak):
        (JSC::::Weak):
        (JSC):
        (JSC::::isHashTableDeletedValue):
        (JSC::::~Weak):
        (JSC::::swap):
        (JSC::=):
        (JSC::::operator):
        (JSC::UnspecifiedBoolType):
        (JSC::::release):
        (JSC::::clear):
        (JSC::::hashTableDeletedValue): Lots of code changes here, but they boil
        down to two things:

        (*) Allocate WeakImpls from the WeakHeap instead of Handles from the HandleHeap.

        (*) Explicitly check WeakImpl::state() for non-liveness before returning
        a value (explained above).

        These files implement the new Weak<T> heap behavior described above:

        * heap/WeakBlock.cpp: Added.
        * heap/WeakBlock.h: Added.
        * heap/WeakHandleOwner.cpp: Added.
        * heap/WeakHandleOwner.h: Added.
        * heap/WeakHeap.cpp: Added.
        * heap/WeakHeap.h: Added.
        * heap/WeakImpl.h: Added.

        One interesting difference from the old heap is that we don't allow
        clients to overwrite a WeakImpl after allocating it, and we don't recycle
        WeakImpls prior to garbage collection. This is required for lazy finalization,
        but it will also help us esablish a useful invariant in the future: allocating
        a WeakImpl will be a binding contract to run a finalizer at some point in the
        future, even if the WeakImpl is later deallocated.

        * jit/JITStubs.cpp:
        (JSC::JITThunks::hostFunctionStub): Check the Weak<T> for ! instead of
        its JSValue, since that's our API contract now, and the JSValue might
        be stale.

        * runtime/JSCell.h:
        (JSC::jsCast): Allow casting NULL pointers because it's useful and harmless.

        * runtime/Structure.cpp:
        (JSC::StructureTransitionTable::add): I can't remember why I did this.

        * runtime/StructureTransitionTable.h:
        * runtime/WeakGCMap.h: I had to update these classes because they allocate
        and deallocate weak pointers manually. They should probably stop doing that.

2012-04-03  Keishi Hattori  <keishi@webkit.org>

        Disable ENABLE_DATALIST for now
        https://bugs.webkit.org/show_bug.cgi?id=82871

        Reviewed by Kent Tamura.

        * Configurations/FeatureDefines.xcconfig: Disabled ENABLE_DATALIST.

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

        jsr/sret should be removed
        https://bugs.webkit.org/show_bug.cgi?id=82986
        <rdar://problem/11017015>

        Reviewed by Sam Weinig and Geoff Garen.
        
        Replaces jsr/sret with finally block inlining.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/Opcode.h:
        (JSC):
        (JSC::padOpcodeName):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::pushFinallyContext):
        (JSC::BytecodeGenerator::emitComplexJumpScopes):
        (JSC):
        * bytecompiler/BytecodeGenerator.h:
        (FinallyContext):
        (BytecodeGenerator):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::TryNode::emitBytecode):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        (JIT):
        * jit/JITOpcodes.cpp:
        (JSC):
        * jit/JITOpcodes32_64.cpp:
        (JSC):
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:

2012-04-03  Mark Rowe  <mrowe@apple.com>

        Make it possible to install the JavaScriptCore test tools.

        Part of <rdar://problem/11158607>.
        
        Reviewed by Filip Pizlo.

        * JavaScriptCore.xcodeproj/project.pbxproj: Introduce an aggregate target named
        Test Tools that builds testapi, minidom and testRegExp. Switch All from depending on
        those targets individually to depending on the new aggregate target.

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

        Offlineasm ARM backend has a very convoluted way of saying it wants to emit a
        three-operand multiply instruction
        https://bugs.webkit.org/show_bug.cgi?id=83100

        Reviewed by Darin Adler.
        
        Changed the "muli"/"mulp" case to call emitArmV7() since that helper method was
        already smart enough to do the Right Thing for multiply.

        * offlineasm/armv7.rb:

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

        Offlineasm ARM backend uses the wrong mnemonic for multiply
        https://bugs.webkit.org/show_bug.cgi?id=83098
        <rdar://problem/11168744>

        Reviewed by Gavin Barraclough.
        
        Use "mul" instead of "muls" since we're passing three operands, not two.

        * offlineasm/armv7.rb:

2012-04-03  Gavin Barraclough  <barraclough@apple.com>

        Linux crashes during boot
        https://bugs.webkit.org/show_bug.cgi?id=83096

        Reviewed by Filip Pizlo.

        The bug here is that we add empty JSValues to the sparse map, and then set them
        - but a GC may occur before doing so (due to a call to reportExtraMemory cost).
        We may want to consider making it safe to mark empty JSValues, but the simple &
        contained fix to this specific bug is to just initialize these values to
        something other than JSValue().

        * runtime/JSArray.cpp:
        (JSC::SparseArrayValueMap::add):
            - Initialize sparse map entries.

2012-04-02  Oliver Hunt  <oliver@apple.com>

        Incorrect liveness information when inlining
        https://bugs.webkit.org/show_bug.cgi?id=82985

        Reviewed by Filip Pizlo.

        Don't remap register numbers that have already been remapped.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleInlining):

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

        Activation tear-off neglects to copy the callee and scope chain, leading to crashes if we
        try to create an arguments object from the activation
        https://bugs.webkit.org/show_bug.cgi?id=82947
        <rdar://problem/11058598>

        Reviewed by Gavin Barraclough.
        
        We now copy the entire call frame header just to be sure. This is mostly perf-netural,
        except for a 3.7% slow-down in V8/earley.

        * runtime/JSActivation.cpp:
        (JSC::JSActivation::visitChildren):
        * runtime/JSActivation.h:
        (JSC::JSActivation::tearOff):

2012-04-02  Daniel Bates  <dbates@webkit.org>

        Remove Source/JavaScriptCore/wtf and its empty subdirectories

        Rubber-stamped by Eric Seidel.

        Following the move of WTF from Source/JavaScriptCore/wtf to Source/WTF
        (https://bugs.webkit.org/show_bug.cgi?id=75673), remove directory
        Source/JavaScriptCore/wtf and its empty subdirectories.

        * wtf: Removed.
        * wtf/android: Removed.
        * wtf/blackberry: Removed.
        * wtf/chromium: Removed.
        * wtf/dtoa: Removed.
        * wtf/efl: Removed.
        * wtf/gobject: Removed.
        * wtf/gtk: Removed.
        * wtf/mac: Removed.
        * wtf/qt: Removed.
        * wtf/qt/compat: Removed.
        * wtf/tests: Removed.
        * wtf/text: Removed.
        * wtf/threads: Removed.
        * wtf/threads/win: Removed.
        * wtf/unicode: Removed.
        * wtf/unicode/glib: Removed.
        * wtf/unicode/icu: Removed.
        * wtf/unicode/qt4: Removed.
        * wtf/unicode/wince: Removed.
        * wtf/url: Removed.
        * wtf/url/api: Removed.
        * wtf/url/src: Removed.
        * wtf/win: Removed.
        * wtf/wince: Removed.
        * wtf/wx: Removed.

2012-04-02  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck issues.

        * GNUmakefile.list.am: Add missing file.

2012-04-01  Darin Adler  <darin@apple.com>

        Fix incorrect path for libWTF.a in Mac project file.

        * JavaScriptCore.xcodeproj/project.pbxproj: Removed the "../Release" prefix that
        would cause other configurations to try to link with the "Release" version of
        libWTF.a instead of the correct version.

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

        DFG should optimize a==b for a being an object and b being either an object or
        null/undefined, and vice versa
        https://bugs.webkit.org/show_bug.cgi?id=82656

        Reviewed by Oliver Hunt.
        
        Implements additional object equality optimizations for the case that one
        operand is predicted to be an easily speculated object (like FinalObject or
        Array) and the other is either an easily speculated object or Other, i.e.
        Null or Undefined.
        
        2-5% speed-up on V8/raytrace, leading to a sub-1% progression on V8.
        
        I also took the opportunity to clean up the control flow for the speculation
        decisions in the various Compare opcodes. And to fix a build bug in SamplingTool.
        And to remove debug cruft I stupidly committed in my last patch.
        
        * bytecode/SamplingTool.h:
        (SamplingRegion):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
        (JSC::DFG::SpeculativeJIT::compare):
        * dfg/DFGSpeculativeJIT.h:
        (SpeculativeJIT):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
        (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
        (DFG):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
        (JSC::DFG::SpeculativeJIT::compileObjectToObjectOrOtherEquality):
        (DFG):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectToObjectOrOtherEquality):

2012-03-30  David Barr  <davidbarr@chromium.org>

        Split up top-level .gitignore and .gitattributes
        https://bugs.webkit.org/show_bug.cgi?id=82687

        Reviewed by Tor Arne Vestbø.

        * JavaScriptCore.gyp/.gitignore: Added.

2012-03-30  Steve Falkenburg  <sfalken@apple.com>

        Windows (make based) build fix.

        * JavaScriptCore.vcproj/JavaScriptCore.make: Copy WTF header files into a place where JavaScriptCore build can see them.

2012-03-30  Keishi Hattori  <keishi@webkit.org>

        Change ENABLE_INPUT_COLOR to ENABLE_INPUT_TYPE_COLOR and enable it for chromium
        https://bugs.webkit.org/show_bug.cgi?id=80972

        Reviewed by Kent Tamura.

        * Configurations/FeatureDefines.xcconfig:

2012-03-29  Mark Hahnenberg  <mhahnenberg@apple.com>

        Refactor recompileAllJSFunctions() to be less expensive
        https://bugs.webkit.org/show_bug.cgi?id=80330

        Reviewed by Filip Pizlo.

        This change is performance neutral on the JS benchmarks we track. It's mostly to improve page 
        load performance, which currently does at least a couple full GCs per navigation.

        * heap/Heap.cpp:
        (JSC::Heap::discardAllCompiledCode): Rename recompileAllJSFunctions to discardAllCompiledCode 
        because the function doesn't actually recompile anything (and never did); it simply throws code
        away for it to be recompiled later if we determine we should do so.
        (JSC):
        (JSC::Heap::collectAllGarbage):
        (JSC::Heap::addFunctionExecutable): Adds a newly created FunctionExecutable to the Heap's list.
        (JSC::Heap::removeFunctionExecutable): Removes the specified FunctionExecutable from the Heap's list.
        * heap/Heap.h:
        (JSC):
        (Heap):
        * runtime/Executable.cpp: Added next and prev fields to FunctionExecutables so that they can 
        be used in DoublyLinkedLists.
        (JSC::FunctionExecutable::FunctionExecutable):
        (JSC::FunctionExecutable::finalize): Removes the FunctionExecutable from the Heap's list.
        * runtime/Executable.h:
        (FunctionExecutable):
        (JSC::FunctionExecutable::create): Adds the FunctionExecutable to the Heap's list.
        * runtime/JSGlobalData.cpp: Remove recompileAllJSFunctions, as it's the Heap's job to own and manage 
        the list of FunctionExecutables.
        * runtime/JSGlobalData.h:
        (JSGlobalData):
        * runtime/JSGlobalObject.cpp:
        (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Use the new discardAllCompiledCode.

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

        Unreviewed build fix for non-x86 platforms.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileSoftModulo):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emitSlow_op_mod):

2012-03-29  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix p2.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-03-29  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix p1.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-03-29  Gavin Barraclough  <barraclough@apple.com>

        Template the Yarr::Interpreter on the character type
        https://bugs.webkit.org/show_bug.cgi?id=82637

        Reviewed by Sam Weinig.

        We should be able to call to the interpreter after having already checked the character type,
        without having to re-package the character pointer back up into a string!

        * runtime/RegExp.cpp:
        (JSC::RegExp::match):
        (JSC::RegExp::matchCompareWithInterpreter):
            - Don't pass length.
        * yarr/Yarr.h:
            - moved function declarations to YarrInterpreter.h.
        * yarr/YarrInterpreter.cpp:
        (Yarr):
        (Interpreter):
        (JSC::Yarr::Interpreter::InputStream::InputStream):
        (InputStream):
        (JSC::Yarr::Interpreter::Interpreter):
        (JSC::Yarr::interpret):
            - templated Interpreter class on CharType.
        * yarr/YarrInterpreter.h:
        (Yarr):
            - added function declarations.

2012-03-29  David Kilzer  <ddkilzer@apple.com>

        Don't use a flattened framework path when building on OS X

        Reviewed by Mark Rowe.

        * Configurations/ToolExecutable.xcconfig: Use REAL_PLATFORM_NAME
        to select different INSTALL_PATH values.

2012-03-29  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix, add Win-specific sources
        the wx port needs after WTF move.

        * wscript:

2012-03-29  Andy Estes  <aestes@apple.com>

        Remove an unused variable that breaks the build with newer versions of clang.

        Rubber stamped by Gavin Barraclough.

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

2012-03-29  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        HashMap<>::add should return a more descriptive object
        https://bugs.webkit.org/show_bug.cgi?id=71063

        Reviewed by Ryosuke Niwa.

        Update code to use AddResult instead of a pair. Note that since WeakGCMap wraps
        the iterator type, there's a need for its own AddResult type -- instantiated from
        HashTableAddResult template class.

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::setPrivateProperty):
        * API/JSClassRef.cpp:
        (OpaqueJSClass::contextData):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::addVar):
        (JSC::BytecodeGenerator::addGlobalVar):
        (JSC::BytecodeGenerator::addConstant):
        (JSC::BytecodeGenerator::addConstantValue):
        (JSC::BytecodeGenerator::emitLoad):
        (JSC::BytecodeGenerator::addStringConstant):
        (JSC::BytecodeGenerator::emitLazyNewFunction):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::PropertyListNode::emitBytecode):
        * debugger/Debugger.cpp:
        * dfg/DFGAssemblyHelpers.cpp:
        (JSC::DFG::AssemblyHelpers::decodedCodeMapFor):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::cellConstant):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::ctiStub):
        (JSC::JITThunks::hostFunctionStub):
        * parser/Parser.cpp:
        (JSC::::parseStrictObjectLiteral):
        * parser/Parser.h:
        (JSC::Scope::declareParameter):
        * runtime/Identifier.cpp:
        (JSC::Identifier::add):
        (JSC::Identifier::add8):
        (JSC::Identifier::addSlowCase):
        * runtime/Identifier.h:
        (JSC::Identifier::add):
        (JSC::IdentifierTable::add):
        * runtime/JSArray.cpp:
        (JSC::SparseArrayValueMap::add):
        (JSC::SparseArrayValueMap::put):
        (JSC::SparseArrayValueMap::putDirect):
        (JSC::JSArray::enterDictionaryMode):
        (JSC::JSArray::defineOwnNumericProperty):
        * runtime/JSArray.h:
        (SparseArrayValueMap):
        * runtime/PropertyNameArray.cpp:
        (JSC::PropertyNameArray::add):
        * runtime/StringRecursionChecker.h:
        (JSC::StringRecursionChecker::performCheck):
        * runtime/Structure.cpp:
        (JSC::StructureTransitionTable::add):
        * runtime/WeakGCMap.h:
        (WeakGCMap):
        (JSC::WeakGCMap::add):
        (JSC::WeakGCMap::set):
        * tools/ProfileTreeNode.h:
        (JSC::ProfileTreeNode::sampleChild):

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

        Build fix for !ENABLE(YARR_JIT) after r112454.

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

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

        DFG object equality speculations should be simplified
        https://bugs.webkit.org/show_bug.cgi?id=82557

        Reviewed by Gavin Barraclough.

        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateFinalObject):
        (JSC::DFG::Node::shouldSpeculateArray):

2012-03-28  David Kilzer  <ddkilzer@apple.com>

        minidom configurations should be based on ToolExecutable.xcconfig
        <http://webkit.org/b/82513>

        Reviewed by Mark Rowe.

        Note that this patch changes minidom from being installed in
        /usr/local/bin to JavaScriptCore.framework/Resources.

        * Configurations/ToolExecutable.xcconfig: Add semi-colon.
        * JavaScriptCore.xcodeproj/project.pbxproj: Base minidom
        configurations on ToolExecutable.xcconfig.  Remove redundant
        PRODUCT_NAME and SKIP_INSTALL variables.

2012-03-28  Gavin Barraclough  <barraclough@apple.com>

        Build fix - some compiles generating NORETURN related warnings.

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::setSubpatternStart):
        (JSC::Yarr::YarrGenerator::setSubpatternEnd):
        (JSC::Yarr::YarrGenerator::clearSubpatternStart):

2012-03-28  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Build fix, move WTF back into JSCore target
        until issues with JSCore not linking in all WTF symbols are resolved.
        
        * wscript:

2012-03-28  Gavin Barraclough  <barraclough@apple.com>

        Yarr: if we're not using the output array, don't populate it!
        https://bugs.webkit.org/show_bug.cgi?id=82519

        Reviewed by Sam Weinig.

        * runtime/RegExp.cpp:
        (JSC):
            - Missed review comment! - didn't fully remove RegExpRepresentation.

2012-03-28  Gavin Barraclough  <barraclough@apple.com>

        Yarr: if we're not using the output array, don't populate it!
        https://bugs.webkit.org/show_bug.cgi?id=82519

        Reviewed by Sam Weinig.

        Add a new variant of the match method to RegExp that returns a MatchResult,
        and modify YarrJIT to be able to compile code that doesn't use an output vector.

        This is a 3% progression on v8-regexp.

        * JavaScriptCore.xcodeproj/project.pbxproj:
            - Moved MatchResult into its own header.
        * assembler/AbstractMacroAssembler.h:
            - Added missing include.
        * runtime/MatchResult.h: Added.
        (MatchResult::MatchResult):
        (MatchResult):
        (MatchResult::failed):
        (MatchResult::operator bool):
        (MatchResult::empty):
            - Moved MatchResult into its own header.
        * runtime/RegExp.cpp:
        (JSC::RegExp::compile):
        (JSC::RegExp::compileIfNecessary):
        (JSC::RegExp::match):
            - Changed due to execute & representation changes.
        (JSC::RegExp::compileMatchOnly):
        (JSC::RegExp::compileIfNecessaryMatchOnly):
            - Added helper to compile MatchOnly code.
        (JSC::RegExp::invalidateCode):
        (JSC::RegExp::matchCompareWithInterpreter):
        (JSC::RegExp::printTraceData):
            - Changed due representation changes.
        * runtime/RegExp.h:
        (RegExp):
        (JSC::RegExp::hasCode):
            - Made YarrCodeBlock a member.
        * runtime/RegExpConstructor.h:
        (RegExpConstructor):
        (JSC::RegExpConstructor::performMatch):
            - Added no-ovector form.
        * runtime/RegExpMatchesArray.cpp:
        (JSC::RegExpMatchesArray::reifyAllProperties):
            - Match now takes a reference to ovector, not a pointer.
        * runtime/RegExpObject.h:
        (JSC):
            - Moved MatchResult into its own header.
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncSplit):
            - Match now takes a reference to ovector, not a pointer.
        * testRegExp.cpp:
        (testOneRegExp):
            - Match now takes a reference to ovector, not a pointer.
        * yarr/YarrJIT.cpp:
        (Yarr):
        (YarrGenerator):
        (JSC::Yarr::YarrGenerator::initCallFrame):
        (JSC::Yarr::YarrGenerator::removeCallFrame):
        (JSC::Yarr::YarrGenerator::setSubpatternStart):
        (JSC::Yarr::YarrGenerator::setSubpatternEnd):
        (JSC::Yarr::YarrGenerator::clearSubpatternStart):
        (JSC::Yarr::YarrGenerator::setMatchStart):
        (JSC::Yarr::YarrGenerator::getMatchStart):
            - Added helper functions to intermediate access to output.
        (JSC::Yarr::YarrGenerator::generateDotStarEnclosure):
        (JSC::Yarr::YarrGenerator::generate):
        (JSC::Yarr::YarrGenerator::backtrack):
        (JSC::Yarr::YarrGenerator::generateEnter):
        (JSC::Yarr::YarrGenerator::compile):
            - Changed to use the new helpers, only generate subpatterns if IncludeSubpatterns.
        (JSC::Yarr::jitCompile):
            - Needs to template of MatchOnly or IncludeSubpatterns.
        * yarr/YarrJIT.h:
        (YarrCodeBlock):
        (JSC::Yarr::YarrCodeBlock::set8BitCode):
        (JSC::Yarr::YarrCodeBlock::set16BitCode):
        (JSC::Yarr::YarrCodeBlock::has8BitCodeMatchOnly):
        (JSC::Yarr::YarrCodeBlock::has16BitCodeMatchOnly):
        (JSC::Yarr::YarrCodeBlock::set8BitCodeMatchOnly):
        (JSC::Yarr::YarrCodeBlock::set16BitCodeMatchOnly):
        (JSC::Yarr::YarrCodeBlock::execute):
        (JSC::Yarr::YarrCodeBlock::clear):
            - Added a second set of CodeRefs, so that we can compile RexExps with/without subpattern matching.

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

        DFG OSR exit should not generate an exit for variables of inlinees if the
        inlinees are not in scope
        https://bugs.webkit.org/show_bug.cgi?id=82312

        Reviewed by Oliver Hunt.
        
        * bytecode/CodeBlock.h:
        (JSC::baselineCodeBlockForInlineCallFrame):
        (JSC):
        (JSC::baselineCodeBlockForOriginAndBaselineCodeBlock):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::computeNumVariablesForCodeOrigin):
        (DFG):
        (JSC::DFG::OSRExit::OSRExit):

2012-03-27  Matt Lilek  <mrl@apple.com>

        Stop compiling Interpreter.cpp with -fno-var-tracking
        https://bugs.webkit.org/show_bug.cgi?id=82299

        Reviewed by Anders Carlsson.

        * JavaScriptCore.xcodeproj/project.pbxproj:

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

        Compiler warning when JIT is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=82352

        Reviewed by Filip Pizlo.

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

2012-03-26  Thouraya ANDOLSI  <thouraya.andolsi@st.com>

        Unaligned userspace access for SH4 platforms
        https://bugs.webkit.org/show_bug.cgi?id=79104

        Reviewed by Gavin Barraclough.

        * assembler/AbstractMacroAssembler.h:
        (Jump):
        (JSC::AbstractMacroAssembler::Jump::Jump):
        (JSC::AbstractMacroAssembler::Jump::link):
        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::load16Unaligned):
        (JSC::MacroAssemblerSH4::load32WithUnalignedHalfWords):
        (JSC::MacroAssemblerSH4::branchDouble):
        (JSC::MacroAssemblerSH4::branchTrue):
        (JSC::MacroAssemblerSH4::branchFalse):
        * assembler/SH4Assembler.h:
        (JSC::SH4Assembler::extraInstrForBranch):
        (SH4Assembler):
        (JSC::SH4Assembler::bra):
        (JSC::SH4Assembler::linkJump):
        * jit/JIT.h:
        (JIT):
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):

2012-03-26  Ryosuke Niwa  <rniwa@webkit.org>

        cssText should use shorthand notations
        https://bugs.webkit.org/show_bug.cgi?id=81737

        Reviewed by Enrica Casucci.

        Export symbols of BitVector on Windows.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        DFG should assert that argument value recoveries can only be
        AlreadyInRegisterFile or Constant
        https://bugs.webkit.org/show_bug.cgi?id=82249

        Reviewed by Michael Saboff.
        
        Made the assertions that the DFG makes for argument value recoveries match
        what Arguments expects.

        * bytecode/ValueRecovery.h:
        (JSC::ValueRecovery::isConstant):
        (ValueRecovery):
        (JSC::ValueRecovery::isAlreadyInRegisterFile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2012-03-26  Dan Bernstein  <mitz@apple.com>

        Tried to fix the Windows build.

        * yarr/YarrPattern.cpp:
        (JSC::Yarr::CharacterClassConstructor::putRange):

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

        Unreviewed - speculative Windows build fix.

        * yarr/YarrCanonicalizeUCS2.h:
        (JSC::Yarr::getCanonicalPair):

2012-03-26  Dan Bernstein  <mitz@apple.com>

        Fixed builds with assertions disabled.

        * yarr/YarrCanonicalizeUCS2.h:
        (JSC::Yarr::areCanonicallyEquivalent):

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

        Unreviewed - errk! - accidentally the whole pbxproj.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2012-03-25  Gavin Barraclough  <barraclough@apple.com>

        Greek sigma is handled wrong in case independent regexp.
        https://bugs.webkit.org/show_bug.cgi?id=82063

        Reviewed by Oliver Hunt.

        The bug here is that we assume that any given codepoint has at most one additional value it
        should match under a case insensitive match, and that the pair of codepoints that match (if
        a codepoint does not only match itself) can be determined by calling toUpper/toLower on the
        given codepoint). Life is not that simple.

        Instead, pre-calculate a set of tables mapping from a UCS2 codepoint to the set of characters
        it may match, under the ES5.1 case-insensitive matching rules. Since unicode is fairly regular
        we can pack this table quite nicely, and get it down to 364 entries. This means we can use a
        simple binary search to find an entry in typically eight compares.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * yarr/yarr.pri:
            - Added new files to build systems.
        * yarr/YarrCanonicalizeUCS2.cpp: Added.
            - New - autogenerated, UCS2 canonicalized comparison tables.
        * yarr/YarrCanonicalizeUCS2.h: Added.
        (JSC::Yarr::rangeInfoFor):
            - Look up the canonicalization info for a UCS2 character.
        (JSC::Yarr::getCanonicalPair):
            - For a UCS2 character with a single equivalent value, look it up.
        (JSC::Yarr::isCanonicallyUnique):
            - Returns true if no other UCS2 code points are canonically equal.
        (JSC::Yarr::areCanonicallyEquivalent):
            - Compare two values, under canonicalization rules.
        * yarr/YarrCanonicalizeUCS2.js: Added.
            - script used to generate YarrCanonicalizeUCS2.cpp.
        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::tryConsumeBackReference):
            - Use isCanonicallyUnique, rather than Unicode toUpper/toLower.
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::jumpIfCharNotEquals):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
            - Use isCanonicallyUnique, rather than Unicode toUpper/toLower.
        * yarr/YarrPattern.cpp:
        (JSC::Yarr::CharacterClassConstructor::putChar):
            - Updated to determine canonical equivalents correctly.
        (JSC::Yarr::CharacterClassConstructor::putUnicodeIgnoreCase):
            - Added, used to put a non-ascii, non-unique character in a case-insensitive match.
        (JSC::Yarr::CharacterClassConstructor::putRange):
            - Updated to determine canonical equivalents correctly.
        (JSC::Yarr::YarrPatternConstructor::atomPatternCharacter):
            - Changed to call putUnicodeIgnoreCase, instead of putChar, avoid a double lookup of rangeInfo.

2012-03-26  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Add the build outputs dir to the list of build dirs,
        so we make sure it finds the API headers on all platforms.

        * wscript:

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

        Build fix for WinCE after r112039.

        * interpreter/Register.h:
        (Register): Removed inline keyword from decleration since
                    there is an ALWAYS_INLINE at the definition anyway.

2012-03-26  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing files.

2012-03-25  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Move WTF to its own static lib build.

        * wscript:

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

        DFG int-to-double conversion should be revealed to CSE
        https://bugs.webkit.org/show_bug.cgi?id=82135

        Reviewed by Oliver Hunt.
        
        This introduces the notion of an Int32ToDouble node, which is injected
        into the graph anytime we know that we have a double use of a node that
        was predicted integer. The Int32ToDouble simplifies double speculation
        on integers by skipping the path that would unbox doubles, if we know
        that the value is already proven to be an integer. It allows integer to
        double conversions to be subjected to common subexpression elimination
        (CSE) by allowing the CSE phase to see where these conversions are
        occurring. Finally, it allows us to see when a constant is being used
        as both a double and an integer. This is a bit odd, since it means that
        sometimes a double use of a constant will not refer directly to the
        constant. This should not cause problems, for now, but it may require
        some canonizalization in the future if we want to support strength
        reductions of double operations based on constants.
        
        To allow injection of nodes into the graph, this change introduces the
        DFG::InsertionSet, which is a way of lazily inserting elements into a
        list. This allows the FixupPhase to remain O(N) despite performing
        multiple injections in a single basic block. Without the InsertionSet,
        each injection would require performing an insertion into a vector,
        which is O(N), leading to O(N^2) performance overall. With the
        InsertionSet, each injection simply records what insertion would have
        been performed, and all insertions are performed at once (via
        InsertionSet::execute) after processing of a basic block is completed.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/PredictedType.h:
        (JSC::isActionableIntMutableArrayPrediction):
        (JSC):
        (JSC::isActionableFloatMutableArrayPrediction):
        (JSC::isActionableTypedMutableArrayPrediction):
        (JSC::isActionableMutableArrayPrediction):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGCSEPhase.cpp:
        (JSC::DFG::CSEPhase::performNodeCSE):
        * dfg/DFGCommon.h:
        (JSC::DFG::useKindToString):
        (DFG):
        * dfg/DFGFixupPhase.cpp:
        (JSC::DFG::FixupPhase::run):
        (JSC::DFG::FixupPhase::fixupBlock):
        (FixupPhase):
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::fixDoubleEdge):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGInsertionSet.h: Added.
        (DFG):
        (Insertion):
        (JSC::DFG::Insertion::Insertion):
        (JSC::DFG::Insertion::index):
        (JSC::DFG::Insertion::element):
        (InsertionSet):
        (JSC::DFG::InsertionSet::InsertionSet):
        (JSC::DFG::InsertionSet::append):
        (JSC::DFG::InsertionSet::execute):
        * dfg/DFGNodeType.h:
        (DFG):
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        (JSC::DFG::SpeculativeJIT::compileValueToInt32):
        (JSC::DFG::SpeculativeJIT::compileInt32ToDouble):
        (DFG):
        * dfg/DFGSpeculativeJIT.h:
        (SpeculativeJIT):
        (JSC::DFG::IntegerOperand::IntegerOperand):
        (JSC::DFG::DoubleOperand::DoubleOperand):
        (JSC::DFG::JSValueOperand::JSValueOperand):
        (JSC::DFG::StorageOperand::StorageOperand):
        (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
        (JSC::DFG::SpeculateStrictInt32Operand::SpeculateStrictInt32Operand):
        (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
        (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
        (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        DFGOperands should be moved out of the DFG and into bytecode
        https://bugs.webkit.org/show_bug.cgi?id=82151

        Reviewed by Dan Bernstein.

        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/Operands.h: Copied from Source/JavaScriptCore/dfg/DFGOperands.h.
        * dfg/DFGBasicBlock.h:
        * dfg/DFGNode.h:
        * dfg/DFGOSREntry.h:
        * dfg/DFGOSRExit.h:
        * dfg/DFGOperands.h: Removed.
        * dfg/DFGVariableAccessData.h:

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

        DFG 64-bit Branch implementation should not be creating a JSValueOperand that
        it isn't going to use
        https://bugs.webkit.org/show_bug.cgi?id=82136

        Reviewed by Geoff Garen.

        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitBranch):

2012-03-24  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Fix the build after WTF move.

        * wscript:

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

        DFG double voting may be overzealous in the case of variables that end up
        being used as integers
        https://bugs.webkit.org/show_bug.cgi?id=82008

        Reviewed by Oliver Hunt.
        
        Cleaned up propagation, making the intent more explicit in most places.
        Back-propagate NodeUsedAsInt for cases where a node was used in a context
        that is known to strongly prefer integers.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dumpCodeOrigin):
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        (Graph):
        * dfg/DFGNodeFlags.cpp:
        (JSC::DFG::nodeFlagsAsString):
        * dfg/DFGNodeFlags.h:
        (DFG):
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::run):
        (JSC::DFG::PredictionPropagationPhase::propagate):
        (PredictionPropagationPhase):
        (JSC::DFG::PredictionPropagationPhase::mergeDefaultFlags):
        (JSC::DFG::PredictionPropagationPhase::vote):
        (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
        (JSC::DFG::PredictionPropagationPhase::fixupNode):
        * dfg/DFGVariableAccessData.h:
        (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote):

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

        DFG::Node::shouldNotSpeculateInteger() should be eliminated
        https://bugs.webkit.org/show_bug.cgi?id=82123

        Reviewed by Geoff Garen.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGNode.h:
        (Node):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):

2012-03-24  Yong Li  <yoli@rim.com>

        Increase getByIdSlowCase ConstantSpace/InstructionSpace for CPU(ARM_TRADITIONAL)
        https://bugs.webkit.org/show_bug.cgi?id=81521

        Increase sequenceGetByIdSlowCaseConstantSpace and sequenceGetByIdSlowCaseInstructionSpace
        for CPU(ARM_TRADITIONAL) to fit actual need.

        Reviewed by Oliver Hunt.

        * jit/JIT.h:
        (JIT):

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

        DFG Fixup should be able to short-circuit trivial ValueToInt32's
        https://bugs.webkit.org/show_bug.cgi?id=82030

        Reviewed by Michael Saboff.
        
        Takes the fixup() method of the prediction propagation phase and makes it
        into its own phase. Adds the ability to short-circuit trivial ValueToInt32
        nodes, and mark pure ValueToInt32's as such.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::makeSafe):
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCommon.h:
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * dfg/DFGFixupPhase.cpp: Added.
        (DFG):
        (FixupPhase):
        (JSC::DFG::FixupPhase::FixupPhase):
        (JSC::DFG::FixupPhase::run):
        (JSC::DFG::FixupPhase::fixupNode):
        (JSC::DFG::FixupPhase::fixIntEdge):
        (JSC::DFG::performFixup):
        * dfg/DFGFixupPhase.h: Added.
        (DFG):
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::run):
        (PredictionPropagationPhase):

2012-03-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        tryReallocate could break the zero-ed memory invariant of CopiedBlocks
        https://bugs.webkit.org/show_bug.cgi?id=82087

        Reviewed by Filip Pizlo.

        Removing this optimization turned out to be ~1% regression on kraken, so I simply 
        undid the modification to the current block if we fail.

        * heap/CopiedSpace.cpp:
        (JSC::CopiedSpace::tryReallocate): Undid the reset in the CopiedAllocator if we fail 
        to reallocate from the current block.

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

        [Mac] No need for platform-specific ENABLE_BLOB values
        https://bugs.webkit.org/show_bug.cgi?id=82102

        Reviewed by David Kilzer.

        * Configurations/FeatureDefines.xcconfig:

2012-03-23  Michael Saboff  <msaboff@apple.com>

        DFG::compileValueToInt32 Sometime Generates GPR to FPR reg back to GPR
        https://bugs.webkit.org/show_bug.cgi?id=81805

        Reviewed by Filip Pizlo.

        Added SpeculativeJIT::checkGeneratedType() to determine the current format
        of an operand.  Used that information in SpeculativeJIT::compileValueToInt32
        to generate code that will use integer and JSValue types in integer
        format directly without a conversion to double.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::checkGeneratedType):
        (DFG):
        (JSC::DFG::SpeculativeJIT::compileValueToInt32):
        * dfg/DFGSpeculativeJIT.h:
        (DFG):
        (SpeculativeJIT):

2012-03-23  Steve Falkenburg  <sfalken@apple.com>

        Update Apple Windows build files for WTF move
        https://bugs.webkit.org/show_bug.cgi?id=82069

        Reviewed by Jessie Berlin.

        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Removed WTF and WTFGenerated.

2012-03-23  Dean Jackson  <dino@apple.com>

        Disable CSS_SHADERS in Apple builds
        https://bugs.webkit.org/show_bug.cgi?id=81996

        Reviewed by Simon Fraser.

        Remove ENABLE_CSS_SHADERS from FeatureDefines. It's now in Platform.h.

        * Configurations/FeatureDefines.xcconfig:

2012-03-23  Gavin Barraclough  <barraclough@apple.com>

        RexExp constructor last match properties should not rely on previous ovector
        https://bugs.webkit.org/show_bug.cgi?id=82077

        Reviewed by Oliver Hunt.

        This change simplifies matching, and will enable subpattern results to be fully lazily generated in the future.

        This patch changes the scheme used to lazily generate the last match properties of the RegExp object.
        Instead of relying on the results in the ovector, we can instead lazily generate the subpatters using
        a RegExpMatchesArray. To do so we just need to store the input, the regexp matched, and the match
        location (the MatchResult). When the match is accessed or the input is set, we reify results. We use
        a special value of setting the saved result to MatchResult::failed() to indicated that we're in a
        reified state. This means that next time a match is performed, the store of the result will
        automatically blow away the reified value.

        * JavaScriptCore.xcodeproj/project.pbxproj:
            - Added new files.
        * runtime/RegExp.cpp:
        (JSC::RegExpFunctionalTestCollector::outputOneTest):
            - changed 'subPattern' -> 'subpattern' (there was a mix in JSC, 'subpattern' was more common).
        * runtime/RegExpCachedResult.cpp: Added.
        (JSC::RegExpCachedResult::visitChildren):
        (JSC::RegExpCachedResult::lastResult):
        (JSC::RegExpCachedResult::setInput):
            - New methods, mark GC objects, lazily create the matches array, and record a user provided input (via assignment to RegExp.inupt).
        * runtime/RegExpCachedResult.h: Added.
        (RegExpCachedResult):
            - Added new class.
        (JSC::RegExpCachedResult::RegExpCachedResult):
        (JSC::RegExpCachedResult::record):
        (JSC::RegExpCachedResult::input):
            - Initialize the object, record the result of a RegExp match, access the stored input property.
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
            - Initialize m_result/m_multiline properties.
        (JSC::RegExpConstructor::visitChildren):
            - Make sure the cached results (or lazy source for them) are marked.
        (JSC::RegExpConstructor::getBackref):
        (JSC::RegExpConstructor::getLastParen):
        (JSC::RegExpConstructor::getLeftContext):
        (JSC::RegExpConstructor::getRightContext):
            - Moved from RegExpConstructor, moved to RegExpCachedResult, and using new caching scheme.
        (JSC::regExpConstructorInput):
        (JSC::setRegExpConstructorInput):
            - Changed to use RegExpCachedResult.
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::create):
        (RegExpConstructor):
        (JSC::RegExpConstructor::setMultiline):
        (JSC::RegExpConstructor::multiline):
            - Move multiline property onto the constructor object; it is not affected by the last match.
        (JSC::RegExpConstructor::setInput):
        (JSC::RegExpConstructor::input):
            - These defer to RegExpCachedResult.
        (JSC::RegExpConstructor::performMatch):
        * runtime/RegExpMatchesArray.cpp: Added.
        (JSC::RegExpMatchesArray::visitChildren):
            - Eeeep! added missing visitChildren!
        (JSC::RegExpMatchesArray::finishCreation):
        (JSC::RegExpMatchesArray::reifyAllProperties):
        (JSC::RegExpMatchesArray::reifyMatchProperty):
            - Moved from RegExpConstructor.cpp.
        (JSC::RegExpMatchesArray::leftContext):
        (JSC::RegExpMatchesArray::rightContext):
            - Since the match start/
        * runtime/RegExpMatchesArray.h:
        (RegExpMatchesArray):
            - Declare new methods & structure flags.
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::match):
            - performMatch now requires the JSString input, to cache.
        * runtime/StringPrototype.cpp:
        (JSC::removeUsingRegExpSearch):
        (JSC::replaceUsingRegExpSearch):
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):
            - performMatch now requires the JSString input, to cache.

2012-03-23  Tony Chang  <tony@chromium.org>

        [chromium] rename newwtf target back to wtf
        https://bugs.webkit.org/show_bug.cgi?id=82064

        Reviewed by Adam Barth.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2012-03-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        Simplify memory usage tracking in CopiedSpace
        https://bugs.webkit.org/show_bug.cgi?id=80705

        Reviewed by Filip Pizlo.

        * heap/CopiedAllocator.h:
        (CopiedAllocator): Rename currentUtilization to currentSize.
        (JSC::CopiedAllocator::currentCapacity):
        * heap/CopiedBlock.h:
        (CopiedBlock):
        (JSC::CopiedBlock::payload): Move the implementation of payload() out of the class
        declaration.
        (JSC):
        (JSC::CopiedBlock::size): Add new function to calculate the block's size.
        (JSC::CopiedBlock::capacity): Ditto for capacity.
        * heap/CopiedSpace.cpp:
        (JSC::CopiedSpace::CopiedSpace): Remove old bogus memory stats fields and add a new
        field for the water mark.
        (JSC::CopiedSpace::init):
        (JSC::CopiedSpace::tryAllocateSlowCase): When we fail to allocate from the current 
        block, we need to update our current water mark with the size of the block.
        (JSC::CopiedSpace::tryAllocateOversize): When we allocate a new oversize block, we 
        need to update our current water mark with the size of the used portion of the block.
        (JSC::CopiedSpace::tryReallocate): We don't need to update the water mark when 
        reallocating because it will either get accounted for when we fill up the block later 
        in the case of being able to reallocate in the current block or it will get picked up 
        immediately because we'll have to get a new block.
        (JSC::CopiedSpace::tryReallocateOversize): We do, however, need to update in when 
        realloc-ing an oversize block because we deallocate the old block and allocate a brand 
        new one.
        (JSC::CopiedSpace::doneFillingBlock): Update the water mark as blocks are returned to 
        the CopiedSpace by the SlotVisitors.
        (JSC::CopiedSpace::doneCopying): Add in any pinned blocks to the water mark.
        (JSC::CopiedSpace::getFreshBlock): We use the Heap's new function to tell us whether or 
        not we should collect now instead of doing the calculation ourself.
        (JSC::CopiedSpace::destroy):
        (JSC):
        (JSC::CopiedSpace::size): Manually calculate the size of the CopiedSpace, similar to how 
        MarkedSpace does.
        (JSC::CopiedSpace::capacity): Ditto for capacity.
        * heap/CopiedSpace.h:
        (JSC::CopiedSpace::waterMark):
        (CopiedSpace):
        * heap/CopiedSpaceInlineMethods.h:
        (JSC::CopiedSpace::startedCopying): Reset water mark to 0 when we start copying during a 
        collection.
        (JSC::CopiedSpace::allocateNewBlock):
        (JSC::CopiedSpace::fitsInBlock):
        (JSC::CopiedSpace::allocateFromBlock):
        * heap/Heap.cpp:
        (JSC::Heap::size): Incorporate size of CopiedSpace into the total size of the Heap.
        (JSC::Heap::capacity): Ditto for capacity.
        (JSC::Heap::collect):
        * heap/Heap.h:
        (Heap):
        (JSC::Heap::shouldCollect): New function for other sub-parts of the Heap to use to 
        determine whether they should initiate a collection or continue to allocate new blocks.
        (JSC):
        (JSC::Heap::waterMark): Now is the sum of the water marks of the two sub-parts of the
        Heap (MarkedSpace and CopiedSpace).
        * heap/MarkedAllocator.cpp:
        (JSC::MarkedAllocator::allocateSlowCase): Changed to use the Heap's new shouldCollect() function.

2012-03-23  Ryosuke Niwa  <rniwa@webkit.org>

        BitVector::resizeOutOfLine doesn't memset when converting an inline buffer
        https://bugs.webkit.org/show_bug.cgi?id=82012

        Reviewed by Filip Pizlo.

        Initialize out-of-line buffers while extending an inline buffer. Also export symbols to be used in WebCore.

        * wtf/BitVector.cpp:
        (WTF::BitVector::resizeOutOfLine):
        * wtf/BitVector.h:
        (BitVector):
        (OutOfLineBits):

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

        ExecutableAllocator::memoryPressureMultiplier() might can return NaN
        https://bugs.webkit.org/show_bug.cgi?id=82002

        Reviewed by Filip Pizlo.

        Guard against divide by zero and then make sure the return
        value is >= 1.0.

        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::memoryPressureMultiplier):
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::ExecutableAllocator::memoryPressureMultiplier):

2012-03-22  Jessie Berlin  <jberlin@apple.com>

        Windows build fix after r111778.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        Don't include and try to build files owned by WTF.
        Also, let VS have its way with the vcproj in terms of file ordering.

2012-03-22  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        [CMake] Unreviewed build fix after r111778.

        * CMakeLists.txt: Move ${WTF_DIR} after ${JAVASCRIPTCORE_DIR} in
        the include paths so that the right config.h is used.

2012-03-22  Tony Chang  <tony@chromium.org>

        Unreviewed, fix chromium build after wtf move.

        Remove old wtf_config and wtf targets.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2012-03-22  Martin Robinson  <mrobinson@igalia.com>

        Fixed the GTK+ WTF/JavaScriptCore build after r111778.

        * GNUmakefile.list.am: Removed an extra trailing backslash.

2012-03-22  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        * Configurations/JavaScriptCore.xcconfig: Tell the linker to pull in all members from static libraries
        rather than only those that contain symbols that JavaScriptCore itself uses.
        * JavaScriptCore.xcodeproj/project.pbxproj: Remove some bogus settings that crept in to the Xcode project.

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

        DFG NodeFlags has some duplicate code and naming issues
        https://bugs.webkit.org/show_bug.cgi?id=81975

        Reviewed by Gavin Barraclough.
        
        Removed most references to "ArithNodeFlags" since those are now just part
        of the node flags. Fixed some renaming goofs (EdgedAsNum is once again
        NodeUsedAsNum). Got rid of setArithNodeFlags() and mergeArithNodeFlags()
        because the former was never called and the latter did the same things as
        mergeFlags().

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::makeSafe):
        (JSC::DFG::ByteCodeParser::makeDivSafe):
        (JSC::DFG::ByteCodeParser::handleIntrinsic):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::arithNodeFlags):
        (Node):
        * dfg/DFGNodeFlags.cpp:
        (JSC::DFG::nodeFlagsAsString):
        * dfg/DFGNodeFlags.h:
        (DFG):
        (JSC::DFG::nodeUsedAsNumber):
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):
        (JSC::DFG::PredictionPropagationPhase::mergeDefaultArithFlags):

2012-03-22  Eric Seidel  <eric@webkit.org>

        Actually move WTF files to their new home
        https://bugs.webkit.org/show_bug.cgi?id=81844

        Unreviewed.  The details of the port-specific changes
        have been seen by contributors from those ports, but
        the whole 5MB change isn't very reviewable as-is.

        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * JSCTypedArrayStubs.h:
        * JavaScriptCore.gypi:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jsc.cpp:

2012-03-22  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Adding Source/WTF to the build.

        * wscript:

2012-03-22  Gavin Barraclough  <barraclough@apple.com>

        Add JSValue::isFunction
        https://bugs.webkit.org/show_bug.cgi?id=81935

        Reviewed by Geoff Garen.

        This would be useful in the WebCore bindings code.
        Also, remove asFunction, replace with jsCast<JSFunction*>.

        * API/JSContextRef.cpp:
        * debugger/Debugger.cpp:
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::functionName):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::valueOfFunctionConstant):
        * dfg/DFGOperations.cpp:
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::isInlineCallFrameSlow):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        (JSC::jitCompileFor):
        (JSC::lazyLinkFor):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::traceFunctionPrologue):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::setUpCall):
        * runtime/Arguments.h:
        (JSC::Arguments::finishCreation):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncFilter):
        (JSC::arrayProtoFuncMap):
        (JSC::arrayProtoFuncEvery):
        (JSC::arrayProtoFuncForEach):
        (JSC::arrayProtoFuncSome):
        (JSC::arrayProtoFuncReduce):
        (JSC::arrayProtoFuncReduceRight):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::arityCheckFor):
        * runtime/Executable.h:
        (JSC::FunctionExecutable::compileFor):
        (JSC::FunctionExecutable::compileOptimizedFor):
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncToString):
        * runtime/JSArray.cpp:
        (JSC::JSArray::sort):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::argumentsGetter):
        (JSC::JSFunction::callerGetter):
        (JSC::JSFunction::lengthGetter):
        * runtime/JSFunction.h:
        (JSC):
        (JSC::asJSFunction):
        (JSC::JSValue::isFunction):
        * runtime/JSGlobalData.cpp:
        (WTF::Recompiler::operator()):
        (JSC::JSGlobalData::releaseExecutableMemory):
        * runtime/JSValue.h:
        * runtime/StringPrototype.cpp:
        (JSC::replaceUsingRegExpSearch):

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

        DFG speculation on booleans should be rationalized
        https://bugs.webkit.org/show_bug.cgi?id=81840

        Reviewed by Gavin Barraclough.
        
        This removes isKnownBoolean() and replaces it with AbstractState-based
        optimization, and cleans up the control flow in code gen methods for
        Branch and LogicalNot. Also fixes a goof in Node::shouldSpeculateNumber,
        and removes isKnownNotBoolean() since that method appeared to be a
        helper used solely by 32_64's speculateBooleanOperation().
        
        This is performance-neutral.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateNumber):
        * dfg/DFGSpeculativeJIT.cpp:
        (DFG):
        * dfg/DFGSpeculativeJIT.h:
        (SpeculativeJIT):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):

2012-03-21  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        * wtf/MetaAllocator.h:
        (MetaAllocator): Export the destructor.

2012-03-21  Eric Seidel  <eric@webkit.org>

        Fix remaining WTF includes in JavaScriptCore in preparation for moving WTF headers out of JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=81834

        Reviewed by Adam Barth.

        * jsc.cpp:
        * os-win32/WinMain.cpp:
        * runtime/JSDateMath.cpp:
        * runtime/TimeoutChecker.cpp:
        * testRegExp.cpp:
        * tools/CodeProfiling.cpp:

2012-03-21  Eric Seidel  <eric@webkit.org>

        WTF::MetaAllocator has a weak vtable (discovered when building wtf as a static library)
        https://bugs.webkit.org/show_bug.cgi?id=81838

        Reviewed by Geoffrey Garen.

        My understanding is that weak vtables happen when the compiler/linker cannot
        determine which compilation unit should constain the vtable.  In this case
        because there were only pure virtual functions as well as an "inline"
        virtual destructor (thus the virtual destructor was defined in many compilation
        units).  Since you can't actually "inline" a virtual function (it still has to
        bounce through the vtable), the "inline" on this virutal destructor doesn't
        actually help performance, and is only serving to confuse the compiler here.
        I've moved the destructor implementation to the .cpp file, thus making
        it clear to the compiler where the vtable should be stored, and solving the error.

        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::~MetaAllocator):
        (WTF):
        * wtf/MetaAllocator.h:

2012-03-20  Gavin Barraclough  <barraclough@apple.com>

        RegExpMatchesArray should not copy the ovector
        https://bugs.webkit.org/show_bug.cgi?id=81742

        Reviewed by Michael Saboff.

        Currently, all RegExpMatchesArray object contain Vector<int, 32>, used to hold any sub-pattern results.
        This makes allocation/construction/destruction of these objects more expensive. Instead, just store the
        main match, and recreate the sub-pattern ranges only if necessary (these are often only used for grouping,
        and the results never accessed).
        If the main match (index 0) of the RegExpMatchesArray is accessed, reify that value alone.

        * dfg/DFGOperations.cpp:
            - RegExpObject match renamed back to test (test returns a bool).
        * runtime/RegExpConstructor.cpp:
        (JSC):
            - Removed RegExpResult, RegExpMatchesArray constructor, destroy method.
        (JSC::RegExpMatchesArray::finishCreation):
            - Removed RegExpConstructorPrivate parameter.
        (JSC::RegExpMatchesArray::reifyAllProperties):
            - (Was fillArrayInstance) Reify all properties of the RegExpMatchesArray.
            If there are sub-pattern properties, the RegExp is re-run to generate their values.
        (JSC::RegExpMatchesArray::reifyMatchProperty):
            - Reify just the match (index 0) property of the RegExpMatchesArray.
        * runtime/RegExpConstructor.h:
        (RegExpConstructor):
        (JSC::RegExpConstructor::performMatch):
            - performMatch now returns a MatchResult, rather than using out-parameters.
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::RegExpMatchesArray):
            - Moved from .cpp, stores the input/regExp/result to use when lazily reifying properties.
        (RegExpMatchesArray):
        (JSC::RegExpMatchesArray::create):
            - Now passed the input string matched against, the RegExp, and the MatchResult.
        (JSC::RegExpMatchesArray::reifyAllPropertiesIfNecessary):
        (JSC::RegExpMatchesArray::reifyMatchPropertyIfNecessary):
            - Helpers to conditionally reify properties.
        (JSC::RegExpMatchesArray::getOwnPropertySlot):
        (JSC::RegExpMatchesArray::getOwnPropertySlotByIndex):
        (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
        (JSC::RegExpMatchesArray::put):
        (JSC::RegExpMatchesArray::putByIndex):
        (JSC::RegExpMatchesArray::deleteProperty):
        (JSC::RegExpMatchesArray::deletePropertyByIndex):
        (JSC::RegExpMatchesArray::getOwnPropertyNames):
        (JSC::RegExpMatchesArray::defineOwnProperty):
            - Changed to use reifyAllPropertiesIfNecessary/reifyMatchPropertyIfNecessary
            (getOwnPropertySlotByIndex calls reifyMatchPropertyIfNecessary if index is 0).
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::exec):
        (JSC::RegExpObject::match):
            - match now returns a MatchResult.
        * runtime/RegExpObject.h:
        (JSC::MatchResult::MatchResult):
            - Added the result of a match is a start & end tuple.
        (JSC::MatchResult::failed):
            - A failure is indicated by (notFound, 0).
        (JSC::MatchResult::operator bool):
            - Evaluates to false if the match failed.
        (JSC::MatchResult::empty):
            - Evaluates to true if the match succeeded with length 0.
        (JSC::RegExpObject::test):
            - Now returns a bool.
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncTest):
            - RegExpObject match renamed back to test (test returns a bool).
        * runtime/StringPrototype.cpp:
        (JSC::removeUsingRegExpSearch):
        (JSC::replaceUsingRegExpSearch):
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):
            - performMatch now returns a MatchResult, rather than using out-parameters.

2012-03-21  Hojong Han  <hojong.han@samsung.com>

        Fix out of memory by allowing overcommit
        https://bugs.webkit.org/show_bug.cgi?id=81743

        Reviewed by Geoffrey Garen.

        Garbage collection is not triggered and new blocks are added
        because overcommit is allowed by MAP_NORESERVE flag when high water mark is big enough.

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

2012-03-21  Jessie Berlin  <jberlin@apple.com>

        More Windows build fixing.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        Fix the order of the include directories to look in include/private first before looking
        in include/private/JavaScriptCore.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops:
        Look in the Production output directory (where the wtf headers will be). This is the same
        thing that is done for jsc and testRegExp in ReleasePGO.

2012-03-21  Jessie Berlin  <jberlin@apple.com>

        WTF headers should be in $(ConfigurationBuildDir)\include\private\wtf, not
        $(ConfigurationBuildDir)\include\private\JavaScriptCore\wtf.
        https://bugs.webkit.org/show_bug.cgi?id=81739

        Reviewed by Dan Bernstein.

        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
        Look for AtomicString.cpp, StringBuilder.cpp, StringImpl.cpp, and WTFString.cpp in the wtf
        subdirectory of the build output, not the JavaScriptCore/wtf subdirectory.
        * JavaScriptCore.vcproj/testRegExp/testRegExp.vcproj:
        Ditto.

        * JavaScriptCore.vcproj/testRegExp/testRegExpReleasePGO.vsprops:
        Get the headers for those 4 files from the wtf subdirectory of the build output, not the
        JavaScriptCore/wtf subdirectory.
        * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops:
        Ditto.

2012-03-20  Eric Seidel  <eric@webkit.org>

        Move wtf/Platform.h from JavaScriptCore to Source/WTF/wtf
        https://bugs.webkit.org/show_bug.cgi?id=80911

        Reviewed by Adam Barth.

        Update the various build systems to depend on Source/WTF headers
        as well as remove references to Platform.h (since it's now moved).

        * CMakeLists.txt:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:

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

        op_mod fails on many interesting corner cases
        https://bugs.webkit.org/show_bug.cgi?id=81648

        Reviewed by Oliver Hunt.
        
        Removed most strength reduction for op_mod, and fixed the integer handling
        to do the right thing for corner cases. Oddly, this revealed bugs in OSR,
        which this patch also fixes.
        
        This patch is performance neutral on all of the major benchmarks we track.

        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (DFG):
        (JSC::DFG::SpeculativeJIT::compileSoftModulo):
        (JSC::DFG::SpeculativeJIT::compileArithMod):
        * jit/JIT.h:
        (JIT):
        * jit/JITArithmetic.cpp:
        (JSC):
        (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/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC):
        * jit/JITStubs.h:
        (TrampolineStructure):
        (JSC::JITThunks::ctiNativeConstruct):
        * llint/LowLevelInterpreter64.asm:
        * wtf/Platform.h:
        * wtf/SimpleStats.h:
        (WTF::SimpleStats::variance):

2012-03-20  Steve Falkenburg  <sfalken@apple.com>

        Windows (make based) build fix.
        <rdar://problem/11069015>

        * JavaScriptCore.vcproj/JavaScriptCore.make: devenv /rebuild doesn't work with JavaScriptCore.vcproj. Use /clean and /build instead.

2012-03-20  Steve Falkenburg  <sfalken@apple.com>

        Move WTF-related Windows project files out of JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=80680

        This change only moves the vcproj and related files from JavaScriptCore/JavaScriptCore.vcproj/WTF.
        It does not move any source code. This is in preparation for the WTF source move out of
        JavaScriptCore.

        Reviewed by Jessie Berlin.

        * JavaScriptCore.vcproj/JavaScriptCore.sln:
        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
        * JavaScriptCore.vcproj/WTF: Removed.
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Removed.
        * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: Removed.
        * JavaScriptCore.vcproj/WTF/WTFDebug.vsprops: Removed.
        * JavaScriptCore.vcproj/WTF/WTFDebugAll.vsprops: Removed.
        * JavaScriptCore.vcproj/WTF/WTFDebugCairoCFLite.vsprops: Removed.
        * JavaScriptCore.vcproj/WTF/WTFGenerated.make: Removed.
        * JavaScriptCore.vcproj/WTF/WTFGenerated.vcproj: Removed.
        * JavaScriptCore.vcproj/WTF/WTFGeneratedCommon.vsprops: Removed.
        * JavaScriptCore.vcproj/WTF/WTFGeneratedDebug.vsprops: Removed.
        * JavaScriptCore.vcproj/WTF/WTFGeneratedDebugAll.vsprops: Removed.
        * JavaScriptCore.vcproj/WTF/WTFGeneratedDebugCairoCFLite.vsprops: Removed.
        * JavaScriptCore.vcproj/WTF/WTFGeneratedProduction.vsprops: Removed.
        * JavaScriptCore.vcproj/WTF/WTFGeneratedRelease.vsprops: Removed.
        * JavaScriptCore.vcproj/WTF/WTFGeneratedReleaseCairoCFLite.vsprops: Removed.
        * JavaScriptCore.vcproj/WTF/WTFPostBuild.cmd: Removed.
        * JavaScriptCore.vcproj/WTF/WTFPreBuild.cmd: Removed.
        * JavaScriptCore.vcproj/WTF/WTFProduction.vsprops: Removed.
        * JavaScriptCore.vcproj/WTF/WTFRelease.vsprops: Removed.
        * JavaScriptCore.vcproj/WTF/WTFReleaseCairoCFLite.vsprops: Removed.
        * JavaScriptCore.vcproj/WTF/build-generated-files.sh: Removed.
        * JavaScriptCore.vcproj/WTF/copy-files.cmd: Removed.
        * JavaScriptCore.vcproj/WTF/work-around-vs-dependency-tracking-bugs.py: Removed.

2012-03-20  Benjamin Poulain  <bpoulain@apple.com>

        Cache the type string of JavaScript object
        https://bugs.webkit.org/show_bug.cgi?id=81446

        Reviewed by Geoffrey Garen.

        Instead of creating the JSString every time, we create
        lazily the strings in JSGlobalData.

        This avoid the construction of the StringImpl and of the JSString,
        which gives some performance improvements.

        * runtime/CommonIdentifiers.h:
        * runtime/JSValue.cpp:
        (JSC::JSValue::toStringSlowCase):
        * runtime/Operations.cpp:
        (JSC::jsTypeStringForValue):
        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::SmallStrings):
        (JSC::SmallStrings::finalizeSmallStrings):
        (JSC::SmallStrings::initialize):
        (JSC):
        * runtime/SmallStrings.h:
        (SmallStrings):

2012-03-20  Oliver Hunt  <oliver@apple.com>

        Allow LLINT to work even when executable allocation fails.
        https://bugs.webkit.org/show_bug.cgi?id=81693

        Reviewed by Gavin Barraclough.

        Don't crash if executable allocation fails if we can fall back on LLINT

        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
        * wtf/OSAllocatorPosix.cpp:
        (WTF::OSAllocator::reserveAndCommit):

2012-03-20  Csaba Osztrogonác  <ossy@webkit.org>

        Division optimizations fail to infer cases of truncated division and mishandle -2147483648/-1
        https://bugs.webkit.org/show_bug.cgi?id=81428

        32 bit buildfix after r111355.

        2147483648 (2^31) isn't valid int literal in ISO C90, because 2147483647 (2^31-1) is the biggest int.
        The smallest int is -2147483648 (-2^31) == -2147483647 - 1  == -INT32_MAX-1 == INT32_MIN (stdint.h).

        Reviewed by Zoltan Herczeg.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileIntegerArithDivForX86):

2012-03-19  Jochen Eisinger  <jochen@chromium.org>

        Split WTFReportBacktrace into WTFReportBacktrace and WTFPrintBacktrace
        https://bugs.webkit.org/show_bug.cgi?id=80983

        Reviewed by Darin Adler.

        This allows printing a backtrace acquired by an earlier WTFGetBacktrace
        call which is useful for local debugging.

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

2012-03-19  Benjamin Poulain  <benjamin@webkit.org>

        Do not copy the script source in the SourceProvider, just reference the existing string
        https://bugs.webkit.org/show_bug.cgi?id=81466

        Reviewed by Geoffrey Garen.

        * parser/SourceCode.h: Remove the unused, and incorrect, function data().
        * parser/SourceProvider.h: Add OVERRIDE for clarity.

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

        Division optimizations fail to infer cases of truncated division and
        mishandle -2147483648/-1
        https://bugs.webkit.org/show_bug.cgi?id=81428
        <rdar://problem/11067382>

        Reviewed by Oliver Hunt.

        If you're a division over integers and you're only used as an integer, then you're
        an integer division and remainder checks become unnecessary. If you're dividing
        -2147483648 by -1, don't crash.

        * assembler/MacroAssemblerX86Common.h:
        (MacroAssemblerX86Common):
        (JSC::MacroAssemblerX86Common::add32):
        * dfg/DFGSpeculativeJIT.cpp:
        (DFG):
        (JSC::DFG::SpeculativeJIT::compileIntegerArithDivForX86):
        * dfg/DFGSpeculativeJIT.h:
        (SpeculativeJIT):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * llint/LowLevelInterpreter64.asm:

2012-03-19  Benjamin Poulain  <bpoulain@apple.com>

        Simplify SmallStrings
        https://bugs.webkit.org/show_bug.cgi?id=81445

        Reviewed by Gavin Barraclough.

        SmallStrings had two methods that should not be public: count() and clear().

        The method clear() is effectively replaced by finalizeSmallStrings(). The body
        of the method was moved to the constructor since the code is obvious.

        The method count() is unused.

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

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

        DFG can no longer compile V8-v4/regexp in debug mode
        https://bugs.webkit.org/show_bug.cgi?id=81592

        Reviewed by Gavin Barraclough.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        Prediction propagation for UInt32ToNumber incorrectly assumes that outs outcome does not
        change throughout the fixpoint
        https://bugs.webkit.org/show_bug.cgi?id=81583

        Reviewed by Michael Saboff.

        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):

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

        GC should not attempt to clear LLInt instruction inline caches for code blocks that are in
        the process of being generated
        https://bugs.webkit.org/show_bug.cgi?id=81565

        Reviewed by Oliver Hunt.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finalizeUnconditionally):

2012-03-19  Eric Seidel  <eric@webkit.org>

        Fix WTF header include discipline in Chromium WebKit
        https://bugs.webkit.org/show_bug.cgi?id=81281

        Reviewed by James Robinson.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:
        * wtf/unicode/icu/CollatorICU.cpp:

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

        DFG NodeUse should be called Edge and NodeReferenceBlob should be called AdjacencyList
        https://bugs.webkit.org/show_bug.cgi?id=81556

        Rubber stamped by Gavin Barraclough.

        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGAbstractState.h:
        (JSC::DFG::AbstractState::forNode):
        * dfg/DFGAdjacencyList.h: Copied from Source/JavaScriptCore/dfg/DFGNodeReferenceBlob.h.
        (JSC::DFG::AdjacencyList::AdjacencyList):
        (JSC::DFG::AdjacencyList::child):
        (JSC::DFG::AdjacencyList::setChild):
        (JSC::DFG::AdjacencyList::child1):
        (JSC::DFG::AdjacencyList::child2):
        (JSC::DFG::AdjacencyList::child3):
        (JSC::DFG::AdjacencyList::setChild1):
        (JSC::DFG::AdjacencyList::setChild2):
        (JSC::DFG::AdjacencyList::setChild3):
        (JSC::DFG::AdjacencyList::child1Unchecked):
        (JSC::DFG::AdjacencyList::initialize):
        (AdjacencyList):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addVarArgChild):
        (JSC::DFG::ByteCodeParser::processPhiStack):
        * dfg/DFGCSEPhase.cpp:
        (JSC::DFG::CSEPhase::canonicalize):
        (JSC::DFG::CSEPhase::performSubstitution):
        * dfg/DFGEdge.h: Copied from Source/JavaScriptCore/dfg/DFGNodeUse.h.
        (DFG):
        (JSC::DFG::Edge::Edge):
        (JSC::DFG::Edge::operator==):
        (JSC::DFG::Edge::operator!=):
        (Edge):
        (JSC::DFG::operator==):
        (JSC::DFG::operator!=):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::operator[]):
        (JSC::DFG::Graph::at):
        (JSC::DFG::Graph::ref):
        (JSC::DFG::Graph::deref):
        (JSC::DFG::Graph::clearAndDerefChild1):
        (JSC::DFG::Graph::clearAndDerefChild2):
        (JSC::DFG::Graph::clearAndDerefChild3):
        (Graph):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::getPrediction):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::Node):
        (JSC::DFG::Node::child1):
        (JSC::DFG::Node::child1Unchecked):
        (JSC::DFG::Node::child2):
        (JSC::DFG::Node::child3):
        (Node):
        * dfg/DFGNodeFlags.cpp:
        (JSC::DFG::arithNodeFlagsAsString):
        * dfg/DFGNodeFlags.h:
        (DFG):
        (JSC::DFG::nodeUsedAsNumber):
        * dfg/DFGNodeReferenceBlob.h: Removed.
        * dfg/DFGNodeUse.h: Removed.
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):
        (JSC::DFG::PredictionPropagationPhase::mergeDefaultArithFlags):
        (JSC::DFG::PredictionPropagationPhase::vote):
        (JSC::DFG::PredictionPropagationPhase::fixupNode):
        * dfg/DFGScoreBoard.h:
        (JSC::DFG::ScoreBoard::use):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::useChildren):
        (JSC::DFG::SpeculativeJIT::writeBarrier):
        (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
        (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::at):
        (JSC::DFG::SpeculativeJIT::canReuse):
        (JSC::DFG::SpeculativeJIT::use):
        (SpeculativeJIT):
        (JSC::DFG::SpeculativeJIT::speculationCheck):
        (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
        (JSC::DFG::IntegerOperand::IntegerOperand):
        (JSC::DFG::DoubleOperand::DoubleOperand):
        (JSC::DFG::JSValueOperand::JSValueOperand):
        (JSC::DFG::StorageOperand::StorageOperand):
        (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
        (JSC::DFG::SpeculateStrictInt32Operand::SpeculateStrictInt32Operand):
        (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
        (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
        (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedPutById):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
        (JSC::DFG::SpeculativeJIT::emitCall):
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedPutById):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
        (JSC::DFG::SpeculativeJIT::emitCall):
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):

2012-03-19  Gavin Barraclough  <barraclough@apple.com>

        Object.freeze broken on latest Nightly
        https://bugs.webkit.org/show_bug.cgi?id=80577

        Reviewed by Oliver Hunt.

        * runtime/Arguments.cpp:
        (JSC::Arguments::defineOwnProperty):
            - defineOwnProperty was checking for correct behaviour, provided that length/callee hadn't
            been overrridden. instead, just reify length/callee & rely on JSObject::defineOwnProperty.
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::defineOwnProperty):
            - for arguments/caller/length properties, defineOwnProperty was incorrectly asserting that
            the object must be extensible; this is incorrect since these properties should already exist
            on the object. In addition, it was asserting that the arguments/caller values must match the
            corresponding magic data properties, but for strict mode function this is incorrect. Instead,
            just reify the arguments/caller accessor & defer to JSObject::defineOwnProperty.

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

        LLInt get_by_pname slow path incorrectly assumes that the operands are not constants
        https://bugs.webkit.org/show_bug.cgi?id=81559

        Reviewed by Michael Saboff.

        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):

2012-03-19  Yong Li  <yoli@rim.com>

        [BlackBerry] Implement OSAllocator::commit/decommit in the correct way
        https://bugs.webkit.org/show_bug.cgi?id=77013

        We should use mmap(PROT_NONE, MAP_LAZY) instead of posix_madvise() to
        implement memory decommitting for QNX.

        Reviewed by Rob Buis.

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

2012-03-19  Gavin Barraclough  <barraclough@apple.com>

        Unreviewed - revent a couple of files accidentally committed.

        * runtime/Arguments.cpp:
        (JSC::Arguments::defineOwnProperty):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::defineOwnProperty):

2012-03-19  Jessie Berlin  <jberlin@apple.com>

        Another Windows build fix after r111129.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-03-19  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        Cross-platform processor core counter: fix build on FreeBSD.
        https://bugs.webkit.org/show_bug.cgi?id=81482

        Reviewed by Zoltan Herczeg.

        The documentation of sysctl(3) shows that <sys/types.h> should be
        included before <sys/sysctl.h> (sys/types.h tends to be the first
        included header in general).

        This should fix the build on FreeBSD and other systems where
        sysctl.h really depends on types defined in types.h.

        * wtf/NumberOfCores.cpp:

2012-03-19  Jessie Berlin  <jberlin@apple.com>

        Windows build fix after r111129.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-03-19  Gavin Barraclough  <barraclough@apple.com>

        JSCallbackFunction::toStringCallback/valueOfCallback do not handle 0 return value from convertToType
        https://bugs.webkit.org/show_bug.cgi?id=81468 <rdar://problem/11034745>

        Reviewed by Oliver Hunt.

        The API specifies that convertToType may opt not to handle a conversion:
            "@result The objects's converted value, or NULL if the object was not converted."
        In which case, it would propagate first up the JSClass hierarchy, calling its superclass's
        conversion functions, and failing that call the JSObject::defaultValue function.

        Unfortunately this behaviour was removed in bug#69677/bug#69858, and instead we now rely on
        the toStringCallback/valueOfCallback function introduced in bug#69156. Even after a fix in
        bug#73368, these will return the result from the first convertToType they find, regardless
        of whether this result is null, and if no convertToType method is found in the api class
        hierarchy (possible if toStringCallback/valueOfCallback was accessed off the prototype
        chain), they will also return a null pointer. This is unsafe.

        It would be easy to make the approach based around toStringCallback/valueOfCallback continue
        to walk the api class hierarchy, but making the fallback to defaultValue would be problematic
        (since defaultValue calls toStringCallback/valueOfCallback, this would infinitely recurse).
        Making the fallback work with toString/valueOf methods attached to api objects is probably
        not the right thing to do – instead, we should just implement the defaultValue trap for api
        objects.

        In addition, this bug highlights that fact that JSCallbackFunction::call will allow a hard
        null to be returned from C to JavaScript - this is not okay. Handle with an exception.

        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::call):
            - Should be null checking the return value.
        (JSC):
            - Remove toStringCallback/valueOfCallback.
        * API/JSCallbackFunction.h:
        (JSCallbackFunction):
            - Remove toStringCallback/valueOfCallback.
        * API/JSCallbackObject.h:
        (JSCallbackObject):
            - Add defaultValue mthods to JSCallbackObject.
        * API/JSCallbackObjectFunctions.h:
        (JSC::::defaultValue):
            - Add defaultValue mthods to JSCallbackObject.
        * API/JSClassRef.cpp:
        (OpaqueJSClass::prototype):
            - Remove toStringCallback/valueOfCallback.
        * API/tests/testapi.js:
            - Revert this test, now we no longer artificially introduce a toString method onto the api object.

2012-03-18  Raphael Kubo da Costa  <rakuco@FreeBSD.org>

        [EFL] Include ICU_INCLUDE_DIRS when building.
        https://bugs.webkit.org/show_bug.cgi?id=81483

        Reviewed by Daniel Bates.

        So far, only the ICU libraries were being included when building
        JavaScriptCore, however the include path is also needed, otherwise the
        build will fail when ICU is installed into a non-standard location.

        * PlatformEfl.cmake: Include ${ICU_INCLUDE_DIRS}.

2012-03-17  Gavin Barraclough  <barraclough@apple.com>

        Strength reduction, RegExp.exec -> RegExp.test
        https://bugs.webkit.org/show_bug.cgi?id=81459

        Reviewed by Sam Weinig.

        RegExp.prototype.exec & RegExp.prototype.test can both be used to test a regular
        expression for a match against a string - however exec is more expensive, since
        it allocates a matches array object. In cases where the result is consumed in a
        boolean context the allocation of the matches array can be trivially elided.

        For example:
            function f()
            {
                for (i =0; i < 10000000; ++i)
                    if(!/a/.exec("a"))
                        err = true;
            }

        This is a 2.5x speedup on this example microbenchmark loop.

        In a more advanced form of this optimization, we may be able to avoid allocating
        the array where access to the array can be observed.

        * create_hash_table:
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsic):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasHeapPrediction):
        * dfg/DFGNodeType.h:
        (DFG):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileRegExpExec):
        (DFG):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jsc.cpp:
        (GlobalObject::addConstructableFunction):
        * runtime/Intrinsic.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::create):
        (JSC):
        * runtime/JSFunction.h:
        (JSFunction):
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::exec):
        (JSC::RegExpObject::match):
        * runtime/RegExpObject.h:
        (RegExpObject):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncTest):
        (JSC::regExpProtoFuncExec):

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

        Improve diagnostic benefit of JSGlobalData::m_isInitializingObject
        https://bugs.webkit.org/show_bug.cgi?id=81244

        Rubber stamped by Filip Pizlo.

        Changed type and name of JSGlobalData::m_isInitializingObject to
        ClassInfo* and m_initializingObjectClass.
        Changed JSGlobalData::setInitializingObject to
        JSGlobalData::setInitializingObjectClass.  This pointer can be used within 
        the debugger to determine what type of object is being initialized.
        
        * runtime/JSCell.h:
        (JSC::JSCell::finishCreation):
        (JSC::allocateCell):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        (JSGlobalData):
        (JSC::JSGlobalData::isInitializingObject):
        (JSC::JSGlobalData::setInitializingObjectClass):
        * runtime/Structure.h:
        (JSC::JSCell::finishCreation):

2012-03-16  Mark Rowe  <mrowe@apple.com>

        Build fix. Do not preserve owner and group information when installing the WTF headers.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2012-03-15  David Dorwin  <ddorwin@chromium.org>

        Make the array pointer parameters in the Typed Array create() methods const.
        https://bugs.webkit.org/show_bug.cgi?id=81147

        Reviewed by Kenneth Russell.

        This allows const arrays to be passed to these methods.
        They use PassRefPtr<Subclass> create(), which already has a const parameter.

        * wtf/Int16Array.h:
        (Int16Array):
        (WTF::Int16Array::create):
        * wtf/Int32Array.h:
        (Int32Array):
        (WTF::Int32Array::create):
        * wtf/Int8Array.h:
        (Int8Array):
        (WTF::Int8Array::create):
        * wtf/Uint16Array.h:
        (Uint16Array):
        (WTF::Uint16Array::create):
        * wtf/Uint32Array.h:
        (Uint32Array):
        (WTF::Uint32Array::create):
        * wtf/Uint8Array.h:
        (Uint8Array):
        (WTF::Uint8Array::create):
        * wtf/Uint8ClampedArray.h:
        (Uint8ClampedArray):
        (WTF::Uint8ClampedArray::create):

2012-03-15  Myles Maxfield  <mmaxfield@google.com>

        CopiedSpace::tryAllocateOversize assumes system page size
        https://bugs.webkit.org/show_bug.cgi?id=80615

        Reviewed by Geoffrey Garen.

        * heap/CopiedSpace.cpp:
        (JSC::CopiedSpace::tryAllocateOversize):
        * heap/CopiedSpace.h:
        (CopiedSpace):
        * heap/CopiedSpaceInlineMethods.h:
        (JSC::CopiedSpace::oversizeBlockFor):
        * wtf/BumpPointerAllocator.h:
        (WTF::BumpPointerPool::create):
        * wtf/StdLibExtras.h:
        (WTF::roundUpToMultipleOf):

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

        Fixing Windows build breakage

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-03-15  Patrick Gansterer  <paroga@webkit.org>

        [EFL] Make zlib a general build requirement
        https://bugs.webkit.org/show_bug.cgi?id=80153

        Reviewed by Hajime Morita.

        After r109538 WebSocket module needs zlib to support deflate-frame extension.

        * wtf/Platform.h:

2012-03-15  Benjamin Poulain  <bpoulain@apple.com>

        NumericStrings should be inlined
        https://bugs.webkit.org/show_bug.cgi?id=81183

        Reviewed by Gavin Barraclough.

        NumericStrings is not always inlined. When it is not, the class is not faster
        than using UString::number() directly.

        * runtime/NumericStrings.h:
        (JSC::NumericStrings::add):
        (JSC::NumericStrings::lookupSmallString):

2012-03-15  Andras Becsi  <andras.becsi@nokia.com>

        Fix ARM build after r110792.

        Unreviewed build fix.

        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::cacheFlush):
        Remove superfluous curly brackets.

2012-03-15  Gavin Barraclough  <barraclough@apple.com>

        ARMv7: prefer vmov(gpr,gpr->double) over vmov(gpr->single)
        https://bugs.webkit.org/show_bug.cgi?id=81256

        Reviewed by Oliver Hunt.

        This is a 0.5% sunspider progression.

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::convertInt32ToDouble):
            - switch which form of vmov we use.

2012-03-15  YoungTaeck Song  <youngtaeck.song@samsung.com>

        [EFL] Add OwnPtr specialization for Ecore_Timer.
        https://bugs.webkit.org/show_bug.cgi?id=80119

        Reviewed by Hajime Morita.

        Add an overload for deleteOwnedPtr(Ecore_Timer*) on EFL port.

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

2012-03-15  Hojong Han  <hojong.han@samsung.com>

        Linux has madvise enough to support OSAllocator::commit/decommit
        https://bugs.webkit.org/show_bug.cgi?id=80505

        Reviewed by Geoffrey Garen.

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

2012-03-15  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGOOptimize.vsprops:
        * JavaScriptCore.vcproj/WTF/copy-files.cmd:
        * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops:

2012-03-15  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:

2012-03-15  Kevin Ollivier  <kevino@theolliviers.com>

        Move wx port to using export macros
        https://bugs.webkit.org/show_bug.cgi?id=77279

        Reviewed by Hajime Morita.

        * wscript:
        * wtf/Platform.h:

2012-03-14  Benjamin Poulain  <bpoulain@apple.com>

        Avoid StringImpl::getData16SlowCase() when sorting array
        https://bugs.webkit.org/show_bug.cgi?id=81070

        Reviewed by Geoffrey Garen.

        The function codePointCompare() is used intensively when sorting strings.
        This patch improves its performance by:
        -Avoiding character conversion.
        -Inlining the function.

        This makes Peacekeeper's arrayCombined test 30% faster.

        * wtf/text/StringImpl.cpp:
        * wtf/text/StringImpl.h:
        (WTF):
        (WTF::codePointCompare):
        (WTF::codePointCompare8):
        (WTF::codePointCompare16):
        (WTF::codePointCompare8To16):

2012-03-14  Hojong Han  <hojong.han@samsung.com>

        Fix memory allocation failed by fastmalloc
        https://bugs.webkit.org/show_bug.cgi?id=79614

        Reviewed by Geoffrey Garen.

        Memory allocation failed even if the heap grows successfully.
        It is wrong to get the span only from the large list after the heap grows,
        because new span could be added in the normal list.

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

2012-03-14  Hojong Han  <hojong.han@samsung.com>

        Run cacheFlush page by page to assure of flushing all the requested ranges
        https://bugs.webkit.org/show_bug.cgi?id=77712

        Reviewed by Geoffrey Garen.

        Current MetaAllocator concept, always coalesces adjacent free spaces,
        doesn't meet memory management of Linux kernel.
        In a certain case Linux kernel doesn't regard contiguous virtual memory areas as one but two.
        Therefore cacheFlush page by page guarantees a flush-requested range.

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

2012-03-14  Oliver Hunt  <oliver@apple.com>

        Make ARMv7 work again
        https://bugs.webkit.org/show_bug.cgi?id=81157

        Reviewed by Geoffrey Garen.

        We were trying to use the ARMv7 dataRegister as a scratch register in a scenario
        where we the ARMv7MacroAssembler would also try to use dataRegister for its own
        nefarious purposes.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::store32):
        * assembler/MacroAssemblerARMv7.h:
        (MacroAssemblerARMv7):

2012-03-14  Mark Hahnenberg  <mhahnenberg@apple.com>

        Heap::destroy leaks CopiedSpace
        https://bugs.webkit.org/show_bug.cgi?id=81055

        Reviewed by Geoffrey Garen.

        Added a destroy() function to CopiedSpace that moves all normal size 
        CopiedBlocks from the CopiedSpace to the Heap's list of free blocks 
        as well as deallocates all of the oversize blocks in the CopiedSpace. 
        This function is now called in Heap::destroy().

        * heap/CopiedSpace.cpp:
        (JSC::CopiedSpace::destroy):
        (JSC):
        * heap/CopiedSpace.h:
        (CopiedSpace):
        * heap/Heap.cpp:
        (JSC::Heap::destroy):

2012-03-14  Andrew Lo  <anlo@rim.com>

        [BlackBerry] Implement REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR using AnimationFrameRateController
        https://bugs.webkit.org/show_bug.cgi?id=81000

        Enable WTF_USE_REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR for BlackBerry.

        Reviewed by Antonio Gomes.

        * wtf/Platform.h:

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

        ValueToInt32 speculation will cause OSR exits even when it does not have to
        https://bugs.webkit.org/show_bug.cgi?id=81068
        <rdar://problem/11043926>

        Reviewed by Anders Carlsson.
        
        Two related changes:
        1) ValueToInt32 will now always just defer to the non-speculative path, instead
           of exiting, if it doesn't know what speculations to perform.
        2) ValueToInt32 will speculate boolean if it sees this to be profitable.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateBoolean):
        (Node):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueToInt32):

2012-03-13  Mark Hahnenberg  <mhahnenberg@apple.com>

        More Windows build fixing

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-03-13  Mark Hahnenberg  <mhahnenberg@apple.com>

        Windows build fix

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-03-13  Mark Hahnenberg  <mhahnenberg@apple.com>

        Type conversion of exponential part failed
        https://bugs.webkit.org/show_bug.cgi?id=80673

        Reviewed by Geoffrey Garen.

        * parser/Lexer.cpp:
        (JSC::::lex):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::parseInt):
        (JSC):
        (JSC::jsStrDecimalLiteral): Added another template argument that exposes whether or not
        we accept trailing junk to clients of jsStrDecimalLiteral. Also added additional template 
        parameter for strtod to allow trailing spaces.
        (JSC::toDouble):
        (JSC::parseFloat): Accept trailing junk, as per the ECMA 262 spec (15.1.2.3).
        * runtime/LiteralParser.cpp:
        (JSC::::Lexer::lexNumber):
        * tests/mozilla/expected.html: Update the expected page for run-javascriptcore-tests so that 
        we will run ecma/TypeConversion/9.3.1-3.js as a regression test now.
        * wtf/dtoa.cpp:
        (WTF):
        (WTF::strtod): We also needed to sometimes accept trailing spaces to pass a few other tests that were 
        broken by changing the default allowance of trailing junk in jsStrDecimalLiteral.
        * wtf/dtoa.h:
        * wtf/dtoa/double-conversion.cc: When the AdvanceToNonspace function was lifted out of the 
        Chromium codebase, the person porting it only thought to check for spaces when skipping whitespace.
        A few of our JSC tests check for other types of trailing whitespace, so I've added checks for those 
        here to cover those cases (horizontal tab, vertical tab, carriage return, form feed, and line feed).
        * wtf/text/WTFString.cpp:
        (WTF::toDoubleType): Disallow trailing spaces, as this breaks form input verification stuff.

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

        Unreviewed, build fix since is_pod<> includes some header that I didn't know about.
        Removing the assert for now.

        * dfg/DFGOperations.h:
        * llint/LLIntSlowPaths.h:

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

        Functions with C linkage should return POD types
        https://bugs.webkit.org/show_bug.cgi?id=81061

        Reviewed by Mark Rowe.

        * dfg/DFGOperations.h:
        * llint/LLIntSlowPaths.h:
        (LLInt):
        (SlowPathReturnType):
        (JSC::LLInt::encodeResult):

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

        Loads from UInt32Arrays should not result in a double up-convert if it isn't necessary
        https://bugs.webkit.org/show_bug.cgi?id=80979
        <rdar://problem/11036848>

        Reviewed by Oliver Hunt.
        
        Also improved DFG IR dumping to include type information in a somewhat more
        intuitive way.

        * bytecode/PredictedType.cpp:
        (JSC::predictionToAbbreviatedString):
        (JSC):
        * bytecode/PredictedType.h:
        (JSC):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::forwardSpeculationCheck):

2012-03-13  George Staikos  <staikos@webkit.org>

        The callback is only used if SA_RESTART is defined.  Compile it out
        otherwise to avoid a warning.
        https://bugs.webkit.org/show_bug.cgi?id=80926

        Reviewed by Alexey Proskuryakov.

        * heap/MachineStackMarker.cpp:
        (JSC):

2012-03-13  Hojong Han  <hojong.han@samsung.com>

        Dump the generated code for ARM_TRADITIONAL
        https://bugs.webkit.org/show_bug.cgi?id=80975

        Reviewed by Gavin Barraclough.

        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::dumpCode):

2012-03-13  Adam Barth  <abarth@webkit.org> && Benjamin Poulain  <bpoulain@apple.com>

        Always enable ENABLE(CLIENT_BASED_GEOLOCATION)
        https://bugs.webkit.org/show_bug.cgi?id=78853

        Reviewed by Adam Barth.

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

2012-03-13  Kwonjin Jeong  <gram@company100.net>

        Remove SlotVisitor::copy() method.
        https://bugs.webkit.org/show_bug.cgi?id=80973

        Reviewed by Geoffrey Garen.

        SlotVisitor::copy() method isn't called anywhere.

        * heap/MarkStack.cpp: Remove definition of SlotVisitor::copy() method.
        * heap/SlotVisitor.h: Remove declaration of SlotVisitor::copy() method.

2012-03-12  Hojong Han  <hojong.han@samsung.com>

        Fix test cases for RegExp multiline
        https://bugs.webkit.org/show_bug.cgi?id=80822

        Reviewed by Gavin Barraclough.

        * tests/mozilla/js1_2/regexp/RegExp_multiline.js:
        * tests/mozilla/js1_2/regexp/RegExp_multiline_as_array.js:
        * tests/mozilla/js1_2/regexp/beginLine.js:
        * tests/mozilla/js1_2/regexp/endLine.js:

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

        Arithmetic use inference should be procedure-global and should run in tandem
        with type propagation
        https://bugs.webkit.org/show_bug.cgi?id=80819
        <rdar://problem/11034006>

        Reviewed by Gavin Barraclough.
        
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * dfg/DFGArithNodeFlagsInferencePhase.cpp: Removed.
        * dfg/DFGArithNodeFlagsInferencePhase.h: Removed.
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::isNotNegZero):
        (PredictionPropagationPhase):
        (JSC::DFG::PredictionPropagationPhase::isNotZero):
        (JSC::DFG::PredictionPropagationPhase::propagate):
        (JSC::DFG::PredictionPropagationPhase::mergeDefaultArithFlags):
        * dfg/DFGVariableAccessData.h:
        (JSC::DFG::VariableAccessData::VariableAccessData):
        (JSC::DFG::VariableAccessData::flags):
        (VariableAccessData):
        (JSC::DFG::VariableAccessData::mergeFlags):

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

        Node::op and Node::flags should be private
        https://bugs.webkit.org/show_bug.cgi?id=80824
        <rdar://problem/11033435>

        Reviewed by Gavin Barraclough.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::initialize):
        (JSC::DFG::AbstractState::execute):
        (JSC::DFG::AbstractState::mergeStateAtTail):
        (JSC::DFG::AbstractState::mergeToSuccessors):
        * dfg/DFGArithNodeFlagsInferencePhase.cpp:
        (JSC::DFG::ArithNodeFlagsInferencePhase::propagate):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::injectLazyOperandPrediction):
        (JSC::DFG::ByteCodeParser::getLocal):
        (JSC::DFG::ByteCodeParser::getArgument):
        (JSC::DFG::ByteCodeParser::flushArgument):
        (JSC::DFG::ByteCodeParser::toInt32):
        (JSC::DFG::ByteCodeParser::isJSConstant):
        (JSC::DFG::ByteCodeParser::makeSafe):
        (JSC::DFG::ByteCodeParser::makeDivSafe):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::processPhiStack):
        (JSC::DFG::ByteCodeParser::linkBlock):
        * dfg/DFGCFAPhase.cpp:
        (JSC::DFG::CFAPhase::performBlockCFA):
        * dfg/DFGCSEPhase.cpp:
        (JSC::DFG::CSEPhase::canonicalize):
        (JSC::DFG::CSEPhase::endIndexForPureCSE):
        (JSC::DFG::CSEPhase::pureCSE):
        (JSC::DFG::CSEPhase::byValIsPure):
        (JSC::DFG::CSEPhase::clobbersWorld):
        (JSC::DFG::CSEPhase::impureCSE):
        (JSC::DFG::CSEPhase::globalVarLoadElimination):
        (JSC::DFG::CSEPhase::getByValLoadElimination):
        (JSC::DFG::CSEPhase::checkFunctionElimination):
        (JSC::DFG::CSEPhase::checkStructureLoadElimination):
        (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
        (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
        (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):
        (JSC::DFG::CSEPhase::getScopeChainLoadElimination):
        (JSC::DFG::CSEPhase::performNodeCSE):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        (DFG):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::addShouldSpeculateInteger):
        (JSC::DFG::Graph::negateShouldSpeculateInteger):
        (JSC::DFG::Graph::methodOfGettingAValueProfileFor):
        * dfg/DFGNode.cpp: Removed.
        * dfg/DFGNode.h:
        (DFG):
        (JSC::DFG::Node::Node):
        (Node):
        (JSC::DFG::Node::op):
        (JSC::DFG::Node::flags):
        (JSC::DFG::Node::setOp):
        (JSC::DFG::Node::setFlags):
        (JSC::DFG::Node::mergeFlags):
        (JSC::DFG::Node::filterFlags):
        (JSC::DFG::Node::clearFlags):
        (JSC::DFG::Node::setOpAndDefaultFlags):
        (JSC::DFG::Node::mustGenerate):
        (JSC::DFG::Node::isConstant):
        (JSC::DFG::Node::isWeakConstant):
        (JSC::DFG::Node::valueOfJSConstant):
        (JSC::DFG::Node::hasVariableAccessData):
        (JSC::DFG::Node::hasIdentifier):
        (JSC::DFG::Node::resolveGlobalDataIndex):
        (JSC::DFG::Node::hasArithNodeFlags):
        (JSC::DFG::Node::arithNodeFlags):
        (JSC::DFG::Node::setArithNodeFlag):
        (JSC::DFG::Node::mergeArithNodeFlags):
        (JSC::DFG::Node::hasConstantBuffer):
        (JSC::DFG::Node::hasRegexpIndex):
        (JSC::DFG::Node::hasVarNumber):
        (JSC::DFG::Node::hasScopeChainDepth):
        (JSC::DFG::Node::hasResult):
        (JSC::DFG::Node::hasInt32Result):
        (JSC::DFG::Node::hasNumberResult):
        (JSC::DFG::Node::hasJSResult):
        (JSC::DFG::Node::hasBooleanResult):
        (JSC::DFG::Node::isJump):
        (JSC::DFG::Node::isBranch):
        (JSC::DFG::Node::isTerminal):
        (JSC::DFG::Node::hasHeapPrediction):
        (JSC::DFG::Node::hasFunctionCheckData):
        (JSC::DFG::Node::hasStructureTransitionData):
        (JSC::DFG::Node::hasStructureSet):
        (JSC::DFG::Node::hasStorageAccessData):
        (JSC::DFG::Node::hasFunctionDeclIndex):
        (JSC::DFG::Node::hasFunctionExprIndex):
        (JSC::DFG::Node::child1):
        (JSC::DFG::Node::child2):
        (JSC::DFG::Node::child3):
        (JSC::DFG::Node::firstChild):
        (JSC::DFG::Node::numChildren):
        * dfg/DFGNodeFlags.cpp: Copied from Source/JavaScriptCore/dfg/DFGNode.cpp.
        * dfg/DFGNodeFlags.h: Added.
        (DFG):
        (JSC::DFG::nodeUsedAsNumber):
        (JSC::DFG::nodeCanTruncateInteger):
        (JSC::DFG::nodeCanIgnoreNegativeZero):
        (JSC::DFG::nodeMayOverflow):
        (JSC::DFG::nodeCanSpeculateInteger):
        * dfg/DFGNodeType.h: Added.
        (DFG):
        (JSC::DFG::defaultFlags):
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):
        (JSC::DFG::PredictionPropagationPhase::vote):
        (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
        (JSC::DFG::PredictionPropagationPhase::fixupNode):
        * dfg/DFGRedundantPhiEliminationPhase.cpp:
        (JSC::DFG::RedundantPhiEliminationPhase::run):
        (JSC::DFG::RedundantPhiEliminationPhase::replacePhiChild):
        (JSC::DFG::RedundantPhiEliminationPhase::updateBlockVariableInformation):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::useChildren):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
        (JSC::DFG::SpeculativeJIT::compileMovHint):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber):
        (JSC::DFG::SpeculativeJIT::compileAdd):
        (JSC::DFG::SpeculativeJIT::compare):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGVirtualRegisterAllocationPhase.cpp:
        (JSC::DFG::VirtualRegisterAllocationPhase::run):

2012-03-12  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Minor DataLog fixes
        https://bugs.webkit.org/show_bug.cgi?id=80826

        Reviewed by Andreas Kling.

        * bytecode/ExecutionCounter.cpp:
        Do not include DataLog.h, it is not used.
        
        * jit/ExecutableAllocator.cpp:
        Ditto.

        * wtf/DataLog.cpp:
        (WTF::initializeLogFileOnce):
        Add missing semi-colon to the code path where DATA_LOG_FILENAME is defined.

        * wtf/HashTable.cpp:
        Include DataLog as it is used.

2012-03-12  SangGyu Lee  <sg5.lee@samsung.com>

        Integer overflow check code in arithmetic operation in classic interpreter
        https://bugs.webkit.org/show_bug.cgi?id=80465

        Reviewed by Gavin Barraclough.

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

2012-03-12  Zeno Albisser  <zeno@webkit.org>

        [Qt][Mac] Build fails after enabling LLINT when JIT is disabled (r109863)
        https://bugs.webkit.org/show_bug.cgi?id=80827

        Qt on Mac uses OS(DARWIN) as well, but we do not want to enable LLINT.

        Reviewed by Simon Hausmann.

        * wtf/Platform.h:

2012-03-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed prospective Qt/Mac build fix

        * runtime/JSGlobalData.cpp: use #USE(CF) instead of PLATFORM(MAC) to determine
        whether to include CoreFoundation headers, used for JIT configuration in JSGlobalData
        constructor.

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

        All DFG nodes should have a mutable set of flags
        https://bugs.webkit.org/show_bug.cgi?id=80779
        <rdar://problem/11026218>

        Reviewed by Gavin Barraclough.
        
        Got rid of NodeId, and placed all of the flags that distinguished NodeId
        from NodeType into a separate Node::flags field. Combined what was previously
        ArithNodeFlags into Node::flags.
        
        In the process of debugging, I found that the debug support in the virtual
        register allocator was lacking, so I improved it. I also realized that the
        virtual register allocator was assuming that the nodes in a basic block were
        contiguous, which is no longer the case. So I fixed that. The fix also made
        it natural to have more extreme assertions, so I added them. I suspect this
        will make it easier to catch virtual register allocation bugs in the future.
        
        This is mostly performance neutral; if anything it looks like a slight
        speed-up.
        
        This patch does leave some work for future refactorings; for example, Node::op
        is unencapsulated. This was already the case, though now it feels even more
        like it should be. I avoided doing that because this patch has already grown
        way bigger than I wanted.
        
        Finally, this patch creates a DFGNode.cpp file and makes a slight effort to
        move some unnecessarily inline stuff out of DFGNode.h.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * dfg/DFGArithNodeFlagsInferencePhase.cpp:
        (JSC::DFG::ArithNodeFlagsInferencePhase::propagate):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addToGraph):
        (JSC::DFG::ByteCodeParser::makeSafe):
        (JSC::DFG::ByteCodeParser::makeDivSafe):
        (JSC::DFG::ByteCodeParser::handleMinMax):
        (JSC::DFG::ByteCodeParser::handleIntrinsic):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCFAPhase.cpp:
        (JSC::DFG::CFAPhase::performBlockCFA):
        * dfg/DFGCSEPhase.cpp:
        (JSC::DFG::CSEPhase::endIndexForPureCSE):
        (JSC::DFG::CSEPhase::pureCSE):
        (JSC::DFG::CSEPhase::clobbersWorld):
        (JSC::DFG::CSEPhase::impureCSE):
        (JSC::DFG::CSEPhase::setReplacement):
        (JSC::DFG::CSEPhase::eliminate):
        (JSC::DFG::CSEPhase::performNodeCSE):
        (JSC::DFG::CSEPhase::performBlockCSE):
        (CSEPhase):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::opName):
        (JSC::DFG::Graph::dump):
        (DFG):
        * dfg/DFGNode.cpp: Added.
        (DFG):
        (JSC::DFG::arithNodeFlagsAsString):
        * dfg/DFGNode.h:
        (DFG):
        (JSC::DFG::nodeUsedAsNumber):
        (JSC::DFG::nodeCanTruncateInteger):
        (JSC::DFG::nodeCanIgnoreNegativeZero):
        (JSC::DFG::nodeMayOverflow):
        (JSC::DFG::nodeCanSpeculateInteger):
        (JSC::DFG::defaultFlags):
        (JSC::DFG::Node::Node):
        (Node):
        (JSC::DFG::Node::setOpAndDefaultFlags):
        (JSC::DFG::Node::mustGenerate):
        (JSC::DFG::Node::arithNodeFlags):
        (JSC::DFG::Node::setArithNodeFlag):
        (JSC::DFG::Node::mergeArithNodeFlags):
        (JSC::DFG::Node::hasResult):
        (JSC::DFG::Node::hasInt32Result):
        (JSC::DFG::Node::hasNumberResult):
        (JSC::DFG::Node::hasJSResult):
        (JSC::DFG::Node::hasBooleanResult):
        (JSC::DFG::Node::isJump):
        (JSC::DFG::Node::isBranch):
        (JSC::DFG::Node::isTerminal):
        (JSC::DFG::Node::child1):
        (JSC::DFG::Node::child2):
        (JSC::DFG::Node::child3):
        (JSC::DFG::Node::firstChild):
        (JSC::DFG::Node::numChildren):
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):
        (JSC::DFG::PredictionPropagationPhase::vote):
        (JSC::DFG::PredictionPropagationPhase::fixupNode):
        * dfg/DFGScoreBoard.h:
        (ScoreBoard):
        (JSC::DFG::ScoreBoard::~ScoreBoard):
        (JSC::DFG::ScoreBoard::assertClear):
        (JSC::DFG::ScoreBoard::use):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::useChildren):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGVirtualRegisterAllocationPhase.cpp:
        (JSC::DFG::VirtualRegisterAllocationPhase::run):

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

        LLInt should support JSVALUE64
        https://bugs.webkit.org/show_bug.cgi?id=79609
        <rdar://problem/10063437>

        Reviewed by Gavin Barraclough and Oliver Hunt.
        
        Ported the LLInt, which previously only worked on 32-bit, to 64-bit. This
        patch moves a fair bit of code from LowLevelInterpreter32_64.asm to the common
        file, LowLevelInterpreter.asm. About 1/3 of the LLInt did not have to be
        specialized for value representation.
        
        Also made some minor changes to offlineasm and the slow-paths.

        * llint/LLIntData.cpp:
        (JSC::LLInt::Data::performAssertions):
        * llint/LLIntEntrypoints.cpp:
        * llint/LLIntSlowPaths.cpp:
        (LLInt):
        (JSC::LLInt::llint_trace_value):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::jitCompileAndSetHeuristics):
        * llint/LLIntSlowPaths.h:
        (LLInt):
        (SlowPathReturnType):
        (JSC::LLInt::SlowPathReturnType::SlowPathReturnType):
        (JSC::LLInt::encodeResult):
        * llint/LLIntThunks.cpp:
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm:
        * llint/LowLevelInterpreter64.asm:
        * offlineasm/armv7.rb:
        * offlineasm/asm.rb:
        * offlineasm/ast.rb:
        * offlineasm/backends.rb:
        * offlineasm/instructions.rb:
        * offlineasm/parser.rb:
        * offlineasm/registers.rb:
        * offlineasm/transform.rb:
        * offlineasm/x86.rb:
        * wtf/Platform.h:

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

        Web Worker crashes with WX_EXCLUSIVE
        https://bugs.webkit.org/show_bug.cgi?id=80532

        Let each JS global object own a meta allocator
        for WX_EXCLUSIVE to avoid conflicts from Web Worker.
        Also fix a mutex leak in MetaAllocator's dtor.

        Reviewed by Filip Pizlo.

        * jit/ExecutableAllocator.cpp:
        (JSC::DemandExecutableAllocator::DemandExecutableAllocator):
        (JSC::DemandExecutableAllocator::~DemandExecutableAllocator):
        (JSC::DemandExecutableAllocator::bytesAllocatedByAllAllocators):
        (DemandExecutableAllocator):
        (JSC::DemandExecutableAllocator::bytesCommittedByAllocactors):
        (JSC::DemandExecutableAllocator::dumpProfileFromAllAllocators):
        (JSC::DemandExecutableAllocator::allocateNewSpace):
        (JSC::DemandExecutableAllocator::allocators):
        (JSC::DemandExecutableAllocator::allocatorsMutex):
        (JSC):
        (JSC::ExecutableAllocator::initializeAllocator):
        (JSC::ExecutableAllocator::ExecutableAllocator):
        (JSC::ExecutableAllocator::underMemoryPressure):
        (JSC::ExecutableAllocator::memoryPressureMultiplier):
        (JSC::ExecutableAllocator::allocate):
        (JSC::ExecutableAllocator::committedByteCount):
        (JSC::ExecutableAllocator::dumpProfile):
        * jit/ExecutableAllocator.h:
        (JSC):
        (ExecutableAllocator):
        (JSC::ExecutableAllocator::allocator):
        * wtf/MetaAllocator.h:
        (WTF::MetaAllocator::~MetaAllocator): Finalize the spin lock.
        * wtf/TCSpinLock.h:
        (TCMalloc_SpinLock::Finalize): Add empty Finalize() to some implementations.

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

        Object.freeze broken on latest Nightly
        https://bugs.webkit.org/show_bug.cgi?id=80577

        Reviewed by Oliver Hunt.

        The problem here is that deleteProperty rejects deletion of prototype.
        This is correct in most cases, however defineOwnPropery is presently
        implemented internally to ensure the attributes change by deleting the
        old property, and creating a new one.

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::deleteProperty):
            - If deletePropery is called via defineOwnPropery, allow old prototype to be removed.

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

        Array.prototype.toLocaleString visits elements in wrong order under certain conditions
        https://bugs.webkit.org/show_bug.cgi?id=80663

        Reviewed by Michael Saboff.

        The bug here is actually that we're continuing to process the array after an exception
        has been thrown, and that the second value throw is overriding the first.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToLocaleString):

2012-03-09  Ryosuke Niwa  <rniwa@webkit.org>

        WebKit compiled by gcc (Xcode 3.2.6) hangs while running DOM/Accessors.html
        https://bugs.webkit.org/show_bug.cgi?id=80080

        Reviewed by Filip Pizlo.

        * bytecode/SamplingTool.cpp:
        (JSC::SamplingRegion::Locker::Locker):
        (JSC::SamplingRegion::Locker::~Locker):
        * bytecode/SamplingTool.h:
        (JSC::SamplingRegion::exchangeCurrent):
        * wtf/Atomics.h:
        (WTF):
        (WTF::weakCompareAndSwap):
        (WTF::weakCompareAndSwapUIntPtr):

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

        REGRESSION: Date.parse("Tue Nov 23 20:40:05 2010 GMT") returns NaN
        https://bugs.webkit.org/show_bug.cgi?id=49989

        Reviewed by Oliver Hunt.

        Patch originally by chris reiss <christopher.reiss@nokia.com>,
        allow the year to appear before the timezone in date strings.

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

2012-03-09  Mark Rowe  <mrowe@apple.com>

        Ensure that the WTF headers are copied at installhdrs time.

        Reviewed by Dan Bernstein and Jessie Berlin.

        * Configurations/JavaScriptCore.xcconfig: Set INSTALLHDRS_SCRIPT_PHASE = YES
        so that our script phases are invoked at installhdrs time. The only one that
        does any useful work at that time is the one that installs WTF headers.

2012-03-09  Jon Lee  <jonlee@apple.com>

        Add support for ENABLE(LEGACY_NOTIFICATIONS)
        https://bugs.webkit.org/show_bug.cgi?id=80497

        Reviewed by Adam Barth.

        Prep for b80472: Update API for Web Notifications
        * Configurations/FeatureDefines.xcconfig:

2012-03-09  Ashod Nakashian  <ashodnakashian@yahoo.com>

        Bash scripts should support LF endings only
        https://bugs.webkit.org/show_bug.cgi?id=79509

        Reviewed by David Kilzer.

        * gyp/generate-derived-sources.sh: Added property svn:eol-style.
        * gyp/run-if-exists.sh: Added property svn:eol-style.
        * gyp/update-info-plist.sh: Added property svn:eol-style.

2012-03-09  Jessie Berlin  <jberlin@apple.com>

        Windows debug build fix.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::shouldBlind):
        Fix unreachable code warnings (which we treat as errors).

2012-03-09  Thouraya ANDOLSI  <thouraya.andolsi@st.com>

        Reviewed by Zoltan Herczeg.

        [Qt] Fix the SH4 build after r109834
        https://bugs.webkit.org/show_bug.cgi?id=80492

        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::branchAdd32):
        (JSC::MacroAssemblerSH4::branchSub32):

2012-03-09  Andy Wingo  <wingo@igalia.com>

        Refactor code feature analysis in the parser
        https://bugs.webkit.org/show_bug.cgi?id=79112

        Reviewed by Geoffrey Garen.

        This commit refactors the parser to more uniformly propagate flag
        bits down and up the parse process, as the parser descends and
        returns into nested blocks.  Some flags get passed town to
        subscopes, some apply to specific scopes only, and some get
        unioned up after parsing subscopes.

        The goal is to eventually be very precise with scoping
        information, once we have block scopes: one block scope might use
        `eval', which would require the emission of a symbol table within
        that block and containing blocks, whereas another block in the
        same function might not, allowing us to not emit a symbol table.

        * parser/Nodes.h:
        (JSC::ScopeFlags): Rename from CodeFeatures.
        (JSC::ScopeNode::addScopeFlags):
        (JSC::ScopeNode::scopeFlags): New accessors for m_scopeFlags.
        (JSC::ScopeNode::isStrictMode):
        (JSC::ScopeNode::usesEval):
        (JSC::ScopeNode::usesArguments):
        (JSC::ScopeNode::setUsesArguments):
        (JSC::ScopeNode::usesThis):
        (JSC::ScopeNode::needsActivationForMoreThanVariables):
        (JSC::ScopeNode::needsActivation): Refactor these accessors to
        operate on the m_scopeFlags member.
        (JSC::ScopeNode::source):
        (JSC::ScopeNode::sourceURL):
        (JSC::ScopeNode::sourceID): Shuffle these definitions around; no
        semantic change.
        (JSC::ScopeNode::ScopeNode)
        (JSC::ProgramNode::ProgramNode)
        (JSC::EvalNode::EvalNode)
        (JSC::FunctionBodyNode::FunctionBodyNode): Have these constructors
        take a ScopeFlags as an argument, instead of a bool inStrictContext.

        * parser/Nodes.cpp:
        (JSC::ScopeNode::ScopeNode):
        (JSC::ProgramNode::ProgramNode):
        (JSC::ProgramNode::create):
        (JSC::EvalNode::EvalNode):
        (JSC::EvalNode::create):
        (JSC::FunctionBodyNode::FunctionBodyNode):
        (JSC::FunctionBodyNode::create): Adapt constructors to change.

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::ASTBuilder):
        (JSC::ASTBuilder::thisExpr):
        (JSC::ASTBuilder::createResolve):
        (JSC::ASTBuilder::createFunctionBody):
        (JSC::ASTBuilder::createFuncDeclStatement):
        (JSC::ASTBuilder::createTryStatement):
        (JSC::ASTBuilder::createWithStatement):
        (JSC::ASTBuilder::addVar):
        (JSC::ASTBuilder::Scope::Scope):
        (Scope):
        (ASTBuilder):
        (JSC::ASTBuilder::makeFunctionCallNode): Don't track scope
        features here.  Instead rely on the base Parser mechanism to track
        features.

        * parser/NodeInfo.h (NodeInfo, NodeDeclarationInfo): "ScopeFlags".

        * parser/Parser.h:
        (JSC::Scope::Scope): Manage scope through flags, not
        bit-booleans.  This lets us uniformly propagate them up and down.
        (JSC::Scope::declareWrite):
        (JSC::Scope::declareParameter):
        (JSC::Scope::useVariable):
        (JSC::Scope::collectFreeVariables):
        (JSC::Scope::getCapturedVariables):
        (JSC::Scope::saveFunctionInfo):
        (JSC::Scope::restoreFunctionInfo):
        (JSC::Parser::pushScope): Adapt to use scope flags and their
        accessors instead of bit-booleans.
        * parser/Parser.cpp:
        (JSC::::Parser):
        (JSC::::parseInner):
        (JSC::::didFinishParsing):
        (JSC::::parseSourceElements):
        (JSC::::parseVarDeclarationList):
        (JSC::::parseConstDeclarationList):
        (JSC::::parseWithStatement):
        (JSC::::parseTryStatement):
        (JSC::::parseFunctionBody):
        (JSC::::parseFunctionInfo):
        (JSC::::parseFunctionDeclaration):
        (JSC::::parsePrimaryExpression): Hoist some of the flag handling
        out of the "context" (ASTBuilder or SyntaxChecker) and to here.
        Does not seem to have a performance impact.

        * parser/SourceProviderCacheItem.h (SourceProviderCacheItem):
        Cache the scopeflags.
        * parser/SyntaxChecker.h: Remove evalCount() decl.

        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::produceCodeBlockFor):
        * runtime/Executable.h:
        (JSC::ScriptExecutable::ScriptExecutable):
        (JSC::ScriptExecutable::usesEval):
        (JSC::ScriptExecutable::usesArguments):
        (JSC::ScriptExecutable::needsActivation):
        (JSC::ScriptExecutable::isStrictMode):
        (JSC::ScriptExecutable::recordParse):
        (ScriptExecutable): ScopeFlags, not features.

2012-03-08  Benjamin Poulain  <bpoulain@apple.com>

        Build fix for MSVC after r110266

        Unreviewed. A #ifdef for MSVC was left over in r110266.

        * runtime/RegExpObject.h:
        (RegExpObject):

2012-03-08  Benjamin Poulain  <bpoulain@apple.com>

        Allocate the RegExpObject's data with the Cell
        https://bugs.webkit.org/show_bug.cgi?id=80654

        Reviewed by Gavin Barraclough.

        This patch removes the creation of RegExpObject's data to avoid the overhead
        create by the allocation and destruction.

        We RegExp are created repeatedly, this provides some performance improvment.
        The PeaceKeeper test stringDetectBrowser improves by 10%.

        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::RegExpObject):
        (JSC::RegExpObject::visitChildren):
        (JSC::RegExpObject::getOwnPropertyDescriptor):
        (JSC::RegExpObject::defineOwnProperty):
        (JSC::RegExpObject::match):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::setRegExp):
        (JSC::RegExpObject::regExp):
        (JSC::RegExpObject::setLastIndex):
        (JSC::RegExpObject::getLastIndex):
        (RegExpObject):

2012-03-08  Steve Falkenburg  <sfalken@apple.com>

        Separate WTF parts of JavaScriptCoreGenerated into WTFGenerated for Windows build
        https://bugs.webkit.org/show_bug.cgi?id=80657
        
        Preparation for WTF separation from JavaScriptCore.
        The "Generated" vcproj files on Windows are necessary so Visual Studio can calculate correct
        dependencies for generated files.
        
        This also removes the PGO build targets from the WTF code, since we can't build instrumentation/optimization
        versions of the WTF code independent of the JavaScriptCore code.

        Reviewed by Jessie Berlin.

        * JavaScriptCore.vcproj/JavaScriptCore.sln: Add WTFGenerated, update dependent projects.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Removed WTF specific parts.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Removed WTF specific parts.
        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Removed WTF specific parts.
        * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd: Removed WTF specific parts.
        * JavaScriptCore.vcproj/JavaScriptCore/work-around-vs-dependency-tracking-bugs.py: Removed.
        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Add WTFGenerated, update dependent projects.
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Remove PGO targets from WTF.
        * JavaScriptCore.vcproj/WTF/WTFGenerated.make: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make.
        * JavaScriptCore.vcproj/WTF/WTFGenerated.vcproj: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj.
        * JavaScriptCore.vcproj/WTF/WTFGeneratedCommon.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedCommon.vsprops.
        * JavaScriptCore.vcproj/WTF/WTFGeneratedDebug.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebug.vsprops.
        * JavaScriptCore.vcproj/WTF/WTFGeneratedDebugAll.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugAll.vsprops.
        * JavaScriptCore.vcproj/WTF/WTFGeneratedDebugCairoCFLite.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugCairoCFLite.vsprops.
        * JavaScriptCore.vcproj/WTF/WTFGeneratedProduction.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedProduction.vsprops.
        * JavaScriptCore.vcproj/WTF/WTFGeneratedRelease.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedRelease.vsprops.
        * JavaScriptCore.vcproj/WTF/WTFGeneratedReleaseCairoCFLite.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedReleaseCairoCFLite.vsprops.
        * JavaScriptCore.vcproj/WTF/WTFReleasePGO.vsprops: Removed.
        * JavaScriptCore.vcproj/WTF/build-generated-files.sh: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh.
        * JavaScriptCore.vcproj/WTF/copy-files.cmd: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd.
        * JavaScriptCore.vcproj/WTF/work-around-vs-dependency-tracking-bugs.py: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/work-around-vs-dependency-tracking-bugs.py.

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

        Fix the build of WebKit with WTFURL following the removal of ForwardingHeaders/wtf
        https://bugs.webkit.org/show_bug.cgi?id=80652

        Reviewed by Eric Seidel.

        Fix the header, URLSegments.h is not part of the API.

        * wtf/url/api/ParsedURL.h:

2012-03-08  Ryosuke Niwa  <rniwa@webkit.org>

        Mac build fix for micro data API.

        * Configurations/FeatureDefines.xcconfig:

2012-03-08  Gavin Barraclough  <barraclough@apple.com>

        String.prototype.match and replace do not clear global regexp lastIndex per ES5.1 15.5.4.10
        https://bugs.webkit.org/show_bug.cgi?id=26890

        Reviewed by Oliver Hunt.

        Per 15.10.6.2 step 9.a.1 called via the action of the last iteration of 15.5.4.10 8.f.i.

        * runtime/StringPrototype.cpp:
        (JSC::replaceUsingRegExpSearch):
        (JSC::stringProtoFuncMatch):
            - added calls to setLastIndex.

2012-03-08  Matt Lilek  <mrl@apple.com>

        Don't enable VIDEO_TRACK on all OS X platforms
        https://bugs.webkit.org/show_bug.cgi?id=80635

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

2012-03-08  Oliver Hunt  <oliver@apple.com>

        Build fix.  That day is not today.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::shouldBlind):
        * assembler/MacroAssemblerX86Common.h:
        (MacroAssemblerX86Common):
        (JSC::MacroAssemblerX86Common::shouldBlindForSpecificArch):

2012-03-08  Oliver Hunt  <oliver@apple.com>

        Build fix. One of these days I'll manage to commit something that works everywhere.

        * assembler/AbstractMacroAssembler.h:
        (AbstractMacroAssembler):
        * assembler/MacroAssemblerARMv7.h:
        (MacroAssemblerARMv7):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::shouldBlindForSpecificArch):
        (MacroAssemblerX86Common):

2012-03-08  Chao-ying Fu  <fu@mips.com>

        Update MIPS patchOffsetGetByIdSlowCaseCall
        https://bugs.webkit.org/show_bug.cgi?id=80302

        Reviewed by Oliver Hunt.

        * jit/JIT.h:
        (JIT):

2012-03-08  Oliver Hunt  <oliver@apple.com>

        Missing some places where we should be blinding 64bit values (and blinding something we shouldn't)
        https://bugs.webkit.org/show_bug.cgi?id=80633

        Reviewed by Gavin Barraclough.

        Add 64-bit trap for shouldBlindForSpecificArch, so that we always blind
        if there isn't a machine specific implementation (otherwise the 64bit value
        got truncated and 32bit checks were used -- leaving 32bits untested).
        Also add a bit of logic to ensure that we don't try to blind a few common
        constants that go through the ImmPtr paths -- encoded numeric JSValues and
        unencoded doubles with common "safe" values.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::shouldBlindForSpecificArch):
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::shouldBlindDouble):
        (MacroAssembler):
        (JSC::MacroAssembler::shouldBlind):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::shouldBlindForSpecificArch):

2012-03-08  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/11012572> Ensure that the staged frameworks path is in the search path for JavaScriptCore

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2012-03-08  Steve Falkenburg  <sfalken@apple.com>

        Fix line endings for copy-files.cmd.
        
        If a cmd file doesn't have Windows line endings, it doesn't work properly.
        In this case, the label :clean wasn't found, breaking the clean build.
        
        Reviewed by Jessie Berlin.

        * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:

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

        DFG CFA incorrectly handles ValueToInt32
        https://bugs.webkit.org/show_bug.cgi?id=80568

        Reviewed by Gavin Barraclough.
        
        Changed it match exactly the decision pattern used in
        DFG::SpeculativeJIT::compileValueToInt32

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):

2012-03-08  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        [Qt] [WK2] Webkit fails to link when compiled with force_static_libs_as_shared
        https://bugs.webkit.org/show_bug.cgi?id=80524

        Reviewed by Simon Hausmann.

        Move IdentifierTable methods defintion to WTFThreadData.cpp to fix linking 
        of WTF library.

        * runtime/Identifier.cpp:
        * wtf/WTFThreadData.cpp:
        (JSC):
        (JSC::IdentifierTable::~IdentifierTable):
        (JSC::IdentifierTable::add):

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

        DFG instruction count threshold should be lifted to 10000
        https://bugs.webkit.org/show_bug.cgi?id=80579

        Reviewed by Gavin Barraclough.

        * runtime/Options.cpp:
        (JSC::Options::initializeOptions):

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

        Incorrect tracking of abstract values of variables forced double
        https://bugs.webkit.org/show_bug.cgi?id=80566
        <rdar://problem/11001442>

        Reviewed by Gavin Barraclough.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::mergeStateAtTail):

2012-03-07  Chao-yng Fu  <fu@mips.com>

        [Qt] Fix the MIPS/SH4 build after r109834
        https://bugs.webkit.org/show_bug.cgi?id=80492

        Reviewed by Oliver Hunt.

        Implement three-argument branch(Add,Sub)32.

        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::add32):
        (MacroAssemblerMIPS):
        (JSC::MacroAssemblerMIPS::sub32):
        (JSC::MacroAssemblerMIPS::branchAdd32):
        (JSC::MacroAssemblerMIPS::branchSub32):

2012-03-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r110127.
        http://trac.webkit.org/changeset/110127
        https://bugs.webkit.org/show_bug.cgi?id=80562

        compile failed on AppleWin (Requested by ukai on #webkit).

        * heap/Heap.cpp:
        (JSC::Heap::collectAllGarbage):
        * heap/Heap.h:
        (JSC):
        (Heap):
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::FunctionExecutable):
        (JSC::FunctionExecutable::finalize):
        * runtime/Executable.h:
        (FunctionExecutable):
        (JSC::FunctionExecutable::create):
        * runtime/JSGlobalData.cpp:
        (WTF):
        (Recompiler):
        (WTF::Recompiler::operator()):
        (JSC::JSGlobalData::recompileAllJSFunctions):
        (JSC):
        * runtime/JSGlobalData.h:
        (JSGlobalData):
        * runtime/JSGlobalObject.cpp:
        (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):

2012-03-07  Hojong Han  <hojong.han@samsung.com>

        The end atom of the marked block considered to filter invalid cells
        https://bugs.webkit.org/show_bug.cgi?id=79191

        Reviewed by Geoffrey Garen.

        Register file could have stale pointers beyond the end atom of marked block.
        Those pointers can weasel out of filtering in-middle-of-cell pointer.

        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::isLiveCell):

2012-03-07  Jessie Berlin  <jberlin@apple.com>

        Clean Windows build fails after r110033
        https://bugs.webkit.org/show_bug.cgi?id=80553

        Rubber-stamped by Jon Honeycutt and Eric Seidel.

        * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
        Place the implementation files next to their header files in the wtf/text subdirectory.
        Use echo -F to tell xcopy that these are files (since there is apparently no flag).
        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
        Update the path to those implementation files.
        * JavaScriptCore.vcproj/testRegExp/testRegExp.vcproj:
        Ditto.

2012-03-07  Yuqiang Xian  <yuqiang.xian@intel.com>

        Eliminate redundant Phis in DFG
        https://bugs.webkit.org/show_bug.cgi?id=80415

        Reviewed by Filip Pizlo.

        Although this may not have any advantage at current stage, this is towards
        minimal SSA to make more high level optimizations (like bug 76770) easier.
        We have the choices either to build minimal SSA from scratch or to
        keep current simple Phi insertion mechanism and remove the redundancy
        in another phase. Currently we choose the latter because the change
        could be smaller.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGRedundantPhiEliminationPhase.cpp: Added.
        (DFG):
        (RedundantPhiEliminationPhase):
        (JSC::DFG::RedundantPhiEliminationPhase::RedundantPhiEliminationPhase):
        (JSC::DFG::RedundantPhiEliminationPhase::run):
        (JSC::DFG::RedundantPhiEliminationPhase::getRedundantReplacement):
        (JSC::DFG::RedundantPhiEliminationPhase::replacePhiChild):
        (JSC::DFG::RedundantPhiEliminationPhase::fixupPhis):
        (JSC::DFG::RedundantPhiEliminationPhase::updateBlockVariableInformation):
        (JSC::DFG::performRedundantPhiElimination):
        * dfg/DFGRedundantPhiEliminationPhase.h: Added.
        (DFG):

2012-03-07  Mark Hahnenberg  <mhahnenberg@apple.com>

        Refactor recompileAllJSFunctions() to be less expensive
        https://bugs.webkit.org/show_bug.cgi?id=80330

        Reviewed by Geoffrey Garen.

        This change is performance neutral on the JS benchmarks we track. It's mostly to improve page 
        load performance, which currently does at least a couple full GCs per navigation.

        * heap/Heap.cpp:
        (JSC::Heap::discardAllCompiledCode): Rename recompileAllJSFunctions to discardAllCompiledCode 
        because the function doesn't actually recompile anything (and never did); it simply throws code
        away for it to be recompiled later if we determine we should do so.
        (JSC):
        (JSC::Heap::collectAllGarbage):
        (JSC::Heap::addFunctionExecutable): Adds a newly created FunctionExecutable to the Heap's list.
        (JSC::Heap::removeFunctionExecutable): Removes the specified FunctionExecutable from the Heap's list.
        * heap/Heap.h:
        (JSC):
        (Heap):
        * runtime/Executable.cpp: Added next and prev fields to FunctionExecutables so that they can 
        be used in DoublyLinkedLists.
        (JSC::FunctionExecutable::FunctionExecutable):
        (JSC::FunctionExecutable::finalize): Removes the FunctionExecutable from the Heap's list.
        * runtime/Executable.h:
        (FunctionExecutable):
        (JSC::FunctionExecutable::create): Adds the FunctionExecutable to the Heap's list.
        * runtime/JSGlobalData.cpp: Remove recompileAllJSFunctions, as it's the Heap's job to own and manage 
        the list of FunctionExecutables.
        * runtime/JSGlobalData.h:
        (JSGlobalData):
        * runtime/JSGlobalObject.cpp:
        (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Use the new discardAllCompiledCode.

2012-03-06  Oliver Hunt  <oliver@apple.com>

        Further harden 64-bit JIT
        https://bugs.webkit.org/show_bug.cgi?id=80457

        Reviewed by Filip Pizlo.

        This patch implements blinding for ImmPtr.  Rather than xor based blinding
        we perform randomised pointer rotations in order to avoid the significant
        cost in executable memory that would otherwise be necessary (and to avoid
        the need for an additional scratch register in some cases).

        As with the prior blinding patch there's a moderate amount of noise as we
        correct the use of ImmPtr vs. TrustedImmPtr.

        * assembler/AbstractMacroAssembler.h:
        (ImmPtr):
        (JSC::AbstractMacroAssembler::ImmPtr::asTrustedImmPtr):
        * assembler/MacroAssembler.h:
        (MacroAssembler):
        (JSC::MacroAssembler::storePtr):
        (JSC::MacroAssembler::branchPtr):
        (JSC::MacroAssembler::shouldBlind):
        (JSC::MacroAssembler::RotatedImmPtr::RotatedImmPtr):
        (RotatedImmPtr):
        (JSC::MacroAssembler::rotationBlindConstant):
        (JSC::MacroAssembler::loadRotationBlindedConstant):
        (JSC::MacroAssembler::convertInt32ToDouble):
        (JSC::MacroAssembler::move):
        (JSC::MacroAssembler::poke):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::storeDouble):
        (JSC::MacroAssemblerARMv7::branchAdd32):
        * assembler/MacroAssemblerX86_64.h:
        (MacroAssemblerX86_64):
        (JSC::MacroAssemblerX86_64::rotateRightPtr):
        (JSC::MacroAssemblerX86_64::xorPtr):
        * assembler/X86Assembler.h:
        (X86Assembler):
        (JSC::X86Assembler::xorq_rm):
        (JSC::X86Assembler::rorq_i8r):
        * dfg/DFGCCallHelpers.h:
        (CCallHelpers):
        (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
        * dfg/DFGOSRExitCompiler32_64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOSRExitCompiler64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::createOSREntries):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::silentFillGPR):
        (JSC::DFG::SpeculativeJIT::callOperation):
        (JSC::DFG::SpeculativeJIT::emitEdgeCode):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::fillInteger):
        (JSC::DFG::SpeculativeJIT::fillDouble):
        (JSC::DFG::SpeculativeJIT::fillJSValue):
        (JSC::DFG::SpeculativeJIT::emitCall):
        (JSC::DFG::SpeculativeJIT::compileObjectEquality):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        * jit/JIT.cpp:
        (JSC::JIT::emitOptimizationCheck):
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emitSlow_op_post_inc):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitValueProfilingSite):
        (JSC::JIT::emitGetVirtualRegister):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_mov):
        (JSC::JIT::emit_op_new_object):
        (JSC::JIT::emit_op_strcat):
        (JSC::JIT::emit_op_ensure_property_exists):
        (JSC::JIT::emit_op_resolve_skip):
        (JSC::JIT::emitSlow_op_resolve_global):
        (JSC::JIT::emit_op_resolve_with_base):
        (JSC::JIT::emit_op_resolve_with_this):
        (JSC::JIT::emit_op_jmp_scopes):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_switch_char):
        (JSC::JIT::emit_op_switch_string):
        (JSC::JIT::emit_op_throw_reference_error):
        (JSC::JIT::emit_op_debug):
        (JSC::JIT::emitSlow_op_resolve_global_dynamic):
        (JSC::JIT::emit_op_new_array):
        (JSC::JIT::emitSlow_op_new_array):
        (JSC::JIT::emit_op_new_array_buffer):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_new_object):
        (JSC::JIT::emit_op_strcat):
        (JSC::JIT::emit_op_ensure_property_exists):
        (JSC::JIT::emit_op_resolve_skip):
        (JSC::JIT::emitSlow_op_resolve_global):
        (JSC::JIT::emit_op_resolve_with_base):
        (JSC::JIT::emit_op_resolve_with_this):
        (JSC::JIT::emit_op_jmp_scopes):
        (JSC::JIT::emit_op_switch_imm):
        (JSC::JIT::emit_op_switch_char):
        (JSC::JIT::emit_op_switch_string):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_by_index):
        * jit/JITStubCall.h:
        (JITStubCall):
        (JSC::JITStubCall::addArgument):

2012-03-07  Simon Hausmann  <simon.hausmann@nokia.com>

        ARM build fix.

        Reviewed by Zoltan Herczeg.

        Implement three-argument branch(Add,Sub)32.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::add32):
        (MacroAssemblerARM):
        (JSC::MacroAssemblerARM::sub32):
        (JSC::MacroAssemblerARM::branchAdd32):
        (JSC::MacroAssemblerARM::branchSub32):

2012-03-07  Andy Wingo  <wingo@igalia.com>

        Parser: Inline ScopeNodeData into ScopeNode
        https://bugs.webkit.org/show_bug.cgi?id=79776

        Reviewed by Geoffrey Garen.

        It used to be that some ScopeNode members were kept in a separate
        structure because sometimes they wouldn't be needed, and
        allocating a ParserArena was expensive.  This patch makes
        ParserArena lazily allocate its IdentifierArena, allowing the
        members to be included directly, which is simpler and easier to
        reason about.

        * parser/ParserArena.cpp:
        (JSC::ParserArena::ParserArena):
        (JSC::ParserArena::reset):
        (JSC::ParserArena::isEmpty):
        * parser/ParserArena.h:
        (JSC::ParserArena::identifierArena): Lazily allocate the
        IdentifierArena.

        * parser/Nodes.cpp:
        (JSC::ScopeNode::ScopeNode):
        (JSC::ScopeNode::singleStatement):
        (JSC::ProgramNode::create):
        (JSC::EvalNode::create):
        (JSC::FunctionBodyNode::create):
        * parser/Nodes.h:
        (JSC::ScopeNode::destroyData):
        (JSC::ScopeNode::needsActivationForMoreThanVariables):
        (JSC::ScopeNode::needsActivation):
        (JSC::ScopeNode::hasCapturedVariables):
        (JSC::ScopeNode::capturedVariableCount):
        (JSC::ScopeNode::captures):
        (JSC::ScopeNode::varStack):
        (JSC::ScopeNode::functionStack):
        (JSC::ScopeNode::neededConstants):
        (ScopeNode):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ScopeNode::emitStatementsBytecode): Inline ScopeNodeData
        into ScopeNode.  Adapt accessors.

2012-03-06  Eric Seidel  <eric@webkit.org>

        Make WTF public headers use fully-qualified include paths and remove ForwardingHeaders/wtf
        https://bugs.webkit.org/show_bug.cgi?id=80363

        Reviewed by Mark Rowe.

        Historically WTF has been part of JavaScriptCore, and on Mac and Windows
        its headers have appeared as part of the "private" headers exported by
        JavaScriptCore.  All of the WTF headers there are "flattened" into a single
        private headers directory, and WebCore, WebKit and WebKit2 have used "ForwardingHeaders"
        to re-map fully-qualified <wtf/text/Foo.h> includes to simple <JavaScriptCore/Foo.h> includes.

        However, very soon, we are moving the WTF source code out of JavaScriptCore into its
        own directory and project.  As part of such, the WTF headers will no longer be part of
        the JavaScriptCore private interfaces.
        In preparation for that, this change makes both the Mac and Win builds export
        WTF headers in a non-flattened manner.  On Mac, that means into usr/local/include/wtf
        (and subdirectories), on Windows for now that means JavaScriptCore/wtf (and subdirectories).

        There are 5 parts to this change.
        1.  Updates the JavaScriptCore XCode and VCProj files to actually install these headers
            (and header directories) into the appropriate places in the build directory.
        2.  Updates JavaScriptCore.xcodeproj to look for these WTF headers in this install location
            (WebCore, WebKit, etc. had already been taught to look in previous patches).
        3.  Fixes all JavaScriptCore source files, and WTF headers to include WTF headers
            using fully qualified paths.
        4.  Stops the Mac and Win builds from installing these WTF headers in their old "flattened" location.
        5.  Removes WebCore and WebKit ForwardingHeaders/wtf directories now that the flattened headers no longer exist.

        Unfortunately we see no way to do this change in smaller parts, since all of these steps are interdependant.
        It is possible there are internal Apple projects which depend on JavaScriptCore/Foo.h working for WTF
        headers, those will have to be updated to use <wtf/Foo.h> after this change.
        I've discussed this proposed change at length with Mark Rowe, and my understanding is they
        are ready for (and interested in) this change happening.

        * API/tests/JSNode.c:
        * API/tests/JSNodeList.c:
        * Configurations/Base.xcconfig:
        * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/MacroAssemblerCodeRef.h:
        * bytecompiler/BytecodeGenerator.h:
        * dfg/DFGOperations.cpp:
        * heap/GCAssertions.h:
        * heap/HandleHeap.h:
        * heap/HandleStack.h:
        * heap/MarkedSpace.h:
        * heap/PassWeak.h:
        * heap/Strong.h:
        * heap/Weak.h:
        * jit/HostCallReturnValue.cpp:
        * jit/JIT.cpp:
        * jit/JITStubs.cpp:
        * jit/ThunkGenerators.cpp:
        * parser/Lexer.cpp:
        * runtime/Completion.cpp:
        * runtime/Executable.cpp:
        * runtime/Identifier.h:
        * runtime/InitializeThreading.cpp:
        * runtime/JSDateMath.cpp:
        * runtime/JSGlobalObjectFunctions.cpp:
        * runtime/JSStringBuilder.h:
        * runtime/JSVariableObject.h:
        * runtime/NumberPrototype.cpp:
        * runtime/WriteBarrier.h:
        * tools/CodeProfile.cpp:
        * tools/TieredMMapArray.h:
        * wtf/AVLTree.h:
        * wtf/Alignment.h:
        * wtf/AlwaysInline.h:
        * wtf/ArrayBufferView.h:
        * wtf/Assertions.h:
        * wtf/Atomics.h:
        * wtf/Bitmap.h:
        * wtf/BoundsCheckedPointer.h:
        * wtf/CheckedArithmetic.h:
        * wtf/Deque.h:
        * wtf/ExportMacros.h:
        * wtf/FastAllocBase.h:
        * wtf/FastMalloc.h:
        * wtf/Float32Array.h:
        * wtf/Float64Array.h:
        * wtf/Functional.h:
        * wtf/HashCountedSet.h:
        * wtf/HashFunctions.h:
        * wtf/HashMap.h:
        * wtf/HashSet.h:
        * wtf/HashTable.h:
        * wtf/HashTraits.h:
        * wtf/Int16Array.h:
        * wtf/Int32Array.h:
        * wtf/Int8Array.h:
        * wtf/IntegralTypedArrayBase.h:
        * wtf/ListHashSet.h:
        * wtf/MainThread.h:
        * wtf/MetaAllocator.h:
        * wtf/Noncopyable.h:
        * wtf/OwnArrayPtr.h:
        * wtf/OwnPtr.h:
        * wtf/PackedIntVector.h:
        * wtf/ParallelJobs.h:
        * wtf/PassOwnArrayPtr.h:
        * wtf/PassOwnPtr.h:
        * wtf/PassRefPtr.h:
        * wtf/PassTraits.h:
        * wtf/Platform.h:
        * wtf/PossiblyNull.h:
        * wtf/RefCounted.h:
        * wtf/RefCountedLeakCounter.h:
        * wtf/RefPtr.h:
        * wtf/RetainPtr.h:
        * wtf/SimpleStats.h:
        * wtf/Spectrum.h:
        * wtf/StdLibExtras.h:
        * wtf/TCPageMap.h:
        * wtf/TemporaryChange.h:
        * wtf/ThreadSafeRefCounted.h:
        * wtf/Threading.h:
        * wtf/ThreadingPrimitives.h:
        * wtf/TypeTraits.h:
        * wtf/TypedArrayBase.h:
        * wtf/Uint16Array.h:
        * wtf/Uint32Array.h:
        * wtf/Uint8Array.h:
        * wtf/Uint8ClampedArray.h:
        * wtf/UnusedParam.h:
        * wtf/Vector.h:
        * wtf/VectorTraits.h:
        * wtf/dtoa/double-conversion.h:
        * wtf/dtoa/utils.h:
        * wtf/gobject/GRefPtr.h:
        * wtf/gobject/GlibUtilities.h:
        * wtf/text/AtomicString.h:
        * wtf/text/AtomicStringImpl.h:
        * wtf/text/CString.h:
        * wtf/text/StringConcatenate.h:
        * wtf/text/StringHash.h:
        * wtf/text/WTFString.h:
        * wtf/unicode/CharacterNames.h:
        * wtf/unicode/UTF8.h:
        * wtf/unicode/glib/UnicodeGLib.h:
        * wtf/unicode/qt4/UnicodeQt4.h:
        * wtf/unicode/wince/UnicodeWinCE.h:
        * wtf/url/api/ParsedURL.h:
        * wtf/url/api/URLString.h:
        * wtf/wince/FastMallocWinCE.h:
        * yarr/YarrJIT.cpp:

2012-03-06  Gavin Barraclough  <barraclough@apple.com>

        Array.prototype functions should throw if delete fails
        https://bugs.webkit.org/show_bug.cgi?id=80467

        Reviewed by Oliver Hunt.

        All calls to [[Delete]] from Array.prototype are specified to pass 'true' as the value of Throw.
        In the case of shift/unshift, these are also missing a throw from the 'put' in the implementations
        in JSArray.cpp. There are effectively three copies of each of the generic shift/unshift routines,
        one in splice, one in ArrayPrototype's shift/unshift methods, and one in JSArray's shift/unshift
        routines, for handling arrays with holes. These three copies should be unified.

        * runtime/ArrayPrototype.cpp:
        (JSC::shift):
        (JSC::unshift):
            - Added - shared copies of the shift/unshift functionality.
        (JSC::arrayProtoFuncPop):
            - should throw if the delete fails.
        (JSC::arrayProtoFuncReverse):
            - should throw if the delete fails.
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
            - use shift/unshift.
        * runtime/JSArray.cpp:
        (JSC::JSArray::shiftCount):
        (JSC::JSArray::unshiftCount):
            - Don't try to handle arrays with holes; return a value indicating
              the generic routine should be used instead.
        * runtime/JSArray.h:
            - declaration for shiftCount/unshiftCount changed.
        * tests/mozilla/js1_6/Array/regress-304828.js:
            - this was asserting incorrect behaviour.

2012-03-06  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [CMake] Make the removal of transitive library dependencies work with CMake < 2.8.7.
        https://bugs.webkit.org/show_bug.cgi?id=80469

        Reviewed by Antonio Gomes.

        * CMakeLists.txt: Manually set the LINK_INTERFACE_LIBRARIES target
        property on the library being created.

2012-03-06  Yuqiang Xian  <yuqiang.xian@intel.com>

        DFG BasicBlock should group the Phi nodes together and separate them
        from the other nodes
        https://bugs.webkit.org/show_bug.cgi?id=80361

        Reviewed by Filip Pizlo.

        This would make it more efficient to remove the redundant Phi nodes or
        insert new Phi nodes for SSA, besides providing a cleaner BasicBlock structure.
        This is performance neutral on SunSpider, V8 and Kraken.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::clobberStructures):
        (JSC::DFG::AbstractState::dump):
        * dfg/DFGBasicBlock.h:
        (JSC::DFG::BasicBlock::BasicBlock):
        (BasicBlock):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addToGraph):
        (JSC::DFG::ByteCodeParser::insertPhiNode):
        * dfg/DFGCFAPhase.cpp:
        (JSC::DFG::CFAPhase::performBlockCFA):
        * dfg/DFGCSEPhase.cpp:
        (JSC::DFG::CSEPhase::pureCSE):
        (JSC::DFG::CSEPhase::impureCSE):
        (JSC::DFG::CSEPhase::globalVarLoadElimination):
        (JSC::DFG::CSEPhase::getByValLoadElimination):
        (JSC::DFG::CSEPhase::checkFunctionElimination):
        (JSC::DFG::CSEPhase::checkStructureLoadElimination):
        (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
        (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
        (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):
        (JSC::DFG::CSEPhase::getScopeChainLoadElimination):
        (JSC::DFG::CSEPhase::performBlockCSE):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2012-03-06  Mark Hahnenberg  <mhahnenberg@apple.com>

        GCActivityCallback timer should vary with the length of the previous GC
        https://bugs.webkit.org/show_bug.cgi?id=80344

        Reviewed by Geoffrey Garen.

        * heap/Heap.cpp: Gave Heap the ability to keep track of the length of its last 
        GC length so that the GC Activity Callback can use it.
        (JSC::Heap::Heap):
        (JSC::Heap::collect):
        * heap/Heap.h:
        (JSC::Heap::lastGCLength):
        (Heap):
        * runtime/GCActivityCallbackCF.cpp:
        (JSC):
        (JSC::DefaultGCActivityCallback::operator()): Use the length of the Heap's last 
        GC to determine the length of our timer trigger (currently set at 100x the duration 
        of the last GC).

2012-03-06  Rob Buis  <rbuis@rim.com>

        BlackBerry] Fix cast-align gcc warnings when compiling JSC
        https://bugs.webkit.org/show_bug.cgi?id=80420

        Reviewed by Gavin Barraclough.

        Fix warnings given in Blackberry build.

        * heap/CopiedBlock.h:
        (JSC::CopiedBlock::CopiedBlock):
        * wtf/RefCountedArray.h:
        (WTF::RefCountedArray::Header::fromPayload):

2012-03-06  Gavin Barraclough  <barraclough@apple.com>

        writable/configurable not respected for some properties of Function/String/Arguments
        https://bugs.webkit.org/show_bug.cgi?id=80436

        Reviewed by Oliver Hunt.

        Special properties should behave like regular properties.

        * runtime/Arguments.cpp:
        (JSC::Arguments::defineOwnProperty):
            - Mis-nested logic for making read-only properties non-live.
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::put):
            - arguments/length/caller are non-writable, non-configurable - reject appropriately.
        (JSC::JSFunction::deleteProperty):
            - Attempting to delete prototype/caller should fail.
        (JSC::JSFunction::defineOwnProperty):
            - Ensure prototype is reified on attempt to reify it.
            - arguments/length/caller are non-writable, non-configurable - reject appropriately.
        * runtime/JSFunction.h:
            - added declaration for defineOwnProperty.
        (JSFunction):
        * runtime/StringObject.cpp:
        (JSC::StringObject::put):
            - length is non-writable, non-configurable - reject appropriately.

2012-03-06  Ulan Degenbaev  <ulan@chromium.org>

        TypedArray subarray call for subarray does not clamp the end index parameter properly
        https://bugs.webkit.org/show_bug.cgi?id=80285

        Reviewed by Kenneth Russell.

        * wtf/ArrayBufferView.h:
        (WTF::ArrayBufferView::calculateOffsetAndLength):

2012-03-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r109837.
        http://trac.webkit.org/changeset/109837
        https://bugs.webkit.org/show_bug.cgi?id=80399

        breaks Mac Productions builds, too late to try and fix it
        tonight (Requested by eseidel on #webkit).

        * API/tests/JSNode.c:
        * API/tests/JSNodeList.c:
        * Configurations/Base.xcconfig:
        * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/MacroAssemblerCodeRef.h:
        * bytecompiler/BytecodeGenerator.h:
        * dfg/DFGOperations.cpp:
        * heap/GCAssertions.h:
        * heap/HandleHeap.h:
        * heap/HandleStack.h:
        * heap/MarkedSpace.h:
        * heap/PassWeak.h:
        * heap/Strong.h:
        * heap/Weak.h:
        * jit/HostCallReturnValue.cpp:
        * jit/JIT.cpp:
        * jit/JITStubs.cpp:
        * jit/ThunkGenerators.cpp:
        * parser/Lexer.cpp:
        * runtime/Completion.cpp:
        * runtime/Executable.cpp:
        * runtime/Identifier.h:
        * runtime/InitializeThreading.cpp:
        * runtime/JSDateMath.cpp:
        * runtime/JSGlobalObjectFunctions.cpp:
        * runtime/JSStringBuilder.h:
        * runtime/JSVariableObject.h:
        * runtime/NumberPrototype.cpp:
        * runtime/WriteBarrier.h:
        * tools/CodeProfile.cpp:
        * tools/TieredMMapArray.h:
        * yarr/YarrJIT.cpp:

2012-03-06  Zoltan Herczeg  <zherczeg@webkit.org>

        [Qt][ARM] Speculative buildfix after r109834.

        Reviewed by Csaba Osztrogonác.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::and32):
        (MacroAssemblerARM):

2012-03-05  Gavin Barraclough  <barraclough@apple.com>

        Unreviewed windows build fix pt 2.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-03-05  Gavin Barraclough  <barraclough@apple.com>

        Unreviewed windows build fix pt 1.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-03-05  Gavin Barraclough  <barraclough@apple.com>

        putByIndex should throw in strict mode
        https://bugs.webkit.org/show_bug.cgi?id=80335

        Reviewed by Filip Pizlo.

        Make the MethodTable PutByIndex trap take a boolean 'shouldThrow' parameter.

        This is a largely mechanical change, simply adding an extra parameter to a number
        of functions. Some call sites need perform additional exception checks, and
        operationPutByValBeyondArrayBounds needs to know whether it is strict or not.

        This patch doesn't fix a missing throw from some cases of shift/unshift (this is
        an existing bug), I'll follow up with a third patch to handle that.

        * API/JSObjectRef.cpp:
        (JSObjectSetPropertyAtIndex):
        * JSCTypedArrayStubs.h:
        (JSC):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::putByVal):
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jsc.cpp:
        (GlobalObject::finishCreation):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/Arguments.cpp:
        (JSC::Arguments::putByIndex):
        * runtime/Arguments.h:
        (Arguments):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncPush):
        (JSC::arrayProtoFuncReverse):
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSort):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        * runtime/ClassInfo.h:
        (MethodTable):
        * runtime/JSArray.cpp:
        (JSC::SparseArrayValueMap::put):
        (JSC::JSArray::put):
        (JSC::JSArray::putByIndex):
        (JSC::JSArray::putByIndexBeyondVectorLength):
        (JSC::JSArray::push):
        (JSC::JSArray::shiftCount):
        (JSC::JSArray::unshiftCount):
        * runtime/JSArray.h:
        (SparseArrayValueMap):
        (JSArray):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::putByIndex):
        * runtime/JSByteArray.h:
        (JSByteArray):
        * runtime/JSCell.cpp:
        (JSC::JSCell::putByIndex):
        * runtime/JSCell.h:
        (JSCell):
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::putByIndex):
        * runtime/JSNotAnObject.h:
        (JSNotAnObject):
        * runtime/JSONObject.cpp:
        (JSC::Walker::walk):
        * runtime/JSObject.cpp:
        (JSC::JSObject::putByIndex):
        * runtime/JSObject.h:
        (JSC::JSValue::putByIndex):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpMatchesArray::fillArrayInstance):
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::putByIndex):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncSplit):

2012-03-05  Yuqiang Xian  <yuqiang.xian@intel.com>

        PredictNone is incorrectly treated as isDoublePrediction
        https://bugs.webkit.org/show_bug.cgi?id=80365

        Reviewed by Filip Pizlo.

        Also it is incorrectly treated as isFixedIndexedStorageObjectPrediction.

        * bytecode/PredictedType.h:
        (JSC::isFixedIndexedStorageObjectPrediction):
        (JSC::isDoublePrediction):

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

        The LLInt should work even when the JIT is disabled
        https://bugs.webkit.org/show_bug.cgi?id=80340
        <rdar://problem/10922235>

        Reviewed by Gavin Barraclough.

        * assembler/MacroAssemblerCodeRef.h:
        (JSC::MacroAssemblerCodePtr::createLLIntCodePtr):
        (MacroAssemblerCodeRef):
        (JSC::MacroAssemblerCodeRef::createLLIntCodeRef):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::initialize):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        * jit/JIT.h:
        (JSC::JIT::compileCTINativeCall):
        * jit/JITStubs.h:
        (JSC::JITThunks::ctiNativeCall):
        (JSC::JITThunks::ctiNativeConstruct):
        * llint/LLIntEntrypoints.cpp:
        (JSC::LLInt::getFunctionEntrypoint):
        (JSC::LLInt::getEvalEntrypoint):
        (JSC::LLInt::getProgramEntrypoint):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (LLInt):
        * llint/LLIntSlowPaths.h:
        (LLInt):
        * llint/LowLevelInterpreter.h:
        * llint/LowLevelInterpreter32_64.asm:
        * runtime/Executable.h:
        (NativeExecutable):
        (JSC::NativeExecutable::create):
        (JSC::NativeExecutable::finishCreation):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        (JSGlobalData):
        * runtime/Options.cpp:
        (Options):
        (JSC::Options::parse):
        (JSC::Options::initializeOptions):
        * runtime/Options.h:
        (Options):
        * wtf/Platform.h:

2012-03-05  Yuqiang Xian  <yuqiang.xian@intel.com>

        Checks for dead variables are not sufficient when fixing the expected
        values in DFG OSR entry
        https://bugs.webkit.org/show_bug.cgi?id=80371

        Reviewed by Filip Pizlo.

        A dead variable should be identified when there's no node referencing it.
        But we currently failed to catch the case where there are some nodes
        referencing a variable but those nodes are actually not referenced by
        others so will be ignored in code generation. In such case we should
        also consider that variable to be a dead variable in the block and fix
        the expected values.
        This is performance neutral on SunSpider, V8 and Kraken.

        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::noticeOSREntry):

2012-03-05  Oliver Hunt  <oliver@apple.com>

        Fix Qt build.

        * assembler/AbstractMacroAssembler.h:
        * assembler/MacroAssembler.h:
        (MacroAssembler):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileArithSub):
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emitSub32Constant):

2012-03-05  Eric Seidel  <eric@webkit.org>

        Update JavaScriptCore files to use fully-qualified WTF include paths
        https://bugs.webkit.org/show_bug.cgi?id=79960

        Reviewed by Adam Barth.

        This change does 5 small/related things:
         1. Updates JavaScriptCore.xcodeproj to install WTF headers into $BUILD/usr/local/include
            (WebCore, WebKit were already setup to look there, but JavaScriptCore.xcodeproj
            was not installing headers there.)
         2. Makes JavaScriptCore targets include $BUILD/usr/local/include in their
            header search path, as that's where the WTF headers will be installed.
         3. Similarly updates JavaScriptCore.vcproj/copy-files.cmd to copy WTF headers to PrivateHeaders/wtf/*
            in addition to the current behavior of flattening all headers to PrivateHeaders/*.h.
         4. Updates a bunch of JSC files to use #include <wtf/Foo.h> instead of #include "Foo.h"
            since soon the WTF headers will not be part of the JavaScriptCore Xcode project.
         5. Makes build-webkit build the WTF XCode project by default.

        * API/tests/JSNode.c:
        * API/tests/JSNodeList.c:
        * Configurations/Base.xcconfig:
        * assembler/MacroAssemblerCodeRef.h:
        * bytecompiler/BytecodeGenerator.h:
        * dfg/DFGOperations.cpp:
        * heap/GCAssertions.h:
        * heap/HandleHeap.h:
        * heap/HandleStack.h:
        * heap/MarkedSpace.h:
        * heap/PassWeak.h:
        * heap/Strong.h:
        * heap/Weak.h:
        * jit/HostCallReturnValue.cpp:
        * jit/JIT.cpp:
        * jit/JITStubs.cpp:
        * jit/ThunkGenerators.cpp:
        * parser/Lexer.cpp:
        * runtime/Completion.cpp:
        * runtime/Executable.cpp:
        * runtime/Identifier.h:
        * runtime/InitializeThreading.cpp:
        * runtime/JSDateMath.cpp:
        * runtime/JSGlobalObjectFunctions.cpp:
        * runtime/JSStringBuilder.h:
        * runtime/JSVariableObject.h:
        * runtime/NumberPrototype.cpp:
        * runtime/WriteBarrier.h:
        * tools/CodeProfile.cpp:
        * tools/TieredMMapArray.h:
        * yarr/YarrJIT.cpp:

2012-03-05  Oliver Hunt  <oliver@apple.com>

        Add basic support for constant blinding to the JIT
        https://bugs.webkit.org/show_bug.cgi?id=80354

        Reviewed by Filip Pizlo.

        This patch adds basic constant blinding support to the JIT, at the
        MacroAssembler level.  This means all JITs in JSC (Yarr, baseline, and DFG)
        get constant blinding.  Woo!

        This patch only introduces blinding for Imm32, a later patch will do similar
        for ImmPtr.  In order to make misuse of Imm32 as a trusted type essentially
        impossible, we make TrustedImm32 a private parent of Imm32 and add an explicit
        accessor that's needed to access the actual value.  This also means you cannot
        accidentally pass an untrusted value to a function that does not perform
        blinding.

        To make everything work sensibly, this patch also corrects some code that was using
        Imm32 when TrustedImm32 could be used, and refactors a few callers that use
        untrusted immediates, so that they call slightly different varaints of the functions
        that they used previously.  This is largely necessary to deal with x86-32 not having
        sufficient registers to handle the additional work required when we choose to blind
        a constant.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::Imm32::asTrustedImm32):
        (Imm32):
        (JSC::AbstractMacroAssembler::beginUninterruptedSequence):
        (JSC::AbstractMacroAssembler::endUninterruptedSequence):
        (JSC::AbstractMacroAssembler::AbstractMacroAssembler):
        (AbstractMacroAssembler):
        (JSC::AbstractMacroAssembler::inUninterruptedSequence):
        (JSC::AbstractMacroAssembler::random):
        (JSC::AbstractMacroAssembler::scratchRegisterForBlinding):
        (JSC::AbstractMacroAssembler::shouldBlindForSpecificArch):
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::addressForPoke):
        (MacroAssembler):
        (JSC::MacroAssembler::poke):
        (JSC::MacroAssembler::branchPtr):
        (JSC::MacroAssembler::branch32):
        (JSC::MacroAssembler::convertInt32ToDouble):
        (JSC::MacroAssembler::shouldBlind):
        (JSC::MacroAssembler::BlindedImm32::BlindedImm32):
        (BlindedImm32):
        (JSC::MacroAssembler::keyForConstant):
        (JSC::MacroAssembler::xorBlindConstant):
        (JSC::MacroAssembler::additionBlindedConstant):
        (JSC::MacroAssembler::andBlindedConstant):
        (JSC::MacroAssembler::orBlindedConstant):
        (JSC::MacroAssembler::loadXorBlindedConstant):
        (JSC::MacroAssembler::add32):
        (JSC::MacroAssembler::addPtr):
        (JSC::MacroAssembler::and32):
        (JSC::MacroAssembler::andPtr):
        (JSC::MacroAssembler::move):
        (JSC::MacroAssembler::or32):
        (JSC::MacroAssembler::store32):
        (JSC::MacroAssembler::sub32):
        (JSC::MacroAssembler::subPtr):
        (JSC::MacroAssembler::xor32):
        (JSC::MacroAssembler::branchAdd32):
        (JSC::MacroAssembler::branchMul32):
        (JSC::MacroAssembler::branchSub32):
        (JSC::MacroAssembler::trustedImm32ForShift):
        (JSC::MacroAssembler::lshift32):
        (JSC::MacroAssembler::rshift32):
        (JSC::MacroAssembler::urshift32):
        * assembler/MacroAssemblerARMv7.h:
        (MacroAssemblerARMv7):
        (JSC::MacroAssemblerARMv7::scratchRegisterForBlinding):
        (JSC::MacroAssemblerARMv7::shouldBlindForSpecificArch):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::branchSubPtr):
        (MacroAssemblerX86_64):
        (JSC::MacroAssemblerX86_64::scratchRegisterForBlinding):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::linkOSRExits):
        (JSC::DFG::JITCompiler::compileBody):
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGOSRExitCompiler32_64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOSRExitCompiler64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::compileArithSub):
        (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        (JSC::DFG::SpeculativeJIT::compileObjectEquality):
        (JSC::DFG::SpeculativeJIT::compileDoubleCompare):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        (JSC::DFG::SpeculativeJIT::compileDoubleCompare):
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::compileBinaryArithOp):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emit_op_div):
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emitAdd32Constant):
        (JSC::JIT::emitSub32Constant):
        (JSC::JIT::emitBinaryDoubleOp):
        (JSC::JIT::emitSlow_op_mul):
        (JSC::JIT::emit_op_div):
        * jit/JITCall.cpp:
        (JSC::JIT::compileLoadVarargs):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileLoadVarargs):
        * jit/JITInlineMethods.h:
        (JSC::JIT::updateTopCallFrame):
        (JSC::JIT::emitValueProfilingSite):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emitSlow_op_jfalse):
        (JSC::JIT::emitSlow_op_jtrue):
        * jit/JITStubCall.h:
        (JITStubCall):
        (JSC::JITStubCall::addArgument):
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::backtrack):

2012-03-05  Gavin Barraclough  <barraclough@apple.com>

        putByIndex should throw in strict mode
        https://bugs.webkit.org/show_bug.cgi?id=80335

        Reviewed by Filip Pizlo.

        We'll need to pass an additional parameter.

        Part 1 - rename JSValue::put() for integer indices to JSValue::putByIndex()
        to match the method in the MethodTable, make this take a parameter indicating
        whether the put should throw. This fixes the cases where the base of the put
        is a primitive.

        * dfg/DFGOperations.cpp:
        (DFG):
        (JSC::DFG::putByVal):
        (JSC::DFG::operationPutByValInternal):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/JSObject.h:
        (JSC::JSValue::putByIndex):
        * runtime/JSValue.cpp:
        (JSC):
        * runtime/JSValue.h:
        (JSValue):

2012-03-05  Sam Weinig  <sam@webkit.org>

        Add support for hosting layers in the window server in WebKit2
        <rdar://problem/10400246>
        https://bugs.webkit.org/show_bug.cgi?id=80310

        Reviewed by Anders Carlsson.

        * wtf/Platform.h:
        Add HAVE_LAYER_HOSTING_IN_WINDOW_SERVER.

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

        Unreviewed, attempted build fix for !ENABLE(JIT) after r109705.

        * bytecode/ExecutionCounter.cpp:
        (JSC::ExecutionCounter::applyMemoryUsageHeuristics):
        * bytecode/ExecutionCounter.h:

2012-03-05  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed. Build fix for !ENABLE(JIT) after r109705.

        * bytecode/ExecutionCounter.cpp:
        * bytecode/ExecutionCounter.h:

2012-03-05  Andy Wingo  <wingo@igalia.com>

        Lexer: Specialize character predicates for LChar, UChar
        https://bugs.webkit.org/show_bug.cgi?id=79677

        Reviewed by Oliver Hunt.

        This patch specializes isIdentStart, isIdentPart, isWhiteSpace,
        and isLineTerminator to perform a more limited number of checks if
        the lexer is being instantiated to work on LChar sequences.  This
        is about a 1.5% win on the --parse-only suite, here.

        * parser/Lexer.cpp:
        (JSC::isLatin1): New static helper, specialized for LChar and
        UChar.
        (JSC::typesOfLatin1Characters): Rename from
        typesOfASCIICharacters, and expand to the range of the LChar
        type.  All uses of isASCII are changed to use isLatin1.  Generated
        using libunistring.
        (JSC::isNonLatin1IdentStart):
        (JSC::isIdentStart):
        (JSC::isNonLatin1IdentPart):
        (JSC::isIdentPart):
        (JSC::Lexer::shiftLineTerminator):
        (JSC::Lexer::parseIdentifier):
        (JSC::Lexer::parseIdentifierSlowCase):
        (JSC::Lexer::parseStringSlowCase):
        (JSC::Lexer::parseMultilineComment):
        (JSC::Lexer::lex):
        (JSC::Lexer::scanRegExp):
        (JSC::Lexer::skipRegExp): Sprinkle static_cast<T>(_) around.
        * parser/Lexer.h:
        (JSC::Lexer::isWhiteSpace):
        (JSC::Lexer::isLineTerminator):
        * KeywordLookupGenerator.py:
        (Trie.printAsC): Declare specialized isIdentPart static functions.

2012-03-05  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing header file.

2012-03-05  Andy Wingo  <wingo@igalia.com>

        WTF: Micro-optimize cleanup of empty vectors and hash tables
        https://bugs.webkit.org/show_bug.cgi?id=79903

        Reviewed by Michael Saboff and Geoffrey Garen.

        This patch speeds up cleanup of vectors and hash tables whose
        backing store was never allocated.  This is the case by default
        for most vectors / hash tables that never had any entries added.

        The result for me is that calling checkSyntax 1000 times on
        concat-jquery-mootools-prototype.js goes from 6.234s to 6.068s, a
        2.4% speedup.

        * wtf/HashTable.h:
        (WTF::HashTable::~HashTable):
        (WTF::::clear): Don't deallocate the storage or frob member
        variables if there is no backing storage.
        * wtf/Vector.h:
        (WTF::VectorBufferBase::deallocateBuffer): Likewise.

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

        JIT heuristics should be hyperbolic
        https://bugs.webkit.org/show_bug.cgi?id=80055
        <rdar://problem/10922260>

        Reviewed by Oliver Hunt.
        
        Added tracking of the amount of executable memory typically used for a bytecode
        instruction. Modified the execution counter scheme to use this, and the amount
        of free memory, to determine how long to wait before invoking the JIT.
        
        The result is that even if we bomb the VM with more code than can fit in our
        executable memory pool, we still keep running and almost never run out of
        executable memory - which ensures that if we have to JIT something critical, then
        we'll likely have enough memory to do so. This also does not regress performance
        on the three main benchmarks.
        
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::predictedMachineCodeSize):
        (JSC):
        (JSC::CodeBlock::usesOpcode):
        * bytecode/CodeBlock.h:
        (CodeBlock):
        (JSC::CodeBlock::checkIfJITThresholdReached):
        (JSC::CodeBlock::dontJITAnytimeSoon):
        (JSC::CodeBlock::jitAfterWarmUp):
        (JSC::CodeBlock::jitSoon):
        (JSC::CodeBlock::llintExecuteCounter):
        (JSC::CodeBlock::counterValueForOptimizeAfterWarmUp):
        (JSC::CodeBlock::counterValueForOptimizeAfterLongWarmUp):
        (JSC::CodeBlock::addressOfJITExecuteCounter):
        (JSC::CodeBlock::offsetOfJITExecuteCounter):
        (JSC::CodeBlock::offsetOfJITExecutionActiveThreshold):
        (JSC::CodeBlock::offsetOfJITExecutionTotalCount):
        (JSC::CodeBlock::jitExecuteCounter):
        (JSC::CodeBlock::checkIfOptimizationThresholdReached):
        (JSC::CodeBlock::optimizeNextInvocation):
        (JSC::CodeBlock::dontOptimizeAnytimeSoon):
        (JSC::CodeBlock::optimizeAfterWarmUp):
        (JSC::CodeBlock::optimizeAfterLongWarmUp):
        (JSC::CodeBlock::optimizeSoon):
        * bytecode/ExecutionCounter.cpp: Added.
        (JSC):
        (JSC::ExecutionCounter::ExecutionCounter):
        (JSC::ExecutionCounter::checkIfThresholdCrossedAndSet):
        (JSC::ExecutionCounter::setNewThreshold):
        (JSC::ExecutionCounter::deferIndefinitely):
        (JSC::ExecutionCounter::applyMemoryUsageHeuristics):
        (JSC::ExecutionCounter::applyMemoryUsageHeuristicsAndConvertToInt):
        (JSC::ExecutionCounter::hasCrossedThreshold):
        (JSC::ExecutionCounter::setThreshold):
        (JSC::ExecutionCounter::reset):
        * bytecode/ExecutionCounter.h: Added.
        (JSC):
        (ExecutionCounter):
        (JSC::ExecutionCounter::formattedTotalCount):
        * dfg/DFGOSRExitCompiler32_64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOSRExitCompiler64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * jit/ExecutableAllocator.cpp:
        (JSC::DemandExecutableAllocator::allocateNewSpace):
        (JSC::ExecutableAllocator::underMemoryPressure):
        (JSC):
        (JSC::ExecutableAllocator::memoryPressureMultiplier):
        * jit/ExecutableAllocator.h:
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::ExecutableAllocator::memoryPressureMultiplier):
        (JSC):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * llint/LLIntSlowPaths.cpp:
        (JSC::LLInt::jitCompileAndSetHeuristics):
        * llint/LowLevelInterpreter32_64.asm:
        * runtime/JSGlobalData.h:
        (JSGlobalData):
        * runtime/Options.cpp:
        (Options):
        (JSC::Options::initializeOptions):
        * runtime/Options.h:
        (Options):
        * wtf/SimpleStats.h: Added.
        (WTF):
        (SimpleStats):
        (WTF::SimpleStats::SimpleStats):
        (WTF::SimpleStats::add):
        (WTF::SimpleStats::operator!):
        (WTF::SimpleStats::count):
        (WTF::SimpleStats::sum):
        (WTF::SimpleStats::sumOfSquares):
        (WTF::SimpleStats::mean):
        (WTF::SimpleStats::variance):
        (WTF::SimpleStats::standardDeviation):

2012-03-04  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [CMake] Libraries are installed to /usr/lib and not /usr/lib64 on x86_64
        https://bugs.webkit.org/show_bug.cgi?id=71507

        Reviewed by Antonio Gomes.

        * CMakeLists.txt: Use ${LIB_INSTALL_DIR} instead of hardcoding "lib".

2012-03-04  David Kilzer  <ddkilzer@apple.com>

        Fix build when the classic interpreter is enabled

        Reviewed by Gavin Barraclough.

        Fixes the following build error when running the "Generate
        Derived Sources" build phase script:

            offlineasm: Parsing JavaScriptCore/llint/LowLevelInterpreter.asm and ../../JSCLLIntOffsetsExtractor and creating assembly file LLIntAssembly.h.
            ./JavaScriptCore/offlineasm/offsets.rb:145:in `offsetsAndConfigurationIndex': unhandled exception
                    from JavaScriptCore/offlineasm/asm.rb:131
            Command /bin/sh failed with exit code 1

        Gavin's fix in r109674 avoided the #error statement in
        JITStubs.h when compiling LLIntOffsetsExtractor.cpp, but it
        caused the "Generate Derived Sources" build phase script to fail
        when JavaScriptCore/offlineasm/asm.rb was run.  The solution is
        to detect when the classic interpreter is being built and simply
        exit early from asm.rb in that case.

        * llint/LLIntOffsetsExtractor.cpp:
        (JSC::LLIntOffsetsExtractor::dummy): Return NULL pointer if the
        JIT is disabled.  Note that offsets.rb doesn't care about the
        return value here, but instead it cares about finding the magic
        values in the binary.  The magic values are no longer present
        when the JIT is disabled.
        * offlineasm/asm.rb: Catch MissingMagicValuesException and exit
        early with a status message.
        * offlineasm/offsets.rb:
        (MissingMagicValuesException): Add new exception class.
        (offsetsAndConfigurationIndex): Throw
        MissingMagicValuesException when no magic values are found.

2012-03-04  Jurij Smakov  <jurij@wooyd.org>

        SPARC also needs aligned accesses.

        Rubber-stamped by Gustavo Noronha Silva.

        * wtf/Platform.h:

2012-03-04  Gavin Barraclough  <barraclough@apple.com>

        Unreviewed build fix.

        * jit/JITStubs.h:
            - Move ENABLE(JIT) to head of file.

2012-03-03  Gavin Barraclough  <barraclough@apple.com>

        Split JSArray's [[Put]] & [[DefineOwnProperty]] traps.
        https://bugs.webkit.org/show_bug.cgi?id=80217

        Reviewed by Filip Pizlo.

        putByIndex() provides similar behavior to put(), but for indexed property names.
        Many places in ArrayPrototype call putByIndex() where they really mean to call
        [[DefineOwnProperty]]. This is only okay due to a bug – putByIndex should be
        calling numeric accessors (& respecting numeric read only properties) on the
        prototype chain, but isn't. Add a new putDirectIndex (matching JSObject's
        putDirect* methods), to correctly provide a fast [[DefineOwnProperty]] interface.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncConcat):
        (JSC::arrayProtoFuncSlice):
        (JSC::arrayProtoFuncFilter):
        (JSC::arrayProtoFuncMap):
        * runtime/JSArray.cpp:
        (JSC):
        (JSC::reject):
        (JSC::SparseArrayValueMap::putDirect):
        (JSC::JSArray::defineOwnNumericProperty):
        (JSC::JSArray::putByIndexBeyondVectorLength):
        (JSC::JSArray::putDirectIndexBeyondVectorLength):
        * runtime/JSArray.h:
        (SparseArrayValueMap):
        (JSArray):
        (JSC::JSArray::putDirectIndex):

2012-03-03  Benjamin Poulain  <benjamin@webkit.org>

        Implement the basis of KURLWTFURL
        https://bugs.webkit.org/show_bug.cgi?id=79600

        Reviewed by Adam Barth.

        Add an API to know if a ParsedURL is valid.

        * wtf/url/api/ParsedURL.cpp:
        (WTF::ParsedURL::ParsedURL):
        (WTF):
        (WTF::ParsedURL::isolatedCopy): This is needed by APIs moving URL objects between thread
        and by KURL's detach() on write.
        (WTF::ParsedURL::baseAsString):
        (WTF::ParsedURL::segment):
        Add a stronger constraint on accessors: the client of this API should never ask for the segments
        on an invalid URL.
        * wtf/url/api/ParsedURL.h:
        (WTF):
        (WTF::ParsedURL::ParsedURL):
        (ParsedURL):
        (WTF::ParsedURL::isValid):

2012-03-03  Hans Wennborg  <hans@chromium.org>

        Implement Speech JavaScript API
        https://bugs.webkit.org/show_bug.cgi?id=80019

        Reviewed by Adam Barth.

        Add ENABLE_SCRIPTED_SPEECH.

        * Configurations/FeatureDefines.xcconfig:

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

        When getting the line number of a call into a call frame with no code block, it's
        incorrect to rely on the returnPC
        https://bugs.webkit.org/show_bug.cgi?id=80195

        Reviewed by Oliver Hunt.

        * interpreter/Interpreter.cpp:
        (JSC::getCallerInfo):
        * jit/JITCall.cpp:
        (JSC::JIT::compileLoadVarargs):

2012-03-02  Han Hojong  <hojong.han@samsung.com>

        Expected results updated for checking type conversion
        https://bugs.webkit.org/show_bug.cgi?id=80138

        Reviewed by Gavin Barraclough.

        * tests/mozilla/ecma/TypeConversion/9.3.1-3.js:

2012-03-02  Kenichi Ishibashi  <bashi@chromium.org>

        Adding WebSocket per-frame DEFLATE extension
        https://bugs.webkit.org/show_bug.cgi?id=77522

        Added USE(ZLIB) flag.

        Reviewed by Kent Tamura.

        * wtf/Platform.h:

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

        Unreviewed build fix for platforms that have DFG_JIT disabled but PARALLEL_GC enabled.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitAggregate):

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

        DFGCodeBlocks should not trace CodeBlocks that are also going to be traced by
        virtue of being in the transitive closure
        https://bugs.webkit.org/show_bug.cgi?id=80098
 
        Reviewed by Anders Carlsson.
        
        If DFGCodeBlocks traces a CodeBlock that might also be traced via its owner Executable,
        then you might have the visitAggregate() method called concurrently by multiple threads.
        This is benign on 64-bit -- visitAggregate() and everything it calls turns out to be
        racy and slightly imprecise but not unsound. But on 32-bit, visitAggregate() may crash
        due to word tearing in ValueProfile bucket updates inside of computeUpdatedPrediction().
        
        It would seem that the fix is just to have DFGCodeBlocks not trace CodeBlocks that are
        not jettisoned. But CodeBlocks may be jettisoned later during the GC, so it must trace
        any CodeBlock that it knows to be live by virtue of it being reachable from the stack.
        Hence the real fix is to make sure that concurrent calls into CodeBlock::visitAggregate()
        don't lead to two threads racing over each other as they clobber state. This patch
        achieves this with a simple CAS loop: whichever thread wins the CAS race (which is
        trivially linearizable) will get to trace the CodeBlock; all other threads give up and
        go home.
        
        Unfortunately there will be no new tests. It's possible to reproduce this maybe 1/10
        times by running V8-v6's raytrace repeatedly, using the V8 harness hacked to rerun it
        even when it's gotten sufficient counts. But that takes a while - sometimes up to a
        minute to get a crash. I have no other reliable repro case.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitAggregate):
        * bytecode/CodeBlock.h:
        (DFGData):
        * heap/DFGCodeBlocks.cpp:
        (JSC::DFGCodeBlocks::clearMarks):

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

        The JIT should not crash the entire process just because there is not enough executable
        memory, if the LLInt is enabled
        https://bugs.webkit.org/show_bug.cgi?id=79962

        Reviewed by Csaba Osztrogonác.
        
        Fix for ARM, SH4.

        * assembler/AssemblerBufferWithConstantPool.h:
        (JSC::AssemblerBufferWithConstantPool::executableCopy):

2012-03-01  Ryosuke Niwa  <rniwa@webkit.org>

        Revert my change. Broke builds.
        Source/JavaScriptCore/wtf/Atomics.h:188: error: redefinition of 'bool WTF::weakCompareAndSwap(volatile uintptr_t*, uintptr_t, uintptr_t)'
        Source/JavaScriptCore/wtf/Atomics.h:122: error: 'bool WTF::weakCompareAndSwap(volatile unsigned int*, unsigned int, unsigned i

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

2012-03-01  Ryosuke Niwa  <rniwa@webkit.org>

        Gcc build fix.

        Rubber-stamped by Filip Pizlo.

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

2012-03-01  Gavin Barraclough  <barraclough@apple.com>

        ES5.1-15.3.5.4. prohibits Function.caller from [[Get]]ting a strict caller
        https://bugs.webkit.org/show_bug.cgi?id=80011

        Reviewed by Oliver Hunt.

        Also, fix getting the caller from within a bound function, for within a getter,
        or setter (make our implementation match other browsers).

        * interpreter/Interpreter.cpp:
        (JSC::getCallerInfo):
            - Allow this to get the caller of host functions.
        (JSC::Interpreter::retrieveCallerFromVMCode):
            - This should use getCallerInfo, and should skip over function bindings.
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::callerGetter):
            - This should never return a strict-mode function.

2012-03-01  Yuqiang Xian  <yuqiang.xian@intel.com>

        DFG local CSE for a node can be terminated earlier
        https://bugs.webkit.org/show_bug.cgi?id=80014

        Reviewed by Filip Pizlo.

        When one of the node's childredn is met in the process of back traversing
        the nodes, we don't need to traverse the remaining nodes.
        This is performance neutral on SunSpider, V8 and Kraken.

        * dfg/DFGCSEPhase.cpp:
        (JSC::DFG::CSEPhase::pureCSE):
        (JSC::DFG::CSEPhase::impureCSE):
        (JSC::DFG::CSEPhase::getByValLoadElimination):
        (JSC::DFG::CSEPhase::checkFunctionElimination):
        (JSC::DFG::CSEPhase::checkStructureLoadElimination):
        (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
        (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
        (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):

2012-02-29  Yuqiang Xian  <yuqiang.xian@intel.com>

        DFG BasicBlocks should not require that their nodes have continuous indices in the graph
        https://bugs.webkit.org/show_bug.cgi?id=79899

        Reviewed by Filip Pizlo.

        This will make it more convenient to insert nodes into the DFG.
        With this capability we now place the Phi nodes in the corresponding
        blocks.
        Local CSE is modified to not to rely on the assumption of continuous
        node indices in a block.
        This is performance neutral on SunSpider, V8 and Kraken.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::AbstractState):
        (JSC::DFG::AbstractState::beginBasicBlock):
        (JSC::DFG::AbstractState::execute):
        (JSC::DFG::AbstractState::clobberStructures):
        (JSC::DFG::AbstractState::mergeToSuccessors):
        (JSC::DFG::AbstractState::dump):
        * dfg/DFGAbstractState.h:
        (JSC::DFG::AbstractState::forNode):
        (AbstractState):
        * dfg/DFGArithNodeFlagsInferencePhase.cpp:
        (ArithNodeFlagsInferencePhase):
        * dfg/DFGBasicBlock.h:
        (JSC::DFG::BasicBlock::BasicBlock):
        (BasicBlock):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addToGraph):
        (ByteCodeParser):
        (JSC::DFG::ByteCodeParser::insertPhiNode):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::processPhiStack):
        (JSC::DFG::ByteCodeParser::linkBlock):
        (JSC::DFG::ByteCodeParser::determineReachability):
        (JSC::DFG::ByteCodeParser::parseCodeBlock):
        * dfg/DFGCFAPhase.cpp:
        (JSC::DFG::CFAPhase::performBlockCFA):
        (CFAPhase):
        * dfg/DFGCSEPhase.cpp:
        (JSC::DFG::CSEPhase::CSEPhase):
        (JSC::DFG::CSEPhase::endIndexForPureCSE):
        (JSC::DFG::CSEPhase::pureCSE):
        (JSC::DFG::CSEPhase::impureCSE):
        (JSC::DFG::CSEPhase::globalVarLoadElimination):
        (JSC::DFG::CSEPhase::getByValLoadElimination):
        (JSC::DFG::CSEPhase::checkFunctionElimination):
        (JSC::DFG::CSEPhase::checkStructureLoadElimination):
        (JSC::DFG::CSEPhase::getByOffsetLoadElimination):
        (JSC::DFG::CSEPhase::getPropertyStorageLoadElimination):
        (JSC::DFG::CSEPhase::getIndexedPropertyStorageLoadElimination):
        (JSC::DFG::CSEPhase::getScopeChainLoadElimination):
        (JSC::DFG::CSEPhase::performNodeCSE):
        (JSC::DFG::CSEPhase::performBlockCSE):
        (CSEPhase):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGPhase.cpp:
        (JSC::DFG::Phase::beginPhase):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativeCompare):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeStrictEq):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
        (JSC::DFG::SpeculativeJIT::compileStrictEq):
        * dfg/DFGSpeculativeJIT.h:
        (SpeculativeJIT):
        (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
        (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
        * dfg/DFGVirtualRegisterAllocationPhase.cpp:
        (JSC::DFG::VirtualRegisterAllocationPhase::run):

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

        The JIT should not crash the entire process just because there is not
        enough executable memory, if the LLInt is enabled
        https://bugs.webkit.org/show_bug.cgi?id=79962
        <rdar://problem/10922215>

        Unreviewed, adding forgotten file.

        * jit/JITCompilationEffort.h: Added.
        (JSC):

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

        The JIT should not crash the entire process just because there is not
        enough executable memory, if the LLInt is enabled
        https://bugs.webkit.org/show_bug.cgi?id=79962
        <rdar://problem/10922215>

        Reviewed by Gavin Barraclough.
        
        Added the notion of JITCompilationEffort. If we're JIT'ing as a result of
        a tier-up, then we set it to JITCompilationCanFail. Otherwise it's
        JITCompilationMustSucceed. This preserves the old behavior of LLInt is
        disabled or if we're compiling something that can't be interpreted (like
        an OSR exit stub).

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::executableCopy):
        * assembler/ARMAssembler.h:
        (ARMAssembler):
        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::executableCopy):
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::LinkBuffer):
        (JSC::LinkBuffer::~LinkBuffer):
        (LinkBuffer):
        (JSC::LinkBuffer::didFailToAllocate):
        (JSC::LinkBuffer::isValid):
        (JSC::LinkBuffer::linkCode):
        (JSC::LinkBuffer::performFinalization):
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::executableCopy):
        * assembler/SH4Assembler.h:
        (JSC::SH4Assembler::executableCopy):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::executableCopy):
        (JSC::X86Assembler::X86InstructionFormatter::executableCopy):
        * bytecode/CodeBlock.cpp:
        (JSC::ProgramCodeBlock::jitCompileImpl):
        (JSC::EvalCodeBlock::jitCompileImpl):
        (JSC::FunctionCodeBlock::jitCompileImpl):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::jitCompile):
        (CodeBlock):
        (ProgramCodeBlock):
        (EvalCodeBlock):
        (FunctionCodeBlock):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compile):
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGJITCompiler.h:
        (JITCompiler):
        * jit/ExecutableAllocator.cpp:
        (JSC::DemandExecutableAllocator::allocateNewSpace):
        (JSC::ExecutableAllocator::allocate):
        * jit/ExecutableAllocator.h:
        (ExecutableAllocator):
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::ExecutableAllocator::allocate):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        (JSC::JIT::compile):
        (JIT):
        * jit/JITCompilationEffort.h: Added.
        (JSC):
        * jit/JITDriver.h:
        (JSC::jitCompileIfAppropriate):
        (JSC::jitCompileFunctionIfAppropriate):
        * llint/LLIntSlowPaths.cpp:
        (LLInt):
        (JSC::LLInt::jitCompileAndSetHeuristics):
        (JSC::LLInt::entryOSR):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::jitCompile):
        (JSC::ProgramExecutable::jitCompile):
        (JSC::FunctionExecutable::jitCompileForCall):
        (JSC::FunctionExecutable::jitCompileForConstruct):
        * runtime/Executable.h:
        (EvalExecutable):
        (ProgramExecutable):
        (FunctionExecutable):
        (JSC::FunctionExecutable::jitCompileFor):
        * runtime/ExecutionHarness.h:
        (JSC::prepareForExecution):
        (JSC::prepareFunctionForExecution):

2012-02-29  No'am Rosenthal  <noam.rosenthal@nokia.com>

        [Qt][WK2] Get rid of the #ifdef mess in LayerTreeHost[Proxy]
        https://bugs.webkit.org/show_bug.cgi?id=79501

        Enable WTF_USE_UI_SIDE_COMPOSITING for Qt.

        Reviewed by Kenneth Rohde Christiansen.

        * wtf/Platform.h:

2012-02-29  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Oliver Hunt.

        * tests/mozilla/ecma_2/RegExp/constructor-001.js:
        * tests/mozilla/ecma_2/RegExp/function-001.js:
        * tests/mozilla/ecma_2/RegExp/properties-001.js:
            - Check in new test cases results.

2012-02-29  Mark Rowe  <mrowe@apple.com>

        Stop installing JSCLLIntOffsetsExtractor.

        Replace the separate TestRegExp and TestAPI xcconfig files with a single ToolExecutable xcconfig file
        that derives the product name from the target name. We can then use that xcconfig file for JSCLLIntOffsetsExtractor.
        This has the results of setting SKIP_INSTALL = YES for JSCLLIntOffsetsExtractor.

        While I was doing this fiddling I noticed that the JSCLLIntOffsetsExtractor target had a custom value
        for USER_HEADER_SEARCH_PATHS to allow it to find LLIntDesiredOffsets.h. A better way of doing that is
        to add LLIntDesiredOffsets.h to the Xcode project so that it'll be included in the header map. That
        allows us to remove the override of USER_HEADER_SEARCH_PATHS entirely. So I did that too!

        Reviewed by Filip Pizlo.

        * Configurations/TestRegExp.xcconfig: Removed.
        * Configurations/ToolExecutable.xcconfig: Renamed from Source/JavaScriptCore/Configurations/TestAPI.xcconfig.
        * JavaScriptCore.xcodeproj/project.pbxproj:

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

        RefCounted::deprecatedTurnOffVerifier() should not be deprecated
        https://bugs.webkit.org/show_bug.cgi?id=79864

        Reviewed by Oliver Hunt.
        
        Removed the word "deprecated" from the name of this method, since this method
        should not be deprecated. It works just fine as it is, and there is simply no
        alternative to calling this method for many interesting JSC classes.

        * parser/SourceProvider.h:
        (JSC::SourceProvider::SourceProvider):
        * runtime/SymbolTable.h:
        (JSC::SharedSymbolTable::SharedSymbolTable):
        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocatorHandle::MetaAllocatorHandle):
        (WTF::MetaAllocator::allocate):
        * wtf/RefCounted.h:
        (RefCountedBase):
        (WTF::RefCountedBase::turnOffVerifier):

2012-02-29  Gavin Barraclough  <barraclough@apple.com>

        'source' property of RegExp instance cannot be ""
        https://bugs.webkit.org/show_bug.cgi?id=79938

        Reviewed by Oliver Hunt.

        15.10.6.4 specifies that RegExp.prototype.toString must return '/' + source + '/',
        and also states that the result must be a valid RegularExpressionLiteral. '//' is
        not a valid RegularExpressionLiteral (since it is a single line comment), and hence
        source cannot ever validly be "". If the source is empty, return a different Pattern
        that would match the same thing.

        * runtime/RegExpObject.cpp:
        (JSC::regExpObjectSource):
            - Do not return "" if the source is empty, this would lead to invalid behaviour in toString.
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncToString):
            - No need to special case the empty string - this should be being done by 'source'.

2012-02-29  Gavin Barraclough  <barraclough@apple.com>

        Writable attribute not set correctly when redefining an accessor to a data descriptor
        https://bugs.webkit.org/show_bug.cgi?id=79931

        Reviewed by Oliver Hunt.

        * runtime/JSObject.cpp:
        (JSC::JSObject::defineOwnProperty):
            - use attributesOverridingCurrent instead of attributesWithOverride.
        * runtime/PropertyDescriptor.cpp:
        * runtime/PropertyDescriptor.h:
            - remove attributesWithOverride - attributesOverridingCurrent does the same thing.

2012-02-29  Kevin Ollivier  <kevino@theolliviers.com>

        Add JSCore symbol exports needed by wx port
        https://bugs.webkit.org/show_bug.cgi?id=77280

        Reviewed by Hajime Morita.

        * wtf/ArrayBufferView.h:
        * wtf/ExportMacros.h:

2012-02-28  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [CMake] Always build wtf as a static library.
        https://bugs.webkit.org/show_bug.cgi?id=79857

        Reviewed by Eric Seidel.

        To help the efforts in bug 75673 to move WTF out of
        JavaScriptCore, act more like the other ports and remove the
        possibility of building WTF as a shared library.

        It does not make much sense to, for example, ship WTF as a
        separate .so with webkit-efl packages, and it should be small
        enough not to cause problems during linking.

        * wtf/CMakeLists.txt:

2012-02-28  Dmitry Lomov  <dslomov@google.com>

        [JSC] Implement ArrayBuffer transfer
        https://bugs.webkit.org/show_bug.cgi?id=73493.
        Implement ArrayBuffer transfer, per Khronos spec:  http://www.khronos.org/registry/typedarray/specs/latest/#9.
        This brings parity with V8 implementation of transferable typed arrays.

        Reviewed by Oliver Hunt.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Extra export.
        * wtf/ArrayBuffer.h:
        (ArrayBuffer): Added extra export.

2012-02-28  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Build fix after recent LLInt additions.
        
        * wscript:

2012-02-28  Mark Hahnenberg  <mhahnenberg@apple.com>

        Refactor SpeculativeJIT::emitAllocateJSFinalObject
        https://bugs.webkit.org/show_bug.cgi?id=79801

        Reviewed by Filip Pizlo.

        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::emitAllocateBasicJSObject): Split emitAllocateJSFinalObject out to form this
        function, which is more generic in that it can allocate a variety of classes.
        (SpeculativeJIT):
        (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject): Changed to use the new helper function.

2012-02-28  Gavin Barraclough  <barraclough@apple.com>

        [[Get]]/[[Put]] for primitives should not wrap on strict accessor call
        https://bugs.webkit.org/show_bug.cgi?id=79588

        Reviewed by Oliver Hunt.

        In the case of [[Get]], this is a pretty trivial bug - just don't wrap
        primitives at the point you call a getter.

        For setters, this is a little more involved, since we have already wrapped
        the value up in a synthesized object. Stop doing so. There is also a further
        subtely, that in strict mode all attempts to create a new data property on
        the object should throw.

        * runtime/JSCell.cpp:
        (JSC::JSCell::put):
            - [[Put]] to a string primitive should use JSValue::putToPrimitive.
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
            - Remove static function called in one place.
        * runtime/JSObject.h:
        (JSC::JSValue::put):
            - [[Put]] to a non-cell JSValue should use JSValue::putToPrimitive.
        * runtime/JSValue.cpp:
        (JSC::JSValue::synthesizePrototype):
            - Add support for synthesizing the prototype of strings.
        (JSC::JSValue::putToPrimitive):
            - Added, implements [[Put]] for primitive bases, per 8.7.2.
        * runtime/JSValue.h:
        (JSValue):
            - Add declaration for JSValue::putToPrimitive.
        * runtime/PropertySlot.cpp:
        (JSC::PropertySlot::functionGetter):
            - Don't call ToObject on primitive this values.

2012-02-28  Mark Hahnenberg  <mhahnenberg@apple.com>

        Re-enable parallel GC on Mac
        https://bugs.webkit.org/show_bug.cgi?id=79837

        Rubber stamped by Filip Pizlo.

        * runtime/Options.cpp:
        (JSC::Options::initializeOptions): We accidentally disabled parallel GC with this line,
        so we removed it and things should go back to normal.

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

        Some run-javascriptcore-tests broken for 32-bit debug
        https://bugs.webkit.org/show_bug.cgi?id=79844

        Rubber stamped by Oliver Hunt.
        
        These assertions are just plain wrong for 32-bit. We could either have a massive
        assertion that depends on value representation, that has to be changed every
        time we change the JITs, resulting in a bug tail of debug-mode crashes, or we
        could get rid of the assertions. I pick the latter.

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

2012-02-28  Mark Hahnenberg  <mhahnenberg@apple.com>

        Get rid of padding cruft in CopiedBlock
        https://bugs.webkit.org/show_bug.cgi?id=79686

        Reviewed by Filip Pizlo.

        * heap/CopiedBlock.h:
        (CopiedBlock): Removed the extra padding that was used for alignment purposes until 
        the calculation of the payload offset into CopiedBlocks was redone recently.

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

        Fix build with newer versions of clang.

        Clang now warns since we're not passing a CFString literal to CFStringCreateWithFormatAndArguments,
        but it's OK to ignore this warning since clang is also checking that the caller (vprintf_stderr_common)
        takes a string literal.

        * wtf/Assertions.cpp:

2012-02-28  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Add GMainLoop and GMainContext to be handled by GRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=79496

        Reviewed by Martin Robinson.

        Handle GMainLoop and GMainContext in GRefPtr, by calling
        g_main_loop_(un)ref and g_main_context_(un)ref in the
        implementation of the refGPtr and derefGPtr template functions.

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

2012-02-28  Yong Li  <yoli@rim.com>

        JSString::resolveRope() should report extra memory cost to the heap.
        https://bugs.webkit.org/show_bug.cgi?id=79555

        Reviewed by Michael Saboff.

        At the time a JSString is constructed with fibers, it doesn't report
        extra memory cost, which is reasonable because it hasn't allocate
        new memory. However when the rope is resolved, it should report meory
        cost for the new buffer.

        * runtime/JSString.cpp:
        (JSC::JSString::resolveRope):

2012-02-27  Oliver Hunt  <oliver@apple.com>

        sputnik/Unicode/Unicode_500/S7.2_A1.6_T1.html crashes in the interpreter
        https://bugs.webkit.org/show_bug.cgi?id=79728

        Reviewed by Gavin Barraclough.

        When initialising a chained get instruction we may end up in a state where
        the instruction stream says we have a scopechain, but it has not yet been set
        (eg. if allocating the StructureChain itself is what leads to the GC).  We could
        re-order the allocation, but it occurs in a couple of places, so it seems less
        fragile simply to null check the scopechain slot before we actually visit the slot.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitStructures):

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

        Old JIT's style of JSVALUE64 strict equality is subtly wrong
        https://bugs.webkit.org/show_bug.cgi?id=79700

        Reviewed by Oliver Hunt.

        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::comparePtr):
        (MacroAssemblerX86_64):
        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativeStrictEq):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::emitSlow_op_stricteq):
        (JSC::JIT::emitSlow_op_nstricteq):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):

2012-02-27  Gavin Barraclough  <barraclough@apple.com>

        Implement support for op_negate and op_bitnot in the DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=79617

        Reviewed by Filip Pizlo.

        Add an ArithNegate op to the DFG JIT, to implement op_negate.

        This patch also adds support for op_negate to the JSVALUE64 baseline JIT
        (JSVALUE32_64 already had this), so that we can profile the slowpath usage.

        This is a 2.5%-3% Sunspider progression and a 1% win on Kraken.

        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::sub_S):
            - Added sub_S from immediate.
        (ARMv7Assembler):
        (JSC::ARMv7Assembler::vneg):
            - Added double negate.
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::negateDouble):
            - Added double negate.
        (MacroAssemblerARMv7):
        (JSC::MacroAssemblerARMv7::branchNeg32):
            - Added.
        * assembler/MacroAssemblerX86.h:
        (MacroAssemblerX86):
            - moved loadDouble, absDouble to common.
        * assembler/MacroAssemblerX86Common.h:
        (MacroAssemblerX86Common):
        (JSC::MacroAssemblerX86Common::absDouble):
            - implementation can be shared.
        (JSC::MacroAssemblerX86Common::negateDouble):
            - Added.
        (JSC::MacroAssemblerX86Common::loadDouble):
            - allow absDouble to have a common implementation.
        * assembler/MacroAssemblerX86_64.h:
        (MacroAssemblerX86_64):
            - moved loadDouble, absDouble to common.
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
            - support ArithNegate.
        * dfg/DFGArithNodeFlagsInferencePhase.cpp:
        (JSC::DFG::ArithNodeFlagsInferencePhase::propagate):
            - support ArithNegate.
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::makeSafe):
            - support ArithNegate.
        (JSC::DFG::ByteCodeParser::parseBlock):
            - support op_negate.
        * dfg/DFGCSEPhase.cpp:
        (JSC::DFG::CSEPhase::performNodeCSE):
            - support ArithNegate.
        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
            - support op_negate.
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::negateShouldSpeculateInteger):
            - support ArithNegate.
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasArithNodeFlags):
            - support ArithNegate.
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):
            - support ArithNegate.
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileArithNegate):
            - support ArithNegate.
        * dfg/DFGSpeculativeJIT.h:
        (SpeculativeJIT):
            - support ArithNegate.
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
            - support ArithNegate.
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
            - support ArithNegate.
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
            - Add support for op_negate in JSVALUE64.
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_negate):
        (JSC::JIT::emitSlow_op_negate):
            - Add support for op_negate in JSVALUE64.

2012-02-27  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Unreviewed. Build fix for linux-bot (qt) after r109021.

        * runtime/Error.cpp:

2012-02-27  Oliver Hunt  <oliver@apple.com>

        REGRESSION (r108112): AWS Management Console at amazon.com fails to initialize
        https://bugs.webkit.org/show_bug.cgi?id=79693

        Reviewed by Filip Pizlo.

        Alas we can't provide the stack trace as an array, as despite everyone wanting
        an array, everyone arbitrarily creates the array by calling split on the stack
        trace.  To create the array we would have provided them in the first place.

        This changes the exception's stack property to a \n separated string.  To get the
        old array just do <exception>.stack.split("\n").

        * runtime/Error.cpp:
        (JSC::addErrorInfo):

2012-02-27  Gavin Barraclough  <barraclough@apple.com>

        RegExp lastIndex should behave as a regular property
        https://bugs.webkit.org/show_bug.cgi?id=79446

        Reviewed by Sam Weinig.

        lastIndex should be a regular data descriptor, with the attributes configurable:false,
        enumerable:false, writable:true. As such, it should be possible to reconfigure writable
        as false. If the lastIndex property is reconfigured to be read-only, we should respect
        this correctly.

        * runtime/CommonIdentifiers.h:
            - Removed some unused identifiers, added lastIndex.
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::getOwnPropertySlot):
            - lastIndex is no longer a static value, provided specific handling.
        (JSC::RegExpObject::getOwnPropertyDescriptor):
            - lastIndex is no longer a static value, provided specific handling.
        (JSC::RegExpObject::deleteProperty):
            - lastIndex is no longer a static value, provided specific handling.
        (JSC::RegExpObject::getOwnPropertyNames):
            - lastIndex is no longer a static value, provided specific handling.
        (JSC::RegExpObject::getPropertyNames):
            - lastIndex is no longer a static value, provided specific handling.
        (JSC::reject):
            - helper function for defineOwnProperty.
        (JSC::RegExpObject::defineOwnProperty):
            - lastIndex is no longer a static value, provided specific handling.
        (JSC::RegExpObject::put):
            - lastIndex is no longer a static value, provided specific handling.
        (JSC::RegExpObject::match):
            - Pass setLastIndex an ExecState, so it can throw if read-only.
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::setLastIndex):
            - Pass setLastIndex an ExecState, so it can throw if read-only.
        (RegExpObjectData):
            - Added lastIndexIsWritable.
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):
            - Pass setLastIndex an ExecState, so it can throw if read-only.

2012-02-27  Gavin Barraclough  <barraclough@apple.com>

        Implement support for op_negate and op_bitnot in the DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=79617

        Reviewed by Sam Weinig.

        Remove op_bitnop - this is redundant, ~x === x^-1.
        This is a fractional (<1%) progression.

        Remove not32(X) from the MacroAssemblers - make this an optimization to add32(-1, X).
        Remove CanReuse from the result type - this was unused.
        Remove op_bitnot.

        * assembler/MacroAssemblerARM.h:
        (MacroAssemblerARM):
        (JSC::MacroAssemblerARM::xor32):
        * assembler/MacroAssemblerARMv7.h:
        (MacroAssemblerARMv7):
        (JSC::MacroAssemblerARMv7::xor32):
        * assembler/MacroAssemblerMIPS.h:
        (MacroAssemblerMIPS):
        (JSC::MacroAssemblerMIPS::xor32):
        * assembler/MacroAssemblerSH4.h:
        (MacroAssemblerSH4):
        (JSC::MacroAssemblerSH4::xor32):
        * assembler/MacroAssemblerX86Common.h:
        (MacroAssemblerX86Common):
        (JSC::MacroAssemblerX86Common::xor32):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/Opcode.h:
        (JSC):
        (JSC::padOpcodeName):
        * bytecompiler/NodesCodegen.cpp:
        (JSC):
        (JSC::BitwiseNotNode::emitBytecode):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        (JIT):
        * jit/JITArithmetic32_64.cpp:
        (JSC):
        * jit/JITOpcodes.cpp:
        (JSC):
        * jit/JITStubs.cpp:
        (JSC):
        * jit/JITStubs.h:
        * llint/LLIntSlowPaths.cpp:
        (LLInt):
        * llint/LLIntSlowPaths.h:
        (LLInt):
        * llint/LowLevelInterpreter32_64.asm:
        * parser/NodeConstructors.h:
        (JSC::NegateNode::NegateNode):
        (JSC::BitwiseNotNode::BitwiseNotNode):
        (JSC::MultNode::MultNode):
        (JSC::DivNode::DivNode):
        (JSC::ModNode::ModNode):
        (JSC::SubNode::SubNode):
        (JSC::UnsignedRightShiftNode::UnsignedRightShiftNode):
        * parser/Nodes.h:
        (BitwiseNotNode):
        (JSC::BitwiseNotNode::expr):
        (JSC):
        * parser/ResultType.h:
        (ResultType):
        (JSC::ResultType::numberTypeIsInt32):
        (JSC::ResultType::stringOrNumberType):
        (JSC::ResultType::forAdd):
        (JSC::ResultType::forBitOp):

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

        Error check regexp min quantifier
        https://bugs.webkit.org/show_bug.cgi?id=70648

        Reviewed by Gavin Barraclough.

        Added checking for min or only quantifier being UINT_MAX.
        When encountered this becomes a SyntaxError during parsing.

        * yarr/YarrParser.h:
        (JSC::Yarr::Parser::parseQuantifier):
        (JSC::Yarr::Parser::parse):
        (Parser):

2012-02-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing files.

2012-02-26  Hajime Morrita  <morrita@chromium.org>

        Move ChromeClient::showContextMenu() to ContextMenuClient
        https://bugs.webkit.org/show_bug.cgi?id=79427

        Reviewed by Adam Barth.

        Added ACCESSIBILITY_CONTEXT_MENUS.

        * wtf/Platform.h:

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

        LayoutTests/fast/xpath/xpath-functional-test.html is crashing in the DFG
        https://bugs.webkit.org/show_bug.cgi?id=79616

        Reviewed by Oliver Hunt.
        
        Guard against the fact that in JSVALUE64, JSValue().isCell() == true.

        * dfg/DFGAbstractValue.h:
        (JSC::DFG::AbstractValue::validate):

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

        DFG should support activations and nested functions
        https://bugs.webkit.org/show_bug.cgi?id=79554

        Reviewed by Sam Weinig.
        
        Fix 32-bit. The 32-bit function+activation code had some really weird
        register reuse bugs.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        Getting the instruction stream for a code block should not require two loads
        https://bugs.webkit.org/show_bug.cgi?id=79608

        Reviewed by Sam Weinig.
        
        Introduced the RefCountedArray class, which contains a single inline pointer
        to a ref-counted non-resizeable vector backing store. This satisfies the
        requirements of CodeBlock, which desires the ability to share instruction
        streams with other CodeBlocks. It also reduces the number of loads required
        for getting the instruction stream by one.
        
        This patch also gets rid of the bytecode discarding logic, since we don't
        use it anymore and it's unlikely to ever work right with DFG or LLInt. And
        I didn't feel like porting dead code to use RefCountedArray.

        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::instructionOffsetForNth):
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::finalizeUnconditionally):
        (JSC::CodeBlock::handlerForBytecodeOffset):
        (JSC::CodeBlock::lineNumberForBytecodeOffset):
        (JSC::CodeBlock::expressionRangeForBytecodeOffset):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (CodeBlock):
        (JSC::CodeBlock::numberOfInstructions):
        (JSC::CodeBlock::instructions):
        (JSC::CodeBlock::instructionCount):
        (JSC::CodeBlock::valueProfileForBytecodeOffset):
        (JSC):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::Label::setLocation):
        (JSC):
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::newLabel):
        * bytecompiler/BytecodeGenerator.h:
        (JSC):
        (BytecodeGenerator):
        (JSC::BytecodeGenerator::instructions):
        * bytecompiler/Label.h:
        (JSC::Label::Label):
        (Label):
        * dfg/DFGByteCodeCache.h:
        (JSC::DFG::ByteCodeCache::~ByteCodeCache):
        (JSC::DFG::ByteCodeCache::get):
        * jit/JITExceptions.cpp:
        (JSC::genericThrow):
        * llint/LowLevelInterpreter32_64.asm:
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::codeBlockWithBytecodeFor):
        (JSC::FunctionExecutable::produceCodeBlockFor):
        * wtf/RefCountedArray.h: Added.
        (WTF):
        (RefCountedArray):
        (WTF::RefCountedArray::RefCountedArray):
        (WTF::RefCountedArray::operator=):
        (WTF::RefCountedArray::~RefCountedArray):
        (WTF::RefCountedArray::size):
        (WTF::RefCountedArray::data):
        (WTF::RefCountedArray::begin):
        (WTF::RefCountedArray::end):
        (WTF::RefCountedArray::at):
        (WTF::RefCountedArray::operator[]):
        (Header):
        (WTF::RefCountedArray::Header::size):
        (WTF::RefCountedArray::Header::payload):
        (WTF::RefCountedArray::Header::fromPayload):
        * wtf/Platform.h:

2012-02-26  Yusuke Suzuki  <utatane.tea@gmail.com>

        StringLiteral and NumericLiteral are allowed as ObjectLiteral getter / setter name
        https://bugs.webkit.org/show_bug.cgi?id=79571

        Reviewed by Gavin Barraclough.

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createGetterOrSetterProperty):
        * parser/Parser.cpp:
        (JSC::::parseProperty):
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createGetterOrSetterProperty):

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

        Implement fast path for op_new_array in the baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=78612

        Reviewed by Filip Pizlo.

        heap/CopiedAllocator.h:
        (CopiedAllocator): Friended the JIT to allow access to m_currentOffset.
        * heap/CopiedSpace.h:
        (CopiedSpace): Friended the JIT to allow access to isOversize.
        (JSC::CopiedSpace::allocator):
        * heap/Heap.h:
        (JSC::Heap::storageAllocator): Added a getter for the CopiedAllocator class so the JIT
        can use it for simple allocation i.e. when we can just bump the offset without having to 
        do anything else.
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases): Added new slow case for op_new_array for when
        we have to bail out because the fast allocation path fails for whatever reason.
        * jit/JIT.h:
        (JIT):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitAllocateBasicStorage): Added utility function that allows objects to 
        allocate generic backing stores. This function is used by emitAllocateJSArray.
        (JSC):
        (JSC::JIT::emitAllocateJSArray): Added utility function that allows the client to 
        more easily allocate JSArrays. This function is used by emit_op_new_array and I expect 
        it will also be used for emit_op_new_array_buffer.
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_new_array): Changed to do inline allocation of JSArrays. Still does 
        a stub call for oversize arrays.
        (JSC):
        (JSC::JIT::emitSlow_op_new_array): New slow path that just bails out to a stub call if we 
        fail in any way on the fast path.
        * runtime/JSArray.cpp:
        (JSC):
        * runtime/JSArray.h: Added lots of offset functions for all the fields that we need to 
        initialize in the JIT.
        (ArrayStorage):
        (JSC::ArrayStorage::lengthOffset):
        (JSC::ArrayStorage::numValuesInVectorOffset):
        (JSC::ArrayStorage::allocBaseOffset):
        (JSC::ArrayStorage::vectorOffset):
        (JSArray):
        (JSC::JSArray::sparseValueMapOffset):
        (JSC::JSArray::subclassDataOffset):
        (JSC::JSArray::indexBiasOffset):
        (JSC):
        (JSC::JSArray::storageSize): Moved this function from being a static function in the cpp file
        to being a static function in the JSArray class. This move allows the JIT to call it to 
        see what size it should allocate.

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

        Unreviewed. Build fix for ENABLE(CLASSIC_INTERPRETER) after r108681.

        * interpreter/Interpreter.cpp:
        (JSC::getLineNumberForCallFrame):
        (JSC::Interpreter::getStackTrace):

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

        Unreviewed. Build fix for !ENABLE(JIT) after r108681.

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

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

        LLInt assembly file should be split into 32-bit and 64-bit parts
        https://bugs.webkit.org/show_bug.cgi?id=79584

        Reviewed by Sam Weinig.
        
        Moved LowLevelInterpreter.asm to LowLevelInterpreter32_64.asm. Gave offlineasm
        the ability to include files, and correctly track dependencies: it restricts
        the include mechanism to using the same directory as the source file, and uses
        the SHA1 hash of all .asm files in that directory as an input hash.

        * llint/LLIntOfflineAsmConfig.h:
        * llint/LowLevelInterpreter.asm:
        * llint/LowLevelInterpreter32_64.asm: Added.
            - This is just the entire contents of what was previously LowLevelInterpreter.asm
        * llint/LowLevelInterpreter64.asm: Added.
        * offlineasm/asm.rb:
        * offlineasm/ast.rb:
        * offlineasm/generate_offset_extractor.rb:
        * offlineasm/parser.rb:
        * offlineasm/self_hash.rb:

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

        Offlineasm should support X86_64
        https://bugs.webkit.org/show_bug.cgi?id=79581

        Reviewed by Oliver Hunt.

        * llint/LLIntOfflineAsmConfig.h:
        * offlineasm/backends.rb:
        * offlineasm/instructions.rb:
        * offlineasm/settings.rb:
        * offlineasm/x86.rb:

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

        DFG should support activations and nested functions
        https://bugs.webkit.org/show_bug.cgi?id=79554

        Reviewed by Oliver Hunt.
        
        Wrote the simplest possible implementation of activations. Big speed-up on
        code that uses activations, no speed-up on major benchmarks (SunSpider, V8,
        Kraken) because they do not appear to have sufficient coverage over code
        that uses activations.

        * bytecode/PredictedType.cpp:
        (JSC::predictionToString):
        (JSC::predictionFromValue):
        * bytecode/PredictedType.h:
        (JSC):
        (JSC::isEmptyPrediction):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (ByteCodeParser):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::buildOperandMapsIfNecessary):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
        (JSC::DFG::canInlineOpcode):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::needsActivation):
        * dfg/DFGNode.h:
        (DFG):
        (JSC::DFG::Node::storageAccessDataIndex):
        (Node):
        (JSC::DFG::Node::hasFunctionDeclIndex):
        (JSC::DFG::Node::functionDeclIndex):
        (JSC::DFG::Node::hasFunctionExprIndex):
        (JSC::DFG::Node::functionExprIndex):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileNewFunctionNoCheck):
        (DFG):
        (JSC::DFG::SpeculativeJIT::compileNewFunctionExpression):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2012-02-25  Benjamin Poulain  <benjamin@webkit.org>

        Add an empty skeleton of KURL for WTFURL
        https://bugs.webkit.org/show_bug.cgi?id=78990

        Reviewed by Adam Barth.

        * JavaScriptCore.xcodeproj/project.pbxproj: Export the relevant classes from WTFURL
        so that can use them in WebCore.

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

        Unreviewed, fix build for DFG disabled and LLInt enabled.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * llint/LLIntSlowPaths.cpp:
        (LLInt):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):

2012-02-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Fix the CopiedBlock offset alignment in a cross platform fashion
        https://bugs.webkit.org/show_bug.cgi?id=79556

        Reviewed by Filip Pizlo.

        Replaced m_payload with a payload() method that calculates the offset
        of the payload with the proper alignment. This change allows us to 
        avoid alignment-related issues in a cross-platform manner.

        * heap/CopiedAllocator.h:
        (JSC::CopiedAllocator::currentUtilization):
        * heap/CopiedBlock.h:
        (JSC::CopiedBlock::CopiedBlock):
        (JSC::CopiedBlock::payload):
        (CopiedBlock):
        * heap/CopiedSpace.cpp:
        (JSC::CopiedSpace::doneFillingBlock):
        * heap/CopiedSpaceInlineMethods.h:
        (JSC::CopiedSpace::borrowBlock):
        (JSC::CopiedSpace::allocateFromBlock):

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

        Unreviewed, Windows build fix.  Changed signature in export to match
        change made in r108858.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        DFG support for op_new_regexp should be enabled
        https://bugs.webkit.org/show_bug.cgi?id=79538

        Reviewed by Oliver Hunt.
        
        No performance change.

        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
        * dfg/DFGCommon.h:

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

        ASSERT(position < 0) in JSC::Yarr::Interpreter::InputStream::readChecked
        https://bugs.webkit.org/show_bug.cgi?id=73728

        Reviewed by Gavin Barraclough.

        Fixed the mixing of signed and unsigned character indeces in YARR
        interpreter.

        * runtime/RegExp.cpp:
        (JSC::RegExp::match): Added code to check for match longer than 2^31 and
        return no match after resetting the offsets.
        * yarr/YarrInterpreter.cpp: Changed to use unsigned for all character index
        handling except when matching back references.
        (JSC::Yarr::Interpreter::InputStream::readChecked):
        (JSC::Yarr::Interpreter::InputStream::checkInput):
        (JSC::Yarr::Interpreter::InputStream::uncheckInput):
        (JSC::Yarr::Interpreter::InputStream::atStart):
        (JSC::Yarr::Interpreter::InputStream::atEnd):
        (JSC::Yarr::Interpreter::InputStream::isAvailableInput):
        (JSC::Yarr::Interpreter::checkCharacter):
        (JSC::Yarr::Interpreter::checkCasedCharacter):
        (JSC::Yarr::Interpreter::checkCharacterClass):
        (JSC::Yarr::Interpreter::tryConsumeBackReference):
        (JSC::Yarr::Interpreter::matchAssertionBOL):
        (JSC::Yarr::Interpreter::matchAssertionWordBoundary):
        (JSC::Yarr::Interpreter::backtrackPatternCharacter):
        (JSC::Yarr::Interpreter::backtrackPatternCasedCharacter):
        (JSC::Yarr::Interpreter::matchCharacterClass):
        (JSC::Yarr::Interpreter::backtrackCharacterClass):
        (JSC::Yarr::Interpreter::matchParenthesesOnceBegin):
        (JSC::Yarr::Interpreter::matchDisjunction):
        (JSC::Yarr::Interpreter::interpret):
        (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::atomParentheticalAssertionEnd):
        (JSC::Yarr::ByteCompiler::emitDisjunction):
        * yarr/YarrInterpreter.h:

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

        Unreviewed, build fix for builds where the DFG is disabled but the LLInt is
        enabled.

        * llint/LLIntOfflineAsmConfig.h:
        * llint/LowLevelInterpreter.asm:

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

        DFG should be able to handle variables getting captured
        https://bugs.webkit.org/show_bug.cgi?id=79469

        Reviewed by Oliver Hunt.
        
        Made captured variables work by placing a Flush on the SetLocal and
        forcing the emission of the GetLocal even if copy propagation tells us
        who has the value.
        
        Changed the CFA and various prediction codes to understand that we can't
        really prove anything about captured variables. Well, we could in the
        future by just looking at what side effects are happening, but in this
        first cut we just assume that we can't reason about captured variables.
        
        Also added a mode where the DFG pretends that all variables and arguments
        got captured. Used this mode to harden the code.
        
        This is performance neutral. Capturing all variables is a slow down, but
        not too big of one. This seems to predict that when we add activation
        support, the amount of speed benefit we'll get from increased coverage
        will far outweigh the pessimism that we'll have to endure for captured
        variables.

        * bytecode/CodeType.h:
        (JSC::codeTypeToString):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::initialize):
        (JSC::DFG::AbstractState::endBasicBlock):
        (JSC::DFG::AbstractState::execute):
        (JSC::DFG::AbstractState::merge):
        * dfg/DFGAbstractState.h:
        (AbstractState):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getLocal):
        (JSC::DFG::ByteCodeParser::setLocal):
        (JSC::DFG::ByteCodeParser::getArgument):
        (JSC::DFG::ByteCodeParser::setArgument):
        (JSC::DFG::ByteCodeParser::flushArgument):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::processPhiStack):
        (JSC::DFG::ByteCodeParser::parseCodeBlock):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::mightInlineFunctionForCall):
        (JSC::DFG::mightInlineFunctionForConstruct):
        * dfg/DFGCommon.h:
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::needsActivation):
        (Graph):
        (JSC::DFG::Graph::argumentIsCaptured):
        (JSC::DFG::Graph::localIsCaptured):
        (JSC::DFG::Graph::isCaptured):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldGenerate):
        * dfg/DFGPredictionPropagationPhase.cpp:
        (JSC::DFG::PredictionPropagationPhase::propagate):
        (JSC::DFG::PredictionPropagationPhase::doRoundOfDoubleVoting):
        * dfg/DFGSpeculativeJIT.cpp:
        (DFG):
        (JSC::DFG::ValueSource::dump):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (ValueSource):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGVirtualRegisterAllocationPhase.cpp:
        (JSC::DFG::VirtualRegisterAllocationPhase::run):

2012-02-24  Gavin Barraclough  <barraclough@apple.com>

        Should not allow malformed \x escapes
        https://bugs.webkit.org/show_bug.cgi?id=79462

        Reviewed by Oliver Hunt.

        * parser/Lexer.cpp:
        (JSC::::parseString):
        (JSC::::parseStringSlowCase):
            - Prohibit malformed '\x' escapes
        * tests/mozilla/ecma/Array/15.4.5.1-1.js:
        * tests/mozilla/ecma/LexicalConventions/7.7.4.js:
        * tests/mozilla/ecma_2/RegExp/hex-001.js:
        * tests/mozilla/js1_2/regexp/hexadecimal.js:
            - Remove erroneous test cases (correct behaviour is tested by LayoutTests/sputnik).

2012-02-24  Daniel Bates  <dbates@webkit.org>

        Fix change log entry for changeset r108819; add bug URL
        https://bugs.webkit.org/show_bug.cgi?id=79504

        Changeset r108819 is associated with bug #79504.

        * ChangeLog

2012-02-24  Daniel Bates  <dbates@webkit.org>

        Substitute ENABLE(CLASSIC_INTERPRETER) for ENABLE(INTERPRETER) in Interpreter.cpp
        https://bugs.webkit.org/show_bug.cgi?id=79504

        Reviewed by Oliver Hunt.

        There are a few places in Interpreter.cpp that need to be updated to use
        ENABLE(CLASSIC_INTERPRETER) following the renaming of ENABLE_INTERPRETER to
        ENABLE_CLASSIC_INTERPRETER in changeset <http://trac.webkit.org/changeset/108020>
        (https://bugs.webkit.org/show_bug.cgi?id=78791).

        * interpreter/Interpreter.cpp:
        (JSC::getLineNumberForCallFrame):
        (JSC::getCallerInfo):
        (JSC::getSourceURLFromCallFrame):

2012-02-24  Adam Roben  <aroben@apple.com>

        Undo the BUILDING_WTF part of r108808

        This broke the build, which is obviously worse than the linker warning it was trying to
        solve.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:

2012-02-24  Adam Roben  <aroben@apple.com>

        Fix linker warnings on Windows

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed symbols that are already
        exported via JS_EXPORTDATA.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: Define BUILDING_WTF. We
        aren't actually building WTF, but we are statically linking it, so we need to define this
        symbol so that we export WTF's exports.

2012-02-24  Philippe Normand  <pnormand@igalia.com>

        Fix GTK WebAudio build for WebKitGTK 1.7.90.

        Patch by Priit Laes <plaes@plaes.org> on 2012-02-24
        Rubber-stamped by Philippe Normand.

        * GNUmakefile.list.am: Add Complex.h to the list of files so it
        gets disted in the tarballs.

2012-02-24  Zoltan Herczeg  <zherczeg@webkit.org>

        [Qt] Buildfix for "Zero out CopiedBlocks on initialization".
        https://bugs.webkit.org/show_bug.cgi?id=79199

        Ruber stamped by Csaba Osztrogonác.

        Temporary fix since the new member wastes a little space on
        64 bit systems. Although it is harmless, it is only needed
        for 32 bit systems.

        * heap/CopiedBlock.h:
        (CopiedBlock):

2012-02-24  Han Hojong  <hojong.han@samsung.com>

        Remove useless jump instructions for short circuit
        https://bugs.webkit.org/show_bug.cgi?id=75602

        Reviewed by Michael Saboff.

        Jump instruction is inserted to make short circuit, 
        however it does nothing but moving to the next instruction.
        Therefore useless jump instructions are removed, 
        and jump list is moved into the case not for a short circuit,
        so that only necessary instructions are added to JIT code
        unless it has a 16 bit pattern character and an 8 bit string.

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy):
        (JSC::Yarr::YarrGenerator::backtrackPatternCharacterNonGreedy):

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

        Unreviewed, rolling out r108731.
        http://trac.webkit.org/changeset/108731
        https://bugs.webkit.org/show_bug.cgi?id=79464

        Broke Chromium Win tests (Requested by bashi on #webkit).

        * wtf/Platform.h:

2012-02-24  Andrew Lo  <anlo@rim.com>

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

        Use timer implementation of requestAnimationFrame on BlackBerry.

        Reviewed by Rob Buis.

        * wtf/Platform.h:

2012-02-24  Mathias Bynens  <mathias@qiwi.be>

        `\u200c` and `\u200d` should be allowed in IdentifierPart, as per ES5
        https://bugs.webkit.org/show_bug.cgi?id=78908

        Add additional checks for zero-width non-joiner (0x200C) and
        zero-width joiner (0x200D) characters.

        Reviewed by Michael Saboff.

        * parser/Lexer.cpp:
        (JSC::isNonASCIIIdentPart)
        * runtime/LiteralParser.cpp:
        (JSC::::Lexer::lexIdentifier)

2012-02-23  Kenichi Ishibashi  <bashi@chromium.org>

        Adding WebSocket per-frame DEFLATE extension
        https://bugs.webkit.org/show_bug.cgi?id=77522

        Added USE(ZLIB) flag.

        Reviewed by Kent Tamura.

        * wtf/Platform.h:

2012-02-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        Zero out CopiedBlocks on initialization
        https://bugs.webkit.org/show_bug.cgi?id=79199

        Reviewed by Filip Pizlo.

        Made CopyBlocks zero their payloads during construction. This allows 
        JSArray to avoid having to manually clear its backing store upon allocation
        and also alleviates any future pain with regard to the garbage collector trying 
        to mark what it thinks are values in what is actually uninitialized memory.

        * heap/CopiedBlock.h:
        (JSC::CopiedBlock::CopiedBlock):
        * runtime/JSArray.cpp:
        (JSC::JSArray::finishCreation):
        (JSC::JSArray::tryFinishCreationUninitialized):
        (JSC::JSArray::increaseVectorLength):
        (JSC::JSArray::unshiftCountSlowCase):

2012-02-23  Oliver Hunt  <oliver@apple.com>

        Make Interpreter::getStackTrace be able to generate the line number for the top callframe if none is provided
        https://bugs.webkit.org/show_bug.cgi?id=79407

        Reviewed by Gavin Barraclough.

        Outside of exception handling, we don't know what our source line number is.  This
        change allows us to pass -1 is as the initial line number, and get the correct line
        number in the resultant stack trace.  We can't completely elide the initial line
        number (yet) due to some idiosyncrasies of the exception handling machinery.

        * interpreter/Interpreter.cpp:
        (JSC::getLineNumberForCallFrame):
        (JSC):
        (JSC::Interpreter::getStackTrace):

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

        DFG OSR exit value profiling should have graceful handling of local variables and arguments
        https://bugs.webkit.org/show_bug.cgi?id=79310

        Reviewed by Gavin Barraclough.
        
        Previously, if we OSR exited because a prediction in a local was wrong, we'd
        only realize what the true type of the local was if the regular value profiling
        kicked in and told us. Unless the local was block-locally copy propagated, in
        which case we'd know from an OSR exit profile.
        
        This patch adds OSR exit profiling to all locals and arguments. Now, if we OSR
        exit because of a mispredicted local or argument type, we'll know what the type of
        the local or argument should be immediately upon exiting.
        
        The way that local variable OSR exit profiling works is that we now have a lazily
        added set of OSR-exit-only value profiles for exit sites that are BadType and that
        cited a GetLocal as their value source. The value profiles are only added if the
        OSR exit is taken, and are keyed by CodeBlock, bytecode index of the GetLocal, and
        operand. The look-up is performed by querying the
        CompressedLazyOperandValueProfileHolder in the CodeBlock, using a key that contains
        the bytecode index and the operand. Because the value profiles are added at random
        times, they are not sorted; instead they are just stored in an arbitrarily-ordered
        SegmentedVector. Look-ups are made fast by "decompressing": the DFG::ByteCodeParser
        creates a LazyOperandValueProfileParser, which turns the
        CompressedLazyOperandValueProfileHolder's contents into a HashMap for the duration
        of DFG parsing.
        
        Previously, OSR exits had a pointer to the ValueProfile that had the specFailBucket
        into which values observed during OSR exit would be placed. Now it uses a lazy
        thunk for a ValueProfile. I call this the MethodOfGettingAValueProfile. It may
        either contain a ValueProfile inside it (which works for previous uses of OSR exit
        profiling) or it may just have knowledge of how to go about creating the
        LazyOperandValueProfile in the case that the OSR exit is actually taken. This
        ensures that we never have to create NumOperands*NumBytecodeIndices*NumCodeBlocks
        value profiling buckets unless we actually did OSR exit on every single operand,
        in every single instruction, in each code block (that's probably unlikely).
        
        This appears to be neutral on the major benchmarks, but is a double-digit speed-up
        on code deliberately written to have data flow that spans basic blocks and where
        the code exhibits post-optimization polymorphism in a local variable.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::stronglyVisitStrongReferences):
        * bytecode/CodeBlock.h:
        (CodeBlock):
        (JSC::CodeBlock::lazyOperandValueProfiles):
        * bytecode/LazyOperandValueProfile.cpp: Added.
        (JSC):
        (JSC::CompressedLazyOperandValueProfileHolder::CompressedLazyOperandValueProfileHolder):
        (JSC::CompressedLazyOperandValueProfileHolder::~CompressedLazyOperandValueProfileHolder):
        (JSC::CompressedLazyOperandValueProfileHolder::computeUpdatedPredictions):
        (JSC::CompressedLazyOperandValueProfileHolder::add):
        (JSC::LazyOperandValueProfileParser::LazyOperandValueProfileParser):
        (JSC::LazyOperandValueProfileParser::~LazyOperandValueProfileParser):
        (JSC::LazyOperandValueProfileParser::getIfPresent):
        (JSC::LazyOperandValueProfileParser::prediction):
        * bytecode/LazyOperandValueProfile.h: Added.
        (JSC):
        (LazyOperandValueProfileKey):
        (JSC::LazyOperandValueProfileKey::LazyOperandValueProfileKey):
        (JSC::LazyOperandValueProfileKey::operator!):
        (JSC::LazyOperandValueProfileKey::operator==):
        (JSC::LazyOperandValueProfileKey::hash):
        (JSC::LazyOperandValueProfileKey::bytecodeOffset):
        (JSC::LazyOperandValueProfileKey::operand):
        (JSC::LazyOperandValueProfileKey::isHashTableDeletedValue):
        (JSC::LazyOperandValueProfileKeyHash::hash):
        (JSC::LazyOperandValueProfileKeyHash::equal):
        (LazyOperandValueProfileKeyHash):
        (WTF):
        (JSC::LazyOperandValueProfile::LazyOperandValueProfile):
        (LazyOperandValueProfile):
        (JSC::LazyOperandValueProfile::key):
        (CompressedLazyOperandValueProfileHolder):
        (LazyOperandValueProfileParser):
        * bytecode/MethodOfGettingAValueProfile.cpp: Added.
        (JSC):
        (JSC::MethodOfGettingAValueProfile::fromLazyOperand):
        (JSC::MethodOfGettingAValueProfile::getSpecFailBucket):
        * bytecode/MethodOfGettingAValueProfile.h: Added.
        (JSC):
        (MethodOfGettingAValueProfile):
        (JSC::MethodOfGettingAValueProfile::MethodOfGettingAValueProfile):
        (JSC::MethodOfGettingAValueProfile::operator!):
        * bytecode/ValueProfile.cpp: Removed.
        * bytecode/ValueProfile.h:
        (JSC):
        (ValueProfileBase):
        (JSC::ValueProfileBase::ValueProfileBase):
        (JSC::ValueProfileBase::dump):
        (JSC::ValueProfileBase::computeUpdatedPrediction):
        (JSC::MinimalValueProfile::MinimalValueProfile):
        (ValueProfileWithLogNumberOfBuckets):
        (JSC::ValueProfileWithLogNumberOfBuckets::ValueProfileWithLogNumberOfBuckets):
        (JSC::ValueProfile::ValueProfile):
        (JSC::getValueProfileBytecodeOffset):
        (JSC::getRareCaseProfileBytecodeOffset):
        * dfg/DFGByteCodeParser.cpp:
        (ByteCodeParser):
        (JSC::DFG::ByteCodeParser::injectLazyOperandPrediction):
        (JSC::DFG::ByteCodeParser::getLocal):
        (JSC::DFG::ByteCodeParser::getArgument):
        (InlineStackEntry):
        (JSC::DFG::ByteCodeParser::fixVariableAccessPredictions):
        (DFG):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::valueProfileFor):
        (JSC::DFG::Graph::methodOfGettingAValueProfileFor):
        (Graph):
        * dfg/DFGNode.h:
        (Node):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::OSRExit):
        * dfg/DFGOSRExit.h:
        (OSRExit):
        * dfg/DFGOSRExitCompiler32_64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOSRExitCompiler64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGPhase.cpp:
        (JSC::DFG::Phase::beginPhase):
        (JSC::DFG::Phase::endPhase):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::speculationCheck):
        * dfg/DFGVariableAccessData.h:
        (JSC::DFG::VariableAccessData::nonUnifiedPrediction):
        (VariableAccessData):

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

        Build fix.

        * llint/LLIntOffsetsExtractor.cpp:

2012-02-23  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, disable LLINT for now and fix ENABLE defines for it.

        * llint/LLIntOffsetsExtractor.cpp:
        * wtf/Platform.h:

2012-02-23  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix for non-Mac wx builds.

        * runtime/DatePrototype.cpp:

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

        DFG's logic for emitting a Flush is too convoluted and contains an inaccurate comment
        https://bugs.webkit.org/show_bug.cgi?id=79334

        Reviewed by Oliver Hunt.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getLocal):
        (JSC::DFG::ByteCodeParser::getArgument):
        (JSC::DFG::ByteCodeParser::flush):

2012-02-23  Gavin Barraclough  <barraclough@apple.com>

        Object.isSealed / Object.isFrozen don't work for native objects
        https://bugs.webkit.org/show_bug.cgi?id=79331

        Reviewed by Sam Weinig.

        Need to inspect all properties, including static ones.
        This exposes a couple of bugs in Array & Arguments:
            - getOwnPropertyDescriptor doesn't correctly report the writable attribute of array length.
            - Arguments object's defineOwnProperty does not handle callee/caller/length correctly.

        * runtime/Arguments.cpp:
        (JSC::Arguments::defineOwnProperty):
            - Add handling for callee/caller/length.
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertyDescriptor):
            - report length's writability correctly.
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorSeal):
        (JSC::objectConstructorFreeze):
        (JSC::objectConstructorIsSealed):
        (JSC::objectConstructorIsFrozen):
            - Add spec-based implementation for non-final objects.

2012-02-23  Gavin Barraclough  <barraclough@apple.com>

        pop of array hole should get from the prototype chain
        https://bugs.webkit.org/show_bug.cgi?id=79338

        Reviewed by Sam Weinig.

        * runtime/JSArray.cpp:
        (JSC::JSArray::pop):
            - If the fast fast vector case fails, more closely follow the spec.

2012-02-23  Yong Li  <yoli@rim.com>

        JSString::outOfMemory() should ASSERT(isRope()) rather than !isRope()
        https://bugs.webkit.org/show_bug.cgi?id=79268

        Reviewed by Michael Saboff.

        resolveRope() is the only caller of outOfMemory(), and it calls outOfMemory()
        after it fails to allocate a buffer for m_value. So outOfMemory() should assert
        isRope() rather than !isRope().

        * runtime/JSString.cpp:
        (JSC::JSString::outOfMemory):

2012-02-23  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Add WEBKIT_INCLUDE_CONFIG_FILES_IF_EXISTS macro
        https://bugs.webkit.org/show_bug.cgi?id=79371

        Reviewed by Daniel Bates.

        * CMakeLists.txt:
        * shell/CMakeLists.txt:
        * wtf/CMakeLists.txt:

2012-02-23  Aron Rosenberg  <arosenberg@logitech.com>

        Fix the PRI macros used in WTF::String formatters to be compatible with Qt and Visual Studio 2005 and newer.
        https://bugs.webkit.org/show_bug.cgi?id=76210

        Add compile time check for Visual Studio 2005 or newer.

        Reviewed by Simon Hausmann.

        * os-win32/inttypes.h:

2012-02-22  Gavin Barraclough  <barraclough@apple.com>

        Implement [[DefineOwnProperty]] for the arguments object
        https://bugs.webkit.org/show_bug.cgi?id=79309

        Reviewed by Sam Weinig.

        * runtime/Arguments.cpp:
        (JSC::Arguments::deletePropertyByIndex):
        (JSC::Arguments::deleteProperty):
            - Deleting an argument should also delete the copy on the object, if any.
        (JSC::Arguments::defineOwnProperty):
            - Defining a property may override the live mapping.
        * runtime/Arguments.h:
        (Arguments):

2012-02-22  Gavin Barraclough  <barraclough@apple.com>

        Fix Object.freeze for non-final objects.
        https://bugs.webkit.org/show_bug.cgi?id=79286

        Reviewed by Oliver Hunt.

        For vanilla objects we implement this with a single transition, for objects
        with special properties we should just follow the spec defined algorithm.

        * runtime/JSArray.cpp:
        (JSC::SparseArrayValueMap::put):
            - this does need to handle inextensible objects.
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorSeal):
        (JSC::objectConstructorFreeze):
            - Implement spec defined algorithm for non-final objects.
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::freezeTransition):
            - freeze should set m_hasReadOnlyOrGetterSetterPropertiesExcludingProto.
        * runtime/Structure.h:
        (JSC::Structure::hasReadOnlyOrGetterSetterPropertiesExcludingProto):
        (JSC::Structure::setHasGetterSetterProperties):
        (JSC::Structure::setContainsReadOnlyProperties):
        (Structure):
            - renamed m_hasReadOnlyOrGetterSetterPropertiesExcludingProto.

2012-02-22  Mark Hahnenberg  <mhahnenberg@apple.com>

        Allocations from CopiedBlocks should always be 8-byte aligned
        https://bugs.webkit.org/show_bug.cgi?id=79271

        Reviewed by Geoffrey Garen.

        * heap/CopiedAllocator.h:
        (JSC::CopiedAllocator::allocate):
        * heap/CopiedBlock.h: Changed to add padding so that the start of the payload is always 
        guaranteed to be 8 byte aligned on both 64- and 32-bit platforms.
        (CopiedBlock):
        * heap/CopiedSpace.cpp: Changed all assertions of isPointerAligned to is8ByteAligned.
        (JSC::CopiedSpace::tryAllocateOversize):
        (JSC::CopiedSpace::getFreshBlock):
        * heap/CopiedSpaceInlineMethods.h:
        (JSC::CopiedSpace::allocateFromBlock):
        * runtime/JSArray.h:
        (ArrayStorage): Added padding for ArrayStorage to make sure that it is always 8 byte 
        aligned on both 64- and 32-bit platforms.
        * wtf/StdLibExtras.h:
        (WTF::is8ByteAligned): Added new utility function that functions similarly to the 
        way isPointerAligned does, but it just always checks for 8 byte alignment.
        (WTF):

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

        Unreviewed, rolling out r108456.
        http://trac.webkit.org/changeset/108456
        https://bugs.webkit.org/show_bug.cgi?id=79223

        Broke fast/regex/pcre-test-4.html and cannot find anyone on
        IRC (Requested by zherczeg on #webkit).

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

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

        Unreviewed, rolling out r108468.
        http://trac.webkit.org/changeset/108468
        https://bugs.webkit.org/show_bug.cgi?id=79219

        Broke Chromium Win release build (Requested by bashi on
        #webkit).

        * wtf/Platform.h:

2012-02-22  Kenichi Ishibashi  <bashi@chromium.org>

        Adding WebSocket per-frame DEFLATE extension
        https://bugs.webkit.org/show_bug.cgi?id=77522

        Added USE(ZLIB) flag.

        Reviewed by Kent Tamura.

        * wtf/Platform.h:

2012-02-22  Hojong Han  <hojong.han@samsung.com>

        Short circuit fixed for a 16 bt pattern character and an 8 bit string.
        https://bugs.webkit.org/show_bug.cgi?id=75602

        Reviewed by Gavin Barraclough.

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

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

        Build fix for systems with case sensitive disks.

        * llint/LLIntOfflineAsmConfig.h:

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

        JSC should be a triple-tier VM
        https://bugs.webkit.org/show_bug.cgi?id=75812
        <rdar://problem/10079694>

        Reviewed by Gavin Barraclough.
        
        Implemented an interpreter that uses the JIT's calling convention. This
        interpreter is called LLInt, or the Low Level Interpreter. JSC will now
        will start by executing code in LLInt and will only tier up to the old
        JIT after the code is proven hot.
        
        LLInt is written in a modified form of our macro assembly. This new macro
        assembly is compiled by an offline assembler (see offlineasm), which
        implements many modern conveniences such as a Turing-complete CPS-based
        macro language and direct access to relevant C++ type information
        (basically offsets of fields and sizes of structs/classes).
        
        Code executing in LLInt appears to the rest of the JSC world "as if" it
        were executing in the old JIT. Hence, things like exception handling and
        cross-execution-engine calls just work and require pretty much no
        additional overhead.
        
        This interpreter is 2-2.5x faster than our old interpreter on SunSpider,
        V8, and Kraken. With triple-tiering turned on, we're neutral on SunSpider,
        V8, and Kraken, but appear to get a double-digit improvement on real-world
        websites due to a huge reduction in the amount of JIT'ing.
        
        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * assembler/LinkBuffer.h:
        * assembler/MacroAssemblerCodeRef.h:
        (MacroAssemblerCodePtr):
        (JSC::MacroAssemblerCodePtr::createFromExecutableAddress):
        * bytecode/BytecodeConventions.h: Added.
        * bytecode/CallLinkStatus.cpp:
        (JSC::CallLinkStatus::computeFromLLInt):
        (JSC):
        (JSC::CallLinkStatus::computeFor):
        * bytecode/CallLinkStatus.h:
        (JSC::CallLinkStatus::isSet):
        (JSC::CallLinkStatus::operator!):
        (CallLinkStatus):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::finalizeUnconditionally):
        (JSC::CodeBlock::stronglyVisitStrongReferences):
        (JSC):
        (JSC::CodeBlock::unlinkCalls):
        (JSC::CodeBlock::unlinkIncomingCalls):
        (JSC::CodeBlock::bytecodeOffset):
        (JSC::ProgramCodeBlock::jettison):
        (JSC::EvalCodeBlock::jettison):
        (JSC::FunctionCodeBlock::jettison):
        (JSC::ProgramCodeBlock::jitCompileImpl):
        (JSC::EvalCodeBlock::jitCompileImpl):
        (JSC::FunctionCodeBlock::jitCompileImpl):
        * bytecode/CodeBlock.h:
        (JSC):
        (CodeBlock):
        (JSC::CodeBlock::baselineVersion):
        (JSC::CodeBlock::linkIncomingCall):
        (JSC::CodeBlock::bytecodeOffset):
        (JSC::CodeBlock::jitCompile):
        (JSC::CodeBlock::hasOptimizedReplacement):
        (JSC::CodeBlock::addPropertyAccessInstruction):
        (JSC::CodeBlock::addGlobalResolveInstruction):
        (JSC::CodeBlock::addLLIntCallLinkInfo):
        (JSC::CodeBlock::addGlobalResolveInfo):
        (JSC::CodeBlock::numberOfMethodCallLinkInfos):
        (JSC::CodeBlock::valueProfilePredictionForBytecodeOffset):
        (JSC::CodeBlock::likelyToTakeSlowCase):
        (JSC::CodeBlock::couldTakeSlowCase):
        (JSC::CodeBlock::likelyToTakeSpecialFastCase):
        (JSC::CodeBlock::likelyToTakeDeepestSlowCase):
        (JSC::CodeBlock::likelyToTakeAnySlowCase):
        (JSC::CodeBlock::addFrequentExitSite):
        (JSC::CodeBlock::dontJITAnytimeSoon):
        (JSC::CodeBlock::jitAfterWarmUp):
        (JSC::CodeBlock::jitSoon):
        (JSC::CodeBlock::llintExecuteCounter):
        (ProgramCodeBlock):
        (EvalCodeBlock):
        (FunctionCodeBlock):
        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::computeFromLLInt):
        (JSC):
        (JSC::GetByIdStatus::computeFor):
        * bytecode/GetByIdStatus.h:
        (JSC::GetByIdStatus::GetByIdStatus):
        (JSC::GetByIdStatus::wasSeenInJIT):
        (GetByIdStatus):
        * bytecode/Instruction.h:
        (JSC):
        (JSC::Instruction::Instruction):
        (Instruction):
        * bytecode/LLIntCallLinkInfo.h: Added.
        (JSC):
        (JSC::LLIntCallLinkInfo::LLIntCallLinkInfo):
        (LLIntCallLinkInfo):
        (JSC::LLIntCallLinkInfo::~LLIntCallLinkInfo):
        (JSC::LLIntCallLinkInfo::isLinked):
        (JSC::LLIntCallLinkInfo::unlink):
        * bytecode/MethodCallLinkStatus.cpp:
        (JSC::MethodCallLinkStatus::computeFor):
        * bytecode/Opcode.cpp:
        (JSC):
        * bytecode/Opcode.h:
        (JSC):
        (JSC::padOpcodeName):
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::computeFromLLInt):
        (JSC):
        (JSC::PutByIdStatus::computeFor):
        * bytecode/PutByIdStatus.h:
        (PutByIdStatus):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitResolve):
        (JSC::BytecodeGenerator::emitResolveWithBase):
        (JSC::BytecodeGenerator::emitGetById):
        (JSC::BytecodeGenerator::emitPutById):
        (JSC::BytecodeGenerator::emitDirectPutById):
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitConstruct):
        (JSC::BytecodeGenerator::emitCatch):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
        * dfg/DFGOSRExitCompiler.cpp:
        * dfg/DFGOperations.cpp:
        * heap/Heap.h:
        (JSC):
        (JSC::Heap::firstAllocatorWithoutDestructors):
        (Heap):
        * heap/MarkStack.cpp:
        (JSC::visitChildren):
        * heap/MarkedAllocator.h:
        (JSC):
        (MarkedAllocator):
        * heap/MarkedSpace.h:
        (JSC):
        (MarkedSpace):
        (JSC::MarkedSpace::firstAllocator):
        * interpreter/CallFrame.cpp:
        (JSC):
        (JSC::CallFrame::bytecodeOffsetForNonDFGCode):
        (JSC::CallFrame::setBytecodeOffsetForNonDFGCode):
        (JSC::CallFrame::currentVPC):
        (JSC::CallFrame::setCurrentVPC):
        (JSC::CallFrame::trueCallerFrame):
        * interpreter/CallFrame.h:
        (JSC::ExecState::hasReturnPC):
        (JSC::ExecState::clearReturnPC):
        (ExecState):
        (JSC::ExecState::bytecodeOffsetForNonDFGCode):
        (JSC::ExecState::currentVPC):
        (JSC::ExecState::setCurrentVPC):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::Interpreter):
        (JSC::Interpreter::~Interpreter):
        (JSC):
        (JSC::Interpreter::initialize):
        (JSC::Interpreter::isOpcode):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::getCallerInfo):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::retrieveLastCaller):
        * interpreter/Interpreter.h:
        (JSC):
        (Interpreter):
        (JSC::Interpreter::getOpcode):
        (JSC::Interpreter::getOpcodeID):
        (JSC::Interpreter::classicEnabled):
        * interpreter/RegisterFile.h:
        (JSC):
        (RegisterFile):
        * jit/ExecutableAllocator.h:
        (JSC):
        * jit/HostCallReturnValue.cpp: Added.
        (JSC):
        (JSC::getHostCallReturnValueWithExecState):
        * jit/HostCallReturnValue.h: Added.
        (JSC):
        (JSC::initializeHostCallReturnValue):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):
        * jit/JITCode.h:
        (JSC::JITCode::isOptimizingJIT):
        (JITCode):
        (JSC::JITCode::isBaselineCode):
        (JSC::JITCode::JITCode):
        * jit/JITDriver.h:
        (JSC::jitCompileIfAppropriate):
        (JSC::jitCompileFunctionIfAppropriate):
        * jit/JITExceptions.cpp:
        (JSC::jitThrow):
        * jit/JITInlineMethods.h:
        (JSC::JIT::updateTopCallFrame):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        (JSC):
        * jit/JITStubs.h:
        (JSC):
        * jit/JSInterfaceJIT.h:
        * llint: Added.
        * llint/LLIntCommon.h: Added.
        * llint/LLIntData.cpp: Added.
        (LLInt):
        (JSC::LLInt::Data::Data):
        (JSC::LLInt::Data::performAssertions):
        (JSC::LLInt::Data::~Data):
        * llint/LLIntData.h: Added.
        (JSC):
        (LLInt):
        (Data):
        (JSC::LLInt::Data::exceptionInstructions):
        (JSC::LLInt::Data::opcodeMap):
        (JSC::LLInt::Data::performAssertions):
        * llint/LLIntEntrypoints.cpp: Added.
        (LLInt):
        (JSC::LLInt::getFunctionEntrypoint):
        (JSC::LLInt::getEvalEntrypoint):
        (JSC::LLInt::getProgramEntrypoint):
        * llint/LLIntEntrypoints.h: Added.
        (JSC):
        (LLInt):
        (JSC::LLInt::getEntrypoint):
        * llint/LLIntExceptions.cpp: Added.
        (LLInt):
        (JSC::LLInt::interpreterThrowInCaller):
        (JSC::LLInt::returnToThrowForThrownException):
        (JSC::LLInt::returnToThrow):
        (JSC::LLInt::callToThrow):
        * llint/LLIntExceptions.h: Added.
        (JSC):
        (LLInt):
        * llint/LLIntOfflineAsmConfig.h: Added.
        * llint/LLIntOffsetsExtractor.cpp: Added.
        (JSC):
        (LLIntOffsetsExtractor):
        (JSC::LLIntOffsetsExtractor::dummy):
        (main):
        * llint/LLIntSlowPaths.cpp: Added.
        (LLInt):
        (JSC::LLInt::llint_trace_operand):
        (JSC::LLInt::llint_trace_value):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::traceFunctionPrologue):
        (JSC::LLInt::shouldJIT):
        (JSC::LLInt::entryOSR):
        (JSC::LLInt::resolveGlobal):
        (JSC::LLInt::getByVal):
        (JSC::LLInt::handleHostCall):
        (JSC::LLInt::setUpCall):
        (JSC::LLInt::genericCall):
        * llint/LLIntSlowPaths.h: Added.
        (JSC):
        (LLInt):
        * llint/LLIntThunks.cpp: Added.
        (LLInt):
        (JSC::LLInt::generateThunkWithJumpTo):
        (JSC::LLInt::functionForCallEntryThunkGenerator):
        (JSC::LLInt::functionForConstructEntryThunkGenerator):
        (JSC::LLInt::functionForCallArityCheckThunkGenerator):
        (JSC::LLInt::functionForConstructArityCheckThunkGenerator):
        (JSC::LLInt::evalEntryThunkGenerator):
        (JSC::LLInt::programEntryThunkGenerator):
        * llint/LLIntThunks.h: Added.
        (JSC):
        (LLInt):
        * llint/LowLevelInterpreter.asm: Added.
        * llint/LowLevelInterpreter.cpp: Added.
        * llint/LowLevelInterpreter.h: Added.
        * offlineasm: Added.
        * offlineasm/armv7.rb: Added.
        * offlineasm/asm.rb: Added.
        * offlineasm/ast.rb: Added.
        * offlineasm/backends.rb: Added.
        * offlineasm/generate_offset_extractor.rb: Added.
        * offlineasm/instructions.rb: Added.
        * offlineasm/offset_extractor_constants.rb: Added.
        * offlineasm/offsets.rb: Added.
        * offlineasm/opt.rb: Added.
        * offlineasm/parser.rb: Added.
        * offlineasm/registers.rb: Added.
        * offlineasm/self_hash.rb: Added.
        * offlineasm/settings.rb: Added.
        * offlineasm/transform.rb: Added.
        * offlineasm/x86.rb: Added.
        * runtime/CodeSpecializationKind.h: Added.
        (JSC):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::arityCheckFor):
        (CommonSlowPaths):
        * runtime/Executable.cpp:
        (JSC::jettisonCodeBlock):
        (JSC):
        (JSC::EvalExecutable::jitCompile):
        (JSC::samplingDescription):
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::jitCompile):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::baselineCodeBlockFor):
        (JSC::FunctionExecutable::jitCompileForCall):
        (JSC::FunctionExecutable::jitCompileForConstruct):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        * runtime/Executable.h:
        (JSC):
        (EvalExecutable):
        (ProgramExecutable):
        (FunctionExecutable):
        (JSC::FunctionExecutable::jitCompileFor):
        * runtime/ExecutionHarness.h: Added.
        (JSC):
        (JSC::prepareForExecution):
        (JSC::prepareFunctionForExecution):
        * runtime/JSArray.h:
        (JSC):
        (JSArray):
        * runtime/JSCell.h:
        (JSC):
        (JSCell):
        * runtime/JSFunction.h:
        (JSC):
        (JSFunction):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        (JSC):
        (JSGlobalData):
        * runtime/JSGlobalObject.h:
        (JSC):
        (JSGlobalObject):
        * runtime/JSObject.h:
        (JSC):
        (JSObject):
        (JSFinalObject):
        * runtime/JSPropertyNameIterator.h:
        (JSC):
        (JSPropertyNameIterator):
        * runtime/JSString.h:
        (JSC):
        (JSString):
        * runtime/JSTypeInfo.h:
        (JSC):
        (TypeInfo):
        * runtime/JSValue.cpp:
        (JSC::JSValue::description):
        * runtime/JSValue.h:
        (LLInt):
        (JSValue):
        * runtime/JSVariableObject.h:
        (JSC):
        (JSVariableObject):
        * runtime/Options.cpp:
        (Options):
        (JSC::Options::initializeOptions):
        * runtime/Options.h:
        (Options):
        * runtime/ScopeChain.h:
        (JSC):
        (ScopeChainNode):
        * runtime/Structure.cpp:
        (JSC::Structure::addPropertyTransition):
        * runtime/Structure.h:
        (JSC):
        (Structure):
        * runtime/StructureChain.h:
        (JSC):
        (StructureChain):
        * wtf/InlineASM.h:
        * wtf/Platform.h:
        * wtf/SentinelLinkedList.h:
        (SentinelLinkedList):
        (WTF::SentinelLinkedList::isEmpty):
        * wtf/text/StringImpl.h:
        (JSC):
        (StringImpl):

2012-02-21  Oliver Hunt  <oliver@apple.com>

        Unbreak double-typed arrays on ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=79177

        Reviewed by Gavin Barraclough.

        The existing code had completely broken address arithmetic.

        * JSCTypedArrayStubs.h:
        (JSC):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::storeDouble):
        (JSC::MacroAssemblerARMv7::storeFloat):

2012-02-21  Gavin Barraclough  <barraclough@apple.com>

        Should be able to reconfigure a non-configurable property as read-only
        https://bugs.webkit.org/show_bug.cgi?id=79170

        Reviewed by Sam Weinig.

        See ES5.1 8.12.9 10.a.i - the spec prohibits making a read-only property writable,
        but does not inhibit making a writable property read-only.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::setInDefineOwnProperty):
        (JSGlobalData):
        (JSC::JSGlobalData::isInDefineOwnProperty):
            - Added flag, tracking whether we are in JSObject::defineOwnProperty.
        * runtime/JSObject.cpp:
        (JSC::JSObject::deleteProperty):
        (DefineOwnPropertyScope):
            - Always allow properties to be deleted by DefineOwnProperty - assume it knows what it is doing!
        (JSC::DefineOwnPropertyScope::DefineOwnPropertyScope):
        (JSC::DefineOwnPropertyScope::~DefineOwnPropertyScope):
            - Added RAII helper.
        (JSC::JSObject::defineOwnProperty):
            - Track on the globalData when we are in this method.

2012-02-21  Oliver Hunt  <oliver@apple.com>

        Make TypedArrays be available in commandline jsc
        https://bugs.webkit.org/show_bug.cgi?id=79163

        Reviewed by Gavin Barraclough.

        Adds a compile time option to have jsc support a basic implementation
        of the TypedArrays available in WebCore.  This lets us test the typed
        array logic in the JIT witout having to build webcore.

        * JSCTypedArrayStubs.h: Added.
        (JSC):
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jsc.cpp:
        (GlobalObject::finishCreation):
        (GlobalObject):
        (GlobalObject::addConstructableFunction):
        * runtime/JSGlobalData.h:
        (JSGlobalData):

2012-02-21  Tom Sepez  <tsepez@chromium.org>

        equalIgnoringNullity() only comparing half the bytes for equality
        https://bugs.webkit.org/show_bug.cgi?id=79135

        Reviewed by Adam Barth.

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

2012-02-21  Roland Takacs  <takacs.roland@stud.u-szeged.hu>

        Unnecessary preprocessor macros in MainThread.h/cpp
        https://bugs.webkit.org/show_bug.cgi?id=79083

        Removed invalid/wrong PLATFORM(WINDOWS) preprocessor macro.

        * wtf/MainThread.cpp:
        (WTF):
        * wtf/MainThread.h:
        (WTF):

2012-02-21  Sam Weinig  <sam@webkit.org>

        Attempt to fix the Snow Leopard build.

        * Configurations/Base.xcconfig:

2012-02-21  Sam Weinig  <sam@webkit.org>

        Use libc++ when building with Clang on Mac
        https://bugs.webkit.org/show_bug.cgi?id=78981

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig:

2012-02-21  Adam Roben  <aroben@apple.com>

        Roll out r108309, r108323, and r108326

        They broke the 32-bit Lion build.

        Original bugs is <http://webkit.org/b/75812> <rdar://problem/10079694>.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * assembler/LinkBuffer.h:
        * assembler/MacroAssemblerCodeRef.h:
        * bytecode/BytecodeConventions.h: Removed.
        * bytecode/CallLinkStatus.cpp:
        * bytecode/CallLinkStatus.h:
        * bytecode/CodeBlock.cpp:
        * bytecode/CodeBlock.h:
        * bytecode/GetByIdStatus.cpp:
        * bytecode/GetByIdStatus.h:
        * bytecode/Instruction.h:
        * bytecode/LLIntCallLinkInfo.h: Removed.
        * bytecode/MethodCallLinkStatus.cpp:
        * bytecode/Opcode.cpp:
        * bytecode/Opcode.h:
        * bytecode/PutByIdStatus.cpp:
        * bytecode/PutByIdStatus.h:
        * bytecompiler/BytecodeGenerator.cpp:
        * dfg/DFGByteCodeParser.cpp:
        * dfg/DFGCapabilities.h:
        * dfg/DFGOSRExitCompiler.cpp:
        * dfg/DFGOperations.cpp:
        * heap/Heap.h:
        * heap/MarkStack.cpp:
        * heap/MarkedAllocator.h:
        * heap/MarkedSpace.h:
        * interpreter/CallFrame.cpp:
        * interpreter/CallFrame.h:
        * interpreter/Interpreter.cpp:
        * interpreter/Interpreter.h:
        * interpreter/RegisterFile.h:
        * jit/ExecutableAllocator.h:
        * jit/HostCallReturnValue.cpp: Removed.
        * jit/HostCallReturnValue.h: Removed.
        * jit/JIT.cpp:
        * jit/JITCode.h:
        * jit/JITDriver.h:
        * jit/JITExceptions.cpp:
        * jit/JITInlineMethods.h:
        * jit/JITStubs.cpp:
        * jit/JITStubs.h:
        * jit/JSInterfaceJIT.h:
        * llint/LLIntCommon.h: Removed.
        * llint/LLIntData.cpp: Removed.
        * llint/LLIntData.h: Removed.
        * llint/LLIntEntrypoints.cpp: Removed.
        * llint/LLIntEntrypoints.h: Removed.
        * llint/LLIntExceptions.cpp: Removed.
        * llint/LLIntExceptions.h: Removed.
        * llint/LLIntOfflineAsmConfig.h: Removed.
        * llint/LLIntOffsetsExtractor.cpp: Removed.
        * llint/LLIntSlowPaths.cpp: Removed.
        * llint/LLIntSlowPaths.h: Removed.
        * llint/LLIntThunks.cpp: Removed.
        * llint/LLIntThunks.h: Removed.
        * llint/LowLevelInterpreter.asm: Removed.
        * llint/LowLevelInterpreter.cpp: Removed.
        * llint/LowLevelInterpreter.h: Removed.
        * offlineasm/armv7.rb: Removed.
        * offlineasm/asm.rb: Removed.
        * offlineasm/ast.rb: Removed.
        * offlineasm/backends.rb: Removed.
        * offlineasm/generate_offset_extractor.rb: Removed.
        * offlineasm/instructions.rb: Removed.
        * offlineasm/offset_extractor_constants.rb: Removed.
        * offlineasm/offsets.rb: Removed.
        * offlineasm/opt.rb: Removed.
        * offlineasm/parser.rb: Removed.
        * offlineasm/registers.rb: Removed.
        * offlineasm/self_hash.rb: Removed.
        * offlineasm/settings.rb: Removed.
        * offlineasm/transform.rb: Removed.
        * offlineasm/x86.rb: Removed.
        * runtime/CodeSpecializationKind.h: Removed.
        * runtime/CommonSlowPaths.h:
        * runtime/Executable.cpp:
        * runtime/Executable.h:
        * runtime/ExecutionHarness.h: Removed.
        * runtime/JSArray.h:
        * runtime/JSCell.h:
        * runtime/JSFunction.h:
        * runtime/JSGlobalData.cpp:
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.h:
        * runtime/JSObject.h:
        * runtime/JSPropertyNameIterator.h:
        * runtime/JSString.h:
        * runtime/JSTypeInfo.h:
        * runtime/JSValue.cpp:
        * runtime/JSValue.h:
        * runtime/JSVariableObject.h:
        * runtime/Options.cpp:
        * runtime/Options.h:
        * runtime/ScopeChain.h:
        * runtime/Structure.cpp:
        * runtime/Structure.h:
        * runtime/StructureChain.h:
        * wtf/InlineASM.h:
        * wtf/Platform.h:
        * wtf/SentinelLinkedList.h:
        * wtf/text/StringImpl.h:

2012-02-21  Gustavo Noronha Silva  <kov@debian.org> and Bob Tracy  <rct@frus.com>

        Does not build on IA64, SPARC and Alpha
        https://bugs.webkit.org/show_bug.cgi?id=79047

        Rubber-stamped by Kent Tamura.

        * wtf/dtoa/utils.h: these architectures also have correct double
        operations, so add them to the appropriate side of the check.

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

        Fix massive crashes in all tests introduced by previous build fix, and fix non-DFG build.
        https://bugs.webkit.org/show_bug.cgi?id=75812

        Reviewed by Csaba Osztrogonác.

        * dfg/DFGOperations.cpp:
        (JSC):
        * jit/HostCallReturnValue.h:
        (JSC::initializeHostCallReturnValue):

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

        Attempted build fix for ELF platforms.

        * dfg/DFGOperations.cpp:
        (JSC):
        (JSC::getHostCallReturnValueWithExecState):
        * jit/HostCallReturnValue.cpp:
        (JSC):
        * jit/HostCallReturnValue.h:
        (JSC::initializeHostCallReturnValue):

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

        JSC should be a triple-tier VM
        https://bugs.webkit.org/show_bug.cgi?id=75812
        <rdar://problem/10079694>

        Reviewed by Gavin Barraclough.
        
        Implemented an interpreter that uses the JIT's calling convention. This
        interpreter is called LLInt, or the Low Level Interpreter. JSC will now
        will start by executing code in LLInt and will only tier up to the old
        JIT after the code is proven hot.
        
        LLInt is written in a modified form of our macro assembly. This new macro
        assembly is compiled by an offline assembler (see offlineasm), which
        implements many modern conveniences such as a Turing-complete CPS-based
        macro language and direct access to relevant C++ type information
        (basically offsets of fields and sizes of structs/classes).
        
        Code executing in LLInt appears to the rest of the JSC world "as if" it
        were executing in the old JIT. Hence, things like exception handling and
        cross-execution-engine calls just work and require pretty much no
        additional overhead.
        
        This interpreter is 2-2.5x faster than our old interpreter on SunSpider,
        V8, and Kraken. With triple-tiering turned on, we're neutral on SunSpider,
        V8, and Kraken, but appear to get a double-digit improvement on real-world
        websites due to a huge reduction in the amount of JIT'ing.
        
        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * JavaScriptCore.pri:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * assembler/LinkBuffer.h:
        * assembler/MacroAssemblerCodeRef.h:
        (MacroAssemblerCodePtr):
        (JSC::MacroAssemblerCodePtr::createFromExecutableAddress):
        * bytecode/BytecodeConventions.h: Added.
        * bytecode/CallLinkStatus.cpp:
        (JSC::CallLinkStatus::computeFromLLInt):
        (JSC):
        (JSC::CallLinkStatus::computeFor):
        * bytecode/CallLinkStatus.h:
        (JSC::CallLinkStatus::isSet):
        (JSC::CallLinkStatus::operator!):
        (CallLinkStatus):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::finalizeUnconditionally):
        (JSC::CodeBlock::stronglyVisitStrongReferences):
        (JSC):
        (JSC::CodeBlock::unlinkCalls):
        (JSC::CodeBlock::unlinkIncomingCalls):
        (JSC::CodeBlock::bytecodeOffset):
        (JSC::ProgramCodeBlock::jettison):
        (JSC::EvalCodeBlock::jettison):
        (JSC::FunctionCodeBlock::jettison):
        (JSC::ProgramCodeBlock::jitCompileImpl):
        (JSC::EvalCodeBlock::jitCompileImpl):
        (JSC::FunctionCodeBlock::jitCompileImpl):
        * bytecode/CodeBlock.h:
        (JSC):
        (CodeBlock):
        (JSC::CodeBlock::baselineVersion):
        (JSC::CodeBlock::linkIncomingCall):
        (JSC::CodeBlock::bytecodeOffset):
        (JSC::CodeBlock::jitCompile):
        (JSC::CodeBlock::hasOptimizedReplacement):
        (JSC::CodeBlock::addPropertyAccessInstruction):
        (JSC::CodeBlock::addGlobalResolveInstruction):
        (JSC::CodeBlock::addLLIntCallLinkInfo):
        (JSC::CodeBlock::addGlobalResolveInfo):
        (JSC::CodeBlock::numberOfMethodCallLinkInfos):
        (JSC::CodeBlock::valueProfilePredictionForBytecodeOffset):
        (JSC::CodeBlock::likelyToTakeSlowCase):
        (JSC::CodeBlock::couldTakeSlowCase):
        (JSC::CodeBlock::likelyToTakeSpecialFastCase):
        (JSC::CodeBlock::likelyToTakeDeepestSlowCase):
        (JSC::CodeBlock::likelyToTakeAnySlowCase):
        (JSC::CodeBlock::addFrequentExitSite):
        (JSC::CodeBlock::dontJITAnytimeSoon):
        (JSC::CodeBlock::jitAfterWarmUp):
        (JSC::CodeBlock::jitSoon):
        (JSC::CodeBlock::llintExecuteCounter):
        (ProgramCodeBlock):
        (EvalCodeBlock):
        (FunctionCodeBlock):
        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::computeFromLLInt):
        (JSC):
        (JSC::GetByIdStatus::computeFor):
        * bytecode/GetByIdStatus.h:
        (JSC::GetByIdStatus::GetByIdStatus):
        (JSC::GetByIdStatus::wasSeenInJIT):
        (GetByIdStatus):
        * bytecode/Instruction.h:
        (JSC):
        (JSC::Instruction::Instruction):
        (Instruction):
        * bytecode/LLIntCallLinkInfo.h: Added.
        (JSC):
        (JSC::LLIntCallLinkInfo::LLIntCallLinkInfo):
        (LLIntCallLinkInfo):
        (JSC::LLIntCallLinkInfo::~LLIntCallLinkInfo):
        (JSC::LLIntCallLinkInfo::isLinked):
        (JSC::LLIntCallLinkInfo::unlink):
        * bytecode/MethodCallLinkStatus.cpp:
        (JSC::MethodCallLinkStatus::computeFor):
        * bytecode/Opcode.cpp:
        (JSC):
        * bytecode/Opcode.h:
        (JSC):
        (JSC::padOpcodeName):
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::computeFromLLInt):
        (JSC):
        (JSC::PutByIdStatus::computeFor):
        * bytecode/PutByIdStatus.h:
        (PutByIdStatus):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitResolve):
        (JSC::BytecodeGenerator::emitResolveWithBase):
        (JSC::BytecodeGenerator::emitGetById):
        (JSC::BytecodeGenerator::emitPutById):
        (JSC::BytecodeGenerator::emitDirectPutById):
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitConstruct):
        (JSC::BytecodeGenerator::emitCatch):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
        * dfg/DFGOSRExitCompiler.cpp:
        * dfg/DFGOperations.cpp:
        * heap/Heap.h:
        (JSC):
        (JSC::Heap::firstAllocatorWithoutDestructors):
        (Heap):
        * heap/MarkStack.cpp:
        (JSC::visitChildren):
        * heap/MarkedAllocator.h:
        (JSC):
        (MarkedAllocator):
        * heap/MarkedSpace.h:
        (JSC):
        (MarkedSpace):
        (JSC::MarkedSpace::firstAllocator):
        * interpreter/CallFrame.cpp:
        (JSC):
        (JSC::CallFrame::bytecodeOffsetForNonDFGCode):
        (JSC::CallFrame::setBytecodeOffsetForNonDFGCode):
        (JSC::CallFrame::currentVPC):
        (JSC::CallFrame::setCurrentVPC):
        (JSC::CallFrame::trueCallerFrame):
        * interpreter/CallFrame.h:
        (JSC::ExecState::hasReturnPC):
        (JSC::ExecState::clearReturnPC):
        (ExecState):
        (JSC::ExecState::bytecodeOffsetForNonDFGCode):
        (JSC::ExecState::currentVPC):
        (JSC::ExecState::setCurrentVPC):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::Interpreter):
        (JSC::Interpreter::~Interpreter):
        (JSC):
        (JSC::Interpreter::initialize):
        (JSC::Interpreter::isOpcode):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::getCallerInfo):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::retrieveLastCaller):
        * interpreter/Interpreter.h:
        (JSC):
        (Interpreter):
        (JSC::Interpreter::getOpcode):
        (JSC::Interpreter::getOpcodeID):
        (JSC::Interpreter::classicEnabled):
        * interpreter/RegisterFile.h:
        (JSC):
        (RegisterFile):
        * jit/ExecutableAllocator.h:
        (JSC):
        * jit/HostCallReturnValue.cpp: Added.
        (JSC):
        (JSC::getHostCallReturnValueWithExecState):
        * jit/HostCallReturnValue.h: Added.
        (JSC):
        (JSC::initializeHostCallReturnValue):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):
        * jit/JITCode.h:
        (JSC::JITCode::isOptimizingJIT):
        (JITCode):
        (JSC::JITCode::isBaselineCode):
        (JSC::JITCode::JITCode):
        * jit/JITDriver.h:
        (JSC::jitCompileIfAppropriate):
        (JSC::jitCompileFunctionIfAppropriate):
        * jit/JITExceptions.cpp:
        (JSC::jitThrow):
        * jit/JITInlineMethods.h:
        (JSC::JIT::updateTopCallFrame):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        (JSC):
        * jit/JITStubs.h:
        (JSC):
        * jit/JSInterfaceJIT.h:
        * llint: Added.
        * llint/LLIntCommon.h: Added.
        * llint/LLIntData.cpp: Added.
        (LLInt):
        (JSC::LLInt::Data::Data):
        (JSC::LLInt::Data::performAssertions):
        (JSC::LLInt::Data::~Data):
        * llint/LLIntData.h: Added.
        (JSC):
        (LLInt):
        (Data):
        (JSC::LLInt::Data::exceptionInstructions):
        (JSC::LLInt::Data::opcodeMap):
        (JSC::LLInt::Data::performAssertions):
        * llint/LLIntEntrypoints.cpp: Added.
        (LLInt):
        (JSC::LLInt::getFunctionEntrypoint):
        (JSC::LLInt::getEvalEntrypoint):
        (JSC::LLInt::getProgramEntrypoint):
        * llint/LLIntEntrypoints.h: Added.
        (JSC):
        (LLInt):
        (JSC::LLInt::getEntrypoint):
        * llint/LLIntExceptions.cpp: Added.
        (LLInt):
        (JSC::LLInt::interpreterThrowInCaller):
        (JSC::LLInt::returnToThrowForThrownException):
        (JSC::LLInt::returnToThrow):
        (JSC::LLInt::callToThrow):
        * llint/LLIntExceptions.h: Added.
        (JSC):
        (LLInt):
        * llint/LLIntOfflineAsmConfig.h: Added.
        * llint/LLIntOffsetsExtractor.cpp: Added.
        (JSC):
        (LLIntOffsetsExtractor):
        (JSC::LLIntOffsetsExtractor::dummy):
        (main):
        * llint/LLIntSlowPaths.cpp: Added.
        (LLInt):
        (JSC::LLInt::llint_trace_operand):
        (JSC::LLInt::llint_trace_value):
        (JSC::LLInt::LLINT_SLOW_PATH_DECL):
        (JSC::LLInt::traceFunctionPrologue):
        (JSC::LLInt::shouldJIT):
        (JSC::LLInt::entryOSR):
        (JSC::LLInt::resolveGlobal):
        (JSC::LLInt::getByVal):
        (JSC::LLInt::handleHostCall):
        (JSC::LLInt::setUpCall):
        (JSC::LLInt::genericCall):
        * llint/LLIntSlowPaths.h: Added.
        (JSC):
        (LLInt):
        * llint/LLIntThunks.cpp: Added.
        (LLInt):
        (JSC::LLInt::generateThunkWithJumpTo):
        (JSC::LLInt::functionForCallEntryThunkGenerator):
        (JSC::LLInt::functionForConstructEntryThunkGenerator):
        (JSC::LLInt::functionForCallArityCheckThunkGenerator):
        (JSC::LLInt::functionForConstructArityCheckThunkGenerator):
        (JSC::LLInt::evalEntryThunkGenerator):
        (JSC::LLInt::programEntryThunkGenerator):
        * llint/LLIntThunks.h: Added.
        (JSC):
        (LLInt):
        * llint/LowLevelInterpreter.asm: Added.
        * llint/LowLevelInterpreter.cpp: Added.
        * llint/LowLevelInterpreter.h: Added.
        * offlineasm: Added.
        * offlineasm/armv7.rb: Added.
        * offlineasm/asm.rb: Added.
        * offlineasm/ast.rb: Added.
        * offlineasm/backends.rb: Added.
        * offlineasm/generate_offset_extractor.rb: Added.
        * offlineasm/instructions.rb: Added.
        * offlineasm/offset_extractor_constants.rb: Added.
        * offlineasm/offsets.rb: Added.
        * offlineasm/opt.rb: Added.
        * offlineasm/parser.rb: Added.
        * offlineasm/registers.rb: Added.
        * offlineasm/self_hash.rb: Added.
        * offlineasm/settings.rb: Added.
        * offlineasm/transform.rb: Added.
        * offlineasm/x86.rb: Added.
        * runtime/CodeSpecializationKind.h: Added.
        (JSC):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::arityCheckFor):
        (CommonSlowPaths):
        * runtime/Executable.cpp:
        (JSC::jettisonCodeBlock):
        (JSC):
        (JSC::EvalExecutable::jitCompile):
        (JSC::samplingDescription):
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::jitCompile):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::baselineCodeBlockFor):
        (JSC::FunctionExecutable::jitCompileForCall):
        (JSC::FunctionExecutable::jitCompileForConstruct):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        * runtime/Executable.h:
        (JSC):
        (EvalExecutable):
        (ProgramExecutable):
        (FunctionExecutable):
        (JSC::FunctionExecutable::jitCompileFor):
        * runtime/ExecutionHarness.h: Added.
        (JSC):
        (JSC::prepareForExecution):
        (JSC::prepareFunctionForExecution):
        * runtime/JSArray.h:
        (JSC):
        (JSArray):
        * runtime/JSCell.h:
        (JSC):
        (JSCell):
        * runtime/JSFunction.h:
        (JSC):
        (JSFunction):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        (JSC):
        (JSGlobalData):
        * runtime/JSGlobalObject.h:
        (JSC):
        (JSGlobalObject):
        * runtime/JSObject.h:
        (JSC):
        (JSObject):
        (JSFinalObject):
        * runtime/JSPropertyNameIterator.h:
        (JSC):
        (JSPropertyNameIterator):
        * runtime/JSString.h:
        (JSC):
        (JSString):
        * runtime/JSTypeInfo.h:
        (JSC):
        (TypeInfo):
        * runtime/JSValue.cpp:
        (JSC::JSValue::description):
        * runtime/JSValue.h:
        (LLInt):
        (JSValue):
        * runtime/JSVariableObject.h:
        (JSC):
        (JSVariableObject):
        * runtime/Options.cpp:
        (Options):
        (JSC::Options::initializeOptions):
        * runtime/Options.h:
        (Options):
        * runtime/ScopeChain.h:
        (JSC):
        (ScopeChainNode):
        * runtime/Structure.cpp:
        (JSC::Structure::addPropertyTransition):
        * runtime/Structure.h:
        (JSC):
        (Structure):
        * runtime/StructureChain.h:
        (JSC):
        (StructureChain):
        * wtf/InlineASM.h:
        * wtf/Platform.h:
        * wtf/SentinelLinkedList.h:
        (SentinelLinkedList):
        (WTF::SentinelLinkedList::isEmpty):
        * wtf/text/StringImpl.h:
        (JSC):
        (StringImpl):

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

        Unreviewed, rolling out http://trac.webkit.org/changeset/108291
        It completely broke the 32-bit JIT.

        * heap/CopiedAllocator.h:
        * heap/CopiedSpace.h:
        (CopiedSpace):
        * heap/Heap.h:
        (JSC::Heap::allocatorForObjectWithDestructor):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        (JIT):
        * jit/JITInlineMethods.h:
        (JSC):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_new_array):
        * runtime/JSArray.cpp:
        (JSC::storageSize):
        (JSC):
        * runtime/JSArray.h:
        (ArrayStorage):
        (JSArray):

2012-02-20  Gavin Barraclough  <barraclough@apple.com>

        [[Put]] should throw if prototype chain contains a readonly property.
        https://bugs.webkit.org/show_bug.cgi?id=79069

        Reviewed by Oliver Hunt.

        Currently we only check the base of the put, not the prototype chain.
        Fold this check in with the test for accessors.

        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
            - Updated to test all objects in the propotype chain for readonly properties.
        (JSC::JSObject::putDirectAccessor):
        (JSC::putDescriptor):
            - Record the presence of readonly properties on the structure.
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
            - hasGetterSetterPropertiesExcludingProto expanded to hasReadOnlyOrGetterSetterPropertiesExcludingProto.
        * runtime/Structure.h:
        (JSC::Structure::hasReadOnlyOrGetterSetterPropertiesExcludingProto):
        (JSC::Structure::setHasGetterSetterProperties):
            - hasGetterSetterPropertiesExcludingProto expanded to hasReadOnlyOrGetterSetterPropertiesExcludingProto.
        (JSC::Structure::setContainsReadOnlyProperties):
            - Added.

2012-02-20  Mark Hahnenberg  <mhahnenberg@apple.com>

        Implement fast path for op_new_array in the baseline JIT
        https://bugs.webkit.org/show_bug.cgi?id=78612

        Reviewed by Filip Pizlo.

        * heap/CopiedAllocator.h:
        (CopiedAllocator): Friended the JIT to allow access to m_currentOffset.
        * heap/CopiedSpace.h:
        (CopiedSpace): Friended the JIT to allow access to 
        (JSC::CopiedSpace::allocator):
        * heap/Heap.h:
        (JSC::Heap::storageAllocator): Added a getter for the CopiedAllocator class so the JIT
        can use it for simple allocation i.e. when we can just bump the offset without having to 
        do anything else.
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases): Added new slow case for op_new_array for when
        we have to bail out because the fast allocation path fails for whatever reason.
        * jit/JIT.h:
        (JIT):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitAllocateBasicStorage): Added utility function that allows objects to 
        allocate generic backing stores. This function is used by emitAllocateJSArray.
        (JSC):
        (JSC::JIT::emitAllocateJSArray): Added utility function that allows the client to 
        more easily allocate JSArrays. This function is used by emit_op_new_array and I expect 
        it will also be used for emit_op_new_array_buffer.
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_new_array): Changed to do inline allocation of JSArrays. Still does 
        a stub call for oversize arrays.
        (JSC):
        (JSC::JIT::emitSlow_op_new_array): Just bails out to a stub call if we fail in any way on 
        the fast path.
        * runtime/JSArray.cpp:
        (JSC):
        * runtime/JSArray.h: Added lots of offset functions for all the fields that we need to 
        initialize in the JIT.
        (ArrayStorage):
        (JSC::ArrayStorage::lengthOffset):
        (JSC::ArrayStorage::numValuesInVectorOffset):
        (JSC::ArrayStorage::allocBaseOffset):
        (JSC::ArrayStorage::vectorOffset):
        (JSArray):
        (JSC::JSArray::sparseValueMapOffset):
        (JSC::JSArray::subclassDataOffset):
        (JSC::JSArray::indexBiasOffset):
        (JSC):
        (JSC::JSArray::storageSize): Moved this function from being a static function in the cpp file
        to being a static function in the JSArray class. This move allows the JIT to call it to 
        see what size it should allocate.

2012-02-20  Gavin Barraclough  <barraclough@apple.com>

        DefineOwnProperty fails with numeric properties & Object.prototype
        https://bugs.webkit.org/show_bug.cgi?id=79059

        Reviewed by Oliver Hunt.

        ObjectPrototype caches whether it contains any numeric properties (m_hasNoPropertiesWithUInt32Names),
        calls to defineOwnProperty need to update this cache.

        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::put):
        (JSC::ObjectPrototype::defineOwnProperty):
        (JSC):
        (JSC::ObjectPrototype::getOwnPropertySlotByIndex):
        * runtime/ObjectPrototype.h:
        (ObjectPrototype):

2012-02-20  Pino Toscano  <pino@debian.org>

        Does not build on GNU Hurd
        https://bugs.webkit.org/show_bug.cgi?id=79045

        Reviewed by Gustavo Noronha Silva.

        * wtf/Platform.h: define WTF_OS_HURD.
        * wtf/ThreadIdentifierDataPthreads.cpp: adds a band-aid fix
        for the lack of PTHREAD_KEYS_MAX definition, with a value which
        should not cause issues.

2012-02-20  Gavin Barraclough  <barraclough@apple.com>

        Unreviewed windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-02-20  Mark Hahnenberg  <mhahnenberg@apple.com>

        Undoing accidental changes

        * heap/Heap.cpp:
        (JSC::Heap::collectAllGarbage):

2012-02-20  Mark Hahnenberg  <mhahnenberg@apple.com>

        Factor out allocation in CopySpace into a separate CopyAllocator
        https://bugs.webkit.org/show_bug.cgi?id=78610

        Reviewed by Oliver Hunt.

        Added a new CopyAllocator class, which allows us to do allocations without 
        having to load the current offset and store the current offset in the current 
        block. This change will allow us to easily do inline assembly in the JIT for 
        array allocations.

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/CopiedAllocator.h: Added.
        (JSC):
        (CopiedAllocator):
        (JSC::CopiedAllocator::currentBlock):
        (JSC::CopiedAllocator::CopiedAllocator):
        (JSC::CopiedAllocator::allocate):
        (JSC::CopiedAllocator::fitsInCurrentBlock):
        (JSC::CopiedAllocator::wasLastAllocation):
        (JSC::CopiedAllocator::startedCopying):
        (JSC::CopiedAllocator::resetCurrentBlock):
        (JSC::CopiedAllocator::currentUtilization):
        (JSC::CopiedAllocator::resetLastAllocation):
        * heap/CopiedBlock.h:
        (CopiedBlock):
        * heap/CopiedSpace.cpp: Moved some stuff from CopiedSpaceInlineMethods to here because we 
        weren't really getting any benefits from having such big functions in a header file.
        (JSC::CopiedSpace::CopiedSpace):
        (JSC):
        (JSC::CopiedSpace::init):
        (JSC::CopiedSpace::tryAllocateSlowCase):
        (JSC::CopiedSpace::tryAllocateOversize):
        (JSC::CopiedSpace::tryReallocate):
        (JSC::CopiedSpace::tryReallocateOversize):
        (JSC::CopiedSpace::doneFillingBlock):
        (JSC::CopiedSpace::doneCopying):
        (JSC::CopiedSpace::getFreshBlock):
        * heap/CopiedSpace.h:
        (CopiedSpace):
        * heap/CopiedSpaceInlineMethods.h:
        (JSC):
        (JSC::CopiedSpace::startedCopying):
        (JSC::CopiedSpace::addNewBlock):
        (JSC::CopiedSpace::allocateNewBlock):
        (JSC::CopiedSpace::fitsInBlock):
        (JSC::CopiedSpace::tryAllocate):
        (JSC::CopiedSpace::allocateFromBlock):
        * heap/Heap.cpp:
        (JSC::Heap::collectAllGarbage):
        * heap/HeapBlock.h:
        (HeapBlock):

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

        Fix Visual Studio 2010 build.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::PropertyListNode::emitBytecode):

2012-02-16  Gavin Barraclough  <barraclough@apple.com>

        Move special __proto__ property to Object.prototype
        https://bugs.webkit.org/show_bug.cgi?id=78409

        Reviewed by Oliver Hunt.

        Re-implement this as a regular accessor property.  This has three key benefits:
        1) It makes it possible for objects to be given properties named __proto__.
        2) Object.prototype.__proto__ can be deleted, preventing object prototypes from being changed.
        3) This largely removes the magic used the implement __proto__, it can just be made a regular accessor property.

        * parser/Parser.cpp:
        (JSC::::parseFunctionInfo):
            - No need to prohibit functions named __proto__.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
            - Add __proto__ accessor to Object.prototype.
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncProtoGetter):
        (JSC::globalFuncProtoSetter):
            - Definition of the __proto__ accessor functions.
        * runtime/JSGlobalObjectFunctions.h:
            - Declaration of the __proto__ accessor functions.
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
            - Remove the special handling for __proto__, there is still a check to allow for a fast guard for accessors excluding __proto__.
        (JSC::JSObject::putDirectAccessor):
            - Track on the structure whether an object contains accessors other than one for __proto__.
        (JSC::JSObject::defineOwnProperty):
            - No need to prohibit definition of own properties named __proto__.
        * runtime/JSObject.h:
        (JSC::JSObject::inlineGetOwnPropertySlot):
            - Remove the special handling for __proto__.
        (JSC::JSValue::get):
            - Remove the special handling for __proto__.
        * runtime/JSString.cpp:
        (JSC::JSString::getOwnPropertySlot):
            - Remove the special handling for __proto__.
        * runtime/JSValue.h:
        (JSValue):
            - Made synthesizePrototype public (this may be needed by the __proto__ getter).
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorGetPrototypeOf):
            - Perform the security check & call prototype() directly.
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
            - Added 'ExcludingProto' variant of the 'hasGetterSetterProperties' state.
        * runtime/Structure.h:
        (JSC::Structure::hasGetterSetterPropertiesExcludingProto):
        (JSC::Structure::setHasGetterSetterProperties):
        (Structure):
            - Added 'ExcludingProto' variant of the 'hasGetterSetterProperties' state.

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

        Update toLower and toUpper tests for Unicode 6.1 changes
        https://bugs.webkit.org/show_bug.cgi?id=78923

        Reviewed by Oliver Hunt.

        * tests/mozilla/ecma/String/15.5.4.11-2.js: Updated the test
        to handle a third set of results for updated Unicode 6.1
        changes.
        (getTestCases):
        (TestCaseMultiExpected):
        (writeTestCaseResultMultiExpected):
        (getTestCaseResultMultiExpected):
        (test):
        (GetUnicodeValues):
        (DecimalToHexString):

2012-02-20  Andy Wingo  <wingo@igalia.com>

        Remove unused features from CodeFeatures
        https://bugs.webkit.org/show_bug.cgi?id=78804

        Reviewed by Gavin Barraclough.

        * parser/Nodes.h:
        * parser/ASTBuilder.h:
        (JSC::ClosureFeature):
        (JSC::ASTBuilder::createFunctionBody):
        (JSC::ASTBuilder::usesClosures):
        Remove "ClosureFeature".  Since we track captured variables more
        precisely, this bit doesn't do us any good.

        (JSC::AssignFeature):
        (JSC::ASTBuilder::makeAssignNode):
        (JSC::ASTBuilder::makePrefixNode):
        (JSC::ASTBuilder::makePostfixNode):
        (JSC::ASTBuilder::usesAssignment):
        Similarly, remove AssignFeature.  It is unused.

2012-02-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck issues.

        * GNUmakefile.list.am: Add missing files.

2012-02-18  Sam Weinig  <sam@webkit.org>

        Fix style issues in DFG Phase classes
        https://bugs.webkit.org/show_bug.cgi?id=78983

        Reviewed by Ryosuke Niwa.

        * dfg/DFGArithNodeFlagsInferencePhase.cpp:
        * dfg/DFGCFAPhase.cpp:
        * dfg/DFGCSEPhase.cpp:
        * dfg/DFGPredictionPropagationPhase.cpp:
        * dfg/DFGVirtualRegisterAllocationPhase.cpp:
        Add a space before the colon in class declarations.

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

        Attempt to fix Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-02-18  Sam Weinig  <sam@webkit.org>

        Fix the libc++ build.

        Reviewed by Anders Carlsson.

        * heap/Weak.h:
        Libc++'s nullptr emulation does not allow default construction
        of the nullptr_t type. Work around this with the arguably clearer
        just returning nullptr.

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

        DFGPropagator.cpp has too many things
        https://bugs.webkit.org/show_bug.cgi?id=78956

        Reviewed by Oliver Hunt.
        
        Added the notion of a DFG::Phase. Removed DFG::Propagator, and took its
        various things and put them into separate files. These new phases follow
        the naming convention "DFG<name>Phase" where <name> is a noun. They are
        called via functions of the form "perform<name>".

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * dfg/DFGArithNodeFlagsInferencePhase.cpp: Added.
        (DFG):
        (JSC::DFG::performArithNodeFlagsInference):
        * dfg/DFGArithNodeFlagsInferencePhase.h: Added.
        (DFG):
        * dfg/DFGCFAPhase.cpp: Added.
        (DFG):
        (JSC::DFG::performCFA):
        * dfg/DFGCFAPhase.h: Added.
        (DFG):
        * dfg/DFGCSEPhase.cpp: Added.
        (DFG):
        (JSC::DFG::performCSE):
        * dfg/DFGCSEPhase.h: Added.
        (DFG):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * dfg/DFGPhase.cpp: Added.
        (DFG):
        (JSC::DFG::Phase::beginPhase):
        (JSC::DFG::Phase::endPhase):
        * dfg/DFGPhase.h: Added.
        (DFG):
        (Phase):
        (JSC::DFG::Phase::Phase):
        (JSC::DFG::Phase::~Phase):
        (JSC::DFG::Phase::globalData):
        (JSC::DFG::Phase::codeBlock):
        (JSC::DFG::Phase::profiledBlock):
        (JSC::DFG::Phase::beginPhase):
        (JSC::DFG::Phase::endPhase):
        (JSC::DFG::runPhase):
        * dfg/DFGPredictionPropagationPhase.cpp: Added.
        (DFG):
        (JSC::DFG::performPredictionPropagation):
        * dfg/DFGPredictionPropagationPhase.h: Added.
        (DFG):
        * dfg/DFGPropagator.cpp: Removed.
        * dfg/DFGPropagator.h: Removed.
        * dfg/DFGVirtualRegisterAllocationPhase.cpp: Added.
        (DFG):
        (JSC::DFG::performVirtualRegisterAllocation):
        * dfg/DFGVirtualRegisterAllocationPhase.h: Added.
        (DFG):

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

        DFG::Graph should have references to JSGlobalData, the CodeBlock being compiled, and
        the CodeBlock that was used for profiling
        https://bugs.webkit.org/show_bug.cgi?id=78954

        Reviewed by Gavin Barraclough.

        * bytecode/CodeBlock.h:
        (JSC::baselineCodeBlockForOriginAndBaselineCodeBlock):
        (JSC):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::AbstractState):
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGAbstractState.h:
        * dfg/DFGAssemblyHelpers.h:
        (AssemblyHelpers):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::parse):
        * dfg/DFGByteCodeParser.h:
        (DFG):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        (JSC::DFG::Graph::predictArgumentTypes):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::Graph):
        (Graph):
        (JSC::DFG::Graph::getJSConstantPrediction):
        (JSC::DFG::Graph::addShouldSpeculateInteger):
        (JSC::DFG::Graph::isInt32Constant):
        (JSC::DFG::Graph::isDoubleConstant):
        (JSC::DFG::Graph::isNumberConstant):
        (JSC::DFG::Graph::isBooleanConstant):
        (JSC::DFG::Graph::isFunctionConstant):
        (JSC::DFG::Graph::valueOfJSConstant):
        (JSC::DFG::Graph::valueOfInt32Constant):
        (JSC::DFG::Graph::valueOfNumberConstant):
        (JSC::DFG::Graph::valueOfBooleanConstant):
        (JSC::DFG::Graph::valueOfFunctionConstant):
        (JSC::DFG::Graph::baselineCodeBlockFor):
        (JSC::DFG::Graph::valueProfileFor):
        (JSC::DFG::Graph::addImmediateShouldSpeculateInteger):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::JITCompiler):
        (JITCompiler):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::considerAddingAsFrequentExitSiteSlow):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::Propagator):
        (JSC::DFG::Propagator::isNotNegZero):
        (JSC::DFG::Propagator::isNotZero):
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::doRoundOfDoubleVoting):
        (JSC::DFG::Propagator::globalCFA):
        (JSC::DFG::propagate):
        * dfg/DFGPropagator.h:
        (DFG):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        (JSC::DFG::SpeculativeJIT::compileAdd):
        (JSC::DFG::SpeculativeJIT::compileArithSub):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::isConstant):
        (JSC::DFG::SpeculativeJIT::isJSConstant):
        (JSC::DFG::SpeculativeJIT::isInt32Constant):
        (JSC::DFG::SpeculativeJIT::isDoubleConstant):
        (JSC::DFG::SpeculativeJIT::isNumberConstant):
        (JSC::DFG::SpeculativeJIT::isBooleanConstant):
        (JSC::DFG::SpeculativeJIT::isFunctionConstant):
        (JSC::DFG::SpeculativeJIT::valueOfInt32Constant):
        (JSC::DFG::SpeculativeJIT::valueOfNumberConstant):
        (JSC::DFG::SpeculativeJIT::valueOfJSConstant):
        (JSC::DFG::SpeculativeJIT::valueOfBooleanConstant):
        (JSC::DFG::SpeculativeJIT::valueOfFunctionConstant):
        (JSC::DFG::SpeculativeJIT::speculationCheck):
        (JSC::DFG::SpeculativeJIT::SpeculativeJIT):

2012-02-17  Ahmad Sharif  <asharif.tools@gmail.com>

        There is a warning in memset in glibc that gets triggered through a
        warndecl when the fill-value of memset is a non-zero constant and the
        size is zero. This warning is enabled when building with
        -D_FORTIFY_SOURCE=2. This patch fixes the warning.

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

        Reviewed by Alexey Proskuryakov

        * wtf/Vector.h:

2012-02-17  Kalev Lember  <kalevlember@gmail.com>

        Remove unused parameters from WTF threading API
        https://bugs.webkit.org/show_bug.cgi?id=78389

        Reviewed by Adam Roben.

        waitForThreadCompletion() had an out param 'void **result' to get the
        'void *' returned by ThreadFunction. However, the implementation in
        ThreadingWin.cpp ignored the out param, not filling it in. This had
        led to a situation where none of the client code made use of the param
        and just ignored it.

        To clean this up, the patch changes the signature of ThreadFunction to
        return void instead of void* and drops the the unused 'void **result'
        parameter from waitForThreadCompletion. Also, all client code is
        updated for the API change.

        As mentioned in https://bugs.webkit.org/show_bug.cgi?id=78389 , even
        though the change only affects internal API, Safari is using it
        directly and we'll need to keep the old versions around for ABI
        compatibility. For this, the patch adds compatibility wrappers with
        the old ABI.

        * JavaScriptCore.order:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * bytecode/SamplingTool.cpp:
        (JSC::SamplingThread::threadStartFunc):
        (JSC::SamplingThread::stop):
        * bytecode/SamplingTool.h:
        (SamplingThread):
        * heap/Heap.cpp:
        (JSC::Heap::~Heap):
        (JSC::Heap::blockFreeingThreadStartFunc):
        * heap/Heap.h:
        * heap/MarkStack.cpp:
        (JSC::MarkStackThreadSharedData::markingThreadStartFunc):
        (JSC::MarkStackThreadSharedData::~MarkStackThreadSharedData):
        * heap/MarkStack.h:
        (MarkStackThreadSharedData):
        * wtf/ParallelJobsGeneric.cpp:
        (WTF::ParallelEnvironment::ThreadPrivate::workerThread):
        * wtf/ParallelJobsGeneric.h:
        (ThreadPrivate):
        * wtf/ThreadFunctionInvocation.h: Update the signature of
        ThreadFunction.
        (WTF):
        * wtf/Threading.cpp:
        (WTF::threadEntryPoint): Update for ThreadFunction signature change.
        (WTF):
        (WTF::ThreadFunctionWithReturnValueInvocation::ThreadFunctionWithReturnValueInvocation):
        ABI compatibility function for Safari.
        (ThreadFunctionWithReturnValueInvocation): Ditto.
        (WTF::compatEntryPoint): Ditto.
        (WTF::createThread): Ditto.
        (WTF::waitForThreadCompletion): Ditto.
        * wtf/Threading.h: Update the signature of ThreadFunction and
        waitForThreadCompletion.
        (WTF):
        * wtf/ThreadingPthreads.cpp: Implement the new API.
        (WTF::wtfThreadEntryPoint):
        (WTF):
        (WTF::createThreadInternal):
        (WTF::waitForThreadCompletion):
        * wtf/ThreadingWin.cpp: Implement the new API.
        (WTF::wtfThreadEntryPoint):
        (WTF::waitForThreadCompletion):

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

        Implement Error.stack
        https://bugs.webkit.org/show_bug.cgi?id=66994

        Reviewed by Gavin Barraclough.

        Implement support for stack traces on exception objects.  This is a rewrite
        of the core portion of the last stack walking logic, but the mechanical work
        of adding the information to an exception comes from the original work by
        Juan Carlos Montemayor Elosua.

        * interpreter/Interpreter.cpp:
        (JSC::getCallerInfo):
        (JSC):
        (JSC::getSourceURLFromCallFrame):
        (JSC::getStackFrameCodeType):
        (JSC::Interpreter::getStackTrace):
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::privateExecute):
        * interpreter/Interpreter.h:
        (JSC):
        (StackFrame):
        (JSC::StackFrame::toString):
        (Interpreter):
        * jsc.cpp:
        (GlobalObject::finishCreation):
        (functionJSCStack):
        * parser/Nodes.h:
        (JSC::FunctionBodyNode::setInferredName):
        * parser/Parser.h:
        (JSC::::parse):
        * runtime/CommonIdentifiers.h:
        * runtime/Error.cpp:
        (JSC::addErrorInfo):
        * runtime/Error.h:
        (JSC):

2012-02-17  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename Bump* to Copy*
        https://bugs.webkit.org/show_bug.cgi?id=78573

        Reviewed by Geoffrey Garen.

        Renamed anything with "Bump" in the name to have "Copied" instead.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * heap/BumpBlock.h: Removed.
        * heap/BumpSpace.cpp: Removed.
        * heap/BumpSpace.h: Removed.
        * heap/BumpSpaceInlineMethods.h: Removed.
        * heap/ConservativeRoots.cpp:
        (JSC::ConservativeRoots::ConservativeRoots):
        (JSC::ConservativeRoots::genericAddPointer):
        * heap/ConservativeRoots.h:
        (ConservativeRoots):
        * heap/CopiedBlock.h: Added.
        (JSC):
        (CopiedBlock):
        (JSC::CopiedBlock::CopiedBlock):
        * heap/CopiedSpace.cpp: Added.
        (JSC):
        (JSC::CopiedSpace::tryAllocateSlowCase):
        * heap/CopiedSpace.h: Added.
        (JSC):
        (CopiedSpace):
        (JSC::CopiedSpace::isInCopyPhase):
        (JSC::CopiedSpace::totalMemoryAllocated):
        (JSC::CopiedSpace::totalMemoryUtilized):
        * heap/CopiedSpaceInlineMethods.h: Added.
        (JSC):
        (JSC::CopiedSpace::CopiedSpace):
        (JSC::CopiedSpace::init):
        (JSC::CopiedSpace::contains):
        (JSC::CopiedSpace::pin):
        (JSC::CopiedSpace::startedCopying):
        (JSC::CopiedSpace::doneCopying):
        (JSC::CopiedSpace::doneFillingBlock):
        (JSC::CopiedSpace::recycleBlock):
        (JSC::CopiedSpace::getFreshBlock):
        (JSC::CopiedSpace::borrowBlock):
        (JSC::CopiedSpace::addNewBlock):
        (JSC::CopiedSpace::allocateNewBlock):
        (JSC::CopiedSpace::fitsInBlock):
        (JSC::CopiedSpace::fitsInCurrentBlock):
        (JSC::CopiedSpace::tryAllocate):
        (JSC::CopiedSpace::tryAllocateOversize):
        (JSC::CopiedSpace::allocateFromBlock):
        (JSC::CopiedSpace::tryReallocate):
        (JSC::CopiedSpace::tryReallocateOversize):
        (JSC::CopiedSpace::isOversize):
        (JSC::CopiedSpace::isPinned):
        (JSC::CopiedSpace::oversizeBlockFor):
        (JSC::CopiedSpace::blockFor):
        * heap/Heap.cpp:
        * heap/Heap.h:
        (JSC):
        (Heap):
        * heap/MarkStack.cpp:
        (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
        (JSC::SlotVisitor::drainFromShared):
        (JSC::SlotVisitor::startCopying):
        (JSC::SlotVisitor::allocateNewSpace):
        (JSC::SlotVisitor::doneCopying):
        * heap/MarkStack.h:
        (MarkStackThreadSharedData):
        * heap/SlotVisitor.h:
        (SlotVisitor):
        * runtime/JSArray.cpp:
        * runtime/JSObject.cpp:

2012-02-16  Yuqiang Xian  <yuqiang.xian@intel.com>

        Add JSC code profiling support on Linux x86
        https://bugs.webkit.org/show_bug.cgi?id=78871

        Reviewed by Gavin Barraclough.

        We don't unwind the stack for now as we cannot guarantee all the
        libraries are compiled without -fomit-frame-pointer.

        * tools/CodeProfile.cpp:
        (JSC::CodeProfile::sample):
        * tools/CodeProfiling.cpp:
        (JSC):
        (JSC::profilingTimer):
        (JSC::CodeProfiling::begin):
        (JSC::CodeProfiling::end):

2012-02-16  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed. Rolling out r107980, because it broke 32 bit platforms.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::privateExecute):
        * interpreter/Interpreter.h:
        (JSC):
        (Interpreter):
        * jsc.cpp:
        (GlobalObject::finishCreation):
        * parser/Nodes.h:
        (JSC::FunctionBodyNode::setInferredName):
        * parser/Parser.h:
        (JSC::::parse):
        * runtime/CommonIdentifiers.h:
        * runtime/Error.cpp:
        (JSC::addErrorInfo):
        * runtime/Error.h:
        (JSC):

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

        ENABLE_INTERPRETER should be ENABLE_CLASSIC_INTERPRETER
        https://bugs.webkit.org/show_bug.cgi?id=78791

        Rubber stamped by Oliver Hunt.
        
        Just a renaming, nothing more. Also renamed COMPUTED_GOTO_INTERPRETER to
        COMPUTED_GOTO_CLASSIC_INTERPRETER.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::stronglyVisitStrongReferences):
        (JSC):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (CodeBlock):
        * bytecode/Instruction.h:
        (JSC::Instruction::Instruction):
        * bytecode/Opcode.h:
        (JSC::padOpcodeName):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitResolve):
        (JSC::BytecodeGenerator::emitResolveWithBase):
        (JSC::BytecodeGenerator::emitGetById):
        (JSC::BytecodeGenerator::emitPutById):
        (JSC::BytecodeGenerator::emitDirectPutById):
        * interpreter/AbstractPC.cpp:
        (JSC::AbstractPC::AbstractPC):
        * interpreter/AbstractPC.h:
        (AbstractPC):
        * interpreter/CallFrame.h:
        (ExecState):
        * interpreter/Interpreter.cpp:
        (JSC):
        (JSC::Interpreter::initialize):
        (JSC::Interpreter::isOpcode):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::retrieveLastCaller):
        * interpreter/Interpreter.h:
        (JSC::Interpreter::getOpcode):
        (JSC::Interpreter::getOpcodeID):
        (Interpreter):
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolExecutableAllocator::FixedVMPoolExecutableAllocator):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        * runtime/Executable.h:
        (NativeExecutable):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::getHostFunction):
        * runtime/JSGlobalData.h:
        (JSGlobalData):
        * wtf/OSAllocatorPosix.cpp:
        (WTF::OSAllocator::reserveAndCommit):
        * wtf/Platform.h:

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

        Made Weak<T> single-owner, adding PassWeak<T>
        https://bugs.webkit.org/show_bug.cgi?id=78740

        Reviewed by Sam Weinig.

        This works basically the same way as OwnPtr<T> and PassOwnPtr<T>.

        This clarifies the semantics of finalizers: It's ambiguous and probably
        a bug to copy a finalizer (i.e., it's a bug to run a C++ destructor
        twice), so I've made Weak<T> non-copyable. Anywhere we used to copy a 
        Weak<T>, we now use PassWeak<T>.

        This also makes Weak<T> HashMaps more efficient.

        * API/JSClassRef.cpp:
        (OpaqueJSClass::prototype): Use PassWeak<T> instead of set(), since 
        set() is gone now.

        * JavaScriptCore.xcodeproj/project.pbxproj: Export!

        * heap/PassWeak.h: Added.
        (JSC):
        (PassWeak):
        (JSC::PassWeak::PassWeak):
        (JSC::PassWeak::~PassWeak):
        (JSC::PassWeak::get):
        (JSC::::leakHandle):
        (JSC::adoptWeak):
        (JSC::operator==):
        (JSC::operator!=): This is the Weak<T> version of PassOwnPtr<T>.

        * heap/Weak.h:
        (Weak):
        (JSC::Weak::Weak):
        (JSC::Weak::release):
        (JSC::Weak::hashTableDeletedValue):
        (JSC::=):
        (JSC): Changed to be non-copyable, removing a lot of copying-related
        APIs. Added hash traits so hash maps still work.

        * jit/JITStubs.cpp:
        (JSC::JITThunks::hostFunctionStub):
        * runtime/RegExpCache.cpp:
        (JSC::RegExpCache::lookupOrCreate): Use PassWeak<T>, as required by
        our new hash map API.

2012-02-16  Mark Hahnenberg  <mhahnenberg@apple.com>

        Fix the broken viewport tests
        https://bugs.webkit.org/show_bug.cgi?id=78774

        Reviewed by Kenneth Rohde Christiansen.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/text/WTFString.cpp:
        (WTF):
        (WTF::toDoubleType): Template-ized to allow other functions to specify whether they
        want to allow trailing junk or not when calling strtod.
        (WTF::charactersToDouble):
        (WTF::charactersToFloat):
        (WTF::charactersToFloatIgnoringJunk): Created new version of charactersToFloat that allows 
        trailing junk.
        * wtf/text/WTFString.h:
        (WTF):

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

        Implement Error.stack
        https://bugs.webkit.org/show_bug.cgi?id=66994

        Reviewed by Gavin Barraclough.

        Implement support for stack traces on exception objects.  This is a rewrite
        of the core portion of the last stack walking logic, but the mechanical work
        of adding the information to an exception comes from the original work by
        Juan Carlos Montemayor Elosua.

        * interpreter/Interpreter.cpp:
        (JSC::getCallerInfo):
        (JSC):
        (JSC::getSourceURLFromCallFrame):
        (JSC::getStackFrameCodeType):
        (JSC::Interpreter::getStackTrace):
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::privateExecute):
        * interpreter/Interpreter.h:
        (JSC):
        (StackFrame):
        (JSC::StackFrame::toString):
        (Interpreter):
        * jsc.cpp:
        (GlobalObject::finishCreation):
        (functionJSCStack):
        * parser/Nodes.h:
        (JSC::FunctionBodyNode::setInferredName):
        * parser/Parser.h:
        (JSC::::parse):
        * runtime/CommonIdentifiers.h:
        * runtime/Error.cpp:
        (JSC::addErrorInfo):
        * runtime/Error.h:
        (JSC):

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

        Numerous trivial bugs in Object.defineProperty
        https://bugs.webkit.org/show_bug.cgi?id=78777

        Reviewed by Sam Weinig.

        There are a handful of really trivial bugs, related to Object.defineProperty:
            * Redefining an accessor with different attributes changes the attributes, but not the get/set functions!
            * Calling an undefined setter should only throw in strict mode.
            * When redefining an accessor to a data decriptor, if writable is not specified we should default to false.
            * Any attempt to redefine a non-configurable property of an array as configurable should be rejected.
            * Object.defineProperties should call toObject on 'Properties' argument, rather than throwing if it is not an object.
            * If preventExtensions has been called on an array, subsequent assignment beyond array bounds should fail.
            * 'isFrozen' shouldn't be checking the ReadOnly bit for accessor descriptors (we presently always keep this bit as 'false').
            * Should be able to redefine an non-writable, non-configurable property, with the same value and attributes.
            * Should be able to define an non-configurable accessor.
        These are mostly all one-line changes, e.g. inverted boolean checks, masking against wrong attribute.

        * runtime/JSArray.cpp:
        (JSC::SparseArrayValueMap::put):
            - Added ASSERT.
            - Calling an undefined setter should only throw in strict mode.
        (JSC::JSArray::putDescriptor):
            - Should be able to define an non-configurable accessor.
        (JSC::JSArray::defineOwnNumericProperty):
            - Any attempt to redefine a non-configurable property of an array as configurable should be rejected.
        (JSC::JSArray::putByIndexBeyondVectorLength):
            - If preventExtensions has been called on an array, subsequent assignment beyond array bounds should fail.
        * runtime/JSArray.h:
        (JSArray):
            - made enterDictionaryMode public, called from JSObject.
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
            - Calling an undefined setter should only throw in strict mode.
        (JSC::JSObject::preventExtensions):
            - Put array objects into dictionary mode to handle this!
        (JSC::JSObject::defineOwnProperty):
            - Should be able to redefine an non-writable, non-configurable property, with the same value and attributes.
            - Redefining an accessor with different attributes changes the attributes, but not the get/set functions!
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorDefineProperties):
            - Object.defineProperties should call toObject on 'Properties' argument, rather than throwing if it is not an object.
        * runtime/PropertyDescriptor.cpp:
        (JSC::PropertyDescriptor::attributesWithOverride):
            - When redefining an accessor to a data decriptor, if writable is not specified we should default to false.
        (JSC::PropertyDescriptor::attributesOverridingCurrent):
            - When redefining an accessor to a data decriptor, if writable is not specified we should default to false.
        * runtime/Structure.cpp:
        (JSC::Structure::freezeTransition):
            - 'freezeTransition' shouldn't be setting the ReadOnly bit for accessor descriptors (we presently always keep this bit as 'false').
        (JSC::Structure::isFrozen):
            - 'isFrozen' shouldn't be checking the ReadOnly bit for accessor descriptors (we presently always keep this bit as 'false').

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

        DFG should not check the types of arguments that are dead
        https://bugs.webkit.org/show_bug.cgi?id=78518

        Reviewed by Geoff Garen.
        
        The argument checks are now elided if the corresponding SetArgument is dead,
        and the abstract value of the argument is set to bottom (None, []). This is
        performance neutral on the benchmarks we currently track.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::initialize):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):

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

        Ensure that the DFG JIT always plants a CodeOrigin when making calls
        https://bugs.webkit.org/show_bug.cgi?id=78763

        Reviewed by Gavin Barraclough.

        Make all calls plant a CodeOrigin prior to the actual
        call.  Also clobbers the Interpreter with logic to ensure
        that the interpreter always plants a bytecode offset.

        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGJITCompiler.h:
        (CallBeginToken):
        (JSC::DFG::JITCompiler::beginJSCall):
        (JSC::DFG::JITCompiler::beginCall):
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::tryBuildGetByIDList):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * interpreter/AbstractPC.cpp:
        (JSC::AbstractPC::AbstractPC):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::trueCallFrame):
        * interpreter/CallFrame.h:
        (JSC::ExecState::bytecodeOffsetForNonDFGCode):
        (ExecState):
        (JSC::ExecState::setBytecodeOffsetForNonDFGCode):
        (JSC::ExecState::codeOriginIndexForDFG):

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

        Fix Interpreter.

        * runtime/Executable.cpp:
        (JSC):
        * runtime/Executable.h:
        (ExecutableBase):

2012-02-14  Matt Lilek  <mrl@apple.com>

        Don't ENABLE_DASHBOARD_SUPPORT unconditionally on all Mac platforms
        https://bugs.webkit.org/show_bug.cgi?id=78629

        Reviewed by David Kilzer.

        * Configurations/FeatureDefines.xcconfig:

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

        Unreviewed, build fix for non-DFG platforms.

        * assembler/MacroAssembler.h:
        (MacroAssembler):

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

        Unreviewed, fix build and configuration goof.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::invert):
        * dfg/DFGCommon.h:

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

        DFG should be able to emit code on control flow edges
        https://bugs.webkit.org/show_bug.cgi?id=78515

        Reviewed by Gavin Barraclough.
        
        This gets us a few steps closer to being able to perform global register allocation,
        by allowing us to have landing pads on control flow edges. This will let us reshuffle
        registers if it happens to be necessary due to different reg alloc decisions in
        differen blocks.
        
        This also introduces the notion of a landing pad for OSR entry, which will allow us
        to emit code that places data into registers when we're entering into the DFG from
        the old JIT.
        
        Finally, this patch introduces a verification mode that checks that the landing pads
        are actually emitted and do actually work as advertised. When verification is disabled,
        this has no effect on behavior.

        * assembler/MacroAssembler.h:
        (MacroAssembler):
        (JSC::MacroAssembler::invert):
        (JSC::MacroAssembler::isInvertible):
        * dfg/DFGCommon.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compile):
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::createOSREntries):
        (DFG):
        (JSC::DFG::SpeculativeJIT::linkOSREntries):
        (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
        * dfg/DFGSpeculativeJIT.h:
        (SpeculativeJIT):
        (JSC::DFG::SpeculativeJIT::branchDouble):
        (JSC::DFG::SpeculativeJIT::branchDoubleNonZero):
        (JSC::DFG::SpeculativeJIT::branch32):
        (JSC::DFG::SpeculativeJIT::branchTest32):
        (JSC::DFG::SpeculativeJIT::branchPtr):
        (JSC::DFG::SpeculativeJIT::branchTestPtr):
        (JSC::DFG::SpeculativeJIT::branchTest8):
        (JSC::DFG::SpeculativeJIT::jump):
        (JSC::DFG::SpeculativeJIT::haveEdgeCodeToEmit):
        (JSC::DFG::SpeculativeJIT::emitEdgeCode):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):

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

        Assertion failure under JSC::DFG::AbstractState::execute loading economist.com
        https://bugs.webkit.org/show_bug.cgi?id=78153
        <rdar://problem/10861712> <rdar://problem/10861947>

        Reviewed by Oliver Hunt.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileAdd):

2012-02-14  Eric Seidel  <eric@webkit.org>

        Upstream Android's additions to Platform.h
        https://bugs.webkit.org/show_bug.cgi?id=78536

        Reviewed by Adam Barth.

        * wtf/Platform.h:

2012-02-12  Mark Hahnenberg  <mhahnenberg@apple.com>

        Replace old strtod with new strtod
        https://bugs.webkit.org/show_bug.cgi?id=68044

        Reviewed by Geoffrey Garen.

        * parser/Lexer.cpp: Added template argument. This version allows junk after numbers.
        (JSC::::lex):
        * runtime/JSGlobalObjectFunctions.cpp: Ditto.
        (JSC::parseInt):
        (JSC::jsStrDecimalLiteral):
        * runtime/LiteralParser.cpp: Ditto.
        (JSC::::Lexer::lexNumber):
        * wtf/dtoa.cpp: Replaced old strtod with a new version that uses the new StringToDoubleConverter.
        It takes a template argument to allow clients to determine statically whether it should allow 
        junk after the numbers or not.
        (WTF):
        (WTF::strtod):
        * wtf/dtoa.h:
        (WTF):
        * wtf/text/WTFString.cpp: Added template argument. This version does not allow junk after numbers.
        (WTF::toDoubleType):

2012-02-13  Mark Hahnenberg  <mhahnenberg@apple.com>

        More windows build fixing

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-02-13  Oliver Hunt  <oliver@apple.com>

        Executing out of bounds in JSC::Yarr::YarrCodeBlock::execute / JSC::RegExp::match
        https://bugs.webkit.org/show_bug.cgi?id=76315

        Reviewed by Gavin Barraclough.

        Perform a 3 byte compare using two comparisons, rather than trying to perform the
        operation with a four byte load.

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

2012-02-13  Mark Hahnenberg  <mhahnenberg@apple.com>

        Windows build fix

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-02-12  Mark Hahnenberg  <mhahnenberg@apple.com>

        Replace old strtod with new strtod
        https://bugs.webkit.org/show_bug.cgi?id=68044

        Reviewed by Geoffrey Garen.

        * parser/Lexer.cpp: Added template argument. This version allows junk after numbers.
        (JSC::::lex):
        * runtime/JSGlobalObjectFunctions.cpp: Ditto.
        (JSC::parseInt):
        (JSC::jsStrDecimalLiteral):
        * runtime/LiteralParser.cpp: Ditto.
        (JSC::::Lexer::lexNumber):
        * wtf/dtoa.cpp: Replaced old strtod with a new version that uses the new StringToDoubleConverter.
        It takes a template argument to allow clients to determine statically whether it should allow 
        junk after the numbers or not.
        (WTF):
        (WTF::strtod):
        * wtf/dtoa.h:
        (WTF):
        * wtf/text/WTFString.cpp: Added template argument. This version does not allow junk after numbers.
        (WTF::toDoubleType):

2012-02-13  Sam Weinig  <sam@webkit.org>

        Move JSC related assertions out of Assertions.h and into their own header
        https://bugs.webkit.org/show_bug.cgi?id=78508

        Reviewed by Gavin Barraclough.

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        Add GCAssertions.h

        * heap/GCAssertions.h: Added.
        Move assertions here.

        * runtime/WriteBarrier.h:
        Add #include of GCAssertions.h

        * wtf/Assertions.h:
        Remove JSC related assertions.

        * wtf/Compiler.h:
        Add compiler check for __has_trivial_destructor.

2012-02-13  Chao-ying Fu  <fu@mips.com>

        Update MIPS patchOffsetGetByIdSlowCaseCall
        https://bugs.webkit.org/show_bug.cgi?id=78392

        Reviewed by Gavin Barraclough.

        * jit/JIT.h:
        (JIT):

2012-02-13  Patrick Gansterer  <paroga@webkit.org>

        Remove obsolete #if from ThreadSpecific.h
        https://bugs.webkit.org/show_bug.cgi?id=78485

        Reviewed by Adam Roben.

        Since alle platform use either pthread or Win32 for threading,
        we can remove all PLATFORM() preprocessor statements.

        * wtf/ThreadSpecific.h:
        (ThreadSpecific):

2012-02-13  Jessie Berlin  <jberlin@apple.com>

        Fix the Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-02-13  Sam Weinig  <sam@webkit.org>

        Use C11's _Static_assert for COMPILE_ASSERT if it is available
        https://bugs.webkit.org/show_bug.cgi?id=78506

        Rubber-stamped by Antti Koivisto.

        Use C11's _Static_assert for COMPILE_ASSERT if it is available to give slightly
        better error messages.

        * wtf/Assertions.h:
        Use _Static_assert if it is available.

        * wtf/Compiler.h:
        Add COMPILER_SUPPORTS support for _Static_assert when using the LLVM Compiler.

2012-02-13  Mario Sanchez Prada  <msanchez@igalia.com>

        [GTK] Add GSList to the list of GObject types in GOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=78487

        Reviewed by Philippe Normand.

        Handle the GSList type in GOwnPtr, by calling g_slist_free in the
        implementation of the freeOwnedGPtr template function.

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

2012-02-06  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [EFL] Drop support for the Curl network backend.
        https://bugs.webkit.org/show_bug.cgi?id=77874

        Reviewed by Eric Seidel.

        Nobody seems to be maintaining the Curl backend in WebCore, the
        EFL port developers all seem to be using the Soup backend and the
        port itself has many features which are only implemented for the
        latter.

        * wtf/PlatformEfl.cmake: Always build the gobject-dependent source
        files.

2012-02-13  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed. Build fix for !ENABLE(JIT) after r107485.

        * bytecode/PolymorphicPutByIdList.cpp:

2012-02-13  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=78434
        Unreviewed - temporarily reverting r107498 will I fix a couple of testcases.

        * parser/Parser.cpp:
        (JSC::::parseFunctionInfo):
        * runtime/ClassInfo.h:
        (MethodTable):
        (JSC):
        * runtime/JSCell.cpp:
        (JSC):
        * runtime/JSCell.h:
        (JSCell):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC):
        * runtime/JSGlobalObjectFunctions.h:
        (JSC):
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
        (JSC):
        (JSC::JSObject::putDirectAccessor):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        (JSC::JSObject::inlineGetOwnPropertySlot):
        (JSC::JSValue::get):
        * runtime/JSString.cpp:
        (JSC::JSString::getOwnPropertySlot):
        * runtime/JSValue.h:
        (JSValue):
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorGetPrototypeOf):
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        * runtime/Structure.h:
        (JSC::Structure::setHasGetterSetterProperties):
        (Structure):

2012-02-12  Ashod Nakashian  <ashodnakashian@yahoo.com>

        KeywordLookupGenerator.py script fails in some cases
        https://bugs.webkit.org/show_bug.cgi?id=77886

        Reviewed by Benjamin Poulain.

        * parser/Keywords.table: Converted to LF-only.

2012-02-12  Shinya Kawanaka  <shinyak@google.com>

        Introduce ShadowRootList.
        https://bugs.webkit.org/show_bug.cgi?id=78069

        Reviewed by Hajime Morita.

        DoublyLinkedList should have tail() method to take the last element.

        * wtf/DoublyLinkedList.h:
        (DoublyLinkedList):
        (WTF::::tail):
        (WTF):

2012-02-12  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [CMake] Move source files in WTF_HEADERS to WTF_SOURCES.
        https://bugs.webkit.org/show_bug.cgi?id=78436

        Reviewed by Daniel Bates.

        * wtf/CMakeLists.txt: Move .cpp files from WTF_HEADERS to WTF_SOURCES,
        and correctly sort the files which start with 'M'.

2012-02-12  Sam Weinig  <sam@webkit.org>

        Move the NumberOfCores.h/cpp files into the WTF group of JavaScriptCore.xcodeproj.

        Rubber-stamped by Anders Carlsson.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2012-02-12  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [CMake] Remove unused or empty variable definitions.
        https://bugs.webkit.org/show_bug.cgi?id=78437

        Reviewed by Daniel Bates.

        * CMakeLists.txt: Remove unused JavaScriptCore_HEADERS definition.
        * shell/CMakeLists.txt: Remove unused JSC_HEADERS definition.
        * wtf/CMakeLists.txt: Remove empty WTF_LIBRARIES definition, it will
        be defined later by Platform*.cmake via LIST(APPEND WTF_LIBRARIES).

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

        DFG::SpeculativeJIT calls fprintf() instead of dataLog in terminateSpeculativeExecution()
        https://bugs.webkit.org/show_bug.cgi?id=78431

        Reviewed by Gavin Barraclough.

        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):

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

        Add back WTFURL to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=77291

        Reviewed by Adam Barth.

        WTFURL was removed from WebKit in r86787.

        This patch adds the code back to WTF with the following changes:
        -Guard the feature with USE(WTFURL).
        -Change the typename CHAR to CharacterType to follow recent WebKit conventions.
        -Fix some coding style to make check-webkit-style happy.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/Platform.h:
        * wtf/url/api/ParsedURL.cpp: Added.
        (WTF):
        (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):
        (WTF::ParsedURL::spec):
        * wtf/url/api/URLString.h: Added.
        (WTF):
        (URLString):
        (WTF::URLString::URLString):
        (WTF::URLString::string):
        * wtf/url/src/RawURLBuffer.h: Added.
        (WTF):
        (RawURLBuffer):
        (WTF::RawURLBuffer::RawURLBuffer):
        (WTF::RawURLBuffer::~RawURLBuffer):
        (WTF::RawURLBuffer::resize):
        * wtf/url/src/URLBuffer.h: Added.
        (WTF):
        (URLBuffer):
        (WTF::URLBuffer::URLBuffer):
        (WTF::URLBuffer::~URLBuffer):
        (WTF::URLBuffer::at):
        (WTF::URLBuffer::set):
        (WTF::URLBuffer::capacity):
        (WTF::URLBuffer::length):
        (WTF::URLBuffer::data):
        (WTF::URLBuffer::setLength):
        (WTF::URLBuffer::append):
        (WTF::URLBuffer::grow):
        * wtf/url/src/URLCharacterTypes.cpp: Added.
        (WTF):
        ():
        * wtf/url/src/URLCharacterTypes.h: Added.
        (WTF):
        (URLCharacterTypes):
        (WTF::URLCharacterTypes::isQueryChar):
        (WTF::URLCharacterTypes::isIPv4Char):
        (WTF::URLCharacterTypes::isHexChar):
        ():
        (WTF::URLCharacterTypes::isCharOfType):
        * wtf/url/src/URLComponent.h: Added.
        (WTF):
        (URLComponent):
        (WTF::URLComponent::URLComponent):
        (WTF::URLComponent::fromRange):
        (WTF::URLComponent::isValid):
        (WTF::URLComponent::isNonEmpty):
        (WTF::URLComponent::isEmptyOrInvalid):
        (WTF::URLComponent::reset):
        (WTF::URLComponent::operator==):
        (WTF::URLComponent::begin):
        (WTF::URLComponent::setBegin):
        (WTF::URLComponent::length):
        (WTF::URLComponent::setLength):
        (WTF::URLComponent::end):
        * wtf/url/src/URLEscape.cpp: Added.
        (WTF):
        ():
        * wtf/url/src/URLEscape.h: Added.
        (WTF):
        (WTF::appendURLEscapedCharacter):
        * wtf/url/src/URLParser.h: Added.
        (WTF):
        (URLParser):
        ():
        (WTF::URLParser::isPossibleAuthorityTerminator):
        (WTF::URLParser::parseAuthority):
        (WTF::URLParser::extractScheme):
        (WTF::URLParser::parseAfterScheme):
        (WTF::URLParser::parseStandardURL):
        (WTF::URLParser::parsePath):
        (WTF::URLParser::parsePathURL):
        (WTF::URLParser::parseMailtoURL):
        (WTF::URLParser::parsePort):
        (WTF::URLParser::extractFileName):
        (WTF::URLParser::extractQueryKeyValue):
        (WTF::URLParser::isURLSlash):
        (WTF::URLParser::shouldTrimFromURL):
        (WTF::URLParser::trimURL):
        (WTF::URLParser::consecutiveSlashes):
        (WTF::URLParser::isPortDigit):
        (WTF::URLParser::nextAuthorityTerminator):
        (WTF::URLParser::parseUserInfo):
        (WTF::URLParser::parseServerInfo):
        * wtf/url/src/URLQueryCanonicalizer.h: Added.
        (WTF):
        (URLQueryCanonicalizer):
        (WTF::URLQueryCanonicalizer::canonicalize):
        (WTF::URLQueryCanonicalizer::isAllASCII):
        (WTF::URLQueryCanonicalizer::isRaw8Bit):
        (WTF::URLQueryCanonicalizer::appendRaw8BitQueryString):
        (WTF::URLQueryCanonicalizer::convertToQueryEncoding):
        * wtf/url/src/URLSegments.cpp: Added.
        (WTF):
        (WTF::URLSegments::length):
        (WTF::URLSegments::charactersBefore):
        * wtf/url/src/URLSegments.h: Added.
        (WTF):
        (URLSegments):
        ():
        (WTF::URLSegments::URLSegments):

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

        Old JIT put_by_id profiling counts every put_by_id_transition as taking slow path
        https://bugs.webkit.org/show_bug.cgi?id=78430
        <rdar://problem/10849469> <rdar://problem/10849684>

        Reviewed by Gavin Barraclough.
        
        The old JIT's put_by_id transition caching involves repatching the slow call to
        a generated stub. That means that the call is counted as "slow case". So, this
        patch inserts code to decrement the slow case count if the stub succeeds.
        
        Looks like a ~1% speed-up on V8.

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):

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

        Build fix for Qt.

        * wtf/DataLog.h:

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

        It should be possible to send all JSC debug logging to a file
        https://bugs.webkit.org/show_bug.cgi?id=78418

        Reviewed by Sam Weinig.
        
        Introduced wtf/DataLog, which defines WTF::dataFile, WTF::dataLog,
        and WTF::dataLogV. Changed all debugging- and profiling-related printfs
        to use WTF::dataLog() or one of its friends. By default, debug logging
        goes to stderr, unless you change the setting in wtf/DataLog.cpp.

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::dumpLinkStatistics):
        (JSC::LinkBuffer::dumpCode):
        * assembler/SH4Assembler.h:
        (JSC::SH4Assembler::vprintfStdoutInstr):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::printUnaryOp):
        (JSC::CodeBlock::printBinaryOp):
        (JSC::CodeBlock::printConditionalJump):
        (JSC::CodeBlock::printGetByIdOp):
        (JSC::CodeBlock::printCallOp):
        (JSC::CodeBlock::printPutByIdOp):
        (JSC::printGlobalResolveInfo):
        (JSC::printStructureStubInfo):
        (JSC::CodeBlock::printStructure):
        (JSC::CodeBlock::printStructures):
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::dumpStatistics):
        (JSC::CodeBlock::finalizeUnconditionally):
        (JSC::CodeBlock::shouldOptimizeNow):
        (JSC::CodeBlock::tallyFrequentExitSites):
        (JSC::CodeBlock::dumpValueProfiles):
        * bytecode/Opcode.cpp:
        (JSC::OpcodeStats::~OpcodeStats):
        * bytecode/SamplingTool.cpp:
        (JSC::SamplingFlags::stop):
        (JSC::SamplingRegion::dumpInternal):
        (JSC::SamplingTool::dump):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::endBasicBlock):
        (JSC::DFG::AbstractState::mergeStateAtTail):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
        (JSC::DFG::ByteCodeParser::makeSafe):
        (JSC::DFG::ByteCodeParser::makeDivSafe):
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::processPhiStack):
        (JSC::DFG::ByteCodeParser::linkBlock):
        (JSC::DFG::ByteCodeParser::parseCodeBlock):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGCommon.h:
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::printWhiteSpace):
        (JSC::DFG::Graph::dumpCodeOrigin):
        (JSC::DFG::Graph::dump):
        (JSC::DFG::Graph::predictArgumentTypes):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGOSRExitCompiler.cpp:
        * dfg/DFGOSRExitCompiler32_64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOSRExitCompiler64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOperations.cpp:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::fixpoint):
        (JSC::DFG::Propagator::propagateArithNodeFlags):
        (JSC::DFG::Propagator::propagateArithNodeFlagsForward):
        (JSC::DFG::Propagator::propagateArithNodeFlagsBackward):
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::propagatePredictionsForward):
        (JSC::DFG::Propagator::propagatePredictionsBackward):
        (JSC::DFG::Propagator::doRoundOfDoubleVoting):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::fixup):
        (JSC::DFG::Propagator::startIndexForChildren):
        (JSC::DFG::Propagator::endIndexForPureCSE):
        (JSC::DFG::Propagator::setReplacement):
        (JSC::DFG::Propagator::eliminate):
        (JSC::DFG::Propagator::performNodeCSE):
        (JSC::DFG::Propagator::localCSE):
        (JSC::DFG::Propagator::allocateVirtualRegisters):
        (JSC::DFG::Propagator::performBlockCFA):
        (JSC::DFG::Propagator::performForwardCFA):
        * dfg/DFGRegisterBank.h:
        (JSC::DFG::RegisterBank::dump):
        * dfg/DFGScoreBoard.h:
        (JSC::DFG::ScoreBoard::dump):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::dump):
        (JSC::DFG::SpeculativeJIT::checkConsistency):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
        * heap/Heap.cpp:
        (JSC::Heap::destroy):
        * heap/MarkedBlock.h:
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::dumpCaller):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::dumpRegisters):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * profiler/Profile.cpp:
        (JSC::Profile::debugPrintData):
        (JSC::Profile::debugPrintDataSampleStyle):
        * profiler/ProfileNode.cpp:
        (JSC::ProfileNode::debugPrintData):
        (JSC::ProfileNode::debugPrintDataSampleStyle):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::dumpRegExpTrace):
        * runtime/RegExp.cpp:
        (JSC::RegExp::matchCompareWithInterpreter):
        * runtime/SamplingCounter.cpp:
        (JSC::AbstractSamplingCounter::dump):
        * runtime/SamplingCounter.h:
        (JSC::DeletableSamplingCounter::~DeletableSamplingCounter):
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::print):
        * runtime/Structure.cpp:
        (JSC::Structure::dumpStatistics):
        (JSC::PropertyMapStatisticsExitLogger::~PropertyMapStatisticsExitLogger):
        * tools/CodeProfile.cpp:
        (JSC::CodeProfile::report):
        * tools/ProfileTreeNode.h:
        (JSC::ProfileTreeNode::dumpInternal):
        * wtf/CMakeLists.txt:
        * wtf/DataLog.cpp: Added.
        (WTF):
        (WTF::initializeLogFileOnce):
        (WTF::initializeLogFile):
        (WTF::dataFile):
        (WTF::dataLogV):
        (WTF::dataLog):
        * wtf/DataLog.h: Added.
        (WTF):
        * wtf/HashTable.cpp:
        (WTF::HashTableStats::~HashTableStats):
        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::dumpProfile):
        * wtf/text/WTFString.cpp:
        (String::show):
        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::ByteCompiler::dumpDisjunction):

2012-02-11  Gavin Barraclough  <barraclough@apple.com>

        Move special __proto__ property to Object.prototype
        https://bugs.webkit.org/show_bug.cgi?id=78409

        Reviewed by Oliver Hunt.

        Re-implement this as a regular accessor property.  This has three key benefits:
        1) It makes it possible for objects to be given properties named __proto__.
        2) Object.prototype.__proto__ can be deleted, preventing object prototypes from being changed.
        3) This largely removes the magic used the implement __proto__, it can just be made a regular accessor property.

        * parser/Parser.cpp:
        (JSC::::parseFunctionInfo):
            - No need to prohibit functions named __proto__.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
            - Add __proto__ accessor to Object.prototype.
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncProtoGetter):
        (JSC::globalFuncProtoSetter):
            - Definition of the __proto__ accessor functions.
        * runtime/JSGlobalObjectFunctions.h:
            - Declaration of the __proto__ accessor functions.
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
            - Remove the special handling for __proto__, there is still a check to allow for a fast guard for accessors excluding __proto__.
        (JSC::JSObject::putDirectAccessor):
            - Track on the structure whether an object contains accessors other than one for __proto__.
        (JSC::JSObject::defineOwnProperty):
            - No need to prohibit definition of own properties named __proto__.
        * runtime/JSObject.h:
        (JSC::JSObject::inlineGetOwnPropertySlot):
            - Remove the special handling for __proto__.
        (JSC::JSValue::get):
            - Remove the special handling for __proto__.
        * runtime/JSString.cpp:
        (JSC::JSString::getOwnPropertySlot):
            - Remove the special handling for __proto__.
        * runtime/JSValue.h:
        (JSValue):
            - Made synthesizePrototype public (this may be needed by the __proto__ getter).
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorGetPrototypeOf):
            - Perform the security check & call prototype() directly.
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
            - Added 'ExcludingProto' variant of the 'hasGetterSetterProperties' state.
        * runtime/Structure.h:
        (JSC::Structure::hasGetterSetterPropertiesExcludingProto):
        (JSC::Structure::setHasGetterSetterProperties):
        (Structure):
            - Added 'ExcludingProto' variant of the 'hasGetterSetterProperties' state.

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

        DFG CFA assumes that a WeakJSConstant's structure is known
        https://bugs.webkit.org/show_bug.cgi?id=78428
        <rdar://problem/10849492> <rdar://problem/10849621>

        Reviewed by Gavin Barraclough.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):

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

        Qt debug build fix

        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::callDestructor): Platforms that don't use clang will allocate 
        JSFinalObjects in the destuctor subspace, so we should remove this assert so it 
        doesn't cause crashes.

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

        Old 32_64 JIT should assert that its use of map() is consistent with the DFG
        OSR exit's expectations
        https://bugs.webkit.org/show_bug.cgi?id=78419
        <rdar://problem/10817121>

        Reviewed by Oliver Hunt.

        * jit/JITInlineMethods.h:
        (JSC::JIT::map):

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

        Reduce the reentrancy limit of the interpreter for the iOS simulator
        https://bugs.webkit.org/show_bug.cgi?id=78400

        Reviewed by Gavin Barraclough.

        * interpreter/Interpreter.h: Lowered the maximum reentrancy limit for large thread stacks.
        (JSC):

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

        [DFG] Misuse of WeakJSConstants in silentFillGPR code.
        https://bugs.webkit.org/show_bug.cgi?id=78423
        <rdar://problem/10849353> <rdar://problem/10804043>

        Reviewed by Sam Weinig.
        
        The code was using Node::isConstant(), when it was supposed to use Node::hasConstant().
        This patch is a surgical fix; the bigger problem is: why do we have isConstant() and
        hasConstant() when hasConstant() is correct and isConstant() is almost always wrong?

        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::silentFillGPR):

2012-02-11  Sam Weinig  <sam@webkit.org>

        Prepare JavaScriptCore to build with libc++
        <rdar://problem/10426673>
        https://bugs.webkit.org/show_bug.cgi?id=78424

        Reviewed by Anders Carlsson.

        * wtf/NullPtr.cpp:
        * wtf/NullPtr.h:
        libc++ provides std::nullptr emulation, so we don't have to.

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

        DFG should have polymorphic put_by_id caching
        https://bugs.webkit.org/show_bug.cgi?id=78062
        <rdar://problem/10326439> <rdar://problem/10824839>

        Reviewed by Oliver Hunt.
        
        Implemented polymorphic put_by_id caching in the DFG, and added much of the
        machinery that would be needed to implement it in the old JIT as well.
        
        I decided against using the old PolymorphicAccessStructureList mechanism as
        this didn't quite fit with put_by_id. In particular, I wanted the ability to
        have one list that captured all relevant cases (including proto put_by_id
        if we ever decided to do it). And I wanted the code to have better
        encapsulation. And I didn't want to get confused by the fact that the
        original (non-list) put_by_id cache may itself consist of a stub routine.
        
        This code is still sub-optimal (for example adding a replace to a list whose
        previous elements are all transitions should just repatch the original code,
        but here it will generate a stub) but it already generates a >20% speed-up
        on V8-splay, leading to a 2% win overall in splay. Neutral elsewhere.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * bytecode/PolymorphicPutByIdList.cpp: Added.
        (JSC):
        (JSC::PutByIdAccess::fromStructureStubInfo):
        (JSC::PutByIdAccess::visitWeak):
        (JSC::PolymorphicPutByIdList::PolymorphicPutByIdList):
        (JSC::PolymorphicPutByIdList::from):
        (JSC::PolymorphicPutByIdList::~PolymorphicPutByIdList):
        (JSC::PolymorphicPutByIdList::isFull):
        (JSC::PolymorphicPutByIdList::isAlmostFull):
        (JSC::PolymorphicPutByIdList::addAccess):
        (JSC::PolymorphicPutByIdList::visitWeak):
        * bytecode/PolymorphicPutByIdList.h: Added.
        (JSC):
        (PutByIdAccess):
        (JSC::PutByIdAccess::PutByIdAccess):
        (JSC::PutByIdAccess::transition):
        (JSC::PutByIdAccess::replace):
        (JSC::PutByIdAccess::isSet):
        (JSC::PutByIdAccess::operator!):
        (JSC::PutByIdAccess::type):
        (JSC::PutByIdAccess::isTransition):
        (JSC::PutByIdAccess::isReplace):
        (JSC::PutByIdAccess::oldStructure):
        (JSC::PutByIdAccess::structure):
        (JSC::PutByIdAccess::newStructure):
        (JSC::PutByIdAccess::chain):
        (JSC::PutByIdAccess::stubRoutine):
        (PolymorphicPutByIdList):
        (JSC::PolymorphicPutByIdList::currentSlowPathTarget):
        (JSC::PolymorphicPutByIdList::isEmpty):
        (JSC::PolymorphicPutByIdList::size):
        (JSC::PolymorphicPutByIdList::at):
        (JSC::PolymorphicPutByIdList::operator[]):
        (JSC::PolymorphicPutByIdList::kind):
        * bytecode/PutKind.h: Added.
        (JSC):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::deref):
        (JSC::StructureStubInfo::visitWeakReferences):
        * bytecode/StructureStubInfo.h:
        (JSC):
        (JSC::isPutByIdAccess):
        (JSC::StructureStubInfo::initPutByIdList):
        (StructureStubInfo):
        (JSC::StructureStubInfo::reset):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        (DFG):
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::appropriateGenericPutByIdFunction):
        (JSC::DFG::appropriateListBuildingPutByIdFunction):
        (DFG):
        (JSC::DFG::emitPutReplaceStub):
        (JSC::DFG::emitPutTransitionStub):
        (JSC::DFG::tryCachePutByID):
        (JSC::DFG::dfgRepatchPutByID):
        (JSC::DFG::tryBuildPutByIdList):
        (JSC::DFG::dfgBuildPutByIdList):
        (JSC::DFG::dfgResetPutByID):
        * dfg/DFGRepatch.h:
        (DFG):
        * runtime/WriteBarrier.h:
        (WriteBarrierBase):
        (JSC::WriteBarrierBase::copyFrom):

2012-02-10  Vineet Chaudhary  <rgf748@motorola.com>

        https://bugs.webkit.org/show_bug.cgi?id=72756
        DOMHTMLElement’s accessKey property is declared as available in WebKit version that didn’t have it 

        Reviewed by Timothy Hatcher.

        * API/WebKitAvailability.h: Added AVAILABLE_AFTER_WEBKIT_VERSION_5_1 and
          AVAILABLE_WEBKIT_VERSION_1_3_AND_LATER_BUT_DEPRECATED_AFTER_WEBKIT_VERSION_5_1 for the new versions.

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

        Fixing windows build

        Unreviewed build fix

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-02-10  Adam Klein  <adamk@chromium.org>

        Enable MUTATION_OBSERVERS by default on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=78196

        Reviewed by Ojan Vafai.

        * Configurations/FeatureDefines.xcconfig:

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

        ENABLE(ASSEMBLER_WX_EXCLUSIVE): LinkBuffer can leave pages not marked as executable.
        https://bugs.webkit.org/show_bug.cgi?id=76724

        Reviewed by Rob Buis.

        This issue only exists when both ENABLE(ASSEMBLER_WX_EXCLUSIVE) and ENABLE(BRANCH_COMPACTION) are on.
        The size used to call makeExecutable can be smaller than the one that was used for makeWritable.
        So it can leave pages behind that are not set back to default flags. When an assembly on one of those
        pages is executed or JIT returns to those pages in the case it was already executing from there, the
        software will crash.

        * assembler/LinkBuffer.h: Add m_initialSize and use it in performFinalization().
        (JSC::LinkBuffer::LinkBuffer):
        (JSC::LinkBuffer::linkCode):
        (JSC::LinkBuffer::performFinalization):
        (LinkBuffer):

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

        Split MarkedSpace into destructor and destructor-free subspaces
        https://bugs.webkit.org/show_bug.cgi?id=77761

        Reviewed by Geoffrey Garen.

        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject): Switched over to use destructor-free space.
        * heap/Heap.h:
        (JSC::Heap::allocatorForObjectWithoutDestructor): Added to give clients (e.g. the JIT) the ability to 
        pick which subspace they want to allocate out of.
        (JSC::Heap::allocatorForObjectWithDestructor): Ditto.
        (Heap):
        (JSC::Heap::allocateWithDestructor): Added private function for CellAllocator to use.
        (JSC):
        (JSC::Heap::allocateWithoutDestructor): Ditto.
        * heap/MarkedAllocator.cpp: Added the cellsNeedDestruction flag to allocators so that they can allocate 
        their MarkedBlocks correctly.
        (JSC::MarkedAllocator::allocateBlock):
        * heap/MarkedAllocator.h:
        (JSC::MarkedAllocator::cellsNeedDestruction):
        (MarkedAllocator):
        (JSC::MarkedAllocator::MarkedAllocator):
        (JSC):
        (JSC::MarkedAllocator::init): Replaced custom set functions, which were only used upon initialization, with
        an init function that does all of that stuff in fewer lines.
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::create):
        (JSC::MarkedBlock::recycle):
        (JSC::MarkedBlock::MarkedBlock):
        (JSC::MarkedBlock::callDestructor): Templatized, along with specializedSweep and sweepHelper, to make 
        checking the m_cellsNeedDestructor flag faster and cleaner looking.
        (JSC):
        (JSC::MarkedBlock::specializedSweep):
        (JSC::MarkedBlock::sweep):
        (JSC::MarkedBlock::sweepHelper):
        * heap/MarkedBlock.h:
        (MarkedBlock):
        (JSC::MarkedBlock::cellsNeedDestruction):
        (JSC):
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::resetAllocators):
        (JSC::MarkedSpace::canonicalizeCellLivenessData):
        (JSC::TakeIfUnmarked::operator()):
        * heap/MarkedSpace.h:
        (MarkedSpace):
        (Subspace):
        (JSC::MarkedSpace::allocatorFor): Needed function to differentiate between the two broad subspaces of 
        allocators.
        (JSC):
        (JSC::MarkedSpace::destructorAllocatorFor): Ditto.
        (JSC::MarkedSpace::allocateWithoutDestructor): Ditto.
        (JSC::MarkedSpace::allocateWithDestructor): Ditto.
        (JSC::MarkedSpace::forEachBlock):
        * jit/JIT.h:
        * jit/JITInlineMethods.h: Modified to use the proper allocator for JSFinalObjects and others.
        (JSC::JIT::emitAllocateBasicJSObject):
        (JSC::JIT::emitAllocateJSFinalObject):
        (JSC::JIT::emitAllocateJSFunction):
        * runtime/JSArray.cpp:
        (JSC):
        * runtime/JSArray.h:
        (JSArray):
        (JSC::JSArray::create):
        (JSC):
        (JSC::JSArray::tryCreateUninitialized):
        * runtime/JSCell.h:
        (JSCell):
        (JSC):
        (NeedsDestructor): Template struct that calculates at compile time whether the class in question requires 
        destruction or not using the compiler type trait __has_trivial_destructor. allocateCell then checks this 
        constant to decide whether to allocate in the destructor or destructor-free parts of the heap.
        (JSC::allocateCell): 
        * runtime/JSFunction.cpp:
        (JSC):
        * runtime/JSFunction.h:
        (JSFunction):
        * runtime/JSObject.cpp:
        (JSC):
        * runtime/JSObject.h:
        (JSNonFinalObject):
        (JSC):
        (JSFinalObject):
        (JSC::JSFinalObject::create):

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

        Remove implicit copy constructor usage in HashMaps with OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=78071

        Reviewed by Darin Adler.

        Change the return type of emptyValue() in PairHashTraits to be the
        actual type returned rather than the trait type to avoid an implicit
        generation of the OwnPtr copy constructor. This happens for hash
        traits involving OwnPtr where the empty value is not zero and each
        hash bucket needs to be initialized with emptyValue().

        Also, update StructureTransitionTable to use default hash traits
        rather than rolling its own, in order to update it to handle
        EmptyValueType.

        Test: patch from bug 74154 compiles on Clang with this patch

        * runtime/StructureTransitionTable.h:
        (StructureTransitionTable):
        * wtf/HashTraits.h:
        (GenericHashTraits):
        (PairHashTraits):
        (WTF::PairHashTraits::emptyValue):

2012-02-10  Aron Rosenberg  <arosenberg@logitech.com>

        [Qt] Fix compiler warning in Visual Studio 2010 about TR1
        https://bugs.webkit.org/show_bug.cgi?id=63642

        Reviewed by Simon Hausmann.

        * JavaScriptCore.pri:

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

        Yarr assert with regexp where alternative in *-quantified group matches empty
        https://bugs.webkit.org/show_bug.cgi?id=67752        

        Reviewed by Gavin Barraclough.

        Added backtracking for the prior alternative if it matched
        but didn't consume any input characters.

        * yarr/YarrJIT.cpp:
        (YarrOp): New jump.
        (JSC::Yarr::YarrGenerator::generate): Emit conditional jump
        when an alternative matches and no input was consumed.  Moved the
        zero length match check for a set of alternatives to the alternative
        code from the parentheses cases to the alternative end cases.
        Converted the existing zero length checks in the parentheses cases
        to runtime assertion checks.
        (JSC::Yarr::YarrGenerator::backtrack): Link new jump to backtrack
        to prior term.

2012-02-10  Roland Takacs  <takacs.roland@stud.u-szeged.hu>

        [Qt] GC should be parallel on Qt platform
        https://bugs.webkit.org/show_bug.cgi?id=73309

        Reviewed by Zoltan Herczeg.

        These changes made the parallel gc feature available for Qt port.
        The implementation of "registerGCThread" and "isMainThreadOrGCThread",
        and a local static function [initializeGCThreads] is moved from
        MainThreadMac.mm to the common MainThread.cpp to make them available
        for other platforms.

        Measurement results:
        V8           speed-up:  1.025x as fast  [From: 663.4ms  To: 647.0ms ]
        V8 Splay     speed-up:  1.185x as fast  [From: 138.4ms  To: 116.8ms ]

        Tested on Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz with 4-core.

        * JavaScriptCore.order:
        * wtf/MainThread.cpp:
        (WTF::initializeMainThread):
        (WTF):
        (WTF::initializeGCThreads):
        (WTF::registerGCThread):
        (WTF::isMainThreadOrGCThread):
        * wtf/MainThread.h:
        (WTF):
        * wtf/Platform.h:
        * wtf/mac/MainThreadMac.mm:
        (WTF):

2012-02-09  Andy Wingo  <wingo@igalia.com>

        Eliminate dead code in BytecodeGenerator::resolve()
        https://bugs.webkit.org/show_bug.cgi?id=78242

        Reviewed by Gavin Barraclough.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::resolve):
        BytecodeGenerator::shouldOptimizeLocals() is only true for
        FunctionCode, and thus cannot be true for GlobalCode.

2012-02-09  Andy Wingo  <wingo@igalia.com>

        Remove BytecodeGenerator::isLocal
        https://bugs.webkit.org/show_bug.cgi?id=78241

        Minor refactor to BytecodeGenerator.

        Reviewed by Gavin Barraclough.

        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::isLocal):
        (JSC::BytecodeGenerator::isLocalConstant): Remove now-unused
        methods.
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ResolveNode::isPure): Use the ResolveResult mechanism
        instead of isLocal.  This will recognize more resolve nodes as
        being pure.
        (JSC::PrefixResolveNode::emitBytecode): Use isReadOnly on the
        location instead of isLocalConstant.

2012-02-09  Oliver Hunt  <oliver@apple.com>

        The JS Parser scope object needs a VectorTrait specialization
        https://bugs.webkit.org/show_bug.cgi?id=78308

        Reviewed by Gavin Barraclough.

        This showed up as a periodic crash in various bits of generated code
        originally, but I've added an assertion in the bytecode generator
        that makes the effected code much more crash-happy should it go
        wrong again.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::resolve):
        * parser/Parser.cpp:
        * parser/Parser.h:
        (JSC):
        * runtime/JSActivation.h:
        (JSC::JSActivation::isValidScopedLookup):
        (JSActivation):

2012-02-08  Oliver Hunt  <oliver@apple.com>

        Whoops, fix the build.

        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::FunctionExecutable):

2012-02-08  Oliver Hunt  <oliver@apple.com>

        Fix issue encountered while debugging stacktraces
        https://bugs.webkit.org/show_bug.cgi?id=78147

        Reviewed by Gavin Barraclough.

        Debugging is easier if we always ensure that we have a non-null
        inferred name.

        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::FunctionExecutable):

2012-02-08  Oliver Hunt  <oliver@apple.com>

        updateTopCallframe in the baseline JIT doesn't provide enough information to the stubs
        https://bugs.webkit.org/show_bug.cgi?id=78145

        Reviewed by Gavin Barraclough.

        Fix the updateTopCallFrame helper to store additional information
        that becomes necessary when we are trying to provide more stack
        frame information.

        * interpreter/CallFrame.h:
        (JSC::ExecState::bytecodeOffsetForBaselineJIT):
        (ExecState):
        * 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):
        (JIT):
        * jit/JITInlineMethods.h:
        (JSC::JIT::updateTopCallFrame):

2012-02-07  Robert Kroeger  <rjkroege@chromium.org>

        [chromium] Remove the enable marcro for the no longer necessary Chromium
        gesture recognizer.
        https://bugs.webkit.org/show_bug.cgi?id=77492

        Reviewed by Adam Barth.

        * wtf/Platform.h:

2012-02-07  Tony Chang  <tony@chromium.org>

        merge DashboardSupportCSSPropertyNames.in into CSSPropertyNames.in
        https://bugs.webkit.org/show_bug.cgi?id=78036

        Reviewed by Darin Adler.

        * Configurations/FeatureDefines.xcconfig: Add ENABLE_DASHBOARD_SUPPORT to FEATURE_DEFINES.

2012-02-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CMAKE] Use *bin* and *lib* directories for executable and libraries.
        https://bugs.webkit.org/show_bug.cgi?id=77928

        Reviewed by Daniel Bates.

        CMake has used *Programs* directory for executable. In addition, shared libraries are being
        built in source directory. It is better to set common places in order to maintain executable
        and libraries. *bin* is for executable and *lib* is for library.

        * shell/CMakeLists.txt: Change *Programs* with *bin*.

2012-02-07  Gavin Barraclough  <barraclough@apple.com>

        Crash on http://www.rickshawbags.com/
        https://bugs.webkit.org/show_bug.cgi?id=78045

        Reviewed by Darin Adler.

        Problem URL is: http://www.rickshawbags.com/customize/custom-bag#!thl=rickshaw/bag()
        
        This is a bug introduced by https://bugs.webkit.org/show_bug.cgi?id=71933,
        isVariableObject() checks were excluding StaticScopeObjects, this patch
        inadvertently changed them to be included.

        * runtime/JSType.h:
            - sort JSType enum such that StaticScopeObjectType comes before VariableObjectType,
              and thus is excluded from isVariableObject() checks.

2012-02-06  Jer Noble  <jer.noble@apple.com>

        Use CMClock as a timing source for PlatformClock where available.
        https://bugs.webkit.org/show_bug.cgi?id=77885

        Reviewed by Eric Carlson.

        * wtf/Platform.h: Added WTF_USE_COREMEDIA.

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

        ValueToNumber and ValueToDouble nodes don't do anything and should be removed
        https://bugs.webkit.org/show_bug.cgi?id=77855
        <rdar://problem/10811325>

        Reviewed by Gavin Barraclough.
        
        Removed ValueToNumber and ValueToDouble, because the only thing they were doing
        was wasting registers.
        
        This looks like a 1% win on V8 (with a 5% win on crypto) and a 2-3% win on Kraken,
        mostly due to a >10% win on gaussian-blur. No win anywhere else.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getToInt32):
        (ByteCodeParser):
        (JSC::DFG::ByteCodeParser::handleMinMax):
        (JSC::DFG::ByteCodeParser::handleIntrinsic):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGNode.h:
        (DFG):
        (JSC::DFG::Node::hasArithNodeFlags):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateArithNodeFlags):
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::vote):
        (JSC::DFG::Propagator::doRoundOfDoubleVoting):
        (Propagator):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::canonicalize):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2012-02-06  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix after r106197.

        * tools/CodeProfiling.cpp:
        (JSC::CodeProfiling::notifyAllocator): getenv() isn't supported by WinCE. Don't call it.

2012-02-05  Gavin Barraclough  <barraclough@apple.com>

        Remove JSObject defineGetter/defineSetter lookupGetter/lookupSetter
        https://bugs.webkit.org/show_bug.cgi?id=77451

        Reviewed by Sam Weinig.

        These can now all be implemented in terms of defineOwnProperty & getPropertyDescriptor.
        Also remove initializeGetterSetterProperty, since this is equivalent to putDirectAccessor.

        * JavaScriptCore.exp:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::defineOwnProperty):
        * debugger/DebuggerActivation.h:
        (DebuggerActivation):
        * runtime/ClassInfo.h:
        (MethodTable):
        (JSC):
        * runtime/JSBoundFunction.cpp:
        (JSC::JSBoundFunction::finishCreation):
        * runtime/JSCell.cpp:
        (JSC):
        * runtime/JSCell.h:
        (JSCell):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertySlot):
        (JSC::JSFunction::getOwnPropertyDescriptor):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::defineOwnProperty):
        (JSC):
        * runtime/JSGlobalObject.h:
        (JSGlobalObject):
        * runtime/JSObject.cpp:
        (JSC):
        * runtime/JSObject.h:
        (JSObject):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncDefineGetter):
        (JSC::objectProtoFuncDefineSetter):
        (JSC::objectProtoFuncLookupGetter):
        (JSC::objectProtoFuncLookupSetter):

2012-02-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing files.

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

        DFG's child references from one node to another should have room for type information
        https://bugs.webkit.org/show_bug.cgi?id=77797

        Reviewed by Oliver Hunt.
        
        The DFG::Node::child fields now contain both a DFG::NodeIndex (which is just an unsigned)
        and a DFG::UseKind (which is currently an effectively empty enum). They are encapsulated
        together as a DFG::NodeUse, which can in most cases still be used as an index (for
        example DFG::Graph, AbstractState, and SpeculativeJIT all accept NodeUse in most places
        where they really want a NodeIndex).
        
        The NodeUse stores both the index and the UseKind without bloating the memory usage of
        DFG::Node, since we really don't need full 32 bits for the NodeIndex (a DFG::Node is
        roughly 11 words, so if we assume that we never want to use more than 1GB to DFG compile
        something - likely a sensible assumption! - then we will only be able to have room for
        about 24 million nodes, which means we only need about 24.5 bits for the node index).
        Currently the DFG::NodeUse allocates 4 bits for the UseKind and 28 bits for the index,
        but stores the index as a signed number to make NoNode work naturally. Hence we really
        just have 27 bits for the index.
        
        This is performance-neutral on all benchmarks we track.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGAbstractState.h:
        (JSC::DFG::AbstractState::forNode):
        (AbstractState):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getLocal):
        (JSC::DFG::ByteCodeParser::getArgument):
        (JSC::DFG::ByteCodeParser::toInt32):
        (JSC::DFG::ByteCodeParser::addVarArgChild):
        (JSC::DFG::ByteCodeParser::processPhiStack):
        * dfg/DFGCommon.h:
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        (DFG):
        * dfg/DFGGraph.h:
        (Graph):
        (JSC::DFG::Graph::operator[]):
        (JSC::DFG::Graph::at):
        (JSC::DFG::Graph::ref):
        (JSC::DFG::Graph::deref):
        (JSC::DFG::Graph::clearAndDerefChild1):
        (JSC::DFG::Graph::clearAndDerefChild2):
        (JSC::DFG::Graph::clearAndDerefChild3):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::getPrediction):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::Node):
        (JSC::DFG::Node::child1):
        (JSC::DFG::Node::child1Unchecked):
        (JSC::DFG::Node::child2):
        (JSC::DFG::Node::child3):
        (JSC::DFG::Node::firstChild):
        (JSC::DFG::Node::numChildren):
        (JSC::DFG::Node::dumpChildren):
        (Node):
        * dfg/DFGNodeReferenceBlob.h: Added.
        (DFG):
        (NodeReferenceBlob):
        (JSC::DFG::NodeReferenceBlob::NodeReferenceBlob):
        (JSC::DFG::NodeReferenceBlob::child):
        (JSC::DFG::NodeReferenceBlob::child1):
        (JSC::DFG::NodeReferenceBlob::child2):
        (JSC::DFG::NodeReferenceBlob::child3):
        (JSC::DFG::NodeReferenceBlob::child1Unchecked):
        (JSC::DFG::NodeReferenceBlob::initialize):
        (JSC::DFG::NodeReferenceBlob::firstChild):
        (JSC::DFG::NodeReferenceBlob::setFirstChild):
        (JSC::DFG::NodeReferenceBlob::numChildren):
        (JSC::DFG::NodeReferenceBlob::setNumChildren):
        * dfg/DFGNodeUse.h: Added.
        (DFG):
        (NodeUse):
        (JSC::DFG::NodeUse::NodeUse):
        (JSC::DFG::NodeUse::indexUnchecked):
        (JSC::DFG::NodeUse::index):
        (JSC::DFG::NodeUse::setIndex):
        (JSC::DFG::NodeUse::useKind):
        (JSC::DFG::NodeUse::setUseKind):
        (JSC::DFG::NodeUse::isSet):
        (JSC::DFG::NodeUse::operator!):
        (JSC::DFG::NodeUse::operator==):
        (JSC::DFG::NodeUse::operator!=):
        (JSC::DFG::NodeUse::shift):
        (JSC::DFG::NodeUse::makeWord):
        (JSC::DFG::operator==):
        (JSC::DFG::operator!=):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateArithNodeFlags):
        (JSC::DFG::Propagator::vote):
        (JSC::DFG::Propagator::toDouble):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::canonicalize):
        (JSC::DFG::Propagator::startIndex):
        (JSC::DFG::Propagator::globalVarLoadElimination):
        (JSC::DFG::Propagator::getByValLoadElimination):
        (JSC::DFG::Propagator::getByOffsetLoadElimination):
        (JSC::DFG::Propagator::performSubstitution):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGScoreBoard.h:
        (JSC::DFG::ScoreBoard::use):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::useChildren):
        (JSC::DFG::SpeculativeJIT::writeBarrier):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeStrictEq):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
        (JSC::DFG::SpeculativeJIT::compileMovHint):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
        (JSC::DFG::SpeculativeJIT::compileSoftModulo):
        (JSC::DFG::SpeculativeJIT::compileAdd):
        (JSC::DFG::SpeculativeJIT::compileArithSub):
        (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
        (JSC::DFG::SpeculativeJIT::compileStrictEq):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::at):
        (JSC::DFG::SpeculativeJIT::canReuse):
        (JSC::DFG::SpeculativeJIT::use):
        (SpeculativeJIT):
        (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
        (JSC::DFG::SpeculativeJIT::speculationCheck):
        (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
        (JSC::DFG::IntegerOperand::IntegerOperand):
        (JSC::DFG::DoubleOperand::DoubleOperand):
        (JSC::DFG::JSValueOperand::JSValueOperand):
        (JSC::DFG::StorageOperand::StorageOperand):
        (JSC::DFG::SpeculateIntegerOperand::SpeculateIntegerOperand):
        (JSC::DFG::SpeculateStrictInt32Operand::SpeculateStrictInt32Operand):
        (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
        (JSC::DFG::SpeculateCellOperand::SpeculateCellOperand):
        (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
        (JSC::DFG::SpeculativeJIT::cachedPutById):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::emitCall):
        (JSC::DFG::SpeculativeJIT::compileValueAdd):
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
        (JSC::DFG::SpeculativeJIT::cachedPutById):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::emitCall):
        (JSC::DFG::SpeculativeJIT::compileObjectEquality):
        (JSC::DFG::SpeculativeJIT::compileValueAdd):
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):

2012-02-05  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [CMAKE] Support javascriptcore test for EFL port. 
        https://bugs.webkit.org/show_bug.cgi?id=77425

        Reviewed by Daniel Bates.

        Efl and WinCE as well as Blackberry port are now using Cmake as its build system
        and they are share the make file to create jsc excutable. In order to run
        "run-javascriptcore-tests", EFL port needs to change jsc installation configuration
        with executable output directory(e.g. Programs). So, this patch change jsc installation
        configuration only for EFL port.

        * shell/CMakeLists.txt:

2012-02-04  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig.

        * yarr/YarrPattern.cpp:
        (JSC::Yarr::YarrPatternConstructor::quantifyAtom):
            - Fix comment.

2012-02-04  Kalev Lember  <kalevlember@gmail.com>

        [GTK] CurrentTime: Reorder headers for win32
        https://bugs.webkit.org/show_bug.cgi?id=77808

        Reviewed by Martin Robinson.

        In GTK+ win32 port, monotonicallyIncreasingTime() implementation is
        based on g_get_monotonic_time(). Reorder headers to make sure glib.h
        gets included even when the platform is win32.

        CurrentTime.cpp: In function 'double WTF::monotonicallyIncreasingTime()':
        CurrentTime.cpp:321:53: error: 'g_get_monotonic_time' was not declared in this scope
        CurrentTime.cpp:322:1: warning: control reaches end of non-void function [-Wreturn-type]

        * wtf/CurrentTime.cpp:

2012-02-03  Anders Carlsson  <andersca@apple.com>

        Prefix the typedef in WTF_MAKE_FAST_ALLOCATED with underscores
        https://bugs.webkit.org/show_bug.cgi?id=77788

        Reviewed by Andreas Kling.

        The current typedef name, 'ThisIsHereToForceASemicolonAfterThisMacro', shows up when trying to 
        code-complete 'this' in Xcode. Prefix the typedef with two underscores to stop this from happening.

        * wtf/FastAllocBase.h:

2012-02-03  Rob Buis  <rbuis@rim.com>

        Fix alignment warnings in ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=55368

        Reviewed by Filip Pizlo.

        Use reinterpret_cast_ptr and static_cast to get rid of alignment issues in ARMv7 code.

        * heap/HandleTypes.h:
        (JSC::HandleTypes::getFromSlot):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::specializedSweep):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::forEachCell):
        * runtime/WriteBarrier.h:
        (JSC::WriteBarrierBase::get):
        (JSC::WriteBarrierBase::unvalidatedGet):

2012-02-03  Mark Hahnenberg  <mhahnenberg@apple.com>

        Build fix

        Unreviewed build fix

        Forgot to add a couple files.

        * heap/MarkedAllocator.cpp: Added.
        (JSC):
        (JSC::MarkedAllocator::tryAllocateHelper):
        (JSC::MarkedAllocator::tryAllocate):
        (JSC::MarkedAllocator::allocateSlowCase):
        (JSC::MarkedAllocator::allocateBlock):
        (JSC::MarkedAllocator::addBlock):
        (JSC::MarkedAllocator::removeBlock):
        * heap/MarkedAllocator.h: Added.
        (JSC):
        (DFG):
        (MarkedAllocator):
        (JSC::MarkedAllocator::cellSize):
        (JSC::MarkedAllocator::heap):
        (JSC::MarkedAllocator::setHeap):
        (JSC::MarkedAllocator::setCellSize):
        (JSC::MarkedAllocator::setMarkedSpace):
        (JSC::MarkedAllocator::MarkedAllocator):
        (JSC::MarkedAllocator::allocate):
        (JSC::MarkedAllocator::reset):
        (JSC::MarkedAllocator::zapFreeList):
        (JSC::MarkedAllocator::forEachBlock):

2012-02-03  Mark Hahnenberg  <mhahnenberg@apple.com>

        Refactor MarkedBlock::SizeClass into a separate class
        https://bugs.webkit.org/show_bug.cgi?id=77600

        Reviewed by Geoffrey Garen.

        We pulled SizeClass out into its own class, named MarkedAllocator, and gave it
        the responsibility of allocating objects from the collection of MarkedBlocks 
        that it manages. Also limited the amount of coupling to internal data fields 
        from other places, although it's mostly unavoidable in the JIT code.

        Eventually MarkedAllocator will implement various policies to do with object 
        management, e.g. whether or not to run destructors on objects that it manages.
        MarkedSpace will manage a collection of MarkedAllocators with varying policies,
        as it does now but to a larger extent. 

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject):
        * heap/Heap.cpp:
        (JSC::Heap::collect):
        (JSC::Heap::resetAllocators):
        * heap/Heap.h:
        (JSC::Heap::allocatorForObject):
        (Heap):
        * heap/MarkedAllocator.cpp: Added.
        (JSC):
        (JSC::MarkedAllocator::tryAllocateHelper):
        (JSC::MarkedAllocator::tryAllocate):
        (JSC::MarkedAllocator::allocateSlowCase):
        (JSC::MarkedAllocator::allocateBlock):
        (JSC::MarkedAllocator::addBlock):
        (JSC::MarkedAllocator::removeBlock):
        * heap/MarkedAllocator.h: Added.
        (JSC):
        (DFG):
        (MarkedAllocator):
        (JSC::MarkedAllocator::cellSize):
        (JSC::MarkedAllocator::heap):
        (JSC::MarkedAllocator::setHeap):
        (JSC::MarkedAllocator::setCellSize):
        (JSC::MarkedAllocator::setMarkedSpace):
        (JSC::MarkedAllocator::MarkedAllocator):
        (JSC::MarkedAllocator::allocate):
        (JSC::MarkedAllocator::reset):
        (JSC::MarkedAllocator::zapFreeList):
        (JSC::MarkedAllocator::forEachBlock):
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::resetAllocators):
        (JSC::MarkedSpace::canonicalizeCellLivenessData):
        (JSC::TakeIfUnmarked::operator()):
        * heap/MarkedSpace.h:
        (MarkedSpace):
        (JSC::MarkedSpace::allocatorFor):
        (JSC::MarkedSpace::allocate):
        (JSC::MarkedSpace::forEachBlock):
        (JSC::MarkedSpace::didAddBlock):
        (JSC::MarkedSpace::didConsumeFreeList):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitAllocateBasicJSObject):

2012-02-03  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Replace GNU linker script for exports with export macros in WTF/JSC
        https://bugs.webkit.org/show_bug.cgi?id=77723

        Reviewed by Tor Arne Vestbø.

        * wtf/Platform.h: Enable use of export macros.

2012-02-02  Hajime Morrita  <morrita@chromium.org>

        Unreviewed, removing an unnecessarily JS_PRIVATE_EXPORT annotation.

        * interpreter/Interpreter.h:
        (Interpreter):

2012-01-31  Hajime Morrita  <morrita@chromium.org>

        [Mac] eliminate JavaScriptCore.exp
        https://bugs.webkit.org/show_bug.cgi?id=72854

        Reviewed by Darin Adler.

        - Removed exp files and corresponding makefile entries.
        - Changed the build configuration no to use exp file.

        * Configurations/JavaScriptCore.xcconfig:
        * DerivedSources.make:
        * JavaScriptCore.JSVALUE32_64only.exp: Removed.
        * JavaScriptCore.JSVALUE64only.exp: Removed.
        * JavaScriptCore.exp: Removed.
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/Platform.h:

2012-02-02  Benjamin Poulain  <bpoulain@apple.com>

        Running a Web Worker on about:blank crashes the interpreter
        https://bugs.webkit.org/show_bug.cgi?id=77593

        Reviewed by Michael Saboff.

        The method Interpreter::execute() was crashing on empty programs because
        the assumption is made the source is not null.

        This patch shortcut the execution when the String is null to avoid invalid
        memory access.

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

2012-02-02  Kalev Lember  <kalevlember@gmail.com>

        [GTK] Use win32 native threading
        https://bugs.webkit.org/show_bug.cgi?id=77676

        Reviewed by Martin Robinson.

        r97269 switched from glib threading to pthreads, breaking win32 GTK+.
        This is a follow up, removing some leftovers in ThreadSpecific.h and
        switching win32 to use the native threading in ThreadingWin.cpp.

        * GNUmakefile.list.am: Compile in win32 native threading support
        * wtf/ThreadSpecific.h: Remove GTK+-specific definitions
        (ThreadSpecific):
        (WTF::::destroy):

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

        retrieveCallerFromVMCode should call trueCallerFrame
        https://bugs.webkit.org/show_bug.cgi?id=77684

        Reviewed by Oliver Hunt.

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

2012-02-02  Kalev Lember  <kalevlember@gmail.com>

        [GTK] Implement current executable path finding for win32
        https://bugs.webkit.org/show_bug.cgi?id=77677

        Reviewed by Martin Robinson.

        The WTF helper for getting the binary path that was added in r101710
        left out the win32 implementation. Fix this.

        * wtf/gobject/GlibUtilities.cpp:
        (getCurrentExecutablePath):

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

        Throwing away bytecode and then reparsing during DFG optimization is just
        plain wrong and makes things crash
        https://bugs.webkit.org/show_bug.cgi?id=77680
        <rdar://problem/10798490>

        Reviewed by Oliver Hunt.

        This is the minimal surgical fix: it removes the code that triggered bytecode
        throw-away. Once we're confident that this is a good idea, we can kill all of
        the code that implements the feature.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::discardBytecodeLater):
        (JSC::CodeBlock::addValueProfile):
        * jit/JITDriver.h:
        (JSC::jitCompileIfAppropriate):
        (JSC::jitCompileFunctionIfAppropriate):

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

        Release build debugging should be easier
        https://bugs.webkit.org/show_bug.cgi?id=77669

        Reviewed by Gavin Barraclough.

        * assembler/ARMAssembler.h:
        (ARMAssembler):
        (JSC::ARMAssembler::debugOffset):
        * assembler/ARMv7Assembler.h:
        (ARMv7Assembler):
        (JSC::ARMv7Assembler::debugOffset):
        (ARMInstructionFormatter):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::debugOffset):
        * assembler/AbstractMacroAssembler.h:
        (AbstractMacroAssembler):
        (JSC::AbstractMacroAssembler::debugOffset):
        * assembler/AssemblerBuffer.h:
        (AssemblerBuffer):
        (JSC::AssemblerBuffer::debugOffset):
        * assembler/LinkBuffer.h:
        (LinkBuffer):
        (JSC::LinkBuffer::debugSize):
        * assembler/MIPSAssembler.h:
        (MIPSAssembler):
        (JSC::MIPSAssembler::debugOffset):
        * assembler/X86Assembler.h:
        (X86Assembler):
        (JSC::X86Assembler::debugOffset):
        (X86InstructionFormatter):
        (JSC::X86Assembler::X86InstructionFormatter::debugOffset):
        * bytecode/CodeBlock.cpp:
        (JSC):
        * bytecode/CodeBlock.h:
        (CodeBlock):
        * bytecode/CodeOrigin.h:
        (CodeOrigin):
        (JSC):
        (JSC::CodeOrigin::inlineStack):
        * bytecode/DFGExitProfile.h:
        (JSC::DFG::exitKindToString):
        * bytecode/DataFormat.h:
        (JSC::dataFormatToString):
        * bytecode/PredictedType.cpp:
        (JSC):
        (JSC::predictionToString):
        * bytecode/PredictedType.h:
        (JSC):
        * bytecode/ValueRecovery.h:
        (ValueRecovery):
        (JSC::ValueRecovery::dump):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC):
        (JSC::BytecodeGenerator::setDumpsGeneratedCode):
        (JSC::BytecodeGenerator::dumpsGeneratedCode):
        (JSC::BytecodeGenerator::generate):
        * dfg/DFGAbstractValue.h:
        (StructureAbstractValue):
        (JSC::DFG::StructureAbstractValue::dump):
        (AbstractValue):
        (JSC::DFG::AbstractValue::dump):
        * dfg/DFGAssemblyHelpers.h:
        (DFG):
        (AssemblyHelpers):
        (JSC::DFG::AssemblyHelpers::debugCall):
        * dfg/DFGFPRInfo.h:
        (FPRInfo):
        (JSC::DFG::FPRInfo::debugName):
        * dfg/DFGGPRInfo.h:
        (GPRInfo):
        (JSC::DFG::GPRInfo::debugName):
        * dfg/DFGGraph.cpp:
        (DFG):
        * dfg/DFGGraph.h:
        (Graph):
        * dfg/DFGNode.h:
        (DFG):
        (JSC::DFG::arithNodeFlagsAsString):
        (Node):
        (JSC::DFG::Node::hasIdentifier):
        (JSC::DFG::Node::dumpChildren):
        * dfg/DFGOSRExit.cpp:
        (DFG):
        (JSC::DFG::OSRExit::dump):
        * dfg/DFGOSRExit.h:
        (OSRExit):
        * runtime/JSValue.cpp:
        (JSC):
        (JSC::JSValue::description):
        * runtime/JSValue.h:
        (JSValue):
        * wtf/BitVector.cpp:
        (WTF):
        (WTF::BitVector::dump):
        * wtf/BitVector.h:
        (BitVector):

2012-02-02  Oliver Hunt  <oliver@apple.com>

        Getters and setters cause line numbers in errors/console.log to be offset for the whole file
        https://bugs.webkit.org/show_bug.cgi?id=77675

        Reviewed by Timothy Hatcher.

        Our default literal parsing logic doesn't handle the extra work required for
        getters and setters.  When it encounters one, it rolls back the lexer and 
        then switches to a more complete parsing function.  Unfortunately it was only
        winding back the character position, and was ignoring the line number and
        other lexer data.  This led to every getter and setter causing the line number
        to be incorrectly incremented leading to increasingly incorrect numbers for
        the rest of the file.

        * parser/Parser.cpp:
        (JSC::::parseObjectLiteral):

2012-02-02  Andy Wingo  <wingo@igalia.com>

        Fix type punning warning in HashTable.h debug builds
        https://bugs.webkit.org/show_bug.cgi?id=77422

        Reviewed by Gavin Barraclough.

        * wtf/HashTable.h (WTF::HashTable::checkKey): Fix type punning
        warning appearing in debug builds with gcc-4.6.2 on GNU/Linux.

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

        Yarr crash with regexp replace
        https://bugs.webkit.org/show_bug.cgi?id=67454

        Reviewed by Gavin Barraclough.

        Properly handle the case of a back reference to an unmatched
        subpattern by always matching without consuming any characters.

        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::matchBackReference):
        (JSC::Yarr::Interpreter::backtrackBackReference):

2012-02-01  Gavin Barraclough  <barraclough@apple.com>

        calling function on catch block scope containing an eval result in wrong this value being passed
        https://bugs.webkit.org/show_bug.cgi?id=77581

        Reviewed by Oliver Hunt.

        javascript:function F(){ return 'F' in this; }; try { throw F; } catch (e) { eval(""); alert(e()); }

        * bytecompiler/NodesCodegen.cpp:
        (JSC::TryNode::emitBytecode):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createTryStatement):
        * parser/NodeConstructors.h:
        (JSC::TryNode::TryNode):
        * parser/Nodes.h:
        (TryNode):
        * parser/Parser.cpp:
        (JSC::::parseTryStatement):
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createTryStatement):
        * runtime/JSObject.h:
        (JSObject):
        (JSC::JSObject::isStaticScopeObject):
        (JSC):

2012-02-01  Oliver Hunt  <oliver@apple.com>

        Add support for inferred function names
        https://bugs.webkit.org/show_bug.cgi?id=77579

        Reviewed by Gavin Barraclough.

        Add new "inferred" names to function expressions, getters, and setters.
        This property is not exposed to JS, so is only visible in the debugger
        and profiler.

        * JavaScriptCore.exp:
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::makeFunction):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::calculatedFunctionName):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createAssignResolve):
        (JSC::ASTBuilder::createGetterOrSetterProperty):
        (JSC::ASTBuilder::createProperty):
        (JSC::ASTBuilder::makeAssignNode):
        * parser/Nodes.h:
        (JSC::FunctionBodyNode::setInferredName):
        (JSC::FunctionBodyNode::inferredName):
        (FunctionBodyNode):
        * profiler/Profiler.cpp:
        (JSC):
        (JSC::Profiler::createCallIdentifier):
        (JSC::createCallIdentifierFromFunctionImp):
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::FunctionExecutable):
        (JSC::FunctionExecutable::fromGlobalCode):
        * runtime/Executable.h:
        (JSC::FunctionExecutable::create):
        (JSC::FunctionExecutable::inferredName):
        (FunctionExecutable):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::calculatedDisplayName):
        (JSC):
        (JSC::getCalculatedDisplayName):
        * runtime/JSFunction.h:
        (JSC):

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

        DFG should fold double-to-int conversions
        https://bugs.webkit.org/show_bug.cgi?id=77532

        Reviewed by Oliver Hunt.
        
        Performance neutral on major benchmarks. But it makes calling V8's
        Math.random() 4x faster.

        * bytecode/CodeBlock.cpp:
        (JSC):
        (JSC::CodeBlock::addOrFindConstant):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addConstant):
        (CodeBlock):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::toInt32):
        (ByteCodeParser):
        (JSC::DFG::ByteCodeParser::getJSConstantForValue):
        (JSC::DFG::ByteCodeParser::isInt32Constant):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::addShouldSpeculateInteger):
        (Graph):
        (JSC::DFG::Graph::addImmediateShouldSpeculateInteger):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::doRoundOfDoubleVoting):
        (JSC::DFG::Propagator::fixupNode):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileAdd):
        (DFG):
        (JSC::DFG::SpeculativeJIT::compileArithSub):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::valueOfNumberConstantAsInt32):
        (SpeculativeJIT):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * runtime/JSValueInlineMethods.h:
        (JSC::JSValue::asDouble):

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

        DFG graph dump for GetScopedVar should show the correct prediction
        https://bugs.webkit.org/show_bug.cgi?id=77530

        Reviewed by Geoff Garen.
        
        GetScopedVar has a heap prediction, not a variable prediction. But it does
        have a variable. Hence we need to check for heap predictions before checking
        for variable predictions.

        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):

2012-02-01  Mark Hahnenberg  <mhahnenberg@apple.com>

        Replace JSArray destructor with finalizer
        https://bugs.webkit.org/show_bug.cgi?id=77488

        Reviewed by Geoffrey Garen.

        * JavaScriptCore.exp:
        * runtime/JSArray.cpp:
        (JSC::JSArray::finalize): Added finalizer.
        (JSC::JSArray::allocateSparseMap): Factored out code for allocating new sparse maps.
        (JSC):
        (JSC::JSArray::deallocateSparseMap): Factored out code for deallocating sparse maps.
        (JSC::JSArray::enterDictionaryMode): Renamed enterSparseMode to enterDictionaryMode 
        because the old name was confusing because we could have a sparse array that never 
        called enterSparseMode.
        (JSC::JSArray::defineOwnNumericProperty):
        (JSC::JSArray::setLengthWritable):
        (JSC::JSArray::putByIndexBeyondVectorLength):
        (JSC::JSArray::setLength):
        (JSC::JSArray::pop):
        (JSC::JSArray::sort):
        (JSC::JSArray::compactForSorting):
        * runtime/JSArray.h:
        (JSArray):

2012-02-01  Andy Wingo  <wingo@igalia.com>

        Refactor identifier resolution in BytecodeGenerator
        https://bugs.webkit.org/show_bug.cgi?id=76285

        Reviewed by Geoffrey Garen.

        * bytecompiler/BytecodeGenerator.h:
        (JSC::ResolveResult): New class, to describe the storage
        location corresponding to an identifier in a program.
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::resolve): New function, replacing
        findScopedProperty.
        (JSC::BytecodeGenerator::resolveConstDecl): New function,
        encapsulating what ConstDeclNode::emitBytecode used to do.
        (JSC::BytecodeGenerator::emitGetStaticVar):
        (JSC::BytecodeGenerator::emitPutStaticVar): New functions,
        corresponding to the old emitGetScopedVar and emitPutScopedVar.
        (JSC::BytecodeGenerator::registerFor): Remove version that took an
        Identifier&; replaced by ResolveResult::local().
        (JSC::BytecodeGenerator::emitResolve):
        (JSC::BytecodeGenerator::emitResolveBase):
        (JSC::BytecodeGenerator::emitResolveBaseForPut):
        (JSC::BytecodeGenerator::emitResolveWithBase):
        (JSC::BytecodeGenerator::emitResolveWithThis): Change to accept a
        "resolveResult" argument.  This is more clear, and reduces the
        amount of double analysis happening at compile-time.
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ResolveNode::emitBytecode):
        (JSC::EvalFunctionCallNode::emitBytecode):
        (JSC::FunctionCallResolveNode::emitBytecode):
        (JSC::PostfixResolveNode::emitBytecode):
        (JSC::DeleteResolveNode::emitBytecode):
        (JSC::TypeOfResolveNode::emitBytecode):
        (JSC::PrefixResolveNode::emitBytecode):
        (JSC::ReadModifyResolveNode::emitBytecode):
        (JSC::AssignResolveNode::emitBytecode):
        (JSC::ConstDeclNode::emitCodeSingle):
        (JSC::ForInNode::emitBytecode): Refactor to use the new
        ResolveResult structure.

2012-02-01  Csaba Osztrogonác  <ossy@webkit.org>

        Implement Error.stack
        https://bugs.webkit.org/show_bug.cgi?id=66994

        Unreviewed, rolling out r106407.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * interpreter/AbstractPC.cpp:
        (JSC::AbstractPC::AbstractPC):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException):
        * interpreter/Interpreter.h:
        (JSC):
        (Interpreter):
        * jsc.cpp:
        (GlobalObject::finishCreation):
        * parser/Parser.h:
        (JSC::::parse):
        * runtime/CommonIdentifiers.h:
        * runtime/Error.cpp:
        (JSC::addErrorInfo):
        * runtime/Error.h:
        (JSC):

2012-01-31  Hajime Morrita  <morrita@chromium.org>

        Add missing JS_PRIVATE_EXPORTs
        https://bugs.webkit.org/show_bug.cgi?id=77507

        Reviewed by Kevin Ollivier.

        * heap/MarkedSpace.h:
        (MarkedSpace):
        * interpreter/Interpreter.h:
        (Interpreter):
        * runtime/JSValue.h:
        (JSValue):
        * wtf/text/AtomicString.h:
        (WTF::AtomicString::add):
        * wtf/text/WTFString.h:
        (WTF):

2012-01-31  Geoffrey Garen  <ggaren@apple.com>

        Stop using -fomit-frame-pointer
        https://bugs.webkit.org/show_bug.cgi?id=77403

        Reviewed by Filip Pizlo.
        
        JavaScriptCore is too fast. I'm just the man to fix it.

        * Configurations/JavaScriptCore.xcconfig:

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

        StringProtoFuncToUpperCase should call StringImpl::upper similar to StringProtoToLowerCase
        https://bugs.webkit.org/show_bug.cgi?id=76647

        Reviewed by Darin Adler.

        Changed stringProtoFuncToUpperCase to call StringImpl::upper() in a manor similar
        to stringProtoFuncToLowerCase().  Fixed StringImpl::upper() to handle to special
        cases.  One case is s-sharp (0xdf) which converts to "SS".  The other case is 
        for characters which become 16 bit values when converted to upper case.  For
        those, we up convert the the source string and use the 16 bit path.

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncToUpperCase):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::upper):
        * wtf/unicode/CharacterNames.h:
        (smallLetterSharpS): New constant

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

        Remove unneeded sourceId property
        https://bugs.webkit.org/show_bug.cgi?id=77495

        Reviewed by Filip Pizlo.

        sourceId isn't used anymore, so we'll just remove it.

        * runtime/Error.cpp:
        (JSC):
        (JSC::addErrorInfo):
        (JSC::hasErrorInfo):

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

        Implement Error.stack
        https://bugs.webkit.org/show_bug.cgi?id=66994

        Reviewed by Gavin Barraclough.

        Original patch by Juan Carlos Montemayor Elosua:
            This patch utilizes topCallFrame to create a stack trace when
            an error is thrown. Users will also be able to use the stack()
            command in jsc to get arrays with stack trace information.

        Modified to be correct on ToT, with a variety of correctness,
        performance, and security improvements.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * interpreter/Interpreter.cpp:
        (JSC::getCallerLine):
        (JSC::getSourceURLFromCallFrame):
        (JSC::getStackFrameCodeType):
        (JSC::Interpreter::getStackTrace):
        (JSC::Interpreter::throwException):
        * interpreter/Interpreter.h:
        (JSC::StackFrame::toString):
        * jsc.cpp:
        (GlobalObject::finishCreation):
        (functionJSCStack):
        * parser/Parser.h:
        (JSC::Parser::parse):
        * runtime/CommonIdentifiers.h:
        * runtime/Error.cpp:
        (JSC::addErrorInfo):
        * runtime/Error.h:

2012-01-31  Scott Graham  <scottmg@chromium.org>

        [Chromium] Remove references to gyp cygwin build target
        https://bugs.webkit.org/show_bug.cgi?id=77253

        Reviewed by Julien Chaffraix.

        Target dependency is no longer required, it's done earlier in the
        build process.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

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

        ASSERT(m_jumpsToLink.isEmpty()) failing in ARMv7Assembler dtor
        https://bugs.webkit.org/show_bug.cgi?id=77443

        Reviewed by Gavin Barraclough.

        Removed failing ASSERT() and thus destructor.  The ASSERT isn't needed.
        We are hitting it in the YARR JIT case where we bail out and go to the
        interpreter with a partially JIT'ed function.  Since we haven't linked
        the JIT'ed code, there is likely to be some unresolved jumps in the vector
        when the ARMv7Assembler destructor is called.  For the case where we
        complete the JIT process, we clear the vector at the end of
        LinkBuffer::linkCode (LinkBuffer.h:292).

        * assembler/ARMv7Assembler.h:
        (ARMv7Assembler):

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

        Vector<T>::operator== shouldn't require T to have operator!=
        https://bugs.webkit.org/show_bug.cgi?id=77448

        Reviewed by Andreas Kling.

        Change VectorComparer::compare to use !(a == b) instead of a != b since
        it makes more sense for Vector::operator== to use the element's operator==.

        * wtf/Vector.h:

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

        get_by_val_arguments is broken in the interpreter
        https://bugs.webkit.org/show_bug.cgi?id=77389

        Reviewed by Gavin Barraclough.

        When get_by_val had wad a value profile added, the same slot was not added to
        get_by_val_arguments.  This broke the interpreter as the interpreter falls
        back on its regular get_by_val implementation.

        No tests are added as the interpreter is fairly broken in its
        current state (multiple tests fail due to this bug).

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/Opcode.h:
        (JSC):
        ():
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitGetArgumentByVal):

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

        Unexpected syntax error
        https://bugs.webkit.org/show_bug.cgi?id=77340

        Reviewed by Gavin Barraclough.

        Function calls and new expressions have the same semantics for
        assignment, so should simply share their lhs handling.

        * parser/Parser.cpp:
        (JSC::::parseMemberExpression):

2012-01-30  Gavin Barraclough  <barraclough@apple.com>

        Unreviewed ARMv7 build fix.

        * tools/CodeProfiling.cpp:
        (JSC):
        (JSC::setProfileTimer):
        (JSC::CodeProfiling::begin):
        (JSC::CodeProfiling::end):

2012-01-30  David Levin  <levin@chromium.org>

        Using OS(WIN) or OS(MAC) should cause a build error.
        https://bugs.webkit.org/show_bug.cgi?id=77162

        Reviewed by Darin Adler.

        * wtf/Platform.h: Expand them into something that will
         cause a compile error.

2012-01-30  Yong Li  <yoli@rim.com>

        [BlackBerry] OS(QNX) also has TM_GMTOFF, TM_ZONE, and TIMEGM
        https://bugs.webkit.org/show_bug.cgi?id=77360

        Reviewed by Rob Buis.

        Turn on HAVE(TM_GMTOFF), HAVE(TM_ZONE), and HAVE(TIMEGM)
        for OS(QNX).

        * wtf/Platform.h:

2012-01-30  Gavin Barraclough  <barraclough@apple.com>

        Speculative Windows build fix.

        * assembler/MacroAssemblerCodeRef.h:
        (FunctionPtr):

2012-01-30  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=77163
        MacroAssemblerCodeRef.h uses OS(WIN) instead of OS(WINDOWS)

        Rubber stamped by Geoff Garen

        * assembler/MacroAssemblerCodeRef.h:

2012-01-30  Gavin Barraclough  <barraclough@apple.com>

        Unreviewed build fix for interpreter builds.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        * bytecode/CodeBlock.h:
        (CodeBlock):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * tools/CodeProfile.cpp:
        (JSC::CodeProfile::sample):

2012-01-30  Gavin Barraclough  <barraclough@apple.com>

        Unreviewed build fix following bug#76855

        * JavaScriptCore.exp:

2012-01-30  Michael Saboff  <msaboff@apple.com>

        CaseFoldingHash::hash() doesn't handle 8 bit strings directly
        https://bugs.webkit.org/show_bug.cgi?id=76652

        Reviewed by Andreas Kling.

        * wtf/text/StringHash.h:
        (WTF::CaseFoldingHash::hash): Added 8 bit string code path.

2012-01-30  Michael Saboff  <msaboff@apple.com>

        stringProtoFuncReplace converts 8 bit strings to 16 bit during replacement
        https://bugs.webkit.org/show_bug.cgi?id=76651

        Reviewed by Geoffrey Garen.

        Made local function substituteBackreferencesSlow a template function
        based on character width.  Cleaned up getCharacters() in both UString
        and StringImpl.  Changed getCharacters<UChar> to up convert an 8 bit
        string to 16 bits if necessary.

        * runtime/StringPrototype.cpp:
        (JSC::substituteBackreferencesSlow):
        (JSC::substituteBackreferences):
        * runtime/UString.h:
        (JSC::LChar):
        (JSC::UChar):
        * wtf/text/StringImpl.h:
        (WTF::UChar):

2012-01-30  Gavin Barraclough  <barraclough@apple.com>

        Clean up putDirect
        https://bugs.webkit.org/show_bug.cgi?id=76232

        Reviewed by Sam Weinig.

        Part 3 - merge op_put_getter & op_put_setter.

        Putting these separately is inefficient (and makes future optimiation,
        e.g. making GetterSetter immutable) harder. Change to emit a single
        op_put_getter_setter bytecode op. Ultimately we should probably be
        able to merge this with put direct, to create a common op to initialize
        object literal properties.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/Opcode.h:
        (JSC):
        ():
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitPutGetterSetter):
        * bytecompiler/BytecodeGenerator.h:
        (BytecodeGenerator):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::PropertyListNode::emitBytecode):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        (JIT):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_put_getter_setter):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_getter_setter):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        ():
        * runtime/JSObject.cpp:
        (JSC::JSObject::putDirectVirtual):
        (JSC::JSObject::putDirectAccessor):
        (JSC):
        (JSC::putDescriptor):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        ():
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::putDirect):
        (JSC::JSObject::putDirectWithoutTransition):

2012-01-30  Michael Saboff  <msaboff@apple.com>

        Dromaeo tests call parseSimpleLengthValue() on 8 bit strings
        https://bugs.webkit.org/show_bug.cgi?id=76649

        Reviewed by Geoffrey Garen.

        * JavaScriptCore.exp: Added export for charactersToDouble.

2012-01-30  Michael Saboff  <msaboff@apple.com>

        WebCore decodeEscapeSequences unnecessarily converts 8 bit strings to 16 bit when decoding.
        https://bugs.webkit.org/show_bug.cgi?id=76648

        Reviewed by Geoffrey Garen.

        Added a new overloaded append member that takes a String& argument, an offest
        and a length to do direct sub string appending to a StringBuilder.

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

2012-01-29  Zoltan Herczeg  <zherczeg@webkit.org>

        Custom written CSS lexer
        https://bugs.webkit.org/show_bug.cgi?id=70107

        Reviewed by Antti Koivisto and Oliver Hunt.

        Add new helper functions for the custom written CSS lexer.

        * wtf/ASCIICType.h:
        (WTF::toASCIILowerUnchecked):
        (WTF):
        (WTF::isASCIIAlphaCaselessEqual):

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

        REGRESSION (r105576-r105582): Web Inspector Crash in JSC::JSValue::toString(JSC::ExecState*) const
        https://bugs.webkit.org/show_bug.cgi?id=77146
        <rdar://problem/10770586>

        Reviewed by Oliver Hunt.
        
        The old JIT expects that the result of the last operation is in the lastResultRegister.  The DFG JIT is
        designed to correctly track the lastResultRegister by looking at SetLocal nodes.  However, when the DFG
        JIT inlines a code block, it forgets that the inlined code block's result would have been placed in the
        lastResultRegister.  Hence if we OSR exit on the first node following the end of an inlined code block
        that had a return value, and that first node uses the return value, the old JIT will get massively
        confused.  This patch takes a surgical approach: instead of making the DFG smarter, it makes the old
        JIT slightly dumber.

        * jit/JITCall.cpp:
        (JSC::JIT::emit_op_call_put_result):

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

        Build fix for Mac non-x64 platforms.

        * tools/CodeProfiling.cpp:
        (JSC):

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

        Reserve 'let'
        https://bugs.webkit.org/show_bug.cgi?id=77293

        Rubber stamped by Oliver Hunt.

        'let' may become a keyword in ES6.  We're going to try experimentally reserving it,
        to see if this breaks the web.

        * parser/Keywords.table:

2012-01-27  Gavin Barraclough  <barraclough@apple.com>

        Implement a JIT-code aware sampling profiler for JSC
        https://bugs.webkit.org/show_bug.cgi?id=76855

        Reviewed by Oliver Hunt.

        To enable the profiler, set the JSC_CODE_PROFILING environment variable to
        1 (no tracing the C stack), 2 (trace one level of C code) or 3 (recursively
        trace all samples).

        The profiler requires -fomit-frame-pointer to be removed from the build flags.

        * JavaScriptCore.exp:
            - Removed an export.
        * JavaScriptCore.xcodeproj/project.pbxproj:
            - Added new files
        * bytecode/CodeBlock.cpp:
            - For baseline codeblocks, cache the result of canCompileWithDFG.
        * bytecode/CodeBlock.h:
            - For baseline codeblocks, cache the result of canCompileWithDFG.
        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::initializeAllocator):
            - Notify the profiler when the allocator is created.
        (JSC::ExecutableAllocator::allocate):
            - Inform the allocated of the ownerUID.
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::ExecutableAllocator::initializeAllocator):
            - Notify the profiler when the allocator is created.
        (JSC::ExecutableAllocator::allocate):
            - Inform the allocated of the ownerUID.
        * jit/JITStubs.cpp:
            - If profiling, don't mask the return address in JIT code.
              (We do so to provide nicer backtraces in debug builds).
        * runtime/Completion.cpp:
        (JSC::evaluate):
            - Notify the profiler of script evaluations.
        * tools: Added.
        * tools/CodeProfile.cpp: Added.
        (JSC::symbolName):
            - Helper function to get the name of a symbol in the framework.
        (JSC::truncateTrace):
            - Helper to truncate traces into methods know to have uninformatively deep stacks.
        (JSC::CodeProfile::sample):
            - Record a stack trace classifying samples.
        (JSC::CodeProfile::report):
            - {Print profiler output.
        * tools/CodeProfile.h: Added.
            - new class, captures a set of samples associated with an evaluated script,
              and nested to record samples from subscripts.
        * tools/CodeProfiling.cpp: Added.
        (JSC::CodeProfiling::profilingTimer):
            - callback fired then a timer event occurs.
        (JSC::CodeProfiling::notifyAllocator):
            - called when the executable allocator is constructed.
        (JSC::CodeProfiling::getOwnerUIDForPC):
            - helper to lookup the codeblock from an address in JIT code
        (JSC::CodeProfiling::begin):
            - enter a profiling scope.
        (JSC::CodeProfiling::end):
            - exit a profiling scope.
        * tools/CodeProfiling.h: Added.
            - new class, instantialed from Completion to define a profiling scope.
        * tools/ProfileTreeNode.h: Added.
            - new class, used to construct a tree of samples.
        * tools/TieredMMapArray.h: Added.
            - new class, a malloc-free vector (can be used while the main thread is suspended,
              possibly holding the malloc heap lock).
        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocatorHandle::MetaAllocatorHandle):
        (WTF::MetaAllocator::allocate):
            - Allow allocation handles to track information about their owner.
        * wtf/MetaAllocator.h:
        (MetaAllocator):
            - Allow allocation handles to track information about their owner.
        * wtf/MetaAllocatorHandle.h:
        (MetaAllocatorHandle):
        (WTF::MetaAllocatorHandle::ownerUID):
            - Allow allocation handles to track information about their owner.
        * wtf/OSAllocator.h:
        (WTF::OSAllocator::reallocateCommitted):
            - reallocate an existing, committed memory allocation.

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

        Unreviewed, rolling out r106187.
        http://trac.webkit.org/changeset/106187
        https://bugs.webkit.org/show_bug.cgi?id=77276

        The last rollout was a false charge. (Requested by morrita on
        #webkit).

        * runtime/ExceptionHelpers.h:
        (InterruptedExecutionError):
        * runtime/JSBoundFunction.h:
        (JSBoundFunction):
        * runtime/RegExp.h:
        (RegExp):
        * runtime/RegExpMatchesArray.h:
        (RegExpMatchesArray):

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

        Unreviewed, rolling out r106151.
        http://trac.webkit.org/changeset/106151
        https://bugs.webkit.org/show_bug.cgi?id=77275

        may break windows build (Requested by morrita on #webkit).

        * runtime/ExceptionHelpers.h:
        (InterruptedExecutionError):
        * runtime/JSBoundFunction.h:
        (JSBoundFunction):
        * runtime/RegExp.h:
        (RegExp):
        * runtime/RegExpMatchesArray.h:
        (RegExpMatchesArray):

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

        GC invoked while doing an old JIT property storage reallocation may lead
        to an object that refers to a dead structure
        https://bugs.webkit.org/show_bug.cgi?id=77273
        <rdar://problem/10770565>

        Reviewed by Gavin Barraclough.
        
        The put_by_id transition was already saving the old structure by virtue of
        having the object on the stack, so that wasn't going to get deleted. But the
        new structure was unprotected in the transition. I've now changed the
        transition code to save the new structure, ensuring that the GC will know it
        to be marked if invoked from within put_by_id_transition_realloc.

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        (JSC):
        ():

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

        Unreviewed, rolling out r106167.
        http://trac.webkit.org/changeset/106167
        https://bugs.webkit.org/show_bug.cgi?id=77264

        broke LayoutTests/fast/js/string-capitalization.html
        (Requested by msaboff on #webkit).

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncToLowerCase):
        (JSC::stringProtoFuncToUpperCase):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::upper):

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

        Build fix for interpreter platforms.

        * interpreter/AbstractPC.cpp:
        (JSC::AbstractPC::AbstractPC):

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

        StringProtoFuncToUpperCase should call StringImpl::upper similar to StringProtoToLowerCase
        https://bugs.webkit.org/show_bug.cgi?id=76647

        Reviewed by Geoffrey Garen.

        Changed stringProtoFuncToUpperCase to call StringImpl::upper() is a manor similar
        to stringProtoFuncToLowerCase().  Fixed StringImpl::upper() to handle the two
        8 bit characters that when converted to upper case become 16 bit characters.

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncToLowerCase): Removed extra trailing whitespace.
        (JSC::stringProtoFuncToUpperCase):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::upper):

2012-01-27  Hajime Morita  <morrita@google.com>

        [JSC] ThunkGenerators.cpp should hide its asm-defined symbols
        https://bugs.webkit.org/show_bug.cgi?id=77244

        Reviewed by Filip Pizlo.

        * jit/ThunkGenerators.cpp: Added HIDE_SYMBOLS()
        * wtf/InlineASM.h: Moved some duplicated macros from ThunkGenerators.cpp

2012-01-27  Simon Hausmann  <simon.hausmann@nokia.com>

        [JSC] Asm-originated symbols should be marked as hidden
        https://bugs.webkit.org/show_bug.cgi?id=77150

        Reviewed by Filip Pizlo.

        * dfg/DFGOperations.cpp: The HIDE_SYMBOLS macros were present in the CPU(ARM) preprocessor branches,
        but they were missing in the CPU(X86) and the CPU(X86_64) cases.

2012-01-27  MORITA Hajime  <morrita@google.com>

        [JSC] Some JS_EXPORTDATA may not be necessary.
        https://bugs.webkit.org/show_bug.cgi?id=77145

        Reviewed by Darin Adler.

        Removed JS_EXPORTDATA attributes whose attributing symbols are
        not exported on Mac port.
        
        * runtime/ExceptionHelpers.h:
        (InterruptedExecutionError):
        * runtime/JSBoundFunction.h:
        (JSBoundFunction):
        * runtime/RegExp.h:
        (RegExp):
        * runtime/RegExpMatchesArray.h:
        (RegExpMatchesArray):

2012-01-27  MORITA Hajime  <morrita@google.com>

        [WTF] WTFString.h has some extra JS_EXPORT_PRIVATEs
        https://bugs.webkit.org/show_bug.cgi?id=77113

        Reviewed by Darin Adler.

        * wtf/text/WTFString.h: Removed some WTF_EXPORT_PRIVATE attributes which we don't need to export.

2012-01-27  Zeno Albisser  <zeno@webkit.org>

        [Qt][Mac] Build fails after adding ICU support (r105997).
        https://bugs.webkit.org/show_bug.cgi?id=77118

        Use Apple code path for unicode date formats on mac.

        Reviewed by Tor Arne Vestbø.

        * runtime/DatePrototype.cpp:
        ():

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

        [GTK] Add a GKeyFile especialization to GOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=77191

        Reviewed by Martin Robinson.

        * wtf/gobject/GOwnPtr.cpp:
        (WTF::GKeyFile): Implement freeOwnedGPtr for GKeyFile.
        * wtf/gobject/GOwnPtr.h: Add GKeyFile template.
        * wtf/gobject/GTypedefs.h: Add forward declaration for GKeyFile.

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

        Web Inspector: should be possible to open function declaration from script popover
        https://bugs.webkit.org/show_bug.cgi?id=76913

        Added display function name and source location to the popover in scripts panel.
        Now when a function is hovered user can navigate to its definition.

        Reviewed by Pavel Feldman.

        * JavaScriptCore/JavaScriptCore.exp
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/JSFunction.h:
        (JSFunction):

2012-01-26  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed. Build fix, wx uses the Mac ICU headers so we must match Mac behavior.
        
        * runtime/DatePrototype.cpp:
        ():

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

        Merge AllocationSpace into MarkedSpace
        https://bugs.webkit.org/show_bug.cgi?id=77116

        Reviewed by Geoffrey Garen.

        Merging AllocationSpace and MarkedSpace in preparation for future refactoring/enhancement to 
        MarkedSpace allocation.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * heap/AllocationSpace.cpp: Removed.
        * heap/AllocationSpace.h: Removed.
        * heap/BumpSpace.h:
        (BumpSpace):
        * heap/Heap.h:
        (JSC::Heap::objectSpace):
        (Heap):
        ():
        * heap/HeapBlock.h:
        ():
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::tryAllocateHelper):
        (JSC):
        (JSC::MarkedSpace::tryAllocate):
        (JSC::MarkedSpace::allocateSlowCase):
        (JSC::MarkedSpace::allocateBlock):
        (JSC::MarkedSpace::freeBlocks):
        (TakeIfUnmarked):
        (JSC::TakeIfUnmarked::TakeIfUnmarked):
        (JSC::TakeIfUnmarked::operator()):
        (JSC::TakeIfUnmarked::returnValue):
        (JSC::MarkedSpace::shrink):
        (GatherDirtyCells):
        (JSC::GatherDirtyCells::returnValue):
        (JSC::GatherDirtyCells::GatherDirtyCells):
        (JSC::GatherDirtyCells::operator()):
        (JSC::MarkedSpace::gatherDirtyCells):
        * heap/MarkedSpace.h:
        (MarkedSpace):
        (JSC::MarkedSpace::blocks):
        (JSC::MarkedSpace::forEachCell):
        (JSC):
        (JSC::MarkedSpace::allocate):

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

        MSVC bug fix.
        <rdar://problem/10703671> MSVC generates bad code for enum compare.

        RS=Geoff

        Make bitfield large enough to work around MSVC's desire to make enums
        signed types.

        * bytecode/CallLinkInfo.h:
        (CallLinkInfo):

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

        All DFG helpers that may call out to arbitrary JS code must know where they
        were called from due to inlining and call stack walking
        https://bugs.webkit.org/show_bug.cgi?id=77070
        <rdar://problem/10750834>

        Reviewed by Geoff Garen.
        
        Changed the DFG to always record a code origin index in the tag of the argument
        count (which we previously left blank for the benefit of LLInt, but is still
        otherwise unused by the DFG), so that if we ever need to walk the stack accurately
        we know where to start. In particular, if the current ExecState* points several
        semantic call frames away from the true semantic call frame because we had
        performed inlining, having the code origin index recorded means that we can reify
        those call frames as necessary to give runtime/library code an accurate view of
        the current JS state.
        
        This required several large but mechanical changes:
        
        - Calling a function from the DFG now plants a store32 instruction to store the
          code origin index. But the indices of code origins were previously picked by
          the DFG::JITCompiler after code generation completed. I changed this somewhat;
          even though the code origins are put into the CodeBlock after code gen, the
          code gen now knows a priori what their indices will be. Extensive assertions
          are in place to ensure that the two don't get out of sync, in the form of the
          DFG::CallBeginToken. Note that this mechanism has almost no effect on JS calls;
          those don't need the code origin index set in the call frame because we can get
          it by doing a binary search on the return PC.

        - Stack walking now always calls trueCallFrame() first before beginning the walk,
          since even the top call frame may be wrong. It still calls trueCallerFrame() as
          before to get to the next frame, though trueCallerFrame() is now mostly a
          wrapper around callerFrame()->trueCallFrame().
          
        - Because the mechanism for getting the code origin of a call frame is bimodal
          (either the call frame knows its code origin because the code origin index was
          set, or it's necessary to use the callee frame's return PC), I put in extra
          mechanisms to determine whether your caller, or your callee, corresponds to
          a call out of C++ code. Previously we just had the host call flag, but this is
          insufficient as it does not cover the case of someone calling JSC::call(). But
          luckily we can determine this just by looking at the return PC: if the return
          PC is in range of the ctiTrampiline, then two things are true: this call
          frame's PC will tell you nothing about where you came from in your caller, and
          the caller already knows where it's at because it must have set the code origin
          index (unless it's not DFG code, in which case we don't care because there is
          no inlining to worry about).
          
        - During testing this revealed a simple off-by-one goof in DFG::ByteCodeParser's
          inlining code, so I fixed it.

        - Finally because I was tired of doing random #if's for checking if I should be
          passing around an Instruction* or a ReturnAddressPtr, I created a class called
          AbstractPC that holds whatever notion of a PC is appropriate for the current
          execution environment. It's designed to work gracefully even if both the
          interpreter and the JIT are compiled in, and should integrate nicely with the
          LLInt.
          
        This is neutral on all benchmarks and fixes some nasty corner-case regressions of
        evil code that uses combinations of getters/setters and function.arguments.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::codeOrigin):
        (CodeBlock):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleInlining):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        (CallBeginToken):
        (JSC::DFG::CallBeginToken::CallBeginToken):
        (JSC::DFG::CallBeginToken::assertCodeOriginIndex):
        (JSC::DFG::CallBeginToken::assertNoCodeOriginIndex):
        (DFG):
        (JSC::DFG::CallExceptionRecord::CallExceptionRecord):
        (CallExceptionRecord):
        (JSC::DFG::JITCompiler::JITCompiler):
        (JITCompiler):
        (JSC::DFG::JITCompiler::nextCallBeginToken):
        (JSC::DFG::JITCompiler::beginCall):
        (JSC::DFG::JITCompiler::notifyCall):
        (JSC::DFG::JITCompiler::addExceptionCheck):
        (JSC::DFG::JITCompiler::addFastExceptionCheck):
        * dfg/DFGOperations.cpp:
        ():
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::tryBuildGetByIDList):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * interpreter/AbstractPC.cpp: Added.
        (JSC):
        (JSC::AbstractPC::AbstractPC):
        * interpreter/AbstractPC.h: Added.
        (JSC):
        (AbstractPC):
        (JSC::AbstractPC::AbstractPC):
        (JSC::AbstractPC::hasJITReturnAddress):
        (JSC::AbstractPC::jitReturnAddress):
        (JSC::AbstractPC::hasInterpreterReturnAddress):
        (JSC::AbstractPC::interpreterReturnAddress):
        (JSC::AbstractPC::isSet):
        (JSC::AbstractPC::operator!):
        ():
        * interpreter/CallFrame.cpp:
        (JSC):
        (JSC::CallFrame::trueCallFrame):
        (JSC::CallFrame::trueCallerFrame):
        * interpreter/CallFrame.h:
        (JSC::ExecState::abstractReturnPC):
        (JSC::ExecState::codeOriginIndexForDFGWithInlining):
        (ExecState):
        (JSC::ExecState::trueCallFrame):
        (JSC::ExecState::trueCallFrameFromVMCode):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::retrieveArgumentsFromVMCode):
        (JSC::Interpreter::retrieveCallerFromVMCode):
        (JSC::Interpreter::findFunctionCallFrameFromVMCode):
        * interpreter/Interpreter.h:
        (Interpreter):
        ():
        * jit/JITStubs.cpp:
        (JSC):
        ():
        * jit/JITStubs.h:
        (JSC):
        (JSC::returnAddressIsInCtiTrampoline):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::argumentsGetter):
        (JSC::JSFunction::callerGetter):
        (JSC::JSFunction::getOwnPropertyDescriptor):

2012-01-26  Peter Varga  <pvarga@webkit.org>

        Fix build when VERBOSE_SPECULATION_FAILURE is enabled in DFG
        https://bugs.webkit.org/show_bug.cgi?id=77104

        Reviewed by Filip Pizlo.

        * dfg/DFGOperations.cpp:
        ():

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

        String::latin1() should take advantage of 8 bit strings
        https://bugs.webkit.org/show_bug.cgi?id=76646

        Reviewed by Geoffrey Garen.

        * wtf/text/WTFString.cpp:
        (WTF::String::latin1): For 8 bit strings, use existing buffer
        without conversion.

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

        Dromaeo tests usage of StringImpl find routines cause 8->16 bit conversions
        https://bugs.webkit.org/show_bug.cgi?id=76645

        Reviewed by Geoffrey Garen.

        * wtf/text/StringImpl.cpp:
        (WTF::equalIgnoringCase): New LChar version.
        (WTF::findInner): New helper function.
        (WTF::StringImpl::find): Added 8 bit path.
        (WTF::reverseFindInner): New helper funciton.
        (WTF::StringImpl::reverseFind): Added 8 bit path.
        (WTF::StringImpl::reverseFindIgnoringCase): Added 8 bit path.
        * wtf/text/StringImpl.h:
        (WTF):

2012-01-26  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][Win] One more speculative buildfix after r105970.

        * JavaScriptCore.pri:

2012-01-26  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt][Win] Speculative buildfix after r105970.

        * JavaScriptCore.pri: Link lgdi for DeleteObject() and DeleteDC().

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

        Unreviewed, rolling out r105982.
        http://trac.webkit.org/changeset/105982
        https://bugs.webkit.org/show_bug.cgi?id=77090

        breaks the world (Requested by WildFox on #webkit).

        * wtf/MainThread.cpp:
        (WTF):
        * wtf/Platform.h:
        * wtf/mac/MainThreadMac.mm:
        (WTF):
        (WTF::registerGCThread):
        (WTF::isMainThreadOrGCThread):

2012-01-26  Roland Takacs  <takacs.roland@stud.u-szeged.hu>

        [Qt] GC should be parallel on Qt platform
        https://bugs.webkit.org/show_bug.cgi?id=73309

        Reviewed by Zoltan Herczeg.

        These changes made the parallel gc feature available for Qt port.
        The implementation of "registerGCThread" and "isMainThreadOrGCThread"
        is moved from MainThreadMac.mm to the common MainThread.cpp to make
        them available for other platforms.

        Measurement results:
        V8           speed-up:  1.071x as fast  [From: 746.1ms  To: 696.4ms ]
        WindScorpion speed-up:  1.082x as fast  [From: 3490.4ms To: 3226.7ms]
        V8 Splay     speed-up:  1.158x as fast  [From: 145.8ms  To: 125.9ms ]

        Tested on Intel(R) Core(TM) i5-2320 CPU @ 3.00GHz with 4-core.

        * wtf/MainThread.cpp:
        (WTF):
        (WTF::registerGCThread):
        (WTF::isMainThreadOrGCThread):
        * wtf/Platform.h:
        * wtf/mac/MainThreadMac.mm:

2012-01-26  Andy Estes  <aestes@apple.com>

        REGRESSION (r105555): Incorrect use of OS() macro breaks OwnPtr when used with Win32 data types
        https://bugs.webkit.org/show_bug.cgi?id=77073

        Reviewed by Ryosuke Niwa.
        
        r105555 changed PLATFORM(WIN) to OS(WIN), but WTF_OS_WIN isn't defined.
        This should have been changed to OS(WINDOWS). This causes the
        preprocessor to strip out Win32 data type overrides for deleteOwnedPtr,
        causing allocations made by Win32 to be deleted by fastmalloc.

        * wtf/OwnPtrCommon.h:
        (WTF): Use OS(WINDOWS) instead of OS(WIN).

2012-01-25  Mark Rowe  <mrowe@apple.com>

        Attempted Mac build fix after r105939.

        * runtime/DatePrototype.cpp: Don't #include unicode/udat.h on Mac or iOS.
        It isn't used on these platforms and isn't available in the ICU headers
        for Mac.

2012-01-25  Mark Rowe  <mrowe@apple.com>

        Build in to an alternate location when USE_STAGING_INSTALL_PATH is set.

        <rdar://problem/10609417> Adopt USE_STAGING_INSTALL_PATH

        Reviewed by David Kilzer.

        * Configurations/Base.xcconfig: Define NORMAL_JAVASCRIPTCORE_FRAMEWORKS_DIR, which contains
        the path where JavaScriptCore is normally installed. Update JAVASCRIPTCORE_FRAMEWORKS_DIR
        to point to the staged frameworks directory when USE_STAGING_INSTALL_PATH is set.
        * Configurations/JavaScriptCore.xcconfig: Always set the framework's install name based on
        the normal framework location. This prevents an incorrect install name from being used when
        installing in to the staged frameworks directory.

2012-01-25  Eli Fidler  <efidler@rim.com>

        Implement Date.toLocaleString() using ICU
        https://bugs.webkit.org/show_bug.cgi?id=76714

        Reviewed by Darin Adler.

        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):

2012-01-25  Hajime Morita  <morrita@google.com>

        ENABLE_SHADOW_DOM should be available via build-webkit --shadow-dom
        https://bugs.webkit.org/show_bug.cgi?id=76863

        Reviewed by Dimitri Glazkov.

        Added a feature flag.

        * Configurations/FeatureDefines.xcconfig:

2012-01-25  Yong Li  <yoli@rim.com>

        [BlackBerry] Implement OSAllocator::commit/decommit.
        BlackBerry port should support virtual memory decommiting.
        https://bugs.webkit.org/show_bug.cgi?id=77013

        Reviewed by Rob Buis.

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

2012-01-24  Oliver Hunt  <oliver@apple.com>

        Make DFG update topCallFrame
        https://bugs.webkit.org/show_bug.cgi?id=76969

        Reviewed by Filip Pizlo.

        Add NativeCallFrameTracer to manage topCallFrame assignment
        in the DFG operations, and make use of it.

        * dfg/DFGOperations.cpp:
        (JSC::DFG::operationPutByValInternal):
        ():
        * interpreter/Interpreter.h:
        (JSC):
        (NativeCallFrameTracer):
        (JSC::NativeCallFrameTracer::NativeCallFrameTracer):

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

        Inlining breaks call frame walking when the walking is done from outside the inlinee,
        but inside a code block that had inlining
        https://bugs.webkit.org/show_bug.cgi?id=76978
        <rdar://problem/10720904>

        Reviewed by Oliver Hunt.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::codeOriginForReturn):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::trueCallerFrame):

2012-01-24  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=76855
        Implement a JIT-code aware sampling profiler for JSC

        Reviewed by Oliver Hunt.

        Add support to MetaAllocator.cpp to track all live handles in a map,
        allowing lookup based on any address within the allocation.

        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocatorTracker::notify):
        (WTF::MetaAllocatorTracker::release):
            - Track live handle objects in a map.
        (WTF::MetaAllocator::release):
            - Removed support for handles with null m_allocator (no longer used).
            - Notify the tracker of handles being released.
        (WTF::MetaAllocatorHandle::~MetaAllocatorHandle):
            - Moved functionality out into MetaAllocator::release.
        (WTF::MetaAllocatorHandle::shrink):
            - Removed support for handles with null m_allocator (no longer used).
        (WTF::MetaAllocator::MetaAllocator):
            - Initialize m_tracker.
        (WTF::MetaAllocator::allocate):
            - Notify the tracker of new allocations.
        * wtf/MetaAllocator.h:
        (WTF::MetaAllocatorTracker::find):
            - Lookup a MetaAllocatorHandle based on an address inside the allocation.
        (WTF::MetaAllocator::trackAllocations):
            - Register a callback object to track allocation state.
        * wtf/MetaAllocatorHandle.h:
            - Remove unused createSelfManagedHandle/constructor.
        (WTF::MetaAllocatorHandle::key):
            - Added, for use in RedBlackTree.

2012-01-24  Mark Hahnenberg  <mhahnenberg@apple.com>

        Use copying collector for out-of-line JSObject property storage
        https://bugs.webkit.org/show_bug.cgi?id=76665

        Reviewed by Geoffrey Garen.

        * runtime/JSObject.cpp:
        (JSC::JSObject::visitChildren): Changed to use copyAndAppend whenever the property storage is out-of-line.
        Also added a temporary variable to avoid warnings from GCC.
        (JSC::JSObject::allocatePropertyStorage): Changed to use tryAllocateStorage/tryReallocateStorage as opposed to 
        operator new. Also added a temporary variable to avoid warnings from GCC.
        * runtime/JSObject.h:

2012-01-24  Geoffrey Garen  <ggaren@apple.com>

        JSValue::toString() should return a JSString* instead of a UString
        https://bugs.webkit.org/show_bug.cgi?id=76861

        Fixed two failing layout tests after my last patch.

        Reviewed by Gavin Barraclough.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSort): Call value() after calling toString(), as
        in all other cases.
        
        I missed this case because the JSString* type has a valid operator<,
        so the compiler didn't complain.

2012-01-24  Kenichi Ishibashi  <bashi@chromium.org>

        [V8] Add Uint8ClampedArray support
        https://bugs.webkit.org/show_bug.cgi?id=76803

        Reviewed by Kenneth Russell.

        * wtf/ArrayBufferView.h:
        (WTF::ArrayBufferView::isUnsignedByteClampedArray): Added.
        * wtf/Uint8ClampedArray.h:
        (WTF::Uint8ClampedArray::isUnsignedByteClampedArray): Overridden to return true.

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

        [GTK] Add WebKitDownload to WebKit2 GTK+ API
        https://bugs.webkit.org/show_bug.cgi?id=72949

        Reviewed by Martin Robinson.

        * wtf/gobject/GOwnPtr.cpp:
        (WTF::GTimer): Use g_timer_destroy() to free a GTimer.
        * wtf/gobject/GOwnPtr.h: Add GTimer template.
        * wtf/gobject/GTypedefs.h: Add GTimer forward declaration.

2012-01-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix for Qt LinuxSH4 build after r105698.

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

2012-01-23  Geoffrey Garen  <ggaren@apple.com>

        JSValue::toString() should return a JSString* instead of a UString
        https://bugs.webkit.org/show_bug.cgi?id=76861

        Reviewed by Gavin Barraclough.
        
        This makes the common case -- toString() on a string -- faster and
        inline-able. (Not a measureable speedup, but we can now remove a bunch
        of duplicate hand-rolled code for this optimization.)
        
        This also clarifies the boundary between "C++ strings" and "JS strings".
        
        In all cases other than true, false, null, undefined, and multi-digit
        numbers, the JS runtime was just retrieving a UString from a JSString,
        so returning a JSString* is strictly better. In the other cases, we can
        optimize to avoid creating a new JSString if we care to, but it doesn't
        seem to be a big deal.

        * JavaScriptCore.exp: Export!
        
        * jsc.cpp:
        (functionPrint):
        (functionDebug):
        (functionRun):
        (functionLoad):
        (functionCheckSyntax):
        (runWithScripts):
        (runInteractive):
        * API/JSValueRef.cpp:
        (JSValueToStringCopy):
        * bytecode/CodeBlock.cpp:
        (JSC::valueToSourceString): Call value() after calling toString(), to
        convert from "JS string" (JSString*) to "C++ string" (UString), since
        toString() no longer returns a "C++ string".

        * dfg/DFGOperations.cpp:
        (JSC::DFG::operationValueAddNotNumber):
        * jit/JITStubs.cpp:
        (op_add): Updated for removal of toPrimitiveString():
        all '+' operands can use toString(), except for object operands, which
        need to take a slow path to call toPrimitive().

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        (JSC::arrayProtoFuncToLocaleString):
        (JSC::arrayProtoFuncJoin):
        (JSC::arrayProtoFuncPush):
        * runtime/CommonSlowPaths.h:
        (JSC::CommonSlowPaths::opIn):
        * runtime/DateConstructor.cpp:
        (JSC::dateParse):
        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate): Call value() after calling toString(), as above.

        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::create): Simplified down to one canonical create()
        function, to make string handling easier.

        * runtime/ErrorPrototype.cpp:
        (JSC::errorProtoFuncToString):
        * runtime/ExceptionHelpers.cpp:
        (JSC::createInvalidParamError):
        (JSC::createNotAConstructorError):
        (JSC::createNotAFunctionError):
        (JSC::createNotAnObjectError):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncBind):
        * runtime/JSArray.cpp:
        (JSC::JSArray::sort): Call value() after calling toString(), as above.

        * runtime/JSCell.cpp:
        * runtime/JSCell.h: Removed JSCell::toString() because JSValue does this
        job now. Doing it in JSCell is slower (requires extra type checking), and
        creates the misimpression that language-defined toString() behavior is
        an implementation detail of JSCell.
        
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::encode):
        (JSC::decode):
        (JSC::globalFuncEval):
        (JSC::globalFuncParseInt):
        (JSC::globalFuncParseFloat):
        (JSC::globalFuncEscape):
        (JSC::globalFuncUnescape): Call value() after calling toString(), as above.

        * runtime/JSONObject.cpp:
        (JSC::unwrapBoxedPrimitive):
        (JSC::Stringifier::Stringifier):
        (JSC::JSONProtoFuncParse): Removed some manual optimization that toString()
        takes care of.

        * runtime/JSObject.cpp:
        (JSC::JSObject::toString):
        * runtime/JSObject.h: Updated to return JSString*.

        * runtime/JSString.cpp:
        * runtime/JSString.h:
        (JSC::JSValue::toString): Removed, since I removed JSCell::toString().

        * runtime/JSValue.cpp:
        (JSC::JSValue::toStringSlowCase): Removed toPrimitiveString(), and re-
        spawned toStringSlowCase() from its zombie corpse, since toPrimitiveString()
        basically did what we want all the time. (Note that the toPrimitive()
        preference changes from NoPreference to PreferString, because that's
        how ToString is defined in the language. op_add does not want this behavior.)

        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToString):
        (JSC::numberProtoFuncToLocaleString): A little simpler, now that toString()
        returns a JSString*.

        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorGetOwnPropertyDescriptor):
        (JSC::objectConstructorDefineProperty):
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncHasOwnProperty):
        (JSC::objectProtoFuncDefineGetter):
        (JSC::objectProtoFuncDefineSetter):
        (JSC::objectProtoFuncLookupGetter):
        (JSC::objectProtoFuncLookupSetter):
        (JSC::objectProtoFuncPropertyIsEnumerable): More calls to value(), as above.

        * runtime/Operations.cpp:
        (JSC::jsAddSlowCase): Need to check for object before taking the toString()
        fast path becuase adding an object to a string requires calling toPrimitive()
        on the object, not toString(). (They differ in their preferred conversion
        type.)

        * runtime/Operations.h:
        (JSC::jsString):
        (JSC::jsStringFromArguments): This code gets simpler, now that toString()
        does the right thing.

        (JSC::jsAdd): Now checks for object, just like jsAddSlowCase().

        * runtime/RegExpConstructor.cpp:
        (JSC::setRegExpConstructorInput):
        (JSC::constructRegExp):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::match):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):
        (JSC::regExpProtoFuncToString): More calls to value(), as above.

        * runtime/StringConstructor.cpp:
        (JSC::constructWithStringConstructor):
        (JSC::callStringConstructor): This code gets simpler, now that toString()
        does the right thing.

        * runtime/StringPrototype.cpp:
        (JSC::replaceUsingRegExpSearch):
        (JSC::replaceUsingStringSearch):
        (JSC::stringProtoFuncReplace):
        (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::trimString): Some of this code gets simpler, now that toString()
        does the right thing. More calls to value(), as above.

2012-01-23  Luke Macpherson   <macpherson@chromium.org>

        Unreviewed, rolling out r105676.
        http://trac.webkit.org/changeset/105676
        https://bugs.webkit.org/show_bug.cgi?id=76665

        Breaks build on max due to compile warnings.

        * runtime/JSObject.cpp:
        (JSC::JSObject::finalize):
        (JSC::JSObject::visitChildren):
        (JSC::JSObject::allocatePropertyStorage):
        * runtime/JSObject.h:

2012-01-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        Use copying collector for out-of-line JSObject property storage
        https://bugs.webkit.org/show_bug.cgi?id=76665

        Reviewed by Geoffrey Garen.

        * runtime/JSObject.cpp:
        (JSC::JSObject::visitChildren): Changed to use copyAndAppend whenever the property storage is out-of-line.
        (JSC::JSObject::allocatePropertyStorage): Changed to use tryAllocateStorage/tryReallocateStorage as opposed to 
        operator new.
        * runtime/JSObject.h:

2012-01-23  Brian Weinstein  <bweinstein@apple.com>

        More build fixing after r105646.

        * JavaScriptCore.exp:

2012-01-23  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=76855
        Implement a JIT-code aware sampling profiler for JSC

        Reviewed by Geoff Garen.

        Step 2: generalize RedBlackTree. The profiler is going to want tio use
        a RedBlackTree, allow this class to work with subclasses of
        RedBlackTree::Node, Node should not need to know the names of the m_key
        and m_value fields (the subclass can provide a key() accessor), and
        RedBlackTree does not need to know anything about ValueType.

        * JavaScriptCore.exp:
        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::findAndRemoveFreeSpace):
        (WTF::MetaAllocator::debugFreeSpaceSize):
        (WTF::MetaAllocator::addFreeSpace):
        * wtf/MetaAllocator.h:
        (WTF::MetaAllocator::FreeSpaceNode::FreeSpaceNode):
        (WTF::MetaAllocator::FreeSpaceNode::key):
        * wtf/MetaAllocatorHandle.h:
        (WTF::MetaAllocatorHandle::key):
        * wtf/RedBlackTree.h:
        (WTF::RedBlackTree::Node::successor):
        (WTF::RedBlackTree::Node::predecessor):
        (WTF::RedBlackTree::Node::parent):
        (WTF::RedBlackTree::Node::setParent):
        (WTF::RedBlackTree::Node::left):
        (WTF::RedBlackTree::Node::setLeft):
        (WTF::RedBlackTree::Node::right):
        (WTF::RedBlackTree::Node::setRight):
        (WTF::RedBlackTree::insert):
        (WTF::RedBlackTree::remove):
        (WTF::RedBlackTree::findExact):
        (WTF::RedBlackTree::findLeastGreaterThanOrEqual):
        (WTF::RedBlackTree::findGreatestLessThanOrEqual):
        (WTF::RedBlackTree::first):
        (WTF::RedBlackTree::last):
        (WTF::RedBlackTree::size):
        (WTF::RedBlackTree::treeMinimum):
        (WTF::RedBlackTree::treeMaximum):
        (WTF::RedBlackTree::treeInsert):
        (WTF::RedBlackTree::leftRotate):
        (WTF::RedBlackTree::rightRotate):
        (WTF::RedBlackTree::removeFixup):

2012-01-23  Andy Estes  <aestes@apple.com>

        Fix the build after r105635.

        * JavaScriptCore.exp:

2012-01-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove StackBounds from JSGlobalData
        https://bugs.webkit.org/show_bug.cgi?id=76310

        Reviewed by Sam Weinig.

        Removed StackBounds and the stack() function from JSGlobalData since it no 
        longer accessed any members of JSGlobalData.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * heap/MachineStackMarker.cpp:
        (JSC::MachineThreads::addCurrentThread):
        (JSC::MachineThreads::gatherFromCurrentThread):
        * parser/Parser.cpp:
        (JSC::::Parser):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:

2012-01-23  Gavin Barraclough  <barraclough@apple.com>

        Implement a JIT-code aware sampling profiler for JSC
        https://bugs.webkit.org/show_bug.cgi?id=76855

        Rubber stanmped by Geoff Garen.

        Mechanical change - pass CodeBlock through to the executable allocator,
        such that we will be able to map ranges of JIT code back to their owner.

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::executableCopy):
        * assembler/ARMAssembler.h:
        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::executableCopy):
        * assembler/AssemblerBufferWithConstantPool.h:
        (JSC::AssemblerBufferWithConstantPool::executableCopy):
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::LinkBuffer):
        (JSC::LinkBuffer::linkCode):
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::executableCopy):
        * assembler/SH4Assembler.h:
        (JSC::SH4Assembler::executableCopy):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::executableCopy):
        (JSC::X86Assembler::X86InstructionFormatter::executableCopy):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compile):
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGOSRExitCompiler.cpp:
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::generateProtoChainAccessStub):
        (JSC::DFG::tryCacheGetByID):
        (JSC::DFG::tryBuildGetByIDList):
        (JSC::DFG::tryCachePutByID):
        * dfg/DFGThunks.cpp:
        (JSC::DFG::osrExitGenerationThunkGenerator):
        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::allocate):
        * jit/ExecutableAllocator.h:
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::ExecutableAllocator::allocate):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * 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:
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::finalize):
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::compile):

2012-01-23  Xianzhu Wang  <wangxianzhu@chromium.org>

        Basic enhancements to StringBuilder
        https://bugs.webkit.org/show_bug.cgi?id=67081

        This change contains the following enhancements to StringBuilder,
        for convenience, performance, testability, etc.:
        - Change toStringPreserveCapacity() to const
        - new public methods: capacity(), swap(), toAtomicString(), canShrink()
          and append(const StringBuilder&)
        - == and != opearators to compare StringBuilders and a StringBuilder/String

        Unit tests: Tools/TestWebKitAPI/Tests/WTF/StringBuilder.cpp

        Reviewed by Darin Adler.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/text/AtomicString.cpp:
        (WTF::SubstringTranslator::hash):
        (WTF::SubstringTranslator::equal):
        (WTF::SubstringTranslator::translate):
        (WTF::AtomicString::add):
        (WTF::AtomicString::addSlowCase):
        * wtf/text/AtomicString.h:
        (WTF::AtomicString::AtomicString):
        (WTF::AtomicString::add):
        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::reifyString):
        (WTF::StringBuilder::resize):
        (WTF::StringBuilder::canShrink):
        (WTF::StringBuilder::shrinkToFit):
        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::append):
        (WTF::StringBuilder::toString):
        (WTF::StringBuilder::toStringPreserveCapacity):
        (WTF::StringBuilder::toAtomicString):
        (WTF::StringBuilder::isEmpty):
        (WTF::StringBuilder::capacity):
        (WTF::StringBuilder::is8Bit):
        (WTF::StringBuilder::swap):
        (WTF::equal):
        (WTF::operator==):
        (WTF::operator!=):
        * wtf/text/StringImpl.h:

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

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Add missing files, remove deleted files and
        fix indentation.

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

        Build fix for non-DFG platforms that error out on warn-unused-parameter.

        * bytecode/CallLinkStatus.cpp:
        (JSC::CallLinkStatus::computeFor):
        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::computeFor):
        * bytecode/MethodCallLinkStatus.cpp:
        (JSC::MethodCallLinkStatus::computeFor):
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::computeFor):

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

        Build fix for non-DFG platforms.

        * bytecode/CallLinkStatus.cpp:
        (JSC::CallLinkStatus::computeFor):
        * bytecode/GetByIdStatus.cpp:
        (JSC::GetByIdStatus::computeFor):
        * bytecode/MethodCallLinkStatus.cpp:
        (JSC::MethodCallLinkStatus::computeFor):
        * bytecode/PutByIdStatus.cpp:
        (JSC::PutByIdStatus::computeFor):

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

        DFG should not have code that directly decodes the states of old JIT inline
        cache data structures
        https://bugs.webkit.org/show_bug.cgi?id=76768

        Reviewed by Sam Weinig.
        
        Introduced new classes (like GetByIdStatus) that encapsulate the set of things
        that the DFG would like to know about property accesses and calls. Whereas it
        previously got this information by directly decoding the data structures used
        by the old JIT for inline caching, it now uses these classes, which do the work
        for it. This should make it somewhat more straight forward to introduce new
        ways of profiling the same information.
        
        Also hoisted StructureSet into bytecode/ from dfg/, because it's now used by
        code in bytecode/.
        
        Making this work right involved carefully ensuring that the heuristics for
        choosing how to handle property accesses was at least as good as what we had
        before, since I completely restructured that code. Currently the performance
        looks neutral. Since I rewrote the code I did change some things that I never
        liked before, like previously if a put_bu_id had executed exactly once then
        we'd compile it as if it had taken slow-path. Executing once is special because
        then the inline cache is not baked in, so there is no information about how the
        DFG should optimize the code. Now this is rationalized: if the put_by_id does
        not offer enough information to be optimized (i.e. had executed 0 or 1 times)
        then we turn it into a forced OSR exit (i.e. a patch point). However, get_by_id
        still has the old behavior; I left it that way because I didn't want to make
        too many changes at once.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * bytecode/CallLinkStatus.cpp: Added.
        (JSC::CallLinkStatus::computeFor):
        * bytecode/CallLinkStatus.h: Added.
        (JSC::CallLinkStatus::CallLinkStatus):
        (JSC::CallLinkStatus::isSet):
        (JSC::CallLinkStatus::operator!):
        (JSC::CallLinkStatus::couldTakeSlowPath):
        (JSC::CallLinkStatus::callTarget):
        * bytecode/GetByIdStatus.cpp: Added.
        (JSC::GetByIdStatus::computeFor):
        * bytecode/GetByIdStatus.h: Added.
        (JSC::GetByIdStatus::GetByIdStatus):
        (JSC::GetByIdStatus::state):
        (JSC::GetByIdStatus::isSet):
        (JSC::GetByIdStatus::operator!):
        (JSC::GetByIdStatus::isSimpleDirect):
        (JSC::GetByIdStatus::takesSlowPath):
        (JSC::GetByIdStatus::makesCalls):
        (JSC::GetByIdStatus::structureSet):
        (JSC::GetByIdStatus::offset):
        * bytecode/MethodCallLinkStatus.cpp: Added.
        (JSC::MethodCallLinkStatus::computeFor):
        * bytecode/MethodCallLinkStatus.h: Added.
        (JSC::MethodCallLinkStatus::MethodCallLinkStatus):
        (JSC::MethodCallLinkStatus::isSet):
        (JSC::MethodCallLinkStatus::operator!):
        (JSC::MethodCallLinkStatus::needsPrototypeCheck):
        (JSC::MethodCallLinkStatus::structure):
        (JSC::MethodCallLinkStatus::prototypeStructure):
        (JSC::MethodCallLinkStatus::function):
        (JSC::MethodCallLinkStatus::prototype):
        * bytecode/PutByIdStatus.cpp: Added.
        (JSC::PutByIdStatus::computeFor):
        * bytecode/PutByIdStatus.h: Added.
        (JSC::PutByIdStatus::PutByIdStatus):
        (JSC::PutByIdStatus::state):
        (JSC::PutByIdStatus::isSet):
        (JSC::PutByIdStatus::operator!):
        (JSC::PutByIdStatus::isSimpleReplace):
        (JSC::PutByIdStatus::isSimpleTransition):
        (JSC::PutByIdStatus::takesSlowPath):
        (JSC::PutByIdStatus::oldStructure):
        (JSC::PutByIdStatus::newStructure):
        (JSC::PutByIdStatus::structureChain):
        (JSC::PutByIdStatus::offset):
        * bytecode/StructureSet.h: Added.
        (JSC::StructureSet::StructureSet):
        (JSC::StructureSet::clear):
        (JSC::StructureSet::add):
        (JSC::StructureSet::addAll):
        (JSC::StructureSet::remove):
        (JSC::StructureSet::contains):
        (JSC::StructureSet::isSubsetOf):
        (JSC::StructureSet::isSupersetOf):
        (JSC::StructureSet::size):
        (JSC::StructureSet::at):
        (JSC::StructureSet::operator[]):
        (JSC::StructureSet::last):
        (JSC::StructureSet::predictionFromStructures):
        (JSC::StructureSet::operator==):
        (JSC::StructureSet::dump):
        * dfg/DFGAbstractValue.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGStructureSet.h: Removed.

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

        JIT compilation should not require ExecState
        https://bugs.webkit.org/show_bug.cgi?id=76729
        <rdar://problem/10731545>

        Reviewed by Gavin Barraclough.
        
        Changed the relevant JIT driver functions to take JSGlobalData& instead of
        ExecState*, since really they just needed the global data.

        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        (JSC::DFG::tryCompile):
        (JSC::DFG::tryCompileFunction):
        * dfg/DFGDriver.h:
        (JSC::DFG::tryCompile):
        (JSC::DFG::tryCompileFunction):
        * jit/JITDriver.h:
        (JSC::jitCompileIfAppropriate):
        (JSC::jitCompileFunctionIfAppropriate):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):

2012-01-20  David Levin  <levin@chromium.org>

        Make OwnPtr<HDC> work for the Chromium Windows port.
        https://bugs.webkit.org/show_bug.cgi?id=76738

        Reviewed by Jian Li.

        * JavaScriptCore.gyp/JavaScriptCore.gyp: Added OwnPtrWin.cpp to the
        Chromium Windows build.
        * wtf/OwnPtrCommon.h: Changed from platform WIN to OS WIN for
        OwnPtr<HDC> and similar constructs.

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

        Removed some regexp entry boilerplate code
        https://bugs.webkit.org/show_bug.cgi?id=76687

        Reviewed by Darin Adler.
        
        1% - 2% speedup on regexp tests, no change overall.

        * runtime/RegExp.cpp:
        (JSC::RegExp::match):
            - ASSERT that our startIndex is non-negative, because anything less
            would be uncivilized.
            
            - ASSERT that our input is not the null string for the same reason.

            - No need to test for startOffset being past the end of the string,
            since the regular expression engine will do this test for us.

            - No need to initialize the output vector, since the regular expression
            engine will fill it in for us.

        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::interpret):
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::compile):
        
            RegExp used to do these jobs for us, but now we do them for ourselves
            because it's a better separation of concerns, and the JIT can do them
            more efficiently than C++ code:

            - Test for "past the end" before doing any matching -- otherwise
            a* will match with zero length past the end of the string, which is wrong.

            - Initialize the output vector before doing any matching.

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

        Build fix for no-DFG configuration.
        Needed for <rdar://problem/10727689>.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitProfiledOpcode):
        * jit/JIT.h:
        (JSC::JIT::emitValueProfilingSite):

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

        Bytecode instructions that may have value profiling should have a direct inline
        link to the ValueProfile instance
        https://bugs.webkit.org/show_bug.cgi?id=76682
        <rdar://problem/10727689>

        Reviewed by Sam Weinig.
        
        Each opcode that gets value profiled now has a link to its ValueProfile. This
        required rationalizing the emission of value profiles for opcode combos, like
        op_method_check/op_get_by_id and op_call/op_call_put_result. It only makes
        sense for one of them to have a value profile link, and it makes most sense
        for it to be the one that actually sets the result. The previous behavior was
        to have op_method_check profile for op_get_by_id when they were used together,
        but otherwise for op_get_by_id to have its own profiles. op_call already did
        the right thing; all profiling was done by op_call_put_result.
        
        But rationalizing this code required breaking some of the natural boundaries
        that the code had; for instance the code in DFG that emits a GetById in place
        of both op_method_check and op_get_by_id must now know that it's the latter of
        those that has the value profile, while the first of those constitutes the OSR
        target. Hence each CodeOrigin must now have two bytecode indices - one for
        OSR exit and one for profiling.
        
        Finally this change required some refiddling of our optimization heuristics,
        because now all code blocks have "more instructions" due to the value profile
        slots.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::printGetByIdOp):
        (JSC::CodeBlock::dump):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::valueProfileForBytecodeOffset):
        * bytecode/CodeOrigin.h:
        (JSC::CodeOrigin::CodeOrigin):
        (JSC::CodeOrigin::bytecodeIndexForValueProfile):
        * bytecode/Instruction.h:
        (JSC::Instruction::Instruction):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitProfiledOpcode):
        (JSC::BytecodeGenerator::emitResolve):
        (JSC::BytecodeGenerator::emitGetScopedVar):
        (JSC::BytecodeGenerator::emitResolveBase):
        (JSC::BytecodeGenerator::emitResolveBaseForPut):
        (JSC::BytecodeGenerator::emitResolveWithBase):
        (JSC::BytecodeGenerator::emitResolveWithThis):
        (JSC::BytecodeGenerator::emitGetById):
        (JSC::BytecodeGenerator::emitGetByVal):
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitCallVarargs):
        (JSC::BytecodeGenerator::emitConstruct):
        * bytecompiler/BytecodeGenerator.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::currentCodeOrigin):
        (JSC::DFG::ByteCodeParser::addCall):
        (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
        (JSC::DFG::ByteCodeParser::getPrediction):
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::valueProfileFor):
        * jit/JIT.h:
        (JSC::JIT::emitValueProfilingSite):
        * jit/JITCall.cpp:
        (JSC::JIT::emit_op_call_put_result):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::emit_op_call_put_result):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitValueProfilingSite):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_resolve):
        (JSC::JIT::emit_op_resolve_base):
        (JSC::JIT::emit_op_resolve_skip):
        (JSC::JIT::emit_op_resolve_global):
        (JSC::JIT::emitSlow_op_resolve_global):
        (JSC::JIT::emit_op_resolve_with_base):
        (JSC::JIT::emit_op_resolve_with_this):
        (JSC::JIT::emitSlow_op_resolve_global_dynamic):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_resolve):
        (JSC::JIT::emit_op_resolve_base):
        (JSC::JIT::emit_op_resolve_skip):
        (JSC::JIT::emit_op_resolve_global):
        (JSC::JIT::emitSlow_op_resolve_global):
        (JSC::JIT::emit_op_resolve_with_base):
        (JSC::JIT::emit_op_resolve_with_this):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::emitSlow_op_method_check):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emit_op_get_scoped_var):
        (JSC::JIT::emit_op_get_global_var):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::emitSlow_op_method_check):
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emit_op_get_scoped_var):
        (JSC::JIT::emit_op_get_global_var):
        * jit/JITStubCall.h:
        (JSC::JITStubCall::callWithValueProfiling):
        * runtime/Options.cpp:
        (JSC::Options::initializeOptions):

2012-01-20  ChangSeok Oh  <shivamidow@gmail.com>

        undefined reference to symbol eina_module_free
        https://bugs.webkit.org/show_bug.cgi?id=76681

        Reviewed by Martin Robinson.

        eina_module_free has been used without including eina libraries after r104936.

        * wtf/PlatformEfl.cmake: Add EINA_LIBRARIES.

2012-01-19  Tony Chang  <tony@chromium.org>

        [chromium] Remove an obsolete comment about features.gypi
        https://bugs.webkit.org/show_bug.cgi?id=76643

        There can be only one features.gypi.

        Reviewed by James Robinson.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

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

        Implicit creation of a regular expression should eagerly check for syntax errors
        https://bugs.webkit.org/show_bug.cgi?id=76642

        Reviewed by Oliver Hunt.
        
        This is a correctness fix and a slight optimization.

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch): Check for syntax errors because that's the
        correct behavior.

        * runtime/RegExp.cpp:
        (JSC::RegExp::match): ASSERT that we aren't a syntax error. (One line
        of code change, many lines of indentation change.)

        Since we have no clients that try to match a RegExp that is a syntax error,
        let's optimize out the check.

2012-01-19  Mark Hahnenberg  <mhahnenberg@apple.com>

        Implement a new allocator for backing stores
        https://bugs.webkit.org/show_bug.cgi?id=75181

        Reviewed by Filip Pizlo.

        We want to move away from using fastMalloc for the backing stores for 
        some of our objects (e.g. JSArray, JSObject, JSString, etc).  These backing 
        stores have a nice property in that they only have a single owner (i.e. a 
        single pointer to them at any one time).  One way that we can take advantage 
        of this property is to implement a simple bump allocator/copying collector, 
        which will run alongside our normal mark/sweep collector, that only needs to 
        update the single owner pointer rather than having to redirect an arbitrary 
        number of pointers in from-space to to-space.

        This plan can give us a number of benefits. We can beat fastMalloc in terms 
        of both performance and memory usage, we can track how much memory we're using 
        far more accurately than our rough estimation now through the use of 
        reportExtraMemoryCost, and we can allocate arbitrary size objects (as opposed 
        to being limited to size classes like we have been historically). This is also 
        another step toward moving away from lazy destruction, which will improve our memory footprint.

        We start by creating said allocator and moving the ArrayStorage for JSArray 
        to use it rather than fastMalloc.

        The design of the collector is as follows:
        Allocation:
        -The collector allocates 64KB chunks from the OS to use for object allocation.
        -Each chunk contains an offset, a flag indicating if the block has been pinned, 
         and a payload, along with next and prev pointers so that they can be put in DoublyLinkedLists.
        -Any allocation greater than 64KB gets its own separate oversize block, which 
         is managed separately from the rest.
        -If the allocator receives a request for more than the remaining amount in the 
         current block, it grabs a fresh block.
        -Grabbing a fresh block means grabbing one off of the global free list (which is now 
         shared between the mark/sweep allocator and the bump allocator) if there is one. 
         If there isn't a new one we do one of two things: allocate a new block from the OS 
         if we're not ready for a GC yet, or run a GC and then try again. If we still don't 
         have enough space after the GC, we allocate a new block from the OS.

        Garbage collection:
        -At the start of garbage collection during conservative stack scanning, if we encounter 
         what appears to be a pointer to a bump-allocated block of memory, we pin that block so 
         that it will not be copied for this round of collection.
        -We also pin any oversize blocks that we encounter, which effectively doubles as a 
         "mark bit" for that block. Any oversize blocks that aren't pinned at the end of copying 
         are given back to the OS.
        -Marking threads are now also responsible for copying bump-allocated objects to newSpace
        -Each marking thread has a private 64KB block into which it copies bump-allocated objects that it encounters.
        -When that block fills up, the marking thread gives it back to the allocator and requests a new one.
        -When all marking has concluded, each thread gives back its copy block, even if it isn't full.
        -At the conclusion of copying (which is done by the end of the marking phase), we un-pin 
         any pinned blocks and give any blocks left in from-space to the global free list.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * heap/AllocationSpace.cpp:
        (JSC::AllocationSpace::allocateSlowCase):
        (JSC::AllocationSpace::allocateBlock):
        (JSC::AllocationSpace::freeBlocks):
        * heap/AllocationSpace.h:
        (JSC::AllocationSpace::waterMark):
        * heap/BumpBlock.h: Added.
        (JSC::BumpBlock::BumpBlock):
        * heap/BumpSpace.cpp: Added.
        (JSC::BumpSpace::tryAllocateSlowCase):
        * heap/BumpSpace.h: Added.
        (JSC::BumpSpace::isInCopyPhase):
        (JSC::BumpSpace::totalMemoryAllocated):
        (JSC::BumpSpace::totalMemoryUtilized):
        * heap/BumpSpaceInlineMethods.h: Added.
        (JSC::BumpSpace::BumpSpace):
        (JSC::BumpSpace::init):
        (JSC::BumpSpace::contains):
        (JSC::BumpSpace::pin):
        (JSC::BumpSpace::startedCopying):
        (JSC::BumpSpace::doneCopying):
        (JSC::BumpSpace::doneFillingBlock):
        (JSC::BumpSpace::recycleBlock):
        (JSC::BumpSpace::getFreshBlock):
        (JSC::BumpSpace::borrowBlock):
        (JSC::BumpSpace::addNewBlock):
        (JSC::BumpSpace::allocateNewBlock):
        (JSC::BumpSpace::fitsInBlock):
        (JSC::BumpSpace::fitsInCurrentBlock):
        (JSC::BumpSpace::tryAllocate):
        (JSC::BumpSpace::tryAllocateOversize):
        (JSC::BumpSpace::allocateFromBlock):
        (JSC::BumpSpace::tryReallocate):
        (JSC::BumpSpace::tryReallocateOversize):
        (JSC::BumpSpace::isOversize):
        (JSC::BumpSpace::isPinned):
        (JSC::BumpSpace::oversizeBlockFor):
        (JSC::BumpSpace::blockFor):
        * heap/ConservativeRoots.cpp:
        (JSC::ConservativeRoots::ConservativeRoots):
        (JSC::ConservativeRoots::genericAddPointer):
        (JSC::ConservativeRoots::add):
        * heap/ConservativeRoots.h:
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::blockFreeingThreadMain):
        (JSC::Heap::reportExtraMemoryCostSlowCase):
        (JSC::Heap::getConservativeRegisterRoots):
        (JSC::Heap::markRoots):
        (JSC::Heap::collect):
        (JSC::Heap::releaseFreeBlocks):
        * heap/Heap.h:
        (JSC::Heap::waterMark):
        (JSC::Heap::highWaterMark):
        (JSC::Heap::setHighWaterMark):
        (JSC::Heap::tryAllocateStorage):
        (JSC::Heap::tryReallocateStorage):
        * heap/HeapBlock.h: Added.
        (JSC::HeapBlock::HeapBlock):
        * heap/MarkStack.cpp:
        (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
        (JSC::SlotVisitor::drain):
        (JSC::SlotVisitor::drainFromShared):
        (JSC::SlotVisitor::startCopying):
        (JSC::SlotVisitor::allocateNewSpace):
        (JSC::SlotVisitor::copy):
        (JSC::SlotVisitor::copyAndAppend):
        (JSC::SlotVisitor::doneCopying):
        * heap/MarkStack.h:
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::recycle):
        (JSC::MarkedBlock::MarkedBlock):
        * heap/MarkedBlock.h:
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace):
        * heap/MarkedSpace.h:
        (JSC::MarkedSpace::allocate):
        (JSC::MarkedSpace::forEachBlock):
        (JSC::MarkedSpace::SizeClass::resetAllocator):
        * heap/SlotVisitor.h:
        (JSC::SlotVisitor::SlotVisitor):
        * heap/TinyBloomFilter.h:
        (JSC::TinyBloomFilter::reset):
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        (JSC::JSArray::finishCreation):
        (JSC::JSArray::tryFinishCreationUninitialized):
        (JSC::JSArray::~JSArray):
        (JSC::JSArray::enterSparseMode):
        (JSC::JSArray::defineOwnNumericProperty):
        (JSC::JSArray::setLengthWritable):
        (JSC::JSArray::getOwnPropertySlotByIndex):
        (JSC::JSArray::getOwnPropertyDescriptor):
        (JSC::JSArray::putByIndexBeyondVectorLength):
        (JSC::JSArray::deletePropertyByIndex):
        (JSC::JSArray::getOwnPropertyNames):
        (JSC::JSArray::increaseVectorLength):
        (JSC::JSArray::unshiftCountSlowCase):
        (JSC::JSArray::setLength):
        (JSC::JSArray::pop):
        (JSC::JSArray::unshiftCount):
        (JSC::JSArray::visitChildren):
        (JSC::JSArray::sortNumeric):
        (JSC::JSArray::sort):
        (JSC::JSArray::compactForSorting):
        (JSC::JSArray::subclassData):
        (JSC::JSArray::setSubclassData):
        (JSC::JSArray::checkConsistency):
        * runtime/JSArray.h:
        (JSC::JSArray::inSparseMode):
        (JSC::JSArray::isLengthWritable):
        * wtf/CheckedBoolean.h: Added.
        (CheckedBoolean::CheckedBoolean):
        (CheckedBoolean::~CheckedBoolean):
        (CheckedBoolean::operator bool):
        * wtf/DoublyLinkedList.h:
        (WTF::::push):
        * wtf/StdLibExtras.h:
        (WTF::isPointerAligned):

2012-01-19  Joi Sigurdsson  <joi@chromium.org>

        Enable use of precompiled headers in Chromium port on Windows.

        Bug 76381 - Use precompiled headers in Chromium port on Windows
        https://bugs.webkit.org/show_bug.cgi?id=76381

        Reviewed by Tony Chang.

        * JavaScriptCore.gyp/JavaScriptCore.gyp: Include WinPrecompile.gypi.

2012-01-18  Roland Takacs  <takacs.roland@stud.u-szeged.hu>

        Cross-platform processor core counter fix
        https://bugs.webkit.org/show_bug.cgi?id=76540

        Reviewed by Zoltan Herczeg.

        I attached "OS(FREEBSD)" to "#if OS(DARWIN) || OS(OPENBSD) || OS(NETBSD)"
        and I removed the OS checking macros from ParallelJobsGeneric.cpp because
        the NumberOfCores.cpp contains them for counting CPU cores.
        The processor core counter patch located at
        https://bugs.webkit.org/show_bug.cgi?id=76530

        * wtf/NumberOfCores.cpp:
        * wtf/ParallelJobsGeneric.cpp:

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

        Cross-platform processor core counter
        https://bugs.webkit.org/show_bug.cgi?id=76530

        Unreviewed cross-MinGW buildfix after r105270.

        * wtf/NumberOfCores.cpp: Use windows.h instead of Windows.h.

2012-01-18  Roland Takacs  <takacs.roland@stud.u-szeged.hu>

        Cross-platform processor core counter
        https://bugs.webkit.org/show_bug.cgi?id=76530

        Reviewed by Zoltan Herczeg.

        Two files have been created that include the processor core counter function.
        It used to be in ParallelJobsGeneric.h/cpp before.

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/Options.cpp:
        (JSC::Options::initializeOptions):
        * wtf/CMakeLists.txt:
        * wtf/NumberOfCores.cpp: Added.
        (WTF::numberOfProcessorCores):
        * wtf/NumberOfCores.h: Added.
        * wtf/ParallelJobsGeneric.cpp:
        (WTF::ParallelEnvironment::ParallelEnvironment):
        * wtf/ParallelJobsGeneric.h:

2012-01-18  Balazs Kelemen  <kbalazs@webkit.org>

        [Qt] Consolidate layout test crash logging
        https://bugs.webkit.org/show_bug.cgi?id=75088

        Reviewed by Simon Hausmann.

        Move backtrace generating logic into WTFReportBacktrace
        and add a way to deinstall signal handlers if we know
        that we have already printed the backtrace.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/Assertions.cpp:
        (WTFLogLocker::WTFReportBacktrace):
        (WTFLogLocker::WTFSetCrashHook):
        (WTFLogLocker::WTFInvokeCrashHook):
        * wtf/Assertions.h:

2012-01-17  Geoffrey Garen  <ggaren@apple.com>

        Factored out some code into a helper function.
        
        I think this might help getting rid of omit-frame-pointer.

        Reviewed by Sam Weinig.
        
        No benchmark change.

        * runtime/StringPrototype.cpp:
        (JSC::removeUsingRegExpSearch): Moved to here...
        (JSC::replaceUsingRegExpSearch): ...from here.

2012-01-17  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Uint8ClampedArray support
        https://bugs.webkit.org/show_bug.cgi?id=74455

        Reviewed by Filip Pizlo.

        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/PredictedType.cpp:
        (JSC::predictionToString):
        (JSC::predictionFromClassInfo):
        * bytecode/PredictedType.h:
        (JSC::isUint8ClampedArrayPrediction):
        (JSC::isActionableMutableArrayPrediction):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::initialize):
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateUint8ClampedArray):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::clampDoubleToByte):
        (JSC::DFG::compileClampIntegerToByte):
        (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
        (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * runtime/JSCell.h:
        * runtime/JSGlobalData.h:
        * wtf/Forward.h:
        * wtf/Uint8Array.h:
        * wtf/Uint8ClampedArray.h: Added.
        (WTF::Uint8ClampedArray::set):
        (WTF::Uint8ClampedArray::create):
        (WTF::Uint8ClampedArray::Uint8ClampedArray):
        (WTF::Uint8ClampedArray::subarray):

2012-01-17  Sam Weinig  <sam@webkit.org>

        Add helper macro for forward declaring objective-c classes
        https://bugs.webkit.org/show_bug.cgi?id=76485

        Reviewed by Anders Carlsson.

        * wtf/Compiler.h:
        Add OBJC_CLASS macro which helps reduce code when forward declaring an
        objective-c class in a header which can be included from both Objective-C
        and non-Objective-C files.

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

        DFG should be able to do JS and custom getter caching
        https://bugs.webkit.org/show_bug.cgi?id=76361

        Reviewed by Csaba Osztrogonác.
        
        Fix for 32-bit.

        * dfg/DFGRepatch.cpp:
        (JSC::DFG::tryBuildGetByIDList):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        DFG should be able to do JS and custom getter caching
        https://bugs.webkit.org/show_bug.cgi?id=76361
        <rdar://problem/10698060>

        Reviewed by Geoff Garen.
        
        Added the ability to cache JS getter calls and custom getter calls in the DFG.
        Most of this is pretty mundane, since the old JIT supported this functionality
        as well. But a couple interesting things had to happen:
        
        - There are now two variants of GetById: GetById, which works as before, and
          GetByIdFlush, which flushes registers prior to doing the GetById. Only
          GetByIdFlush can be used for caching getters. We detect which GetById style
          to use by looking at the inline caches of the old JIT.
        
        - Exception handling for getter calls planted in stubs uses a separate lookup
          handler routine, which uses the CodeOrigin stored in the StructureStubInfo.
          
        This is a 40% speed-up in the Dromaeo DOM Traversal average. It removes all of
        the DFG regressions we saw in Dromaeo. This is neutral on SunSpider, V8, and
        Kraken.

        * bytecode/StructureStubInfo.h:
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGAssemblyHelpers.h:
        (JSC::DFG::AssemblyHelpers::emitExceptionCheck):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::willNeedFlush):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCCallHelpers.h:
        (JSC::DFG::CCallHelpers::setupResults):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::PropertyAccessRecord::PropertyAccessRecord):
        (JSC::DFG::JITCompiler::addExceptionCheck):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasIdentifier):
        (JSC::DFG::Node::hasHeapPrediction):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::tryCacheGetByID):
        (JSC::DFG::tryBuildGetByIDList):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheckSetResult):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetById):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetById):
        (JSC::DFG::SpeculativeJIT::compile):

2012-01-16  Jon Lee  <jonlee@apple.com>

        Build fix for r105086.

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

2012-01-16  Jon Lee  <jonlee@apple.com>

        Remove HTML notifications support on Mac
        https://bugs.webkit.org/show_bug.cgi?id=76401
        <rdar://problem/10589881>

        Reviewed by Sam Weinig.

        * wtf/Platform.h: Define ENABLE_HTML_NOTIFICATIONS macro.

2012-01-16  Zeno Albisser  <zeno@webkit.org>

        [Qt] Fix QT_VERSION related warnings when building on Mac OS X
        https://bugs.webkit.org/show_bug.cgi?id=76340

        This bug was caused by r104826.
        As already mentioned for https://bugs.webkit.org/show_bug.cgi?id=57239
        we should not use "using namespace WebCore" in header files,
        because it might cause ambiguous references.
        This patch reverts the changes from r104826 and r104981
        and removes the "using namespace WebCore" statement from
        two header files.

        Reviewed by Tor Arne Vestbø.

        * wtf/Platform.h:

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

        Unreviewed. Fix make distcheck.

        * GNUmakefile.list.am: Fix typo.

2012-01-16  Pavel Heimlich  <tropikhajma@gmail.com>

        Solaris Studio supports alignment macros too
        https://bugs.webkit.org/show_bug.cgi?id=75453

        Reviewed by Hajime Morita.

        * wtf/Alignment.h:

2012-01-16  Yuqiang Xian  <yuqiang.xian@intel.com>

        Build fix on 32bit if verbose debug is enabled in DFG
        https://bugs.webkit.org/show_bug.cgi?id=76351

        Reviewed by Hajime Morita.

        Mostly change "%lu" to "%zu" to print a "size_t" variable.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::endBasicBlock):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::parseCodeBlock):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::predictArgumentTypes):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):

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

        The C calling convention logic in DFG::SpeculativeJIT should be available even
        when not generating code for the DFG speculative path
        https://bugs.webkit.org/show_bug.cgi?id=76355

        Reviewed by Dan Bernstein.
        
        Moved all of the logic for placing C call arguments into the right place (stack
        or registers) into a new class, DFG::CCallHelpers.  This class inherits from
        AssemblyHelpers, another DFG grab-bag of helper functions.  I could have moved
        this code into AssemblyHelpers, but decided against it, because I wanted to
        limit the number of methods each class in the JIT has.  Hence now we have a
        slightly odd organization of JIT classes in DFG: MacroAssembler (basic instruction
        emission) <= AssemblyHelpers (some additional JS smarts) <= CCallHelpers
        (understands calls to C functions) <= JITCompiler (can compile a graph to machine
        code).  Each of these except for JITCompiler can be reused for stub compilation.
        
        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGCCallHelpers.h: Added.
        (JSC::DFG::CCallHelpers::CCallHelpers):
        (JSC::DFG::CCallHelpers::resetCallArguments):
        (JSC::DFG::CCallHelpers::addCallArgument):
        (JSC::DFG::CCallHelpers::setupArguments):
        (JSC::DFG::CCallHelpers::setupArgumentsExecState):
        (JSC::DFG::CCallHelpers::setupArgumentsWithExecState):
        (JSC::DFG::CCallHelpers::setupTwoStubArgs):
        (JSC::DFG::CCallHelpers::setupStubArguments):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::JITCompiler):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callOperation):

2012-01-15  Pablo Flouret  <pablof@motorola.com>

        Fix compilation errors on build-webkit --debug --no-video on mac.
        https://bugs.webkit.org/show_bug.cgi?id=75867

        Reviewed by Philippe Normand.

        Make ENABLE_VIDEO_TRACK conditional on ENABLE_VIDEO, video track feature
        doesn't build without video.

        * wtf/Platform.h:

2012-01-14  David Levin  <levin@chromium.org>

        HWndDC should be in platform/win instead of wtf.
        https://bugs.webkit.org/show_bug.cgi?id=76314

        Reviewed by Sam Weinig.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:
        * JavaScriptCore.gypi:

2012-01-13  David Levin  <levin@chromium.org>

        check-webkit-style: should encourage the use of Own* classes for Windows DC.
        https://bugs.webkit.org/show_bug.cgi?id=76227

        Reviewed by Dirk Pranke.

        * wtf/win/HWndDCWin.h:
        (WTF::HwndDC::HwndDC): Add a way to do GetDCEx.
        There are no users, but I want to catch this in check-webkit-style
        and tell any users to use HwndDC to avoid leaks.

2012-01-13  David Levin  <levin@chromium.org>

        Header file is missing header guard.

        Reviewed by Dirk Pranke.

        * wtf/win/HWndDCWin.h: Added the guards.

2012-01-13  Andy Wingo  <wingo@igalia.com>

        Eval in strict mode does not need dynamic checks
        https://bugs.webkit.org/show_bug.cgi?id=76286

        Reviewed by Oliver Hunt.

        * runtime/JSActivation.cpp (JSC::JSActivation::JSActivation):
        Eval in strict mode cannot introduce variables, so it not impose
        the need for dynamic checks.

2012-01-13  David Levin  <levin@chromium.org>

        HWndDC is a better name than HwndDC.
        https://bugs.webkit.org/show_bug.cgi?id=76281

        Reviewed by Darin Adler.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:
        * JavaScriptCore.gypi:
        * wtf/win/HWndDCWin.h: Renamed from Source/JavaScriptCore/wtf/win/HwndDCWin.h.
        (WTF::HWndDC::HWndDC):
        (WTF::HWndDC::~HWndDC):
        (WTF::HWndDC::operator HDC):

2012-01-13  YoungTaeck Song  <youngtaeck.song@samsung.com>

        [EFL] Add OwnPtr specialization for Eina_Module.
        https://bugs.webkit.org/show_bug.cgi?id=76255

        Reviewed by Andreas Kling.

        Add an overload for deleteOwnedPtr(Eina_Module*) on EFL port.

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

2012-01-13  Yuqiang Xian  <yuqiang.xian@intel.com>

        Unreviewed build fix after r104787 if JIT_VERBOSE_OSR is defined

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

2012-01-12  Hajime Morrita  <morrita@chromium.org>

        JavaScriptCore: Mark all exported symbols in the header file automatically.
        https://bugs.webkit.org/show_bug.cgi?id=72855

        Reviewed by Darin Adler.

        Added WTF_EXPORT_PRIVATE and JS_EXPORT_PRIVATE based on JavaScriptCore.exp files.
        The change is generated by a tool calledListExportables (https://github.com/omo/ListExportables)

        * API/OpaqueJSString.h:
        * bytecode/CodeBlock.h:
        * bytecode/SamplingTool.h:
        * debugger/Debugger.h:
        * debugger/DebuggerActivation.h:
        * debugger/DebuggerCallFrame.h:
        * heap/AllocationSpace.h:
        * heap/HandleHeap.h:
        * heap/Heap.h:
        * heap/MachineStackMarker.h:
        * heap/MarkStack.h:
        * heap/VTableSpectrum.h:
        * heap/WriteBarrierSupport.h:
        * parser/Nodes.h:
        * parser/ParserArena.h:
        * profiler/Profile.h:
        * runtime/ArgList.h:
        * runtime/CallData.h:
        * runtime/Completion.h:
        * runtime/ConstructData.h:
        * runtime/DateInstance.h:
        * runtime/Error.h:
        * runtime/ExceptionHelpers.h:
        * runtime/FunctionConstructor.h:
        * runtime/Identifier.h:
        * runtime/InitializeThreading.h:
        * runtime/InternalFunction.h:
        * runtime/JSArray.h:
        * runtime/JSByteArray.h:
        * runtime/JSCell.h:
        * runtime/JSFunction.h:
        * runtime/JSGlobalData.cpp:
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.h:
        * runtime/JSGlobalThis.h:
        * runtime/JSLock.h:
        * runtime/JSObject.h:
        * runtime/JSString.h:
        * runtime/JSValue.h:
        * runtime/JSVariableObject.h:
        * runtime/Lookup.h:
        * runtime/MemoryStatistics.h:
        * runtime/ObjectPrototype.h:
        * runtime/Options.h:
        * runtime/PropertyDescriptor.h:
        * runtime/PropertyNameArray.h:
        * runtime/PropertySlot.h:
        * runtime/RegExp.h:
        * runtime/RegExpObject.h:
        * runtime/SamplingCounter.h:
        * runtime/SmallStrings.h:
        * runtime/StringObject.h:
        * runtime/Structure.h:
        * runtime/TimeoutChecker.h:
        * runtime/UString.h:
        * runtime/WriteBarrier.h:
        * wtf/ArrayBufferView.h:
        * wtf/ByteArray.h:
        * wtf/CryptographicallyRandomNumber.h:
        * wtf/CurrentTime.h:
        * wtf/DateMath.h:
        * wtf/DecimalNumber.h:
        * wtf/FastMalloc.cpp:
        * wtf/FastMalloc.h:
        * wtf/MD5.h:
        * wtf/MainThread.h:
        * wtf/MetaAllocator.h:
        * wtf/MetaAllocatorHandle.h:
        * wtf/OSAllocator.h:
        * wtf/PageBlock.h:
        * wtf/RandomNumber.h:
        * wtf/RefCountedLeakCounter.h:
        * wtf/SHA1.h:
        * wtf/Threading.cpp:
        * wtf/Threading.h:
        * wtf/ThreadingPrimitives.h:
        * wtf/WTFThreadData.h:
        * wtf/dtoa.h:
        * wtf/text/AtomicString.h:
        * wtf/text/CString.h:
        * wtf/text/StringBuilder.h:
        * wtf/text/StringImpl.h:
        * wtf/text/WTFString.h:
        * wtf/unicode/Collator.h:
        * wtf/unicode/UTF8.h:
        * yarr/Yarr.h:
        * yarr/YarrPattern.h:

2012-01-12  MORITA Hajime  <morrita@google.com>

        [Chromium] JSExportMacros.h should be visible.
        https://bugs.webkit.org/show_bug.cgi?id=76147

        Reviewed by Tony Chang.

        * config.h:

2012-01-12  David Levin  <levin@chromium.org>

        HwndDC is a better name than OwnGetDC.
        https://bugs.webkit.org/show_bug.cgi?id=76235

        Reviewed by Dmitry Titov.

        This is a better name for two reasons:
        1. "Own" implies "delete". In this case, the final call is a release (ReleaseDC).
        2. "Ref" would be a better name due to the release but the RefPtr (and OwnPtr)
           classes always take something to hold on to. In this case, the object (the DC)
           is created by the class once it is given a Window to ensure that the HDC
           was actually created using GetDC.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:
        * JavaScriptCore.gypi:
        * wtf/win/HwndDCWin.h: Renamed from Source/JavaScriptCore/wtf/win/OwnGetDCWin.h.
        (WTF::HwndDC::HwndDC):
        (WTF::HwndDC::~HwndDC):
        (WTF::HwndDC::operator HDC):

2012-01-12  Gavin Barraclough  <barraclough@apple.com>

        Clean up putDirect (part 2)
        https://bugs.webkit.org/show_bug.cgi?id=76232

        Reviewed by Sam Weinig.

        Rename putWithAttributes to putDirectVirtual, to identify that this
        has the same unchecked-DefineOwnProperty behaviour, change putDirectInternal
        to be templated on an enum indicating which behaviour it is supposed to be
        implementing, and change clients that are defining properties to call
        putDirectInternal correctly.

        * API/JSObjectRef.cpp:
        (JSObjectSetProperty):
        * JavaScriptCore.exp:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::putDirectVirtual):
        * debugger/DebuggerActivation.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        * runtime/ClassInfo.h:
        * runtime/Error.cpp:
        (JSC::addErrorInfo):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::putDirectVirtual):
        * runtime/JSActivation.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::putDirectVirtual):
        * runtime/JSCell.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::putDirectVirtual):
        * runtime/JSGlobalObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
        (JSC::JSObject::putDirectVirtual):
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::initializeGetterSetterProperty):
        (JSC::JSObject::defineSetter):
        (JSC::putDescriptor):
        * runtime/JSObject.h:
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::putOwnDataProperty):
        (JSC::JSObject::putDirect):
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::putDirectVirtual):
        * runtime/JSStaticScopeObject.h:
        * runtime/JSVariableObject.cpp:
        (JSC::JSVariableObject::putDirectVirtual):
        * runtime/JSVariableObject.h:

2012-01-12  Gavin Barraclough  <barraclough@apple.com>

        Clean up putDirect (part 1)
        https://bugs.webkit.org/show_bug.cgi?id=76232

        Reviewed by Sam Weinig.

        putDirect has ambiguous semantics, clean these up a bit.

        putDirect generally behaves a bit like a fast defineOwnProperty, but one that
        always creates the property, with no checking to validate the put it permitted.

        It also encompasses two slightly different behaviors.
        (1) a fast form of put for JSActivation, which doesn't have to handle searching
            the prototype chain, getter/setter properties, or the magic __proto__ value.
            Break this out as a new method, 'putOwnDataProperty'.
        (2) the version of putDirect on JSValue will also check for overwriting ReadOnly
            values, in strict mode. This is, however, not so smart on a few level, since
            it is only called from op_put_by_id with direct set, which is only used with
            an object as the base, and is only used to put new properties onto objects.

        * dfg/DFGOperations.cpp:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::put):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertySlot):
        * runtime/JSObject.h:
        (JSC::JSObject::putOwnDataProperty):
        * runtime/JSValue.h:

2012-01-12  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=76141
        defineSetter/defineGetter may fail to update Accessor attribute

        Reviewed by Oliver Hunt.

        * runtime/JSObject.cpp:
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::initializeGetterSetterProperty):
        (JSC::JSObject::defineSetter):
        * runtime/Structure.cpp:
        (JSC::Structure::attributeChangeTransition):
        * runtime/Structure.h:

2012-01-12  David Levin  <levin@chromium.org>

        [chromium] Fix DC leak in WebScreenInfoFactory.
        https://bugs.webkit.org/show_bug.cgi?id=76203

        Reviewed by Dmitry Titov.

        * JavaScriptCore.gyp/JavaScriptCore.gyp: Added OwnGetDCWin.h
        * JavaScriptCore.gypi: Added OwnGetDCWin.h
        * JavaScriptCore/wtf/win/OwnGetDCWin.h: Made an owner class for GetDC which needs ReleaseDC as opposed to DeleteDC.

2012-01-11  Gavin Barraclough  <barraclough@apple.com>

        Allow accessor get/set property to be set to undefined
        https://bugs.webkit.org/show_bug.cgi?id=76148

        Reviewed by Oliver Hunt.

        AccessorDescriptor properties may have their get & set properties defined to reference a function
        (Callable object) or be set to undefined. Valid PropertyDescriptors created by toPropertyDescriptor
        (defined from JS code via Object.defineProperty, etc) have get and set properties that are in one of
        three states (1) nonexistent, (2) set to undefined, or (3) a function (any Callable object).

        On the PropertyDescriptor object these three states are represneted by JSValue(), jsUndefined(), and
        any JSObject* (with a constraint that this must be callable).

        Logically the get/set property of an accessor descriptor on an object might be in any of the three
        states above, but in practice there is no way to distinguish between the first two states. As such
        we stor the get/set values in property storage in a JSObject* field, with 0 indicating absent or
        undefined. When unboxing to a PropertyDescriptor, map this back to a JS undefined value.

        * runtime/GetterSetter.h:
        (JSC::GetterSetter::setGetter):
        (JSC::GetterSetter::setSetter):
            - Allow the getter/setter to be cleared.
        * runtime/JSArray.cpp:
        (JSC::JSArray::putDescriptor):
            - Changed to call getterObject/setterObject.
        (JSC::JSArray::defineOwnNumericProperty):
            - Added ASSERT.
        * runtime/JSObject.cpp:
        (JSC::putDescriptor):
        (JSC::JSObject::defineOwnProperty):
            - Changed to call getterObject/setterObject.
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorGetOwnPropertyDescriptor):
            - getter/setter values read from properties on object are never missing, they will now be set as undefined by 'setDescriptor'.
        (JSC::toPropertyDescriptor):
            - Do not translate undefined->empty, this loses an important distinction between a get/set property being absent, or being explicitly set to undefined.
        * runtime/PropertyDescriptor.cpp:
        (JSC::PropertyDescriptor::getterObject):
        (JSC::PropertyDescriptor::setterObject):
            - Accessors to convert the get/set property to an object pointer, converting undefined to 0.
        (JSC::PropertyDescriptor::setDescriptor):
        (JSC::PropertyDescriptor::setAccessorDescriptor):
            - Translate a getter/setter internally represented at 0 to undefined, indicating that it is present.
        * runtime/PropertyDescriptor.h:
            - Declare getterObject/setterObject.

2012-01-12  Zeno Albisser  <zeno@webkit.org>

        [Qt][WK2][Mac] Conflict of MacTypes.h defining a Fixed type after r104560.
        https://bugs.webkit.org/show_bug.cgi?id=76175

        Defining ENABLE_CSS_FILTERS leads to ambiguous references
        due to MacTypes.h being included.
        Defining CF_OPEN_SOURCE works around this problem.

        Reviewed by Simon Hausmann.

        * wtf/Platform.h:

2012-01-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Make the new WTF module build on Qt
        https://bugs.webkit.org/show_bug.cgi?id=76163

        Reviewed by Tor Arne Vestbø.

        * JavaScriptCore.pro: Removed wtf from the subdirs to build.

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

        CodeBlock::m_executeCounter should be renamed to CodeBlock::m_jitExecuteCounter
        https://bugs.webkit.org/show_bug.cgi?id=76144
        <rdar://problem/10681711>

        Rubber stamped by Gavin Barraclough.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addressOfJITExecuteCounter):
        (JSC::CodeBlock::offsetOfJITExecuteCounter):
        (JSC::CodeBlock::jitExecuteCounter):
        (JSC::CodeBlock::optimizeNextInvocation):
        (JSC::CodeBlock::dontOptimizeAnytimeSoon):
        (JSC::CodeBlock::optimizeAfterWarmUp):
        (JSC::CodeBlock::optimizeAfterLongWarmUp):
        (JSC::CodeBlock::optimizeSoon):
        * dfg/DFGOSRExitCompiler32_64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOSRExitCompiler64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * jit/JIT.cpp:
        (JSC::JIT::emitOptimizationCheck):

2012-01-11  Gavin Barraclough  <barraclough@apple.com>

        Merge 'Getter'/'Setter' attributes into 'Accessor'
        https://bugs.webkit.org/show_bug.cgi?id=76141

        Reviewed by Filip Pizlo.

        These are currently ambiguous (and used inconsistently). It would logically appear
        that either being bit set implies that the corresponding type of accessor is present
        but (a) we don't correctly enforce this, and (b) this means the attributes would not
        be able to distinguish between a data descriptor and an accessor descriptor with
        neither a getter nor setter defined (which is a descriptor permissible under the spec).
        This ambiguity would lead to unsafe property caching behavior (though this does not
        represent an actual current bug, since we are currently unable to create descriptors
        that have neither a getter nor setter, it just prevents us from doing so).

        * runtime/Arguments.cpp:
        (JSC::Arguments::createStrictModeCallerIfNecessary):
        (JSC::Arguments::createStrictModeCalleeIfNecessary):
        * runtime/JSArray.cpp:
        (JSC::SparseArrayValueMap::put):
        (JSC::JSArray::putDescriptor):
        * runtime/JSBoundFunction.cpp:
        (JSC::JSBoundFunction::finishCreation):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertySlot):
        (JSC::JSFunction::getOwnPropertyDescriptor):
        * runtime/JSObject.cpp:
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::initializeGetterSetterProperty):
        (JSC::JSObject::defineSetter):
        (JSC::putDescriptor):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorDefineProperty):
        * runtime/PropertyDescriptor.cpp:
        (JSC::PropertyDescriptor::setDescriptor):
        (JSC::PropertyDescriptor::setAccessorDescriptor):
        (JSC::PropertyDescriptor::setSetter):
        (JSC::PropertyDescriptor::setGetter):
        (JSC::PropertyDescriptor::attributesOverridingCurrent):

2012-01-11  Gavin Barraclough  <barraclough@apple.com>

        Object.defineProperty([], 'length', {}) should not make length read-only
        https://bugs.webkit.org/show_bug.cgi?id=76097

        Reviewed by Oliver Hunt.

        * runtime/JSArray.cpp:
        (JSC::JSArray::defineOwnProperty):
            - We should be checking writablePresent().

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

        Code duplication for invoking the JIT and DFG should be reduced
        https://bugs.webkit.org/show_bug.cgi?id=76117
        <rdar://problem/10680189>

        Rubber stamped by Geoff Garen.

        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jit/JITDriver.h: Added.
        (JSC::jitCompileIfAppropriate):
        (JSC::jitCompileFunctionIfAppropriate):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):

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

        Bytecode dumping is broken for call opcodes (due to two new operands)
        https://bugs.webkit.org/show_bug.cgi?id=75886

        Reviewed by Oliver Hunt.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::printCallOp): Made a helper function, so I wouldn't have
        to fix this more than once. The helper function skips the extra two operands
        at the end of the opcode, used for optimization.
        
        (JSC::CodeBlock::dump): Used the helper function.

        * bytecode/CodeBlock.h: Declared the helper function.

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

        REGRESSION: d3 Bullet Charts demo doesn't work (call with argument assignment is broken)
        https://bugs.webkit.org/show_bug.cgi?id=75911

        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::emitNodeForLeftHandSide): Cleanup: No need to
        explicitly cast to our return type in C++.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::FunctionCallResolveNode::emitBytecode):
        (JSC::ApplyFunctionCallDotNode::emitBytecode): Make sure to copy our function
        into a temporary register before evaluating our arguments, since argument
        evaluation might include function calls or assignments that overwrite our callee by name.

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

        v8-regexp spends 35% of its time allocating and copying internal regexp results data
        https://bugs.webkit.org/show_bug.cgi?id=76079

        Reviewed by Geoffrey Garen.

        Added a new RegExpResults struct that has the input string, the number of
        subexpressions and the output vector.  Changed RegExpConstructor to
        include a RegExpConstructorPrivate instead of having a reference to one.
        Changed RegExpMatchesArray to include a RegExpResults instead of a 
        reference to a RegExpConstructorPrivate.  Created an overloaded assignment
        operator to assign a RegExpConstructorPrivate to a RegExpResults.
        Collectively this change is worth 24% performance improvement to v8-regexp.
        
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpResult::operator=):
        (JSC::RegExpConstructor::RegExpConstructor):
        (JSC::RegExpMatchesArray::RegExpMatchesArray):
        (JSC::RegExpMatchesArray::finishCreation):
        (JSC::RegExpMatchesArray::~RegExpMatchesArray):
        (JSC::RegExpMatchesArray::fillArrayInstance):
        (JSC::RegExpConstructor::arrayOfMatches):
        (JSC::RegExpConstructor::getBackref):
        (JSC::RegExpConstructor::getLastParen):
        (JSC::RegExpConstructor::getLeftContext):
        (JSC::RegExpConstructor::getRightContext):
        (JSC::RegExpConstructor::setInput):
        (JSC::RegExpConstructor::input):
        (JSC::RegExpConstructor::setMultiline):
        (JSC::RegExpConstructor::multiline):
        * runtime/RegExpConstructor.h:
        (JSC::RegExpResult::RegExpResult):
        (JSC::RegExpConstructor::performMatch):
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::create):
        (JSC::RegExpMatchesArray::getOwnPropertySlot):
        (JSC::RegExpMatchesArray::getOwnPropertySlotByIndex):
        (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
        (JSC::RegExpMatchesArray::put):
        (JSC::RegExpMatchesArray::putByIndex):
        (JSC::RegExpMatchesArray::deleteProperty):
        (JSC::RegExpMatchesArray::deletePropertyByIndex):
        (JSC::RegExpMatchesArray::getOwnPropertyNames):

2012-01-11  Eugene Girard  <girard@google.com>

        Typo in error message: Unexpected token 'defualt'
        https://bugs.webkit.org/show_bug.cgi?id=75105

        Reviewed by Simon Fraser.

        * parser/Parser.h:
        (JSC::Parser::getTokenName):

2012-01-11  Anders Carlsson  <andersca@apple.com>

        Assertion failure in JSC::allocateCell trying to allocate a JSString
        https://bugs.webkit.org/show_bug.cgi?id=76101

        Reviewed by Adam Roben.

        Remove the ExecutableBase::s_info and JSString::s_info static member variables  from the .def file and
        export them explicitly using the JS_EXPORTDATA macro.

        member variables explicitly using 
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/Executable.h:
        * runtime/JSString.h:

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

        <rdar://problem/10673792> jsc should install directly in to versioned Resources subfolder

        This ensures that jsc ends up in a consistent location whether built in to the same DSTROOT
        as JavaScriptCore.framework or in to a different one.

        Rubber-stamped by Dan Bernstein.

        * Configurations/JSC.xcconfig: Update INSTALL_PATH.

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

        DFG inlining block linking compares BlockIndex against bytecode index
        https://bugs.webkit.org/show_bug.cgi?id=76018
        <rdar://problem/10671979>

        Reviewed by Gavin Barraclough.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseCodeBlock):

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

        CodeBlock.h declares too many things
        https://bugs.webkit.org/show_bug.cgi?id=76001

        Rubber stamped by Gavin Barraclough.
        
        Removed all non-CodeBlock type declarations from CodeBlock.h, and put them
        into separate header files. Also removed all non-CodeBlock method implementations
        from CodeBlock.cpp and put them into corresponding cpp files.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * assembler/RepatchBuffer.h:
        * bytecode/CallLinkInfo.cpp: Added.
        (JSC::CallLinkInfo::unlink):
        * bytecode/CallLinkInfo.h: Added.
        (JSC::CallLinkInfo::callTypeFor):
        (JSC::CallLinkInfo::CallLinkInfo):
        (JSC::CallLinkInfo::~CallLinkInfo):
        (JSC::CallLinkInfo::isLinked):
        (JSC::CallLinkInfo::seenOnce):
        (JSC::CallLinkInfo::setSeen):
        (JSC::getCallLinkInfoReturnLocation):
        (JSC::getCallLinkInfoBytecodeIndex):
        * bytecode/CallReturnOffsetToBytecodeOffset.h: Added.
        (JSC::CallReturnOffsetToBytecodeOffset::CallReturnOffsetToBytecodeOffset):
        (JSC::getCallReturnOffset):
        * bytecode/CodeBlock.cpp:
        * bytecode/CodeBlock.h:
        * bytecode/CodeType.h: Added.
        * bytecode/ExpressionRangeInfo.h: Added.
        * bytecode/GlobalResolveInfo.h: Added.
        (JSC::GlobalResolveInfo::GlobalResolveInfo):
        * bytecode/HandlerInfo.h: Added.
        * bytecode/LineInfo.h: Added.
        * bytecode/MethodCallLinkInfo.cpp: Added.
        (JSC::MethodCallLinkInfo::reset):
        * bytecode/MethodCallLinkInfo.h: Added.
        (JSC::MethodCallLinkInfo::MethodCallLinkInfo):
        (JSC::MethodCallLinkInfo::seenOnce):
        (JSC::MethodCallLinkInfo::setSeen):
        (JSC::getMethodCallLinkInfoReturnLocation):
        (JSC::getMethodCallLinkInfoBytecodeIndex):
        * bytecode/StructureStubInfo.h:
        (JSC::getStructureStubInfoReturnLocation):
        (JSC::getStructureStubInfoBytecodeIndex):

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

        Hang opening movie that requires authentication
        https://bugs.webkit.org/show_bug.cgi?id=75989
        <rdar://problem/9601915>

        Reviewed by Sam Weinig.

        * wtf/Functional.h:
        Add function wrapper for a function that takes three parameters.

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

        CodeBlock::m_numParameters should be encapsulated
        https://bugs.webkit.org/show_bug.cgi?id=75985
        <rdar://problem/10671020>

        Reviewed by Oliver Hunt.
        
        Encapsulated CodeBlock::m_numParameters and hooked argument profile creation
        into it.  This appears to be performance neutral.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::setNumParameters):
        (JSC::CodeBlock::addParameter):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::numParameters):
        (JSC::CodeBlock::addressOfNumParameters):
        (JSC::CodeBlock::offsetOfNumParameters):
        (JSC::CodeBlock::numberOfArgumentValueProfiles):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::addParameter):
        (JSC::BytecodeGenerator::emitReturn):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::AbstractState):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::predictArgumentTypes):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::slideRegisterWindowForCall):
        (JSC::Interpreter::dumpRegisters):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::prepareForRepeatCall):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JITStubs.cpp:
        (JSC::arityCheckFor):
        (JSC::lazyLinkFor):
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):

2012-01-10  Gavin Barraclough  <barraclough@apple.com>

        Build fix following https://bugs.webkit.org/show_bug.cgi?id=75935

        Fix 32-bit builds.

        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertyNames):
        (JSC::JSArray::setLength):

2012-01-10  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-01-10  Gavin Barraclough  <barraclough@apple.com>

        Do not allow Array length to be set if it is non-configurable
        https://bugs.webkit.org/show_bug.cgi?id=75935

        Reviewed by Sam Weinig.

        Do not allow Array length to be set if it is non-configurable, and if the new
        length is less than the old length then intervening properties should removed
        in reverse order. Removal of properties should cease if an intervening indexed
        property being removed is non-configurable.

        * JavaScriptCore.exp:
            - Removed export for setLength.
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncConcat):
            - JSArray::setLength now takes an ExecState*
        (JSC::arrayProtoFuncSlice):
            - JSArray::setLength now takes an ExecState*
        * runtime/JSArray.cpp:
        (JSC::JSArray::defineOwnProperty):
            - JSArray::setLength now takes an ExecState*
        (JSC::JSArray::put):
            - JSArray::setLength now takes an ExecState*
        (JSC::compareKeysForQSort):
            - Keys extracted from the map can be stored as unsigneds.
        (JSC::JSArray::getOwnPropertyNames):
            - Keys extracted from the map can be stored as unsigneds.
        (JSC::JSArray::setLength):
            - Check lengthIsReadOnly(), rather than copying the entire map to iterate
              over to determine which keys to remove, instead just copy the keys from
              the map to a Vector. When inSparseMode sort the keys in the Vector so
              that we can remove properties in reverse order.
        * runtime/JSArray.h:
            - JSArray::setLength now takes an ExecState*

2012-01-10  Gavin Barraclough  <barraclough@apple.com>

        Use SameValue to compare property descriptor values
        https://bugs.webkit.org/show_bug.cgi?id=75975

        Reviewed by Sam Weinig.

        Rather than strictEqual.

        * runtime/JSArray.cpp:
        (JSC::JSArray::defineOwnNumericProperty):
            - Missing configurablePresent() check.
        * runtime/JSObject.cpp:
        (JSC::JSObject::defineOwnProperty):
            - call sameValue.
        * runtime/PropertyDescriptor.cpp:
        (JSC::sameValue):
            - Moved from JSArray.cpp, fix NaN comparison.
        (JSC::PropertyDescriptor::equalTo):
            - call sameValue.
        * runtime/PropertyDescriptor.h:
            - Added declaration for sameValue.
2012-01-09  Gavin Barraclough  <barraclough@apple.com>

        Error handling : in ISO8601 timezone
        https://bugs.webkit.org/show_bug.cgi?id=75919

        Reviewed by Sam Weinig.

        * wtf/DateMath.cpp:
        (WTF::parseDateFromNullTerminatedCharacters):
            - need to increment the string position.

2012-01-09  Mark Rowe  <mrowe@apple.com>

        JavaScriptCore executable targets shouldn't explicitly depend on the JavaScriptCore framework target
        <http://webkit.org/b/75907> / <rdar://problem/10659862>

        We'd like for it to be possible to build jsc without building JavaScriptCore.framework and the explicit
        dependencies prevent this.

        Reviewed by Dan Bernstein.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2012-01-09  Adam Treat  <atreat@rim.com>

        Log is a little to verbose for blackberry port
        https://bugs.webkit.org/show_bug.cgi?id=75728

        The BlackBerry::Platform::Log* functions take care of the call to vfprintf
        which is resulting in unintentional noise in our logs.  Add a conditional
        directive to fix.

        Change to using BlackBerry::Platform::logStreamV which does not insert
        threading info and newlines unlike BlackBerry::Platform::log.

        Finally, add log locking and unlocking which the BlackBerry platform
        uses to ensure that N threads do not trample on each other's logs.

        Reviewed by Rob Buis.

        * wtf/Assertions.cpp:
        (WTFLogLocker::WTFReportAssertionFailure):
        (WTFLogLocker::WTFReportAssertionFailureWithMessage):
        (WTFLogLocker::WTFReportArgumentAssertionFailure):
        (WTFLogLocker::WTFReportFatalError):
        (WTFLogLocker::WTFReportError):
        (WTFLogLocker::WTFLog):
        (WTFLogLocker::WTFLogVerbose):

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

        https://bugs.webkit.org/show_bug.cgi?id=75789
        defineOwnProperty not implemented for Array objects

        Reviewed by Sam Weinig.

        Implements support for getter/setter & non-default attribute properties on arrays,
        by forcing them into a dictionary-like 'SparseMode'. This fixes ~300 test-262
        test failures.

        * JavaScriptCore.exp:
            - Updated exports.
        * dfg/DFGOperations.cpp:
            - JSArray::pop now requires an exec state.
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncPop):
            - JSArray::pop now requires an exec state.
        * runtime/JSArray.cpp:
        (JSC::SparseArrayValueMap::add):
            - Add a potentially empty entry into the map.
        (JSC::SparseArrayValueMap::put):
            - Changed to call setter.
        (JSC::SparseArrayEntry::get):
            - calls getters.
        (JSC::SparseArrayEntry::getNonSparseMode):
            - does not call getters.
        (JSC::JSArray::enterSparseMode):
            - Convert into 'SparseMode' - removes the vectors, don't allow it to be recreated.
        (JSC::JSArray::putDescriptor):
            - Create a numeric property based on a descriptor.
        (JSC::sameValue):
            - See ES5.1 9.12.
        (JSC::reject):
            - Helper for the [[DefineOwnProperty]] algorithm.
        (JSC::JSArray::defineOwnNumericProperty):
            - Define an indexed property on an array object.
        (JSC::JSArray::setLengthWritable):
            - Marks the length read-only, enters SparseMode as necessary.
        (JSC::JSArray::defineOwnProperty):
            - Defines either an indexed property or 'length' on an array object.
        (JSC::JSArray::getOwnPropertySlotByIndex):
            - Updated to correctly handle accessor descriptors & attributes.
        (JSC::JSArray::getOwnPropertyDescriptor):
            - Updated to correctly handle accessor descriptors & attributes.
        (JSC::JSArray::put):
            - Pass strict mode flag to setLength.
        (JSC::JSArray::putByIndex):
            - putByIndexBeyondVectorLength requires an ExecState* rather than a JSGloablData&.
        (JSC::JSArray::putByIndexBeyondVectorLength):
            - Pass exec to SparseArrayValueMap::put.
        (JSC::JSArray::deletePropertyByIndex):
            - Do not allow deletion of non-configurable properties.
        (JSC::compareKeysForQSort):
            - used in implementation of getOwnPropertyNames.
        (JSC::JSArray::getOwnPropertyNames):
            - Properties in the sparse map should be iterated in order.
        (JSC::JSArray::setLength):
            - Updated to take a 'shouldThrow' flag, return a result indicating error.
        (JSC::JSArray::pop):
            - pop should throw an error if length is not writable, even if the array is empty.
        (JSC::JSArray::push):
            - putByIndexBeyondVectorLength requires an ExecState* rather than a JSGloablData&.
        (JSC::JSArray::sort):
            - Changed 'get' to 'getNonSparseMode' (can't be getters to call).
        (JSC::JSArray::compactForSorting):
            - Changed 'get' to 'getNonSparseMode' (can't be getters to call).
        * runtime/JSArray.h:
        (JSC::SparseArrayValueMap::lengthIsReadOnly):
            - Check if the length is read only.
        (JSC::SparseArrayValueMap::setLengthIsReadOnly):
            - Mark the length as read only.
        (JSC::SparseArrayValueMap::find):
            - Moved into header.
        (JSC::JSArray::isLengthWritable):
            - Wraps SparseArrayValueMap::lengthIsReadOnly.
        * runtime/JSObject.cpp:
        (JSC::JSObject::defineOwnProperty):
            - Should be returning the result of putDescriptor.
        * runtime/PropertyDescriptor.cpp:
        (JSC::PropertyDescriptor::attributesOverridingCurrent):
            - Added attributesOverridingCurrent - this should probably be merged with attributesWithOverride.
        * runtime/PropertyDescriptor.h:
            - Added attributesOverridingCurrent.

2012-01-09  Pavel Heimlich  <tropikhajma@gmail.com>

        There is no support for fastcall in Solaris Studio.
        Fixes build on Solaris.
        https://bugs.webkit.org/show_bug.cgi?id=75736

        Reviewed by Gavin Barraclough.

        * jit/JITStubs.h:

2012-01-09  Pavel Heimlich  <tropikhajma@gmail.com>

        Fix build failure on Solaris
        https://bugs.webkit.org/show_bug.cgi?id=75733

        Reviewed by Gavin Barraclough.

        * wtf/ByteArray.h:

2012-01-01  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [CMake] Clean up some cruft from WTF's CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=75420

        Reviewed by Daniel Bates.

        * wtf/CMakeLists.txt: Remove the unused WTF_PORT_FLAGS variable; add
        all needed paths to WTF_INCLUDE_DIRECTORIES in a single place.

2012-01-08  Xianzhu Wang  <wangxianzhu@chromium.org>

        Fix compilation error about ListHashSetReverseIterator
        https://bugs.webkit.org/show_bug.cgi?id=75372

        Reviewed by Darin Adler.

        There is a typo in class ListHashSetReverseIterator:
        typedef ListHashSetConstIterator<ValueArg, inlineCapacity, HashArg> const_reverse_iterator;
        Should be
        typedef ListHashSetConstReverseIterator<ValueArg, inlineCapacity, HashArg> const_reverse_iterator;

        * wtf/ListHashSet.h:

2012-01-08  Ryosuke Niwa  <rniwa@webkit.org>

        WinCE build fix after r104415.

        * jit/JITExceptions.cpp:
        * jit/JITExceptions.h:

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

        The JIT's protocol for exception handling should be available to other parts of the system
        https://bugs.webkit.org/show_bug.cgi?id=75808
        <rdar://problem/10661025>

        Reviewed by Oliver Hunt.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * jit/JITExceptions.cpp: Added.
        (JSC::genericThrow):
        (JSC::jitThrow):
        * jit/JITExceptions.h: Added.
        * jit/JITStubs.cpp:
        * runtime/JSGlobalData.h:

2012-01-06  Hajime Morrita  <morrita@chromium.org>

        https://bugs.webkit.org/show_bug.cgi?id=75296
        JSString should not have JS_EXPORTCLASS annotation

        Reviewed by Kevin Ollivier.

        * runtime/JSString.h: Removed JS_EXPORTCLASS annotation.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        Added missing symbols which were hidden by JS_EXPORTCLASS.

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

        JSArray::pop() should compare SparseArrayValueMap::find() to SparseArrayValueMap::notFound()
        https://bugs.webkit.org/show_bug.cgi?id=75757

        Reviewed by Gavin Barraclough.

        * runtime/JSArray.cpp:
        (JSC::JSArray::pop): Changed map->end() to map->notFound().

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

        JIT stub slow paths that would be identical to that of an interpreter should be factored out
        https://bugs.webkit.org/show_bug.cgi?id=75743
        <rdar://problem/10657024>

        Reviewed by Geoff Garen.

        * GNUmakefile.list.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/CommonSlowPaths.h: Added.
        (JSC::CommonSlowPaths::opInstanceOfSlow):
        (JSC::CommonSlowPaths::opIn):
        (JSC::CommonSlowPaths::opResolve):
        (JSC::CommonSlowPaths::opResolveSkip):
        (JSC::CommonSlowPaths::opResolveWithBase):
        (JSC::CommonSlowPaths::opResolveWithThis):

2012-01-06  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * wtf/TypeTraits.cpp:

2012-01-05  Michael Saboff  <msaboff@apple.com>

        Default HashTraits for Opcode don't work for Opcode = 0
        https://bugs.webkit.org/show_bug.cgi?id=75595

        Reviewed by Oliver Hunt.

        Removed the populating of the m_opcodeIDTable table in the
        case where the OpcodeID and Opcode are the same (m_enabled is false).
        Instead we just cast the one type to the other.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::initialize):
        (JSC::Interpreter::isOpcode):
        * interpreter/Interpreter.h:
        (JSC::Interpreter::getOpcodeID):

2012-01-06  Sam Weinig  <sam@webkit.org>

        Add a DecayArray type trait as a first step towards merging OwnPtr and OwnArrayPtr
        https://bugs.webkit.org/show_bug.cgi?id=75737

        Reviewed by Anders Carlsson.

        * wtf/TypeTraits.cpp:
        * wtf/TypeTraits.h:
        Added a DecayArray trait, that can convert T[] and T[3] -> T*. DecayArray
        is composed of some helpers which are also exposed, Conditional<>, which
        can provide one type or another based on a boolean predicate, IsArray<>
        which can deduce array types, and RemoveExtent<>, which removes the extent
        from an array type. 

2012-01-06  Oliver Hunt  <oliver@apple.com>

        GetByteArrayLength is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=75735

        Reviewed by Filip Pizlo.

        Load the byte array length from the correct location.
        This stops an existing test from hanging.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        Fix build.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2012-01-06  Oliver Hunt  <oliver@apple.com>

        DFG no longer optimises CanvasPixelArray
        https://bugs.webkit.org/show_bug.cgi?id=75729

        Reviewed by Gavin Barraclough.

        Rename ByteArray (in its ClassInfo) to Uint8ClampedArray to match
        the future name when we switch over to the new typed-array based
        ImageData specification.

        * runtime/JSByteArray.cpp:

2012-01-06  Caio Marcelo de Oliveira Filho  <caio.oliveira@openbossa.org>

        Use HashMap<OwnPtr> for SourceProviderCache items
        https://bugs.webkit.org/show_bug.cgi?id=75346

        Reviewed by Daniel Bates.

        * parser/Parser.cpp:
        * parser/SourceProviderCache.cpp:
        (JSC::SourceProviderCache::clear):
        (JSC::SourceProviderCache::add):
        * parser/SourceProviderCache.h:

2012-01-06  Sam Weinig  <sam@webkit.org>

        Remove unused OwnFastMallocPtr class.
        https://bugs.webkit.org/show_bug.cgi?id=75722

        Reviewed by Geoffrey Garen.

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/OwnFastMallocPtr.h: Removed.
        * wtf/text/StringImpl.h:
        * wtf/wtf.pro:

2012-01-06  Benjamin Poulain  <bpoulain@webkit.org>

        [Mac] Sort the resources of JavaScriptCore.xcodeproj and remove duplicates
        https://bugs.webkit.org/show_bug.cgi?id=75631

        Reviewed by Andreas Kling.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2012-01-06  Eric Seidel  <eric@webkit.org> and Gustavo Noronha Silva  <gustavo.noronha@collabora.com>

        Make the new WTF module build on Gtk
        https://bugs.webkit.org/show_bug.cgi?id=75669

        * GNUmakefile.am:

2012-01-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove un-needed VPATHs from project includes

        Reviewed by Simon Hausmann.

        * JavaScriptCore.pri:
        * wtf/wtf.pri:

2012-01-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Move listing of include paths and libs to pri files in sources

        Includepaths are sometimes modified by non-Qt contributors so keeping
        them in files inside Sources makes it more likely that they are updated
        along with project files for the other ports.

        Using pri files instead of prf files for this also has the benefit that
        the include() from the main target file can be parsed and followed by
        Qt Creator -- something that does not work with load().

        Dependency from a target to a library through the WEBKIT variable are
        handled through forwarding-files in Tools/qmake/mkspecs/modules, which
        set the source root of the module and include the right pri file.

        Ideally we'd use the variant of include() that takes an optional
        namespace to read the variables into, or the fromfile() function,
        but both of these add an overhead of about 40% on the total qmake
        runtime, due to making a deep copy of all the variables in the
        project or re-reading all the prf files from scratch.

        Reviewed by Simon Hausmann.
        Reviewed by Ossy.

        * JavaScriptCore.pri: Renamed from Tools/qmake/mkspecs/features/javascriptcore.prf.
        * Target.pri:
        * wtf/wtf.pri: Renamed from Tools/qmake/mkspecs/features/wtf.prf.
        * wtf/wtf.pro:

2012-01-06  Hajime Morrita  <morrita@chromium.org>

        WTF::String: Inline method shouldn't have WTF_EXPORT_PRIVATE
        https://bugs.webkit.org/show_bug.cgi?id=75612

        Reviewed by Kevin Ollivier.

        * wtf/text/WTFString.h:
        (WTF::String::findIgnoringCase):
        (WTF::String::append):
        (WTF::String::fromUTF8):
        (WTF::String::fromUTF8WithLatin1Fallback):
        (WTF::String::isHashTableDeletedValue):

2012-01-05  Dan Bernstein  <mitz@apple.com>

        <rdar://problem/10633760> Update copyright strings

        Reviewed by Mark Rowe.

        * Info.plist:

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

        Date constructor handles infinite values incorrectly.
        https://bugs.webkit.org/show_bug.cgi?id=70998

        Reviewed by Filip Pizlo.

        * runtime/DateConstructor.cpp:
        (JSC::constructDate):
            - should be checking !finite rather then isnan.

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

        date.toISOString produces incorrect results for dates with ms prior to 1970
        https://bugs.webkit.org/show_bug.cgi?id=75684

        Reviewed by Sam Weinig.

        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncToISOString):

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

        Array.prototype.lastIndexOf ignores undefined fromIndex.
        https://bugs.webkit.org/show_bug.cgi?id=75678

        Reviewed by Sam Weinig.

        array.lastIndexOf(x, undefined) is equivalent to array.lastIndexOf(x, 0), not array.lastIndexOf(x)

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncLastIndexOf):
            - should check argumnet count, rather than checking agument value for undefined.

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

        Date parsing is too restrictive.
        https://bugs.webkit.org/show_bug.cgi?id=75671

        Reviewed by Oliver Hunt.

        ES5 date parsing currently requires all fields to be present, which does not match the spec (ES5.1 15.9.1.15).
        The spec allow a date to be date only, or date + time.

        The date portion on the should match: (pseudocode!:)
            [(+|-)YY]YYYY[-MM[-DD]]
        though we are slightly more liberal (permitted by the spec), allowing:
            [+|-]Y+[-MM[-DD]]
        The time portion should match:
            THH:mm[:ss[.sss]][Z|(+|-)HH:mm]
        again we're slightly more liberal, allowing:
            THH:mm[:ss[.s+]][Z|(+|-)HH:mm]

        * wtf/DateMath.cpp:
        (WTF::parseES5DatePortion):
            - Month/day fields are optional, default to 01.
        (WTF::parseES5TimePortion):
            - Hours/Minutes are requires, seconds/timezone are optional.
        (WTF::parseES5DateFromNullTerminatedCharacters):
            - Dates may be date only, or date + time.

2012-01-05  Bruno Dilly  <bdilly@profusion.mobi>

        [EFL] Undefined references to ICU_I18N symbols on WTF
        https://bugs.webkit.org/show_bug.cgi?id=75642

        Unreviewed build fix.

        Add ${ICU_I18N_LIBRARIES} to WTF_LIBRARIES on wtf efl platform cmake.
        Some undefined references were ucol_setAttribute_44, ucol_close_44,
        ucol_getAttribute_44...

        * wtf/PlatformEfl.cmake:

2012-01-05  Geoffrey Garen  <ggaren@apple.com>

        Refined the fast path for StringImpl::hash()
        https://bugs.webkit.org/show_bug.cgi?id=75178

        Reviewed by Darin Adler.

        Moved the hash calculation code into an out-of-line function to clean up
        the hot path.

        No measurable benchmark change, but this knocks some samples off in
        Instruments, and I think this is a step toward removing -fomit-frame-pointer.
        
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::hashSlowCase):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::hash): The patch.

        * wtf/text/StringStatics.cpp:
        (WTF::StringImpl::hashSlowCase): Abide by the cockamamie Windows build
        scheme, which requires all out-of-line StringImpl functions used by
        WebCore be defined in this file instead of StringImpl.cpp. (See http://trac.webkit.org/changeset/59187.)

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

        Literal tab in JSONString fails
        https://bugs.webkit.org/show_bug.cgi?id=71772

        Reviewed by Oliver Hunt.

        rfc4627 does not allow literal tab characters in JSON source.

        * runtime/LiteralParser.cpp:
        (JSC::isSafeStringCharacter):
            - do not allow literal tab in StrictJSON mode.

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

        push/shift fifo may consume excessive memory
        https://bugs.webkit.org/show_bug.cgi?id=75610

        Reviewed by Sam Weinig.

        Array object commonly store data in a vector, consisting of a portion that is
        in use, a pre-capacity (m_indexBias) and a post-capacity (the delta between
        m_length and m_vectorLength). Calls to shift with grow the pre-capacity, and
        the current algorithm for increaseVectorLength (used by push, or [[Put]]) will
        never shrink the pre-capacity, so a push/shift fifo may consume an inordinate
        amount of memory, whilst having a relatively small active length.

        * runtime/JSArray.cpp:
        (JSC::JSArray::increaseVectorLength):
            - If m_indexBias is non-zero, decay it over time.

2012-01-05  Csaba Osztrogonác  <ossy@webkit.org>

        unshift/pop fifo may consume excessive memory
        https://bugs.webkit.org/show_bug.cgi?id=75588

        Reviewed by Zoltan Herczeg.

        Buildfix after r104120.

        * runtime/JSArray.cpp: Remove useless asserts, baecause unsigned expression >= 0 is always true
        (JSC::JSArray::unshiftCount):

2012-01-05  Zoltan Herczeg  <zherczeg@webkit.org>

        Unreviewed gardening after r104134.

        * wtf/Assertions.cpp:

2012-01-05  Zoltan Herczeg  <zherczeg@webkit.org>

        Unreviewed gardening after r75605.

        Rubber stamped by NOBODY Csaba Osztrogonác.

        * wtf/Assertions.cpp:

2012-01-05  Benjamin Poulain  <benjamin@webkit.org>

        Improve charactersAreAllASCII() to compare multiple characters at a time
        https://bugs.webkit.org/show_bug.cgi?id=74063

        Reviewed by Darin Adler.

        A new header ASCIIFastPath.h contains the functions related to
        the detection of ASCII by using machine words. Part of it comes from
        WebCore's TextCodecASCIIFastPath.h.

        The function charactersAreAllASCII() is moved to TextCodecASCIIFastPath.h
        and is implemented with computer word comparison.
        The gain over the previous implementation of charactersAreAllASCII() is of
        the order of how many comparison are avoided (4x, 8x, 16x depending on the
        format and the CPU type).

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/text/ASCIIFastPath.h: Added.
        (WTF::isAlignedToMachineWord):
        (WTF::alignToMachineWord):
        (WTF::isAllASCII):
        (WTF::charactersAreAllASCII):
        * wtf/text/WTFString.h:
        * wtf/wtf.pro:

2012-01-05  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/75606> [Mac] WTF logging functions should output to both stderr and ASL

        We should always log to both ASL and stderr on platforms where this won't result in launchd
        duplicating the messages.

        Reviewed by Dan Bernstein.

        * wtf/Assertions.cpp:
        (vprintf_stderr_common):

2012-01-05  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/75605> WTF logging functions should call vprintf_stderr_common only once per line

        Several of the WTF logging functions make multiple calls to vprintf_stderr_common to output a
        single line of text. This results in strangely formatted output if vprintf_stderr_common is
        retargeted to an output device that is message-oriented (such as ASL) rather than stream-oriented
        like stderr.

        Reviewed by Dan Bernstein.

        * wtf/Assertions.cpp:
        (vprintf_stderr_with_prefix): Helper function to prepend a given prefix on to the given format
        string before handing it off to vprintf_stderr_common. This requires disabling warnings about
        calling a printf-like function with a non-literal format string for this piece of code. It's
        safe in this particular case as vprintf_stderr_with_prefix is only ever given a literal prefix.
        (vprintf_stderr_with_trailing_newline): Helper function to append a trailling newline on to the
        given format string if one does not already exist. It requires the same treatment with regards
        to the non-literal format string warning.
        (WTFReportAssertionFailureWithMessage): Switch to using vprintf_stderr_with_prefix.
        (WTFReportBacktrace): Switch from calling fprintf directly to using fprintf_stderr_common.
        (WTFReportFatalError): Switch to using vprintf_stderr_with_prefix.
        (WTFReportError): Ditto.
        (WTFLog): Switch to using vprintf_stderr_with_trailing_newline.
        (WTFLogVerbose): Ditto.

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

        unshift/pop fifo may consume excessive memory
        https://bugs.webkit.org/show_bug.cgi?id=75588

        Reviewed by Sam Weinig.

        The Array object commonly store data in a vector, consisting of a portion that
        is in use, a pre-capacity (m_indexBias) and a post-capacity (the delta between
        m_length and m_vectorLength). Calls to pop with grow the post-capacity, and the
        current algorithm for increasePrefixVectorLength (used by unshift) will never
        stink the post-capacity, so a unshift/pop fifo may consume an inordinate amount
        of memory, whilst having a relatively small active length.

        * runtime/JSArray.cpp:
        (JSC::storageSize):
            - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>)
        (JSC::SparseArrayValueMap::put):
            - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>)
        (JSC::JSArray::increaseVectorLength):
            - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>)
        (JSC::JSArray::unshiftCountSlowCase):
            - renamed from increaseVectorPrefixLength (this was a bad name, since it
              also moved the ArrayStorage header), rewritten.
        (JSC::JSArray::shiftCount):
            - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>), count should be unsigned
        (JSC::JSArray::unshiftCount):
            - sizeof(JSValue) should be sizeof(WriteBarrier<Unknown>), count should be unsigned,
              increaseVectorPrefixLength renamed to unshiftCountSlowCase
        (JSC::JSArray::sortNumeric):
        * runtime/JSArray.h:
            - Updated function declarations, m_indexBias should be unsigned.

2012-01-04  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/75604> All instances of JSC::ArgumentsData appear to be leaked by JSC::Arguments

        Since JSC::Arguments has an OwnPtr for a member it needs to override destroy
        to ensure that the correct destructor is invoked. This is necessary because
        JSCell subclasses all intentionally have non-virtual destructors.

        Reviewed by Filip Pizlo.

        * runtime/Arguments.cpp:
        (JSC::Arguments::destroy):
        * runtime/Arguments.h:

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

        Unreviewed, accidentally turned off the JIT in previous commit. Turning
        it back on.

        * wtf/Platform.h:

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

        Changed "return" to "break" in some macrology I introduced in
        http://trac.webkit.org/changeset/104086. This is a benign change, as
        "return" was technically correct for all uses of the macro.

        Reviewed by Oliver Hunt.

        * dfg/DFGGraph.cpp:
        * wtf/Platform.h:

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

        StructureStubInfo not reset when corresponding MethodCallLinkInfo is reset
        https://bugs.webkit.org/show_bug.cgi?id=75583

        Reviewed by Filip Pizlo.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finalizeUnconditionally): Find the corresponding
        StructureStubInfo and reset the appropriate JIT and
        the StructureStubInfo itself when reseting a MethodCallLinkInfo.

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

        Invalid ASSERT() in DFGRepatch.cpp near line 385
        https://bugs.webkit.org/show_bug.cgi?id=75584

        Reviewed by Filip Pizlo.

        * dfg/DFGRepatch.cpp:
        (JSC::DFG::tryBuildGetByIDProtoList): Fixed ASSERT to use ==.

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

        Incorrect use of DFG node reference counts when mutating the graph
        https://bugs.webkit.org/show_bug.cgi?id=75580
        <rdar://problem/10644607>

        Reviewed by Oliver Hunt.
        
        Made deref(node) follow the pattern of ref(node), which it should have
        to begin with.

        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::refChildren):
        (JSC::DFG::Graph::derefChildren):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::deref):
        (JSC::DFG::Graph::clearAndDerefChild1):
        (JSC::DFG::Graph::clearAndDerefChild2):
        (JSC::DFG::Graph::clearAndDerefChild3):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::deref):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::fixupNode):

2012-01-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Introduce new qmake variable 'WEBKIT' for signaling dependencies

        The custom qmake variable 'WEBKIT' is used for signaling that a
        target depends in some way on other subproject of the WebKit
        project. For now this is limited to the set of intermediate
        libraries: wtf, javascriptcore, webcore, and webkit2.

        This replaces the previous convension of using load(foo) for
        just include paths, and CONFIG += foo to also link against foo.

        Adding a dependency results in additional include paths being
        available, and potentially linking to the library. This is
        decided by the build system based on conditions such as what
        kind of target is being built and the general build config.

        An advantage to his approach is that it simplifies the individual
        foo.prf files, for example by allowing us to use INCLUDEPATH +=
        and LIBS += as normal instead of prepending.

        Reviewed by Simon Hausmann.

        * Target.pri:
        * jsc.pro:
        * wtf/wtf.pro:

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

        DFG: The assertion that a double-voted variable cannot become double-unvoted is wrong
        https://bugs.webkit.org/show_bug.cgi?id=75516
        <rdar://problem/10640266>

        Reviewed by Gavin Barraclough.
        
        Removed the offending assertion, since it was wrong.  Also hardened the code to make
        this case less likely by first having the propagator fixpoint converge, and then doing
        double voting combined with a second fixpoint.  This is neutral on benchmarks and
        fixes the assertion in a fairly low-risk way (i.e. we won't vote a variable double
        until we've converged to the conclusion that it really is double).

        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagatePredictions):
        * dfg/DFGVariableAccessData.h:
        (JSC::DFG::VariableAccessData::tallyVotesForShouldUseDoubleFormat):

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

        REGRESSION (r98196-98236): Incorrect layout of iGoogle with RSS feeds
        https://bugs.webkit.org/show_bug.cgi?id=75303
        <rdar://problem/10633533>

        Reviewed by Gavin Barraclough.
        
        The this argument was not being kept alive in some cases during inlining and intrinsic
        optimizations.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::emitFunctionCheck):
        (JSC::DFG::ByteCodeParser::handleInlining):

2012-01-03  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-01-03  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-01-03  Gavin Barraclough  <barraclough@apple.com>

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

        Reviewed by Sam Weinig.

        Rewrite JSArray::putSlowCase to be much cleaner & simpler.

        This rewrite only significantly changes behaviour for sparse array, specifically
        in how sparse arrays are reified back to vector form. This does not affect arrays
        with less than 10000 entries (since these always use a vector). The more common
        cases of sparse array behavior (though large sparse arrays are rare) - arrays that
        always remain sparse, and arrays that are filled in reverse sequential order -
        should be just as fast or faster (since reification is simpler & no longer
        requires map lookups) after these changes.

        Simplifying this code allows all cases of putByIndex that need to grow the vector
        to do so via increaseVectorLength, which means that this method can encapsulate
        the policy of determining how the vector should be grown.

        No performance impact.

        * runtime/JSArray.cpp:
        (JSC::isDenseEnoughForVector):
            - any array of length <= MIN_SPARSE_ARRAY_INDEX is dense enough for a vector.
        (JSC::JSArray::putByIndex):
            - simplify & comment.
        (JSC::JSArray::putByIndexBeyondVectorLength):
            - Re-written to be much clearer & simpler.
        (JSC::JSArray::increaseVectorLength):
        (JSC::JSArray::increaseVectorPrefixLength):
            - add explicit checks against MAX_STORAGE_VECTOR_LENGTH, so clients do not need do so.
        (JSC::JSArray::push):
            - simplify & comment.
        * runtime/JSArray.h:
            - removed SparseArrayValueMap::take.

2012-01-03  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2012-01-03  Gavin Barraclough  <barraclough@apple.com>

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

        Reviewed by Sam Weinig.

        Simplify JSArray creation - remove ArgsList/JSValue* create methods
        (this functionality can be implemented in terms of tryCreateUninitialized).

        * JavaScriptCore.exp:
        * runtime/ArrayConstructor.cpp:
            - use constructArray/constructEmptyArray instead of calling JSArray::create directly
        (JSC::constructArrayWithSizeQuirk):
        * runtime/JSArray.cpp:
        * runtime/JSArray.h:
            - removed ArgsList/JSValue* create methods
        * runtime/JSGlobalObject.h:
        (JSC::constructEmptyArray):
        (JSC::constructArray):
            - changed to be implemented in terms of JSArray::tryCreateUninitialized

2012-01-03  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=75429
        ThrowTypeError should be a singleton object

        Reviewed by Sam Weinig.

        Per section 13.2.3 of the spec.
        We could change setAccessorDescriptor to be able to share the global
        GetterSetter object, rather than storing the accessor functions and
        creating a new GetterSetter in defineProperty - but this won't be a
        small change to PropertyDescriptors (and would probably mean making
        GetterSetter objects immutable?) - so I'll leave that for another
        patch.

        * JavaScriptCore.exp:
            - don't export setAccessorDescriptor
        * runtime/Arguments.cpp:
        (JSC::Arguments::createStrictModeCallerIfNecessary):
        (JSC::Arguments::createStrictModeCalleeIfNecessary):
            - call throwTypeErrorGetterSetter instead of createTypeErrorFunction
        * runtime/Error.cpp:
        * runtime/Error.h:
            - remove createTypeErrorFunction
        * runtime/JSFunction.cpp:
        * runtime/JSFunction.h:
            - remove unused createDescriptorForThrowingProperty
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::visitChildren):
            - removed m_strictModeTypeErrorFunctionStructure.
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::internalFunctionStructure):
            - removed m_strictModeTypeErrorFunctionStructure.
        * runtime/PropertyDescriptor.cpp:
        (JSC::PropertyDescriptor::setAccessorDescriptor):
            - changed to take a GetterSetter
        * runtime/PropertyDescriptor.h:
            - changed to take a GetterSetter

2012-01-02  Gavin Barraclough  <barraclough@apple.com>

        Check in fixes for jsc tests following bug #75455.

        * tests/mozilla/ecma/GlobalObject/15.1.2.2-1.js:
        * tests/mozilla/ecma/GlobalObject/15.1.2.2-2.js:

2012-01-02  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=75452
        If argument to Error is undefined, message is not set

        Reviewed by Sam Weinig.

        Per section 15.11.1.1 of the spec.

        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::create):
        (JSC::ErrorInstance::finishCreation):

2012-01-02  Gavin Barraclough  <barraclough@apple.com>

        ES5 prohibits parseInt from supporting octal
        https://bugs.webkit.org/show_bug.cgi?id=75455

        Reviewed by Sam Weinig.

        See sections 15.1.2.2 and annex E.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::parseInt):

2012-01-02  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=55343
        Global JSON should be configurable but isn't

        Reviewed by Sam Weinig.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
            - make JSON configurable

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

        Call instructions should leave room for linking information
        https://bugs.webkit.org/show_bug.cgi?id=75422
        <rdar://problem/10633985>

        Reviewed by Oliver Hunt.

        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitConstruct):

2011-12-31  Dan Bernstein  <mitz@apple.com>

        Continue trying to fix the Windows build after r103823.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-12-31  Dan Bernstein  <mitz@apple.com>

        Start trying to fix the Windows build after r103823.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-12-30  Anders Carlsson  <andersca@apple.com>

        Add a ParamStorageTraits specialization for RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=75392

        Reviewed by Daniel Bates.

        * wtf/Functional.h:
        Add a partial specialization of ParamStorageTraits for RetainPtr<T>.

        * wtf/RetainPtr.h:
        Bring in the retainPtr function template from WTF.

2011-12-29  Sam Weinig  <sam@webkit.org>

        It should be easier to iterate a Vector backwards
        https://bugs.webkit.org/show_bug.cgi?id=75359

        Reviewed by Anders Carlsson.

        Adds Vector::rbegin(), Vector::rend(), and Vector::reversed(),
        a new proxy driven way to access a vector backwards. One can use
        reversed() in a range-based for loop like so:

            for (auto val: myVector.reversed())
                doSomething(val)

        * wtf/Vector.h:
        (WTF::Vector::~Vector):
        Fix style.

        (WTF::Vector::rbegin):
        (WTF::Vector::rend):
        Added using standard adaptor std::reverse_iterator.

        (WTF::Vector::reversed):
        (WTF::Vector::VectorReverseProxy::begin):
        (WTF::Vector::VectorReverseProxy::end):
        Add proxy similar to one used in HashMap for keys() and values()
        which allows access to a Vector backwards for use in range-based
        for loops.

2011-12-29  Gavin Barraclough  <barraclough@apple.com>

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

        Reviewed by Oliver Hunt.

        Start cleaning up JSArray construction. JSArray has a set of create methods,
        one of which (currently) takes a 'creation mode' enum parameter. Based on that
        parameter, the constructor does one of two completely different things. If the
        parameter is 'CreateInitialized' it creates an array, setting the length, but
        does not eagerly allocate a storage vector of the specified length. A small
        (BASE_VECTOR_LEN sized) initial vector will be allocated, and cleared, property
        access to the vector will read the hole value (return undefined). The alternate
        usage of this method ('CreateCompact') does something very different. It tries
        to create an array of the requested length, and also allocates a storage vector
        large enough to hold all properties. It does not clear the storage vector,
        leaving the memory uninitialized and requiring the user to call a method
        'uncheckedSetIndex' to initialize values in the vector.

        This patch factors out these two behaviours, moving the 'CreateCompact' mode
        into its own method, 'tryCreateUninitialized' (matching the naming for this
        functionality in the string classes). 'tryCreateUninitialized' may return 0 if
        memory allocation fails during construction of the object. The construction
        pattern changes such that values added during initialization will be marked if
        a GC is triggered during array allocation. 'CreateInitialized' no longer need
        be passed to create a normal, fully constructed array with a length, and this
        method is merged with the version of 'create' that does not take an initial
        length (length parameter defaults to 0).

        * JavaScriptCore.exp:
        * runtime/ArrayConstructor.cpp:
        (JSC::constructArrayWithSizeQuirk):
            - removed 'CreateInitialized' argument
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSplice):
            - changed to call 'tryCreateUninitialized'
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncBind):
            - changed to call 'tryCreateUninitialized'
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
            - initialize m_storage to null; if construction fails, make destruction safe
        (JSC::JSArray::finishCreation):
            - merge versions of this method, takes an initialLength parameter defaulting to zero
        (JSC::JSArray::tryFinishCreationUninitialized):
            - version of 'finishCreation' that tries to eagerly allocate storage; may fail & return 0
        (JSC::JSArray::~JSArray):
            - check for null m_storage, in case array construction failed.
        (JSC::JSArray::increaseVectorPrefixLength):
        * runtime/JSArray.h:
        (JSC::JSArray::create):
            - merge versions of this method, takes an initialLength parameter defaulting to zero
        (JSC::JSArray::tryCreateUninitialized):
            - version of 'create' that tries to eagerly allocate storage; may fail & return 0
        (JSC::JSArray::initializeIndex):
        (JSC::JSArray::completeInitialization):
            - used in conjunction with 'tryCreateUninitialized' to initialize the array
        * runtime/JSGlobalObject.h:
        (JSC::constructEmptyArray):
            - removed 'CreateInitialized' argument
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpMatchesArray::finishCreation):
            - removed 'CreateInitialized' argument

2011-12-29  Anders Carlsson  <andersca@apple.com>

        Add a retainPtr function template
        https://bugs.webkit.org/show_bug.cgi?id=75365

        Reviewed by Dan Bernstein.

        This makes it easier to make a RetainPtr using template argument deduction, which
        is useful when passing RetainPtr objects as function arguments.

        * wtf/RetainPtr.h:
        (WTF::retainPtr):

2011-12-28  Yuqiang Xian  <yuqiang.xian@intel.com>

        spill unboxed values in DFG 32_64
        https://bugs.webkit.org/show_bug.cgi?id=75291

        Reviewed by Filip Pizlo.

        Currently all the values are spilled as boxed in DFG 32_64, which is
        not necessary and introduces additional stores/loads. Instead we
        can spill them as unboxed if feasible. It can be applied to the
        Integers, Cells and Booleans in DFG 32_64. Doubles are left as is
        because they don't need to be boxed at all. The modifications to the
        spill/fill and the OSR exit are required, as well as a bug fix to the
        "isUnknownJS" logic.

        * bytecode/ValueRecovery.h:
        (JSC::ValueRecovery::displacedInRegisterFile):
        (JSC::ValueRecovery::virtualRegister):
        (JSC::ValueRecovery::dump):
        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::GenerationInfo::isUnknownJS):
        (JSC::DFG::GenerationInfo::spill):
        * dfg/DFGOSRExitCompiler32_64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::isKnownNotBoolean):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::silentFillGPR):
        (JSC::DFG::SpeculativeJIT::spill):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::fillInteger):
        (JSC::DFG::SpeculativeJIT::fillDouble):
        (JSC::DFG::SpeculativeJIT::fillJSValue):
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
        (JSC::DFG::SpeculativeJIT::compileObjectEquality):
        (JSC::DFG::SpeculativeJIT::compile):

2011-12-28  Anders Carlsson  <andersca@apple.com>

        Add an implicit block conversion operator to WTF::Function
        https://bugs.webkit.org/show_bug.cgi?id=75325

        Reviewed by Dan Bernstein.

        * wtf/Compiler.h:
        Add a define for COMPILER_SUPPORTS(BLOCKS). It's only defined for clang, since the gcc blocks implementation
        is buggy, especially when it comes to C++.

        * wtf/Functional.h:
        Add a block conversion operator that creates and returns an autoreleased block that will call the function when executed.

2011-12-27  Anders Carlsson  <andersca@apple.com>

        Add a new WTF::bind overload that takes 6 parameters
        https://bugs.webkit.org/show_bug.cgi?id=75287

        Reviewed by Sam Weinig.

        * wtf/Functional.h:

2011-12-27  Sam Weinig  <sam@webkit.org>

        Continue moving compiler feature checks to use the COMPILER_SUPPORTS() macro
        https://bugs.webkit.org/show_bug.cgi?id=75268

        Reviewed by Anders Carlsson.

        * wtf/Compiler.h:
        Add support for COMPILER_SUPPORTS(CXX_NULLPTR) and COMPILER_SUPPORTS(CXX_DELETED_FUNCTIONS).

        * wtf/Noncopyable.h:
        Use COMPILER_SUPPORTS(CXX_DELETED_FUNCTIONS).

        * wtf/NullPtr.cpp:
        * wtf/NullPtr.h:
        Use COMPILER_SUPPORTS(CXX_NULLPTR). Remove support for HAVE(NULLPTR).

        * wtf/RefPtr.h:
        * wtf/RetainPtr.h:
        Switch from HAVE(NULLPTR) to COMPILER_SUPPORTS(CXX_NULLPTR).

2011-12-27  Anders Carlsson  <andersca@apple.com>

        Misc fixes and cleanups in Functional.h
        https://bugs.webkit.org/show_bug.cgi?id=75281

        Reviewed by Andreas Kling.

        - Reformat template declarations so that the class begins on a new line.
        - Change the parameter template parameters to start at P1 instead of P0.
        - Add function wrappers and bind overloads for 4 and 5 parameter functions.
        - Change the Function call operator to be const so const functions can be called.

        * wtf/Functional.h:

2011-12-27  Tony Chang  <tony@chromium.org>

        [chromium] Minor cleanup of gyp files.
        https://bugs.webkit.org/show_bug.cgi?id=75269

        Reviewed by Adam Barth.

        * JavaScriptCore.gyp/JavaScriptCore.gyp: msvs_guid is no longer needed
        and vim/emacs specific hooks should be added by the user.

2011-12-27  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=75260
        Null name for host function can result in dereference of uninitialize memory

        Reviewed by Filip Pizlo.

        This is a recent regression in ToT, if the name passed to finishCreation of a host function is null,
        we are currently skipping the putDirect, which leaves memory uninitialized. This patch reverts the
        aspect of the change that introduced the issue.  It might be better if functions that don't have a
        name don't have this property at all, but that's change should be separate from fixing the bug.

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::finishCreation):
            - Always initialize the name property.

2011-12-27  Anders Carlsson  <andersca@apple.com>

        Function should handle wrapping/unwrapping RefPtr and PassRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=75266

        Reviewed by Sam Weinig.

        Add ParamStorageTraits that can be used for deciding how bound parameters should be stored
        and peeked at. For RefPtr we want to use the raw pointer when "peeking" to avoid ref-churn.
        For PassRefPtr, we want to use RefPtr for storage but still use the raw pointer when peeking.

        * wtf/Functional.h:
        (WTF::ParamStorageTraits::wrap):
        (WTF::ParamStorageTraits::unwrap):

2011-12-27  Tony Chang  <tony@chromium.org>

        [chromium] really enable wpo for WebCore libs and for WTF
        https://bugs.webkit.org/show_bug.cgi?id=75264

        Reviewed by Adam Barth.

        * JavaScriptCore.gyp/JavaScriptCore.gyp: Enable WPO for wtf and yarr.

2011-12-26  Gavin Barraclough  <barraclough@apple.com>

        Errk! OS X build fix.

        * JavaScriptCore.exp:

2011-12-26  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/JSObject.h:

2011-12-26  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=75231
        Fail to throw in strict mode on assign to read only static properties

        Reviewed by Filip Pizlo.

        There are three bugs here:
        * symbolTablePut should throw for strict mode accesses.
        * lookupPut should throw for strict mode accesses.
        * NumberConstructor should override put to call lookupPut, to trap assignment to readonly properties.

        * runtime/JSActivation.cpp:
        (JSC::JSActivation::symbolTablePut):
        (JSC::JSActivation::put):
        * runtime/JSActivation.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::put):
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::put):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::symbolTablePut):
        * runtime/Lookup.h:
        (JSC::lookupPut):
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::put):
        * runtime/NumberConstructor.h:

2011-12-26  Gavin Barraclough  <barraclough@apple.com>

        Fix miss-commit of utf8 change.

        Reviewed by Filip Pizlo

        Eeep, patch as landed a while ago had no effect! - acidentally landed
        modified version of patch used for performance testing.

        (This isn't covered by layout tests because layour tests don't use jsc,
        and the tests/mozilla tests use latin1, which was already supported!)

        Landing changes as intended (and as originally reviewed).

        * jsc.cpp:
        (jscSource):

2011-12-26  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed build fix for ARMv7.

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::load16Signed):
        (JSC::MacroAssemblerARMv7::load8Signed):

2011-12-26  Hajime Morrita  <morrita@google.com>

        Rename WTF_INLINE, JS_INLINE to HIDDEN_INLINE
        https://bugs.webkit.org/show_bug.cgi?id=74990

        Reviewed by Kevin Ollivier.

        * runtime/JSExportMacros.h: Removed JS_INLINE
        * wtf/ExportMacros.h: Renamed WTF_INLINE to HIDDEN_INLINE

2011-12-24  Filip Pizlo  <fpizlo@apple.com>

        The ArgumentCount field in the CallFrame should have its tag left blank for other uses
        https://bugs.webkit.org/show_bug.cgi?id=75199
        <rdar://problem/10625105>
        <rdar://problem/10625106>

        Reviewed by Oliver Hunt.

        * dfg/DFGOSRExitCompiler32_64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOSRExitCompiler64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::argumentPayloadSlot):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):
        * interpreter/CallFrame.h:
        (JSC::ExecState::argumentCountIncludingThis):
        (JSC::ExecState::setArgumentCountIncludingThis):
        * interpreter/Register.h:
        (JSC::Register::unboxedInt32):
        (JSC::Register::unboxedBoolean):
        (JSC::Register::unboxedCell):
        (JSC::Register::payload):
        (JSC::Register::tag):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileLoadVarargs):
        (JSC::JIT::compileOpCall):

2011-12-25  Andreas Kling  <awesomekling@apple.com>

        Yarr: Avoid copying vectors in CharacterClassConstructor.
        <http://webkit.org/b/75206>

        Reviewed by Darin Adler.

        Yarr::CharacterClassConstructor::charClass() was hot when loading twitter
        feeds (1.2%), replace the usage of Vector::append() by swap() since we're
        always clearing the source vector afterwards anyway.

        * yarr/YarrPattern.cpp:
        (JSC::Yarr::CharacterClassConstructor::charClass):

2011-12-24  Darin Adler  <darin@apple.com>

        Specialize HashTraits for RefPtr to use PassRefPtr as "pass type" to reduce reference count churn
        https://bugs.webkit.org/show_bug.cgi?id=72476

        Reviewed by Sam Weinig.

        * wtf/HashTraits.h: Defined PassInType and store function in HashTraits<RefPtr>.

2011-12-23  Geoffrey Garen  <ggaren@apple.com>

        Inlined Yarr::execute
        https://bugs.webkit.org/show_bug.cgi?id=75180

        Reviewed reluctantly by Beth Dakin.
        
        Tiny speedup on SunSpider string tests. Removes some samples from
        Instruments. A step toward removing -fomit-frame-pointer.

        * yarr/YarrJIT.cpp:
        * yarr/YarrJIT.h:
        (JSC::Yarr::execute): ONE LINE FUNCTION, Y U NOT INLINED?!

2011-12-23  Filip Pizlo  <fpizlo@apple.com>

        DFG loads from signed 8-bit and 16-bit typed arrays are broken
        https://bugs.webkit.org/show_bug.cgi?id=75163

        Reviewed by Geoffrey Garen.
        
        Added 8-bit and 16-bit signed loads. Because doing so on ARM is less trivial, I'm
        currently disabling Int8Array and Int16Array optimizations on ARM.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::load8Signed):
        (JSC::MacroAssemblerX86Common::load16Signed):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::movswl_mr):
        (JSC::X86Assembler::movsbl_mr):
        * bytecode/PredictedType.h:
        (JSC::isActionableMutableArrayPrediction):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateInt8Array):
        (JSC::DFG::Node::shouldSpeculateInt16Array):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):

2011-12-23  Filip Pizlo  <fpizlo@apple.com>

        DFG does double-to-int conversion incorrectly when storing into int typed arrays
        https://bugs.webkit.org/show_bug.cgi?id=75164
        <rdar://problem/10557547>

        Reviewed by Geoffrey Garen.

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::branchTruncateDoubleToUint32):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::branchTruncateDoubleToUint32):
        (JSC::MacroAssemblerX86Common::truncateDoubleToUint32):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):

2011-12-23  Geoffrey Garen  <ggaren@apple.com>

        Refactored String.prototype.replace
        https://bugs.webkit.org/show_bug.cgi?id=75114
        
        Reviewed by Darin Adler.

        No performance difference.
        
        I think this is a step toward removing -fomit-frame-pointer.

        * runtime/JSString.cpp:
        * runtime/JSString.h: Removed the test and special case for a single-character
        search string because the standard path does this test and special case
        for us. (As an aside, if we do come up with a unique single-character
        replace optimization in future, it probably belongs in the replace function,
        and not in JSString.)

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace): Split this mega-sized function into:
        (JSC::replaceUsingStringSearch): - This reasonably sized function, and
        (JSC::replaceUsingRegExpSearch): - This still mega-sized function.

2011-12-23  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] REGRESSION(r103467): It broke fast/images/animated-gif-restored-from-bfcache.html
        https://bugs.webkit.org/show_bug.cgi?id=75087

        monotonicallyIncreasingTime needs to hava a higher resolution than milliseconds.

        Reviewed by Darin Adler.

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

2011-12-22  Filip Pizlo  <fpizlo@apple.com>

        DFG should not speculate array even when predictions say that the base is not an array
        https://bugs.webkit.org/show_bug.cgi?id=75160
        <rdar://problem/10622646>
        <rdar://problem/10622649>

        Reviewed by Oliver Hunt.
        
        Added the ability to call slow path when the base is known to not be an array.
        Also rationalized the logic for deciding when the index is not an int, and
        cleaned up the logic for deciding when to speculate typed array.
        
        Neutral for the most part, with odd speed-ups and slow-downs. The slow-downs can
        likely be mitigated by having the notion of a polymorphic array access, where we
        try, but don't speculate, to access the array one way before either trying some
        other ways or calling slow path.

        * bytecode/PredictedType.h:
        (JSC::isActionableMutableArrayPrediction):
        (JSC::isActionableArrayPrediction):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateInt8Array):
        (JSC::DFG::Node::shouldSpeculateInt16Array):
        (JSC::DFG::Node::shouldSpeculateInt32Array):
        (JSC::DFG::Node::shouldSpeculateUint8Array):
        (JSC::DFG::Node::shouldSpeculateUint16Array):
        (JSC::DFG::Node::shouldSpeculateUint32Array):
        (JSC::DFG::Node::shouldSpeculateFloat32Array):
        (JSC::DFG::Node::shouldSpeculateFloat64Array):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::byValIsPure):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        Unreviewed - fix stylebot issues from last patch.

        * runtime/JSArray.cpp:
        (JSC::JSArray::putSlowCase):

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

        https://bugs.webkit.org/show_bug.cgi?id=75151
        Add attributes field to JSArray's SparseMap

        Reviewed by Sam Weinig.

        This will be necessary to be able to support non- writable/configurable/enumerable
        properties, and helpful for getters/setters.

        Added a concept of being 'inSparseMode' - this indicates the array has a non-standard

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSort):
            - JSArray::sort methods not allowed on arrays that are 'inSparseMode'.
              (must fall back to generic sort alogrithm).
        * runtime/JSArray.cpp:
        (JSC::JSArray::finishCreation):
            - moved reportedMapCapacity into the SparseArrayValueMap object.
        (JSC::SparseArrayValueMap::find):
        (JSC::SparseArrayValueMap::put):
        (JSC::SparseArrayValueMap::visitChildren):
            - Added.
        (JSC::JSArray::getOwnPropertySlotByIndex):
        (JSC::JSArray::getOwnPropertyDescriptor):
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::deletePropertyByIndex):
        (JSC::JSArray::getOwnPropertyNames):
        (JSC::JSArray::setLength):
        (JSC::JSArray::pop):
        (JSC::JSArray::visitChildren):
            - Updated for changes in SparseArrayValueMap.
        (JSC::JSArray::sortNumeric):
        (JSC::JSArray::sort):
        (JSC::JSArray::compactForSorting):
            - Disallow on 'SparseMode' arrays.
        * runtime/JSArray.h:
        (JSC::SparseArrayEntry::SparseArrayEntry):
            - An entry in the sparse array - value (WriteBarrier) + attributes.
        (JSC::SparseArrayValueMap::SparseArrayValueMap):
        (JSC::SparseArrayValueMap::sparseMode):
        (JSC::SparseArrayValueMap::setSparseMode):
            - Flags to track whether an Array is forced into SparseMode.
        (JSC::SparseArrayValueMap::remove):
        (JSC::SparseArrayValueMap::notFound):
        (JSC::SparseArrayValueMap::isEmpty):
        (JSC::SparseArrayValueMap::contains):
        (JSC::SparseArrayValueMap::size):
        (JSC::SparseArrayValueMap::begin):
        (JSC::SparseArrayValueMap::end):
            - accessors to the map
        (JSC::SparseArrayValueMap::take):
            - only for use on non-SpareMode arrays.
        (JSC::JSArray::inSparseMode):
            - Added.

2011-12-22  Filip Pizlo  <fpizlo@apple.com>

        DFG CFA sometimes generates an incorrect proof that a node is known to be a typed array
        https://bugs.webkit.org/show_bug.cgi?id=75150
        <rdar://problem/10621900>

        Reviewed by Gavin Barraclough.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):

2011-12-22  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does exactly the wrong thing when doing strict equality on two known cells
        https://bugs.webkit.org/show_bug.cgi?id=75138
        <rdar://problem/10621526>

        Reviewed by Oliver Hunt.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):

2011-12-22  Balazs Kelemen  <kbalazs@webkit.org>

        Fix debug build with assertions disabled
        https://bugs.webkit.org/show_bug.cgi?id=75075

        Reviewed by Darin Adler.

        Check whether assertions are disabled instead of NDEBUG
        where appropriate to avoid "defined but not used" warnings.

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

2011-12-22  Mariusz Grzegorczyk  <mariusz.g@samsung.com>

        [EFL] Missing plugins support for efl port
        https://bugs.webkit.org/show_bug.cgi?id=44505

        Reviewed by Anders Carlsson.

        Add define of ENABLE_PLUGIN_PACKAGE_SIMPLE_HASH for efl port.

        * wtf/Platform.h:

2011-12-22  Wei Charles  <charles.wei@torchmobile.com.cn>

        Remove un-used data member of LiteralParser::Lex::m_string
        https://bugs.webkit.org/show_bug.cgi?id=68216

        Reviewed by George Staikos.

        * runtime/LiteralParser.h:

2011-12-21  Dan Bernstein  <mitz@apple.com>

        OS X build fix after r103488.

        * JavaScriptCore.exp:

2011-12-21  Konrad Piascik  <kpiascik@rim.com>

        Implement the JavaScriptCore bindings for eventListenerHandlerLocation
        https://bugs.webkit.org/show_bug.cgi?id=74313

        Reviewed by Eric Seidel.

        Updated project files to get Windows and Mac builds working.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-12-21  Filip Pizlo  <fpizlo@apple.com>

        DFG ConvertThis optimizations do not honor the distinction between the global object and the global this object
        https://bugs.webkit.org/show_bug.cgi?id=75058
        <rdar://problem/10616612>
        <rdar://problem/10617500>

        Reviewed by Oliver Hunt.
        
        Added a call to toThisObject() in the DFG when planting a direct reference to the global this object.
        Instead of adding a separate toThisObject() method on JSCell which does not take ExecState*, I reascribed
        a new contract: if you're calling toThisObject() on JSObject or one of its subtypes, then the ExecState*
        is optional.

        * dfg/DFGAssemblyHelpers.h:
        (JSC::DFG::AssemblyHelpers::globalThisObjectFor):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * runtime/JSObject.h:

2011-12-21  Pierre Rossi  <pierre.rossi@gmail.com>

        Implement montonicallyIncreasingClock() on Qt
        https://bugs.webkit.org/show_bug.cgi?id=62159

        Reviewed by Darin Adler.

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

2011-12-20  Filip Pizlo  <fpizlo@apple.com>

        32_64 baseline JIT should attempt to convert division results to integers, and record when that fails
        https://bugs.webkit.org/show_bug.cgi?id=74997
        <rdar://problem/10612389>

        Reviewed by Gavin Barraclough.

        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_op_div):

2011-12-20  Filip Pizlo  <fpizlo@apple.com>

        JavaScriptCore should be consistent about how it reads and writes ArgumentCount
        https://bugs.webkit.org/show_bug.cgi?id=74989
        <rdar://problem/10612006>

        Reviewed by Gavin Barraclough.

        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileFunction):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileLoadVarargs):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_get_arguments_length):
        (JSC::JIT::emit_op_get_argument_by_val):
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::SpecializedThunkJIT):

2011-12-20  Filip Pizlo  <fpizlo@apple.com>

        Value Profiles for arguments should be more easily accessible to the interpreter
        https://bugs.webkit.org/show_bug.cgi?id=74984
        <rdar://problem/10611364>

        Reviewed by Gavin Barraclough.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::stronglyVisitStrongReferences):
        (JSC::CodeBlock::shouldOptimizeNow):
        (JSC::CodeBlock::dumpValueProfiles):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::setArgumentValueProfileSize):
        (JSC::CodeBlock::numberOfArgumentValueProfiles):
        (JSC::CodeBlock::valueProfileForArgument):
        (JSC::CodeBlock::addValueProfile):
        (JSC::CodeBlock::valueProfile):
        (JSC::CodeBlock::valueProfileForBytecodeOffset):
        (JSC::CodeBlock::totalNumberOfValueProfiles):
        (JSC::CodeBlock::getFromAllValueProfiles):
        * bytecode/ValueProfile.h:
        (JSC::ValueProfile::ValueProfile):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitValueProfilingSite):

2011-12-20  Gavin Barraclough  <barraclough@apple.com>

        JSC shell should accept utf8 input.

        Reviewed by Filip Pizlo.

        * jsc.cpp:
        (jscSource):
        (functionRun):
        (functionLoad):
        (functionCheckSyntax):
        (runWithScripts):
        (runInteractive):

2011-12-20  Gavin Barraclough  <barraclough@apple.com>

        Rubber Stamped by Sam Weinig

        * runtime/JSGlobalData.cpp:
            - removed some dead code.

2011-12-19  Geoffrey Garen  <ggaren@apple.com>

        Tightened up Vector<T>::append
        https://bugs.webkit.org/show_bug.cgi?id=74906

        Reviewed by Sam Weinig.

        Not a measurable speedup, but code inspection shows better code generated,
        and I believe this is a step toward turning off -fomit-frame-pointer.

        * wtf/Vector.h:
        (WTF::::append):
        (WTF::::appendSlowCase): Split out the slow case into a separate function
        to keep unnecessary instructions off the hot path. This means the hot
        path can now be inlined more often.
        
        Removed some old MSVC7 cruft. Hopefully, we don't need to hang on to a
        compiler work-around from 2007.

2011-12-19  Yuqiang Xian  <yuqiang.xian@intel.com>

        Temporary GPR should not be lazily allocated in DFG JIT on X86
        https://bugs.webkit.org/show_bug.cgi?id=74908

        Reviewed by Filip Pizlo.

        On X86, we used to allocate a temporary GPR lazily when it's really
        used rather than defined. This may cause potential issues of
        allocating registers inside control flow and result in problems in
        subsequent code generation, for example the DFG JIT may think an
        operand already being spilled (to satisfy the allocation request) and
        generate code to read the data from memory, but the allocation and
        spilling are in a branch which is not taken at runtime, so the
        generated code is incorrect.

        Although current DFG JIT code doesn't have this problematic pattern,
        it's better to cut-off the root to avoid any potential issues in the
        future.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::GPRTemporary::GPRTemporary):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::GPRTemporary::gpr):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-12-19  Yuqiang Xian  <yuqiang.xian@intel.com>

        Remove unused code for non-speculative Arith operations from DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=74905

        Reviewed by Filip Pizlo.

        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        * dfg/DFGSpeculativeJIT64.cpp:

2011-12-19  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=74903
        Exceptions not thrown correctly from DFG JIT on 32bit

        Reviewed by Oliver Hunt.

        Arguments for lookupExceptionHandler are not setup correctly.
        In the case of ARMv7 we rely on lr being preserved over a call,
        this in invalid. On x86 we don't should be poking the arguments onto the stack!

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::bytecodeOffsetForCallAtIndex):
        * dfg/DFGAssemblyHelpers.h:
        (JSC::DFG::AssemblyHelpers::restoreReturnAddressBeforeReturn):
        * dfg/DFGGPRInfo.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileBody):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addExceptionCheck):
        (JSC::DFG::JITCompiler::addFastExceptionCheck):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:

2011-12-19  Filip Pizlo  <fpizlo@apple.com>

        If we detect that we can use the JIT, don't use computed opcode lookups
        https://bugs.webkit.org/show_bug.cgi?id=74899
        <rdar://problem/10604551>

        Reviewed by Gavin Barraclough.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::Interpreter):
        (JSC::Interpreter::initialize):
        (JSC::Interpreter::privateExecute):
        * interpreter/Interpreter.h:
        (JSC::Interpreter::getOpcode):
        (JSC::Interpreter::getOpcodeID):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):

2011-12-19  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Qt build.

        Unreviewed.

        * wtf/ThreadSpecific.h: #include!

2011-12-18  Filip Pizlo  <fpizlo@apple.com>

        It should be possible to change the value of an Options variable without recompiling the world
        https://bugs.webkit.org/show_bug.cgi?id=74807

        Reviewed by Gavin Barraclough.

        * runtime/Options.cpp:
        (JSC::Options::initializeOptions):
        * runtime/Options.h:

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

        Unreviewed, rolling out r103250.
        http://trac.webkit.org/changeset/103250
        https://bugs.webkit.org/show_bug.cgi?id=74877

        it still breaks codegen (Requested by olliej on #webkit).

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGNode.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateArithNodeFlags):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::byValIsPure):
        (JSC::DFG::Propagator::clobbersWorld):
        (JSC::DFG::Propagator::getByValLoadElimination):
        (JSC::DFG::Propagator::checkStructureLoadElimination):
        (JSC::DFG::Propagator::getByOffsetLoadElimination):
        (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
        (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        Rolling r103120 back in with merge errors corrected.

        PutByVal[Alias] unnecessarily reloads the storage buffer
        https://bugs.webkit.org/show_bug.cgi?id=74747

        Reviewed by Gavin Barraclough.

        Make PutByVal use GetIndexedStorage to load the storage buffer.
        This required switching PutByVal to a vararg node (which is
        responsible for most of the noise in this patch).  This fixes the
        remaining portion of the kraken regression caused by the GetByVal
        storage load elimination, and a 1-5% win on some of the sub tests of
        the typed array benchmark at:
        http://stepheneb.github.com/webgl-matrix-benchmarks/matrix_benchmark.html

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGNode.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateArithNodeFlags):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::byValIndexIsPure):
        (JSC::DFG::Propagator::clobbersWorld):
        (JSC::DFG::Propagator::getByValLoadElimination):
        (JSC::DFG::Propagator::checkStructureLoadElimination):
        (JSC::DFG::Propagator::getByOffsetLoadElimination):
        (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
        (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        Placement new does an unnecessary NULL check
        https://bugs.webkit.org/show_bug.cgi?id=74676

        Reviewed by Sam Weinig.

        We can define our own version, which skips the NULL check.
        
        Not a measurable speedup, but code inspection shows better code generated,
        and I believe this is a step toward turning off -fomit-frame-pointer.

        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::create):
        * API/JSCallbackFunction.h:
        (JSC::JSCallbackFunction::create): Use the NotNull version of placement
        new to skip the NULL check.

        * API/JSCallbackObject.h: Removed a conflicting, unnecessaray placement new.

        (JSC::JSCallbackObject::create):
        * debugger/DebuggerActivation.h:
        (JSC::DebuggerActivation::create):
        * heap/HandleHeap.cpp:
        (JSC::HandleHeap::grow):
        * heap/HandleHeap.h:
        (JSC::HandleHeap::allocate):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::create):
        (JSC::MarkedBlock::recycle):
        * jit/JITCode.h:
        (JSC::JITCode::clear):
        * jsc.cpp:
        (GlobalObject::create):
        * profiler/CallIdentifier.h:
        * runtime/Arguments.h:
        (JSC::Arguments::create):
        * runtime/ArrayConstructor.h:
        (JSC::ArrayConstructor::create):
        * runtime/ArrayPrototype.h:
        (JSC::ArrayPrototype::create):
        * runtime/BooleanConstructor.h:
        (JSC::BooleanConstructor::create):
        * runtime/BooleanObject.h:
        (JSC::BooleanObject::create):
        * runtime/BooleanPrototype.h:
        (JSC::BooleanPrototype::create):
        * runtime/DateConstructor.h:
        (JSC::DateConstructor::create):
        * runtime/DateInstance.h:
        (JSC::DateInstance::create):
        * runtime/DatePrototype.h:
        (JSC::DatePrototype::create):
        * runtime/Error.h:
        (JSC::StrictModeTypeErrorFunction::create):
        * runtime/ErrorConstructor.h:
        (JSC::ErrorConstructor::create):
        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::create):
        * runtime/ErrorPrototype.h:
        (JSC::ErrorPrototype::create):
        * runtime/ExceptionHelpers.h:
        (JSC::InterruptedExecutionError::create):
        (JSC::TerminatedExecutionError::create):
        * runtime/Executable.h:
        (JSC::NativeExecutable::create):
        (JSC::EvalExecutable::create):
        (JSC::ProgramExecutable::create):
        (JSC::FunctionExecutable::create):
        * runtime/FunctionConstructor.h:
        (JSC::FunctionConstructor::create):
        * runtime/FunctionPrototype.h:
        (JSC::FunctionPrototype::create):
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::create):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::create):
        * runtime/JSActivation.h:
        (JSC::JSActivation::create):
        * runtime/JSArray.h:
        (JSC::JSArray::create):
        * runtime/JSBoundFunction.cpp:
        (JSC::JSBoundFunction::create):
        * runtime/JSByteArray.h:
        (JSC::JSByteArray::create): Use the NotNull version of placement
        new to skip the NULL check.

        * runtime/JSCell.h: Removed a conflicting, unnecessaray placement new.

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::create):
        * runtime/JSFunction.h:
        (JSC::JSFunction::create):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::create):
        * runtime/JSGlobalThis.h:
        (JSC::JSGlobalThis::create):
        * runtime/JSNotAnObject.h:
        (JSC::JSNotAnObject::create):
        * runtime/JSONObject.h:
        (JSC::JSONObject::create):
        * runtime/JSObject.h:
        (JSC::JSFinalObject::create):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::create):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::create):
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::create):
        * runtime/JSString.cpp:
        (JSC::StringObject::create):
        * runtime/JSString.h:
        (JSC::RopeBuilder::createNull):
        (JSC::RopeBuilder::create):
        (JSC::RopeBuilder::createHasOtherOwner):
        * runtime/MathObject.h:
        (JSC::MathObject::create):
        * runtime/NativeErrorConstructor.h:
        (JSC::NativeErrorConstructor::create):
        * runtime/NativeErrorPrototype.h:
        (JSC::NativeErrorPrototype::create):
        * runtime/NumberConstructor.h:
        (JSC::NumberConstructor::create):
        * runtime/NumberObject.h:
        (JSC::NumberObject::create):
        * runtime/NumberPrototype.h:
        (JSC::NumberPrototype::create):
        * runtime/ObjectConstructor.h:
        (JSC::ObjectConstructor::create):
        * runtime/ObjectPrototype.h:
        (JSC::ObjectPrototype::create):
        * runtime/RegExp.cpp:
        (JSC::RegExp::createWithoutCaching):
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::create):
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::create):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::create):
        * runtime/RegExpPrototype.h:
        (JSC::RegExpPrototype::create):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::create):
        * runtime/StrictEvalActivation.h:
        (JSC::StrictEvalActivation::create):
        * runtime/StringConstructor.h:
        (JSC::StringConstructor::create):
        * runtime/StringObject.h:
        (JSC::StringObject::create):
        * runtime/StringPrototype.h:
        (JSC::StringPrototype::create):
        * runtime/Structure.h:
        (JSC::Structure::create):
        (JSC::Structure::createStructure):
        * runtime/StructureChain.h:
        (JSC::StructureChain::create):
        * testRegExp.cpp:
        (GlobalObject::create):
        * wtf/BitVector.cpp:
        (WTF::BitVector::OutOfLineBits::create): Use the NotNull version of placement
        new to skip the NULL check.

        * wtf/BumpPointerAllocator.h:
        (WTF::BumpPointerPool::create): Standardized spacing to make grep easier.

        * wtf/ByteArray.cpp:
        (WTF::ByteArray::create):
        * wtf/Deque.h:
        (WTF::::append):
        (WTF::::prepend): Use NotNull, as above.

        * wtf/FastAllocBase.h: Added a placement new, since this class would otherwise
        hide the name of the global placement new.

        (WTF::fastNew): Standardized spacing. Most of these functions don't need
        NotNull, since they check for NULL, and the optimizer can see that.

        * wtf/HashTable.h:
        * wtf/HashTraits.h:
        (WTF::SimpleClassHashTraits::constructDeletedValue):
        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::allocFreeSpaceNode): NotNull, as above.

        * wtf/StdLibExtras.h:
        (throw): This is our NotNull placement new. Declaring that we throw is
        the C++ way to say that operator new will not return NULL.

        * wtf/ThreadSpecific.h:
        (WTF::T):
        * wtf/Vector.h:
        (WTF::::append):
        (WTF::::tryAppend):
        (WTF::::uncheckedAppend):
        (WTF::::insert):
        * wtf/text/AtomicStringHash.h:
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::createUninitialized):
        (WTF::StringImpl::reallocate):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::tryCreateUninitialized):
        * wtf/text/StringStatics.cpp:
        (WTF::AtomicString::init): Use NotNull, as above.

        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::allocDisjunctionContext):
        (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::ParenthesesDisjunctionContext):
        (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext): Standardized
        spacing for easy grep.

2011-12-19  Eric Carlson  <eric.carlson@apple.com>

        Enable <track> for Mac build
        https://bugs.webkit.org/show_bug.cgi?id=74838

        Reviewed by Darin Adler.

        * wtf/Platform.h:

2011-12-18  Filip Pizlo  <fpizlo@apple.com>

        DFG is too sloppy with register allocation
        https://bugs.webkit.org/show_bug.cgi?id=74835

        Reviewed by Gavin Barraclough.
        
        Added assertions that at the end of a successfully generated basic block,
        all use counts should be zero. This revealed a number of bugs:
        
        - Array length optimizations were turning a must-generate node into one
          that is not must-generate, but failing to change the ref count
          accordingly.
          
        - Indexed property storage optimizations were failing to deref their
          children, or to deref the indexed property storage node itself. Also,
          they used the Phantom node as a replacement. But the Phantom node is
          must-generate, which was causing bizarre issues. So this introduces a
          Nop node, which should be used in cases where you want a node that is
          skipped and has no children.
          
        This does not have any significant performance effect, but it should
        relieve some register pressure. The main thing this patch adds, though,
        are the assertions, which should make it easier to do register allocation
        related changes in the future.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::GenerationInfo::initConstant):
        (JSC::DFG::GenerationInfo::initInteger):
        (JSC::DFG::GenerationInfo::initJSValue):
        (JSC::DFG::GenerationInfo::initCell):
        (JSC::DFG::GenerationInfo::initBoolean):
        (JSC::DFG::GenerationInfo::initDouble):
        (JSC::DFG::GenerationInfo::initStorage):
        (JSC::DFG::GenerationInfo::use):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::clearAndDerefChild1):
        (JSC::DFG::Graph::clearAndDerefChild2):
        (JSC::DFG::Graph::clearAndDerefChild3):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::deref):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::fixupNode):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-12-18  Benjamin Poulain  <bpoulain@apple.com>

        Remove the duplicated code from ASCIICType.h
        https://bugs.webkit.org/show_bug.cgi?id=74771

        Reviewed by Andreas Kling.

        Use isASCIIDigit() and isASCIIAlpha() instead of copying the code.

        * wtf/ASCIICType.h:
        (WTF::isASCIIDigit):
        (WTF::isASCIIAlphanumeric):
        (WTF::isASCIIHexDigit):

2011-12-18  Anders Carlsson  <andersca@apple.com>

        Set the main frame view scroll position asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=74823

        Reviewed by Sam Weinig.

        * JavaScriptCore.exp:

2011-12-10  Andreas Kling  <kling@webkit.org>

        OpaqueJSClass: Remove RVCT2 workarounds.
        <http://webkit.org/b/74250>

        Reviewed by Benjamin Poulain.

        We no longer need workarounds for the RVCT2 compiler since it was
        only used for the Symbian port of WebKit which is now defunct.

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

2011-12-16  Benjamin Poulain  <bpoulain@apple.com>

        Remove the duplicated code from ASCIICType.h
        https://bugs.webkit.org/show_bug.cgi?id=74771

        Reviewed by Andreas Kling.

        The functions were sharing similar code and were defined for the various input types.
        Use templates instead to avoid code duplication.

        * wtf/ASCIICType.h:
        (WTF::isASCII):
        (WTF::isASCIIAlpha):
        (WTF::isASCIIAlphanumeric):
        (WTF::isASCIIDigit):
        (WTF::isASCIIHexDigit):
        (WTF::isASCIILower):
        (WTF::isASCIIOctalDigit):
        (WTF::isASCIIPrintable):
        (WTF::isASCIISpace):
        (WTF::isASCIIUpper):
        (WTF::toASCIILower):
        (WTF::toASCIIUpper):
        (WTF::toASCIIHexValue):
        (WTF::lowerNibbleToASCIIHexDigit):
        (WTF::upperNibbleToASCIIHexDigit):

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

        DFG OSR exit may get confused about where in the scratch buffer it stored a value
        https://bugs.webkit.org/show_bug.cgi?id=74695

        Reviewed by Oliver Hunt.
        
        The code that reads from the scratch buffer now explicitly knows which locations to
        read from. No new tests, since this patch covers a case so uncommon that I don't know
        how to make a test for it.

        * dfg/DFGOSRExitCompiler.h:
        (JSC::DFG::OSRExitCompiler::badIndex):
        (JSC::DFG::OSRExitCompiler::initializePoisoned):
        (JSC::DFG::OSRExitCompiler::poisonIndex):
        * dfg/DFGOSRExitCompiler32_64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOSRExitCompiler64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):

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

        PutByVal[Alias] unnecessarily reloads the storage buffer
        https://bugs.webkit.org/show_bug.cgi?id=74747

        Reviewed by Gavin Barraclough.

        Make PutByVal use GetIndexedStorage to load the storage buffer.
        This required switching PutByVal to a vararg node (which is
        responsible for most of the noise in this patch).  This fixes the
        remaining portion of the kraken regression caused by the GetByVal
        storage load elimination, and a 1-5% win on some of the sub tests of
        the typed array benchmark at:
        http://stepheneb.github.com/webgl-matrix-benchmarks/matrix_benchmark.html

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGNode.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateArithNodeFlags):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::byValIndexIsPure):
        (JSC::DFG::Propagator::clobbersWorld):
        (JSC::DFG::Propagator::getByValLoadElimination):
        (JSC::DFG::Propagator::checkStructureLoadElimination):
        (JSC::DFG::Propagator::getByOffsetLoadElimination):
        (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
        (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-12-16  Daniel Bates  <dbates@rim.com>

        Include BlackBerryPlatformLog.h instead of BlackBerryPlatformMisc.h

        Rubber-stamped by Antonio Gomes.

        BlackBerry::Platform::logV() is declared in BlackBerryPlatformLog.h. That is, it isn't
        declared in BlackBerryPlatformMisc.h. Hence, we should include BlackBerryPlatformLog.h
        instead of BlackBerryPlatformMisc.h.

        * wtf/Assertions.cpp:

2011-12-16  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize destructors
        https://bugs.webkit.org/show_bug.cgi?id=74331

        Reviewed by Geoffrey Garen.

        This is a megapatch which frees us from the chains of virtual destructors.

        In order to remove the virtual destructors, which are the last of the virtual 
        functions, from the JSCell hierarchy, we need to add the ClassInfo pointer to 
        the cell rather than to the structure because in order to be able to lazily call 
        the static destroy() functions that will replace the virtual destructors, we 
        need to be able to access the ClassInfo without the danger of the object's 
        Structure being collected before the object itself.

        After adding the ClassInfo to the cell, we can then begin to remove our use 
        of vptrs for optimizations within the JIT and the GC.  When we have removed 
        all of the stored vptrs from JSGlobalData, we can then also remove all of 
        the related VPtrStealingHack code.

        The replacement for virtual destructors will be to add a static destroy function 
        pointer to the MethodTable stored in ClassInfo.  Any subclass of JSCell that has 
        a non-trivial destructor will require its own static destroy function to static 
        call its corresponding destructor, which will now be non-virtual.  In future 
        patches we will slowly move away from destructors altogether as we make more and 
        more objects backed by GC memory rather than malloc-ed memory.  The GC will now 
        call the static destroy method rather than the virtual destructor.

        As we go through the hierarchy and add static destroy functions to classes, 
        we will also add a new assert, ASSERT_HAS_TRIVIAL_DESTRUCTOR, to those classes 
        to which it applies.  The future goal is to eventually have every class have that assert.

        * API/JSCallbackConstructor.cpp:
        (JSC::JSCallbackConstructor::destroy): Add a destroy function to statically call 
        ~JSCallbackConstructor because it has some extra destruction logic.
        * API/JSCallbackConstructor.h:
        * API/JSCallbackFunction.cpp: Add trivial destructor assert for JSCallbackFunction.
        * API/JSCallbackObject.cpp: Add a destroy function to statically call ~JSCallbackObject 
        because it has a member OwnPtr that needs destruction.
        (JSC::::destroy):
        * API/JSCallbackObject.h:
        * JavaScriptCore.exp: Add/remove necessary symbols for JSC.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Same for Windows symbols.
        * debugger/DebuggerActivation.cpp: DebuggerActivation, for some strange reason, didn't 
        have its own ClassInfo despite the fact that it overrides a number of MethodTable 
        methods.  Added the ClassInfo, along with an assertion that its destructor is trivial.
        * debugger/DebuggerActivation.h:
        * dfg/DFGOperations.cpp: Remove global data first argument to isJSArray, isJSByteArray, 
        isJSString, as it is no longer necessary.
        (JSC::DFG::putByVal):
        * dfg/DFGRepatch.cpp:  Ditto.  Also remove uses of jsArrayVPtr in favor of using the 
        JSArray ClassInfo pointer.
        (JSC::DFG::tryCacheGetByID):
        * dfg/DFGSpeculativeJIT.cpp:  Replace uses of the old vptrs with new ClassInfo 
        comparisons since we don't have vptrs anymore.
        (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
        (JSC::DFG::SpeculativeJIT::compileGetTypedArrayLength):
        (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::compileStrictEq):
        (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
        * dfg/DFGSpeculativeJIT.h: Ditto.
        (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject):
        * dfg/DFGSpeculativeJIT32_64.cpp: Ditto.
        (JSC::DFG::SpeculativeJIT::compileObjectEquality):
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp: Ditto.
        (JSC::DFG::SpeculativeJIT::compileObjectEquality):
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        * heap/Heap.cpp: Remove all uses of vptrs in GC optimizations and replace them with 
        ClassInfo comparisons.
        (JSC::Heap::Heap):
        * heap/MarkStack.cpp: Ditto.
        (JSC::MarkStackThreadSharedData::markingThreadMain):
        (JSC::visitChildren):
        (JSC::SlotVisitor::drain):
        * heap/MarkStack.h: Ditto.
        (JSC::MarkStack::MarkStack):
        * heap/MarkedBlock.cpp: Ditto.
        (JSC::MarkedBlock::callDestructor):
        (JSC::MarkedBlock::specializedSweep):
        * heap/MarkedBlock.h: Ditto.
        * heap/SlotVisitor.h: Ditto.
        (JSC::SlotVisitor::SlotVisitor):
        * heap/VTableSpectrum.cpp: Now that we don't have vptrs, we can't count them.  
        We'll have to rename this class and make it use ClassInfo ptrs in a future patch.
        (JSC::VTableSpectrum::count):
        * interpreter/Interpreter.cpp: Remove all global data arguments from isJSArray, 
        etc. functions.
        (JSC::loadVarargs):
        (JSC::Interpreter::tryCacheGetByID):
        (JSC::Interpreter::privateExecute):
        * jit/JIT.h: Remove vptr argument from emitAllocateBasicJSObject 
        * jit/JITInlineMethods.h: Remove vptr planting, and add ClassInfo planting, 
        remove all vtable related code.
        (JSC::JIT::emitLoadCharacterString):
        (JSC::JIT::emitAllocateBasicJSObject):
        (JSC::JIT::emitAllocateJSFinalObject):
        (JSC::JIT::emitAllocateJSFunction):
        * jit/JITOpcodes.cpp: Replace vptr related branch code with corresponding ClassInfo.
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::emit_op_to_primitive):
        (JSC::JIT::emit_op_convert_this):
        * jit/JITOpcodes32_64.cpp: Ditto.
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::emit_op_to_primitive):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emitSlow_op_neq):
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::emit_op_convert_this):
        * jit/JITPropertyAccess.cpp: Ditto.
        (JSC::JIT::stringGetByValStubGenerator):
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        * jit/JITPropertyAccess32_64.cpp: Ditto.
        (JSC::JIT::stringGetByValStubGenerator):
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        * jit/JITStubs.cpp: Remove global data argument from isJSString, etc.
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/SpecializedThunkJIT.h: Replace vptr related stuff with ClassInfo stuff.
        (JSC::SpecializedThunkJIT::loadJSStringArgument):
        * runtime/ArrayConstructor.cpp: Add trivial destructor assert.
        * runtime/ArrayPrototype.cpp: Remove global data argument from isJSArray.
        (JSC::arrayProtoFuncToString):
        (JSC::arrayProtoFuncJoin):
        (JSC::arrayProtoFuncPop):
        (JSC::arrayProtoFuncPush):
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        (JSC::arrayProtoFuncFilter):
        (JSC::arrayProtoFuncMap):
        (JSC::arrayProtoFuncEvery):
        (JSC::arrayProtoFuncForEach):
        (JSC::arrayProtoFuncSome):
        (JSC::arrayProtoFuncReduce):
        (JSC::arrayProtoFuncReduceRight):
        * runtime/BooleanConstructor.cpp: Add trivial destructor assert.
        * runtime/BooleanObject.cpp: Ditto.
        * runtime/BooleanPrototype.cpp: Ditto.
        * runtime/ClassInfo.h: Add destroy function pointer to MethodTable.
        * runtime/DateConstructor.cpp: Add trivial destructor assert.
        * runtime/DateInstance.cpp: Add destroy function for DateInstance because it has a RefPtr 
        that needs destruction.
        (JSC::DateInstance::destroy):
        * runtime/DateInstance.h:
        * runtime/Error.cpp: Ditto (because of UString member).
        (JSC::StrictModeTypeErrorFunction::destroy):
        * runtime/Error.h:
        * runtime/ErrorConstructor.cpp: Add trivial destructor assert.
        * runtime/ErrorInstance.cpp: Ditto.
        * runtime/ExceptionHelpers.cpp: Ditto.
        * runtime/Executable.cpp: Add destroy functions for ExecutableBase and subclasses.
        (JSC::ExecutableBase::destroy):
        (JSC::NativeExecutable::destroy):
        (JSC::ScriptExecutable::destroy):
        (JSC::EvalExecutable::destroy):
        (JSC::ProgramExecutable::destroy):
        (JSC::FunctionExecutable::destroy):
        * runtime/Executable.h:
        * runtime/FunctionConstructor.cpp: Add trivial destructor assert.
        * runtime/FunctionPrototype.cpp: Ditto. Also remove global data first arg from isJSArray.
        (JSC::functionProtoFuncApply):
        * runtime/GetterSetter.cpp: Ditto.
        * runtime/InitializeThreading.cpp: Remove call to JSGlobalData::storeVPtrs since it no 
        longer exists.
        (JSC::initializeThreadingOnce):
        * runtime/InternalFunction.cpp: Remove vtableAnchor function, add trivial destructor assert, 
        remove first arg from isJSString.
        (JSC::InternalFunction::displayName):
        * runtime/InternalFunction.h: Remove VPtrStealingHack.
        * runtime/JSAPIValueWrapper.cpp: Add trivial destructor assert.
        * runtime/JSArray.cpp: Add static destroy to call ~JSArray.  Replace vptr checks in 
        destructor with ClassInfo checks.
        (JSC::JSArray::~JSArray):
        (JSC::JSArray::destroy):
        * runtime/JSArray.h: Remove VPtrStealingHack.  Remove globalData argument from isJSArray 
        and change them to check the ClassInfo rather than the vptrs.
        (JSC::isJSArray):
        * runtime/JSBoundFunction.cpp: Add trival destructor assert. Remove first arg from isJSArray.
        (JSC::boundFunctionCall):
        (JSC::boundFunctionConstruct):
        * runtime/JSByteArray.cpp: Add static destroy function, replace vptr checks with ClassInfo checks.
        (JSC::JSByteArray::~JSByteArray):
        (JSC::JSByteArray::destroy):
        * runtime/JSByteArray.h: Remove VPtrStealingHack code.
        (JSC::isJSByteArray):
        * runtime/JSCell.cpp: Add trivial destructor assert.  Add static destroy function.
        (JSC::JSCell::destroy):
        * runtime/JSCell.h: Remove VPtrStealingHack code.  Add function for returning the offset 
        of the ClassInfo pointer in the object for use by the JIT.  Add the ClassInfo pointer to 
        the JSCell itself, and grab it from the Structure.  Remove the vptr and setVPtr functions, 
        as they are no longer used.  Add a validatedClassInfo function to JSCell for any clients 
        that want to verify, while in Debug mode, that the ClassInfo contained in the cell is the 
        same one as that contained in the Structure.  This isn't used too often, because most of 
        the places where we compare the ClassInfo to things can be called during destruction.  
        Since the Structure is unreliable during the phase when destructors are being called, 
        we can't call validatedClassInfo.
        (JSC::JSCell::classInfoOffset):
        (JSC::JSCell::structure):
        (JSC::JSCell::classInfo):
        * runtime/JSFunction.cpp: Remove VPtrStealingHack code.  Add static destroy, remove vtableAnchor, 
        remove first arg from call to isJSString.
        (JSC::JSFunction::destroy):
        (JSC::JSFunction::displayName):
        * runtime/JSFunction.h: 
        * runtime/JSGlobalData.cpp: Remove all VPtr stealing code and storage, including storeVPtrs, 
        as these vptrs are no longer needed in the codebase.
        * runtime/JSGlobalData.h:
        (JSC::TypedArrayDescriptor::TypedArrayDescriptor): Changed the TypedArrayDescriptor to use 
        ClassInfo rather than the vptr.
        * runtime/JSGlobalObject.cpp: Add static destroy function.
        (JSC::JSGlobalObject::destroy):
        * runtime/JSGlobalObject.h:
        * runtime/JSGlobalThis.cpp: Add trivial destructor assert.
        * runtime/JSNotAnObject.cpp: Ditto.
        * runtime/JSONObject.cpp: Ditto. Remove first arg from isJSArray calls.
        (JSC::Stringifier::Holder::appendNextProperty):
        (JSC::Walker::walk):
        * runtime/JSObject.cpp: 
        (JSC::JSFinalObject::destroy):
        (JSC::JSNonFinalObject::destroy):
        (JSC::JSObject::destroy):
        * runtime/JSObject.h: Add trivial destructor assert for JSObject, remove vtableAnchor 
        from JSNonFinalObject and JSFinalObject, add static destroy for JSFinalObject and 
        JSNonFinalObject, add isJSFinalObject utility function similar to isJSArray, remove all VPtrStealingHack code.
        (JSC::JSObject::finishCreation):
        (JSC::JSNonFinalObject::finishCreation):
        (JSC::JSFinalObject::finishCreation):
        (JSC::isJSFinalObject):
        * runtime/JSPropertyNameIterator.cpp: Add static destroy.
        (JSC::JSPropertyNameIterator::destroy):
        * runtime/JSPropertyNameIterator.h:
        * runtime/JSStaticScopeObject.cpp: Ditto.
        (JSC::JSStaticScopeObject::destroy):
        * runtime/JSStaticScopeObject.h: Ditto. 
        * runtime/JSString.cpp:
        (JSC::JSString::destroy):
        * runtime/JSString.h: Ditto. Remove VPtrStealingHack code. Also remove fixupVPtr code, 
        since we no longer need to fixup vptrs.
        (JSC::jsSingleCharacterString):
        (JSC::jsSingleCharacterSubstring):
        (JSC::jsNontrivialString):
        (JSC::jsString):
        (JSC::jsSubstring8):
        (JSC::jsSubstring):
        (JSC::jsOwnedString):
        (JSC::jsStringBuilder):
        (JSC::isJSString):
        * runtime/JSVariableObject.cpp: 
        (JSC::JSVariableObject::destroy):
        * runtime/JSVariableObject.h: Ditto.
        * runtime/JSWrapperObject.cpp:
        * runtime/JSWrapperObject.h: Add trivial destructor assert.
        * runtime/MathObject.cpp: Ditto.
        * runtime/NativeErrorConstructor.cpp: Ditto.
        * runtime/NumberConstructor.cpp: Ditto.
        * runtime/NumberObject.cpp: Ditto.
        * runtime/NumberPrototype.cpp: Ditto.
        * runtime/ObjectConstructor.cpp: Ditto.
        * runtime/ObjectPrototype.cpp: Ditto.
        * runtime/Operations.h: Remove calls to fixupVPtr, remove first arg to isJSString.
        (JSC::jsString):
        (JSC::jsLess):
        (JSC::jsLessEq):
        * runtime/RegExp.cpp: Add static destroy.
        (JSC::RegExp::destroy):
        * runtime/RegExp.h:
        * runtime/RegExpConstructor.cpp: Add static destroy for RegExpConstructor and RegExpMatchesArray.
        (JSC::RegExpConstructor::destroy):
        (JSC::RegExpMatchesArray::destroy):
        * runtime/RegExpConstructor.h:
        * runtime/RegExpMatchesArray.h:
        * runtime/RegExpObject.cpp: Add static destroy.
        (JSC::RegExpObject::destroy):
        * runtime/RegExpObject.h:
        * runtime/ScopeChain.cpp: Add trivial destructor assert.
        * runtime/ScopeChain.h:
        * runtime/StrictEvalActivation.cpp: Ditto.
        * runtime/StringConstructor.cpp:
        * runtime/StringObject.cpp: Ditto. Remove vtableAnchor.
        * runtime/StringObject.h:
        * runtime/StringPrototype.cpp: Ditto.
        * runtime/Structure.cpp: Add static destroy.
        (JSC::Structure::destroy):
        * runtime/Structure.h: Move JSCell::finishCreation and JSCell constructor into Structure.h 
        because they need to have the full Structure type to access the ClassInfo to store in the JSCell.
        (JSC::JSCell::setStructure):
        (JSC::JSCell::validatedClassInfo):
        (JSC::JSCell::JSCell):
        (JSC::JSCell::finishCreation):
        * runtime/StructureChain.cpp: Add static destroy.
        (JSC::StructureChain::destroy):
        * runtime/StructureChain.h:
        * wtf/Assertions.h: Add new assertion ASSERT_HAS_TRIVIAL_DESTRUCTOR, which uses clangs 
        ability to tell us when a class has a trivial destructor. We will use this assert 
        more in future patches as we move toward having all JSC objects backed by GC memory, 
        which means moving away from using destructors/finalizers.

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

        Fix 'make dist' in preparation for the GTK+ release.

        * GNUmakefile.list.am: Add missing header.

2011-12-15  Sam Weinig  <sam@webkit.org>

        <rdar://problem/10552550> JavaScriptCore uses obsolete 'cpy' mnemonic in ARM assembly

        Reviewed by Gavin Barraclough.

        Original patch by Jim Grosbach.

        * jit/JITStubs.cpp:
        (JSC::ctiTrampoline):
        (JSC::ctiVMThrowTrampoline):
        Replace uses of the 'cpy' mnemonic with 'mov'.

2011-12-15  Filip Pizlo  <fpizlo@apple.com>

        Value profiling should distinguished between NaN and non-NaN doubles
        https://bugs.webkit.org/show_bug.cgi?id=74682

        Reviewed by Gavin Barraclough.
        
        Added PredictDoubleReal and PredictDoubleNaN. PredictDouble is now the union
        of the two.

        * bytecode/PredictedType.cpp:
        (JSC::predictionToString):
        (JSC::predictionFromValue):
        * bytecode/PredictedType.h:
        (JSC::isDoubleRealPrediction):
        (JSC::isDoublePrediction):

2011-12-15  Anders Carlsson  <andersca@apple.com>

        Regression (r102866): Navigating away from or closing a page with a plugin crashes
        https://bugs.webkit.org/show_bug.cgi?id=74655
        <rdar://problem/10590024>

        Reviewed by Sam Weinig.

        Rewrite HasRefAndDeref to work if ref and deref are implemented in base classes,
        using a modified version of the technique described here:
        http://groups.google.com/group/comp.lang.c++.moderated/msg/e5fbc9305539f699
        
        * wtf/Functional.h:

2011-12-15  Andy Wingo  <wingo@igalia.com>

        Warnings fixes in Interpreter.cpp and PrivateExecute.cpp
        https://bugs.webkit.org/show_bug.cgi?id=74624

        Reviewed by Darin Adler.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute): Fix variables unused in
        release mode.
        * wtf/ParallelJobsGeneric.cpp:
        (WTF::ParallelEnvironment::ParallelEnvironment): Fix
        signed/unsigned comparison warning, with a cast.

2011-12-15  Andy Wingo  <wingo@igalia.com>

        Use more macrology in JSC::Options
        https://bugs.webkit.org/show_bug.cgi?id=72938

        Reviewed by Filip Pizlo.

        * runtime/Options.cpp:
        (JSC::Options::initializeOptions):
        * runtime/Options.h: Use macros to ensure that all heuristics are
        declared and have initializers.

2011-12-15  Anders Carlsson  <andersca@apple.com>

        Add ScrollingCoordinator class and ENABLE_THREADED_SCROLLING define
        https://bugs.webkit.org/show_bug.cgi?id=74639

        Reviewed by Andreas Kling.

        Add ENABLE_THREADED_SCROLLING #define.

        * wtf/Platform.h:

2011-12-15  Anders Carlsson  <andersca@apple.com>

        EventDispatcher should handle wheel events on the connection queue
        https://bugs.webkit.org/show_bug.cgi?id=74627

        Reviewed by Andreas Kling.

        Add a BoundFunctionImpl specialization that takes three parameters.

        * wtf/Functional.h:
        (WTF::C::):
        (WTF::R):
        (WTF::bind):

2011-12-14  Anders Carlsson  <andersca@apple.com>

        Add WTF::Function to wtf/Forward.h
        https://bugs.webkit.org/show_bug.cgi?id=74576

        Reviewed by Adam Roben.

        * jsc.cpp:
        Work around a name conflict in the readline library.

        * wtf/Forward.h:
        Add Function.

2011-12-15  Igor Oliveira  <igor.oliveira@openbossa.org>

        [Qt] Support requestAnimationFrame API
        https://bugs.webkit.org/show_bug.cgi?id=74528

        Let Qt port use REQUEST_ANIMATION_FRAME_TIMER.

        Reviewed by Kenneth Rohde Christiansen.

        * wtf/Platform.h:

2011-12-15  Andy Wingo  <wingo@igalia.com>

        Minor refactor to Parser::parseTryStatement
        https://bugs.webkit.org/show_bug.cgi?id=74507

        Reviewed by Geoffrey Garen.

        * parser/Parser.cpp (JSC::Parser::parseTryStatement): Use the
        Parser's declareVariable instead of going directly to the scope.
        This will facilitate future checks related to harmony block
        scoping.

2011-12-15  Andy Wingo  <wingo@igalia.com>

        Rename JSC::Heuristics to JSC::Options
        https://bugs.webkit.org/show_bug.cgi?id=72889

        Reviewed by Filip Pizlo.

        * runtime/Options.cpp: Renamed from Source/JavaScriptCore/runtime/Heuristics.cpp.
        * runtime/Options.h: Renamed from Source/JavaScriptCore/runtime/Heuristics.h.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::shouldOptimizeNow):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::likelyToTakeSlowCase):
        (JSC::CodeBlock::couldTakeSlowCase):
        (JSC::CodeBlock::likelyToTakeSpecialFastCase):
        (JSC::CodeBlock::likelyToTakeDeepestSlowCase):
        (JSC::CodeBlock::likelyToTakeAnySlowCase):
        (JSC::CodeBlock::reoptimizationRetryCounter):
        (JSC::CodeBlock::countReoptimization):
        (JSC::CodeBlock::counterValueForOptimizeAfterWarmUp):
        (JSC::CodeBlock::counterValueForOptimizeAfterLongWarmUp):
        (JSC::CodeBlock::optimizeNextInvocation):
        (JSC::CodeBlock::dontOptimizeAnytimeSoon):
        (JSC::CodeBlock::optimizeSoon):
        (JSC::CodeBlock::largeFailCountThreshold):
        (JSC::CodeBlock::largeFailCountThresholdForLoop):
        (JSC::CodeBlock::shouldReoptimizeNow):
        (JSC::CodeBlock::shouldReoptimizeFromLoopNow):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleInlining):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::mightCompileEval):
        (JSC::DFG::mightCompileProgram):
        (JSC::DFG::mightCompileFunctionForCall):
        (JSC::DFG::mightCompileFunctionForConstruct):
        (JSC::DFG::mightInlineFunctionForCall):
        (JSC::DFG::mightInlineFunctionForConstruct):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::considerAddingAsFrequentExitSiteSlow):
        * dfg/DFGOSRExitCompiler32_64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOSRExitCompiler64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGVariableAccessData.h:
        (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote):
        * heap/MarkStack.cpp:
        (JSC::MarkStackSegmentAllocator::allocate):
        (JSC::MarkStackSegmentAllocator::shrinkReserve):
        (JSC::MarkStackArray::MarkStackArray):
        (JSC::MarkStackArray::donateSomeCellsTo):
        (JSC::MarkStackArray::stealSomeCellsFrom):
        (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
        (JSC::SlotVisitor::donateSlow):
        (JSC::SlotVisitor::drain):
        (JSC::SlotVisitor::drainFromShared):
        * heap/MarkStack.h:
        (JSC::MarkStack::mergeOpaqueRootsIfProfitable):
        (JSC::MarkStack::addOpaqueRoot):
        (JSC::MarkStackArray::canDonateSomeCells):
        * heap/SlotVisitor.h:
        (JSC::SlotVisitor::donate):
        * jit/JIT.cpp:
        (JSC::JIT::emitOptimizationCheck):
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreadingOnce): Adapt callers and build systems.

        * testRegExp.cpp:
        (CommandLine::CommandLine):
        * jsc.cpp:
        (CommandLine::CommandLine):
        Rename from Options, to avoid name conflict.

2011-12-14  Sam Weinig  <sam@webkit.org>

        Revert unintentional change to JavaScriptCore.def

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-12-14  Sam Weinig  <weinig@apple.com>

        Remove whitespace from InheritedPropertySheets attributes in
        vsprops files to appease the Visual Studio project migrator.

        Reviewed by Adam Roben.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebug.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebugAll.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebugCairoCFLite.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebug.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugAll.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugCairoCFLite.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedProduction.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedRelease.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedReleaseCairoCFLite.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedReleasePGO.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreProduction.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreRelease.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseCairoCFLite.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGOOptimize.vsprops:
        * JavaScriptCore.vcproj/WTF/WTFDebug.vsprops:
        * JavaScriptCore.vcproj/WTF/WTFDebugAll.vsprops:
        * JavaScriptCore.vcproj/WTF/WTFDebugCairoCFLite.vsprops:
        * JavaScriptCore.vcproj/WTF/WTFProduction.vsprops:
        * JavaScriptCore.vcproj/WTF/WTFRelease.vsprops:
        * JavaScriptCore.vcproj/WTF/WTFReleaseCairoCFLite.vsprops:
        * JavaScriptCore.vcproj/WTF/WTFReleasePGO.vsprops:
        * JavaScriptCore.vcproj/jsc/jscDebug.vsprops:
        * JavaScriptCore.vcproj/jsc/jscDebugAll.vsprops:
        * JavaScriptCore.vcproj/jsc/jscDebugCairoCFLite.vsprops:
        * JavaScriptCore.vcproj/jsc/jscProduction.vsprops:
        * JavaScriptCore.vcproj/jsc/jscRelease.vsprops:
        * JavaScriptCore.vcproj/jsc/jscReleaseCairoCFLite.vsprops:
        * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops:
        * JavaScriptCore.vcproj/testRegExp/testRegExpDebug.vsprops:
        * JavaScriptCore.vcproj/testRegExp/testRegExpDebugAll.vsprops:
        * JavaScriptCore.vcproj/testRegExp/testRegExpDebugCairoCFLite.vsprops:
        * JavaScriptCore.vcproj/testRegExp/testRegExpProduction.vsprops:
        * JavaScriptCore.vcproj/testRegExp/testRegExpRelease.vsprops:
        * JavaScriptCore.vcproj/testRegExp/testRegExpReleaseCairoCFLite.vsprops:
        * JavaScriptCore.vcproj/testRegExp/testRegExpReleasePGO.vsprops:
        * JavaScriptCore.vcproj/testapi/testapiDebug.vsprops:
        * JavaScriptCore.vcproj/testapi/testapiDebugAll.vsprops:
        * JavaScriptCore.vcproj/testapi/testapiDebugCairoCFLite.vsprops:
        * JavaScriptCore.vcproj/testapi/testapiProduction.vsprops:
        * JavaScriptCore.vcproj/testapi/testapiRelease.vsprops:
        * JavaScriptCore.vcproj/testapi/testapiReleaseCairoCFLite.vsprops:

2011-12-14  Anders Carlsson  <andersca@apple.com>

        binding a member function should ref/deref the object pointer if needed
        https://bugs.webkit.org/show_bug.cgi?id=74552

        Reviewed by Sam Weinig.

        Add a HasRefAndDeref helper class template which checks if a given class type has ref and deref
        member functions which the right type. Use this to determine if we should ref/deref the first parameter.

        * wtf/Functional.h:
        (WTF::R):
        (WTF::C::):
        (WTF::RefAndDeref::ref):
        (WTF::RefAndDeref::deref):

2011-12-14  Hajime Morrita  <morrita@chromium.org>

        JS_INLINE and WTF_INLINE should be visible from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=73191

        - Moved Export related macro definitions from config.h to ExportMacros.h and JSExportMacros.h.
        - Moved WTF_USE_JSC and WTF_USE_V8 from various config.h family to Platform.h.
        - Replaced JS_EXPORTDATA in wtf moudule with newly introduced WTF_EXPORTDATA.

        Reviewed by Kevin Ollivier.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * config.h:
        * runtime/JSExportMacros.h: Added.
        * wtf/ExportMacros.h:
        * wtf/Platform.h:
        * wtf/WTFThreadData.h:
        * wtf/text/AtomicString.h:
        * wtf/text/StringStatics.cpp:

2011-12-14  Anders Carlsson  <andersca@apple.com>

        Work around a bug in the MSVC2005 compiler
        https://bugs.webkit.org/show_bug.cgi?id=74550

        Reviewed by Sam Weinig.

        Add template parameters for the return types of the partial specializations of BoundFunctionImpl.

        * wtf/Functional.h:
        (WTF::R):

2011-12-13  Jon Lee  <jonlee@apple.com>

        Enable notifications on Mac.

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

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

        Remove definition of old ENABLE(YARR) macro
        <http://webkit.org/b/74532>

        Reviewed by Darin Adler.

        * wtf/Platform.h: Removed ENABLE_YARR macros.

2011-12-14  Anders Carlsson  <andersca@apple.com>

        bind should handle member functions
        https://bugs.webkit.org/show_bug.cgi?id=74529

        Reviewed by Sam Weinig.

        Add FunctionWrapper partial specializations for member function pointers.

        * wtf/Functional.h:
        (WTF::C::):

2011-12-14  Gavin Barraclough  <barraclough@apple.com>

        DFG relies on returning a struct in registers
        https://bugs.webkit.org/show_bug.cgi?id=74527

        Reviewed by Geoff Garen.

        This will not work on all platforms. Returning a uint64_t will more reliably achieve
        what we want, on 32-bit platforms (on 64-bit, stick with the struct return).

        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        (JSC::DFG::DFGHandler::dfgHandlerEncoded):

2011-12-14  Anders Carlsson  <andersca@apple.com>

        Add unary and binary bind overloads
        https://bugs.webkit.org/show_bug.cgi?id=74524

        Reviewed by Sam Weinig.

        * wtf/Functional.h:
        (WTF::R):
        (WTF::FunctionWrapper::ResultType):
        (WTF::bind):

2011-12-14  Anders Carlsson  <andersca@apple.com>

        Add back the callOnMainThread overload that takes a WTF::Function
        https://bugs.webkit.org/show_bug.cgi?id=74512

        Reviewed by Darin Adler.

        Add back the overload; the changes to WebCore should hopefully keep Windows building.

        * wtf/MainThread.cpp:
        (WTF::callFunctionObject):
        (WTF::callOnMainThread):
        * wtf/MainThread.h:

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

        DFG should infer when local variables are doubles
        https://bugs.webkit.org/show_bug.cgi?id=74480

        Reviewed by Oliver Hunt.
        
        Introduced the notion that a local variable (though not an argument, yet!) can
        be stored as a double, and will be guaranteed to always contain a double. This
        requires more magic in the OSR (conversion in both entry and exit). The inference
        is quite unorthodox: all uses of a variable vote on whether they think it should
        be a double or a JSValue, based on how they use it. If they use it in an integer
        or boxed value context, they vote JSValue. If they use it in a double context,
        they vote double. This voting is interleaved in the propagator's fixpoint, so
        that variables voted double then have a double prediction propagated from them.
        This interleaving is needed because a variable that actually always contains an
        integer that always gets used in arithmetic that involves doubles may end up
        being voted double, which then means that all uses of the variable will see a
        double rather than an integer.
        
        This is worth 18% to SunSpider/3d-cube, 7% to Kraken/audio-beat-detection, 7%
        to Kraken/audio-fft, 6% to Kraken/imaging-darkroom, 20% to
        Kraken/imaging-gaussian-blur, and just over 1% to Kraken/json-parse-financial.
        It results in a 1% speed-up on SunSpider and a 4% speed-up in Kraken.  Similar
        results on JSVALUE32_64, though with a bigger win on Kraken (5%) and no overall
        win on SunSpider.

        * bytecode/ValueRecovery.h:
        (JSC::ValueRecovery::alreadyInRegisterFileAsUnboxedDouble):
        (JSC::ValueRecovery::dump):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGAssemblyHelpers.h:
        (JSC::DFG::AssemblyHelpers::boxDouble):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::noticeOSREntry):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGOSREntry.h:
        * dfg/DFGOSRExitCompiler64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::vote):
        (JSC::DFG::Propagator::doRoundOfDoubleVoting):
        (JSC::DFG::Propagator::propagatePredictions):
        (JSC::DFG::Propagator::fixupNode):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::ValueSource::dump):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGVariableAccessData.h:
        (JSC::DFG::VariableAccessData::VariableAccessData):
        (JSC::DFG::VariableAccessData::clearVotes):
        (JSC::DFG::VariableAccessData::vote):
        (JSC::DFG::VariableAccessData::doubleVoteRatio):
        (JSC::DFG::VariableAccessData::shouldUseDoubleFormatAccordingToVote):
        (JSC::DFG::VariableAccessData::shouldUseDoubleFormat):
        (JSC::DFG::VariableAccessData::tallyVotesForShouldUseDoubleFormat):
        * runtime/Arguments.cpp:
        (JSC::Arguments::tearOff):
        * runtime/Heuristics.cpp:
        (JSC::Heuristics::initializeHeuristics):
        * runtime/Heuristics.h:

2011-12-13  Anders Carlsson  <andersca@apple.com>

        Try to fix the Windows build.

        Remove the callOnMainThread overload that takes a WTF::Function since it's not being used.

        * wtf/MainThread.cpp:
        * wtf/MainThread.h:

2011-12-13  Anders Carlsson  <andersca@apple.com>

        Add a very bare-bones implementation of bind and Function to WTF
        https://bugs.webkit.org/show_bug.cgi?id=74462

        Reviewed by Sam Weinig.

        In order to make it easier to package up function calls and send them across
        threads, add a (currently very simple) implementation of WTF::bind and WTF::Function to a new
        wtf/Functional.h header.

        Currently, all bind can do is bind a nullary function and return a Function object that can be called and copied,
        but I'll add more as the need arises.

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/Functional.h: Added.
        (WTF::R):
        (WTF::FunctionImplBase::~FunctionImplBase):
        (WTF::FunctionWrapper::ResultType):
        (WTF::FunctionBase::isNull):
        (WTF::FunctionBase::FunctionBase):
        (WTF::FunctionBase::impl):
        (WTF::bind):
        * wtf/MainThread.cpp:
        (WTF::callFunctionObject):
        (WTF::callOnMainThread):
        * wtf/MainThread.h:
        * wtf/wtf.pro:

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

        <rdar://problem/10577239> GC Crash introduced in r102545

        Reviewed by Gavin Barraclough.
        
        MarkedArgumentBuffer was still marking items in forwards order, even though
        the argument order has been reversed.
        
        I fixed this bug, and replaced address calculation code with some helper
        functions -- mallocBase() and slotFor() -- so it stays fixed everywhere.

        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBuffer::markLists):
        (JSC::MarkedArgumentBuffer::slowAppend):
        * runtime/ArgList.h:
        (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer):
        (JSC::MarkedArgumentBuffer::at):
        (JSC::MarkedArgumentBuffer::append):
        (JSC::MarkedArgumentBuffer::last):
        (JSC::MarkedArgumentBuffer::slotFor):
        (JSC::MarkedArgumentBuffer::mallocBase):

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

        DFG OSR exit for UInt32ToNumber should roll forward, not roll backward
        https://bugs.webkit.org/show_bug.cgi?id=74463

        Reviewed by Gavin Barraclough.
        
        Implements roll-forward OSR exit for UInt32ToNumber, which requires ValueRecoveries knowing
        how to execute the slow path of UInt32ToNumber.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::lastOSRExit):
        * bytecode/CodeOrigin.h:
        (JSC::CodeOrigin::operator!=):
        * bytecode/ValueRecovery.h:
        (JSC::ValueRecovery::uint32InGPR):
        (JSC::ValueRecovery::gpr):
        (JSC::ValueRecovery::dump):
        * dfg/DFGAssemblyHelpers.cpp:
        * dfg/DFGAssemblyHelpers.h:
        * dfg/DFGOSRExit.h:
        (JSC::DFG::OSRExit::valueRecoveryForOperand):
        * dfg/DFGOSRExitCompiler32_64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOSRExitCompiler64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileUInt32ToNumber):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber):
        (JSC::DFG::SpeculativeJIT::compile):

2011-12-13  Oliver Hunt  <oliver@apple.com>

        Arguments object doesn't handle mutation of length property correctly
        https://bugs.webkit.org/show_bug.cgi?id=74454

        Reviewed by Gavin Barraclough.

        Correct handling of arguments objects with overridden length property

        * interpreter/Interpreter.cpp:
        (JSC::loadVarargs):
        * runtime/Arguments.cpp:
        (JSC::Arguments::copyToArguments):
        (JSC::Arguments::fillArgList):

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

        DFG GetByVal CSE rule should match PutByValAlias
        https://bugs.webkit.org/show_bug.cgi?id=74390

        Reviewed by Geoff Garen.
        
        Tiny win on some benchmarks. Maybe a 0.2% win on SunSpider.

        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::getByValLoadElimination):

2011-12-13  Andy Wingo  <wingo@igalia.com>

        Fix interpreter debug build.
        https://bugs.webkit.org/show_bug.cgi?id=74439

        Reviewed by Geoffrey Garen.

        * bytecode/ValueRecovery.h: Include stdio.h on debug builds.

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

        DFG should know exactly why recompilation was triggered
        https://bugs.webkit.org/show_bug.cgi?id=74362

        Reviewed by Oliver Hunt.
        
        Each OSR exit is now individually counted, as well as counting the total number 
        of OSR exits that occurred in a code block. If recompilation is triggered, we
        check to see if there are OSR exit sites that make up a sufficiently large
        portion of the total OSR exits that occurred. For any such OSR exit sites, we
        add a description of the site (bytecode index, kind) to a data structure in the
        corresponding baseline CodeBlock. Then, when we recompile the code, we immediately
        know which speculations would be unwise based on the fact that previous such
        speculations proved to be fruitless.
        
        This means 2% win on two of the SunSpider string tests, a 4% win on V8's deltablue,
        and 5% on Kraken's imaging-darkroom. It is only a minor win in the averages, less
        than 0.5%.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::tallyFrequentExitSites):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addFrequentExitSite):
        (JSC::CodeBlock::exitProfile):
        (JSC::CodeBlock::reoptimize):
        (JSC::CodeBlock::tallyFrequentExitSites):
        * bytecode/DFGExitProfile.cpp: Added.
        (JSC::DFG::ExitProfile::ExitProfile):
        (JSC::DFG::ExitProfile::~ExitProfile):
        (JSC::DFG::ExitProfile::add):
        (JSC::DFG::QueryableExitProfile::QueryableExitProfile):
        (JSC::DFG::QueryableExitProfile::~QueryableExitProfile):
        * bytecode/DFGExitProfile.h: Added.
        (JSC::DFG::exitKindToString):
        (JSC::DFG::exitKindIsCountable):
        (JSC::DFG::FrequentExitSite::FrequentExitSite):
        (JSC::DFG::FrequentExitSite::operator!):
        (JSC::DFG::FrequentExitSite::operator==):
        (JSC::DFG::FrequentExitSite::hash):
        (JSC::DFG::FrequentExitSite::bytecodeOffset):
        (JSC::DFG::FrequentExitSite::kind):
        (JSC::DFG::FrequentExitSite::isHashTableDeletedValue):
        (JSC::DFG::FrequentExitSiteHash::hash):
        (JSC::DFG::FrequentExitSiteHash::equal):
        (JSC::DFG::QueryableExitProfile::hasExitSite):
        * dfg/DFGAssemblyHelpers.h:
        (JSC::DFG::AssemblyHelpers::baselineCodeBlockForOriginAndBaselineCodeBlock):
        (JSC::DFG::AssemblyHelpers::baselineCodeBlockFor):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::makeSafe):
        (JSC::DFG::ByteCodeParser::makeDivSafe):
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::handleIntrinsic):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        * dfg/DFGOSRExit.cpp:
        (JSC::DFG::OSRExit::OSRExit):
        (JSC::DFG::OSRExit::considerAddingAsFrequentExitSiteSlow):
        * dfg/DFGOSRExit.h:
        (JSC::DFG::OSRExit::considerAddingAsFrequentExitSite):
        * dfg/DFGOSRExitCompiler.cpp:
        * dfg/DFGOSRExitCompiler32_64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOSRExitCompiler64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
        (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnByteArray):
        (JSC::DFG::SpeculativeJIT::compileGetTypedArrayLength):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
        (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject):
        (JSC::DFG::SpeculativeJIT::compileSoftModulo):
        (JSC::DFG::SpeculativeJIT::compileArithMul):
        (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::speculationCheck):
        (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
        (JSC::DFG::SpeculativeJIT::compileObjectEquality):
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
        (JSC::DFG::SpeculativeJIT::compileObjectEquality):
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        * runtime/Heuristics.cpp:
        (JSC::Heuristics::initializeHeuristics):
        * runtime/Heuristics.h:

2011-12-13  Michael Saboff  <msaboff@apple.com>

        Cleanup of StringImpl::equal in r102631 post commit
        https://bugs.webkit.org/show_bug.cgi?id=74421

        Reviewed by Darin Adler.

        * wtf/text/AtomicString.h:
        (WTF::operator==): Removed cast no longer needed.
        * wtf/text/StringImpl.h:
        (WTF::equal): Changed template to several overloaded methods.

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

        Eliminate Duplicate word at a time equal code in StringImpl.cpp and StringHash.h
        https://bugs.webkit.org/show_bug.cgi?id=73622

        Reviewed by Oliver Hunt.

        Moved equal(charType1 *, charType2, unsigned) template methods
        from static StringImpl.cpp to StringImpl.h and then replaced the
        processor specific character comparison code in StringHash::equal
        with calls to these methods.

        This change is worth 3% on SunSpider string-unpack-code as reported
        by the SunSpider command line harness.  No other tests appear to
        have measurable performance changes.

        * wtf/text/AtomicString.h:
        (WTF::operator==):
        * wtf/text/StringHash.h:
        (WTF::StringHash::equal):
        * wtf/text/StringImpl.cpp:
        * wtf/text/StringImpl.h:
        (WTF::LChar):
        (WTF::UChar):
        (WTF::equal):

2011-12-12  Filip Pizlo  <fpizlo@apple.com>

        ARMv7 version of DFG soft modulo does register allocation inside of control flow
        https://bugs.webkit.org/show_bug.cgi?id=74354

        Reviewed by Gavin Barraclough.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileSoftModulo):

2011-12-12  Andy Wingo  <wingo@igalia.com>

        Simplify autotools configure.ac
        https://bugs.webkit.org/show_bug.cgi?id=74312

        Reviewed by Martin Robinson.

        * GNUmakefile.am: Add JSC_CPPFLAGS to javascriptcore_cppflags.

2011-12-12  Filip Pizlo  <fpizlo@apple.com>

        DFG GetByVal CSE incorrectly assumes that a non-matching PutByVal cannot clobber
        https://bugs.webkit.org/show_bug.cgi?id=74329

        Reviewed by Gavin Barraclough.

        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::getByValLoadElimination):

2011-12-09  Alexander Pavlov  <apavlov@chromium.org>

        WebKit does not enumerate over CSS properties in HTMLElement.style
        https://bugs.webkit.org/show_bug.cgi?id=23946

        Reviewed by Darin Adler.

        Add a few exports to follow the JSCSSStyleDeclaration.cpp changes,
        introduce an std::sort() comparator function.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/text/WTFString.h:
        (WTF::codePointCompareLessThan): Used by std::sort() to sort properties.

2011-12-12  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, build fix.

        Revert r102570 which broke SnowLeopard builders.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/text/WTFString.h:

2011-12-09  Alexander Pavlov  <apavlov@chromium.org>

        WebKit does not enumerate over CSS properties in HTMLElement.style
        https://bugs.webkit.org/show_bug.cgi?id=23946

        Reviewed by Darin Adler.

        Add a few exports to follow the JSCSSStyleDeclaration.cpp changes,
        introduce an std::sort() comparator function.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/text/WTFString.h:
        (WTF::codePointCompareLessThan): Used by std::sort() to sort properties.

2011-12-12  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck issues.

        * GNUmakefile.list.am:

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

        Fix another signed vs. unsigned warning

        * runtime/ArgList.h:
        (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer):

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

        Fix a signed vs. unsigned warning.

        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBuffer::slowAppend):
        Cast inlineCapacity to an int to appease the warning. This is known OK
        since inlineCapacity is defined to be 8.

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

        Rolled out *another* debugging change I committed accidentally.

        Unreviewed.

        * Configurations/Base.xcconfig:

2011-12-11  Geoffrey Garen  <ggaren@apple.com>
        
        Rolled out a debug counter I committed accidentally.

        Unreviewed.

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

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

        v8 benchmark takes 12-13 million function call slow paths due to extra arguments
        https://bugs.webkit.org/show_bug.cgi?id=74244

        Reviewed by Filip Pizlo.
        
        .arguments function of order the Reversed
        
        10% speedup on v8-raytrace, 1.7% speedup on v8 overall, neutral on Kraken
        and SunSpider.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::valueProfileForArgument): Clarified that the interface
        to this function is an argument number.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitConstruct):
        (JSC::BytecodeGenerator::isArgumentNumber): Switched to using CallFrame
        helper functions for computing offsets for arguments, rather than doing
        the math by hand.
        
        Switched to iterating argument offsets backwards (--) instead of forwards (++).

        * bytecompiler/BytecodeGenerator.h:
        (JSC::CallArguments::thisRegister):
        (JSC::CallArguments::argumentRegister):
        (JSC::CallArguments::registerOffset): Updated for arguments being reversed.

        * bytecompiler/NodesCodegen.cpp: Allocate arguments in reverse order.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getArgument):
        (JSC::DFG::ByteCodeParser::setArgument):
        (JSC::DFG::ByteCodeParser::flush):
        (JSC::DFG::ByteCodeParser::addCall):
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::handleMinMax):
        (JSC::DFG::ByteCodeParser::handleIntrinsic):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::processPhiStack): Use abstract argument indices
        that just-in-time convert to bytecode operands (i.e., indexes in the register
        file) through helper functions. This means only one piece of code needs
        to know how arguments are laid out in the register file.

        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump): Ditto.

        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::valueProfileFor): Ditto.

        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileFunction): The whole point of this patch:
        Treat too many arguments as an arity match.

        * dfg/DFGOSRExit.h:
        (JSC::DFG::OSRExit::variableForIndex):
        (JSC::DFG::OSRExit::operandForIndex): Use helper functions, as above.

        * dfg/DFGOperands.h:
        (JSC::DFG::operandToArgument):
        (JSC::DFG::argumentToOperand): These are now the only two lines of code in
        the DFG compiler that know how arguments are laid out in memory.

        (JSC::DFG::Operands::operand):
        (JSC::DFG::Operands::setOperand): Use helper functions, as above.

        * dfg/DFGOperations.cpp: The whole point of this patch:
        Treat too many arguments as an arity match.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall): Use helper functions, as above.
        
        Also, don't tag the caller frame slot as a cell, because it's not a cell.

        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall): Use helper functions, as above.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile): Use helper functions, as above.

        (JSC::DFG::SpeculativeJIT::checkArgumentTypes): Use already-computed
        argument virtual register instead of recomputing by hand.

        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::callFrameSlot):
        (JSC::DFG::SpeculativeJIT::argumentSlot):
        (JSC::DFG::SpeculativeJIT::callFrameTagSlot):
        (JSC::DFG::SpeculativeJIT::callFramePayloadSlot):
        (JSC::DFG::SpeculativeJIT::argumentTagSlot):
        (JSC::DFG::SpeculativeJIT::argumentPayloadSlot): Added a few helper
        functions for dealing with callee arguments specifically. These still
        build on top of our other helper functions, and have no direct knowledge
        of how arguments are laid out in the register file.

        (JSC::DFG::SpeculativeJIT::resetCallArguments):
        (JSC::DFG::SpeculativeJIT::addCallArgument): Renamed argumentIndex to
        argumentOffset to match CallFrame naming.

        (JSC::DFG::SpeculativeJIT::valueSourceReferenceForOperand): Use helper
        functions, as above.

        * interpreter/CallFrame.h:
        (JSC::ExecState::argumentOffset):
        (JSC::ExecState::argumentOffsetIncludingThis):
        (JSC::ExecState::argument):
        (JSC::ExecState::setArgument):
        (JSC::ExecState::thisArgumentOffset):
        (JSC::ExecState::thisValue):
        (JSC::ExecState::setThisValue):
        (JSC::ExecState::offsetFor):
        (JSC::ExecState::hostThisRegister):
        (JSC::ExecState::hostThisValue): Added a bunch of helper functions for
        computing where an argument is in the register file. Anything in the
        runtime that needs to access arguments should use these helpers.

        * interpreter/CallFrameClosure.h:
        (JSC::CallFrameClosure::setThis):
        (JSC::CallFrameClosure::setArgument):
        (JSC::CallFrameClosure::resetCallFrame): This stuff is a lot simpler, now
        that too many arguments counts as an arity match and doesn't require
        preserving two copies of our arguments.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::slideRegisterWindowForCall): Only need to do something
        special if the caller provided too few arguments.
        
        Key simplification: We never need to maintain two copies of our arguments
        anymore.

        (JSC::eval):
        (JSC::loadVarargs): Use helper functions.

        (JSC::Interpreter::unwindCallFrame): Updated for new interface.

        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::prepareForRepeatCall): Seriously, though: use helper
        functions.

        (JSC::Interpreter::privateExecute): No need to check for stack overflow
        when calling host functions because they have zero callee registers.

        (JSC::Interpreter::retrieveArguments): Explicitly tear off the arguments
        object, since there's no special constructor for this anymore.

        * interpreter/Interpreter.h: Reduced the C++ re-entry depth because some
        workers tests were hitting stack overflow in some of my testing. We should
        make this test more exact in future.

        * interpreter/RegisterFile.h: Death to all runtime knowledge of argument
        location that does not belong to the CallFrame class!

        * jit/JIT.cpp:
        (JSC::JIT::privateCompile): I am a broken record and I use helper functions.
        
        Also, the whole point of this patch: Treat too many arguments as an arity match.

        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileLoadVarargs):
        * jit/JITCall.cpp:
        (JSC::JIT::compileLoadVarargs): Updated the argument copying math to use
        helper functions, for backwards-correctness. Removed the condition
        pertaining to declared argument count because, now that arguments are
        always in just one place, this optimization is valid for all functions.
        Standardized the if predicate for each line of the optimization. This might
        fix a bug, but I couldn't get the bug to crash in practice.

        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_create_arguments):
        (JSC::JIT::emit_op_get_argument_by_val):
        (JSC::JIT::emitSlow_op_get_argument_by_val):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_create_arguments):
        (JSC::JIT::emit_op_get_argument_by_val):
        (JSC::JIT::emitSlow_op_get_argument_by_val): Removed cti_op_create_arguments_no_params
        optimization because it's no longer an optimization, now that arguments
        are always contiguous in a known location.
        
        Updated argument access opcode math for backwards-correctness.

        * jit/JITStubs.cpp:
        (JSC::arityCheckFor): Updated just like slideRegisterWindowForCall. This
        function is slightly different because it copies the call frame in
        addition to the arguments. (In the Interpreter, the call frame is not
        set up by this point.)

        (JSC::lazyLinkFor): The whole point of this patch: Treat too many
        arguments as an arity match.

        (JSC::DEFINE_STUB_FUNCTION): Updated for new iterface to tearOff().

        * jit/JITStubs.h:
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::loadDoubleArgument):
        (JSC::SpecializedThunkJIT::loadCellArgument):
        (JSC::SpecializedThunkJIT::loadInt32Argument): Use helper functions! They
        build strong bones and teeth!

        * runtime/ArgList.cpp:
        (JSC::ArgList::getSlice):
        (JSC::MarkedArgumentBuffer::slowAppend):
        * runtime/ArgList.h:
        (JSC::MarkedArgumentBuffer::MarkedArgumentBuffer):
        (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer):
        (JSC::MarkedArgumentBuffer::at):
        (JSC::MarkedArgumentBuffer::clear):
        (JSC::MarkedArgumentBuffer::append):
        (JSC::MarkedArgumentBuffer::removeLast):
        (JSC::MarkedArgumentBuffer::last):
        (JSC::ArgList::ArgList):
        (JSC::ArgList::at): Updated for backwards-correctness. WTF::Vector doesn't
        play nice with backwards-ness, so I changed to using manual allocation.
        
        Fixed a FIXME about not all values being marked in the case of out-of-line
        arguments. I had to rewrite the loop anyway, and I didn't feel like
        maintaining fidelity to its old bugs.

        * runtime/Arguments.cpp:
        (JSC::Arguments::visitChildren):
        (JSC::Arguments::copyToArguments):
        (JSC::Arguments::fillArgList):
        (JSC::Arguments::getOwnPropertySlotByIndex):
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::getOwnPropertyDescriptor):
        (JSC::Arguments::putByIndex):
        (JSC::Arguments::put):
        (JSC::Arguments::tearOff):
        * runtime/Arguments.h:
        (JSC::Arguments::create):
        (JSC::Arguments::Arguments):
        (JSC::Arguments::argument):
        (JSC::Arguments::finishCreation): Secondary benefit of this patch: deleted
        lots of tricky code designed to maintain two different copies of function
        arguments. Now that arguments are always contiguous in one place in memory,
        this complexity can go away.
        
        Reduced down to one create function for the Arguments class, from three.

        Moved tearOff() into an out-of-line function because it's huge.
        
        Moved logic about whether to tear off eagerly into the Arguments class,
        so we didn't have to duplicate it elsewhere.

        * runtime/JSActivation.cpp:
        (JSC::JSActivation::JSActivation):
        (JSC::JSActivation::visitChildren): Renamed m_numParametersMinusThis to
        m_numCapturedArgs because if the value really were m_numParametersMinusThis
        we would be marking too much. (We shouldn't mark 'this' because it can't
        be captured.) Also, use helper functions.

        * runtime/JSActivation.h:
        (JSC::JSActivation::tearOff): Use helper functions.

        * runtime/JSArray.cpp:
        (JSC::JSArray::copyToArguments):
        * runtime/JSArray.h: Use helper functions, as above.

2011-12-10  Mark Hahnenberg  <mhahnenberg@apple.com>

        JSC testapi is crashing on Windows
        https://bugs.webkit.org/show_bug.cgi?id=74233

        Reviewed by Sam Weinig.

        Same error we've encountered before where we are calling the wrong version of 
        visitChildren and objects that are still reachable aren't getting marked.
        This problem will go away soon with the removal of vptrs for these sorts of 
        optimizations in favor of using the ClassInfo, but for now we can simply give 
        JSFinalObject a bogus virtual method that Visual Studio can't optimize away to
        ensure that JSFinalObject will always have a unique vptr.  We don't have to worry 
        about JSString or JSArray right now, which are the other two special cases for
        visitChildren, since they already have their own virtual functions.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/JSObject.cpp:
        (JSC::JSFinalObject::vtableAnchor):
        * runtime/JSObject.h:

2011-12-10  Alexis Menard  <alexis.menard@openbossa.org>

        Unused variable in YarrJIT.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=74237

        Reviewed by Andreas Kling.

        Variable is set but not used so we can remove it.

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

2011-12-09  Filip Pizlo  <fpizlo@apple.com>

        DFG ArithMul power-of-two case does not check for overflow
        https://bugs.webkit.org/show_bug.cgi?id=74230

        Reviewed by Gavin Barraclough.
        
        Disabled power-of-2 peephole optimization for multiplication, because it was wrong,
        and any attempt to fix it would likely introduce code bloat and register pressure.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileArithMul):

2011-12-09  David Levin  <levin@chromium.org>

        REGRESSION(r101863-r102042): Assertion hit: m_verifier.isSafeToUse() in RefCountedBase::ref in FunctionCodeBlock
        https://bugs.webkit.org/show_bug.cgi?id=73886

        Reviewed by Darin Adler.

        * runtime/SymbolTable.h:
        (JSC::SharedSymbolTable::SharedSymbolTable): Added deprecatedTurnOffVerifier for
        another JavaScriptObject, since JavaScriptCore objects allow use on multiple threads.
        Bug 58091 is about changing these deprecated calls to something else but that something
        else will still need to be in all of these places.

2011-12-09  Konrad Piascik  <kpiascik@rim.com>

        Remove unnecessary file DissasemblerARM.cpp from build system
        https://bugs.webkit.org/show_bug.cgi?id=74184

        Reviewed by Daniel Bates.

        * PlatformBlackBerry.cmake:

2011-12-09  Filip Pizlo  <fpizlo@apple.com>

        DFG's interpretation of rare case profiles should be frequency-based not count-based
        https://bugs.webkit.org/show_bug.cgi?id=74170

        Reviewed by Geoff Garen.
        
        DFG optimizes for rare cases only when the rare case counter is above some threshold
        and it also constitutes a large enough fraction of total function executions. Also
        added some minor debug logic.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::likelyToTakeSlowCase):
        (JSC::CodeBlock::couldTakeSlowCase):
        (JSC::CodeBlock::likelyToTakeSpecialFastCase):
        (JSC::CodeBlock::likelyToTakeDeepestSlowCase):
        (JSC::CodeBlock::likelyToTakeAnySlowCase):
        (JSC::CodeBlock::executionEntryCount):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::makeSafe):
        (JSC::DFG::ByteCodeParser::makeDivSafe):
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * runtime/Heuristics.cpp:
        (JSC::Heuristics::initializeHeuristics):
        * runtime/Heuristics.h:

2011-12-09  Oliver Hunt  <oliver@apple.com>

        PutByValAlias unnecessarily clobbers GetIndexedPropertyStorage
        https://bugs.webkit.org/show_bug.cgi?id=74223

        Reviewed by Geoffrey Garen.

        Don't clobber GetIndexedPropertyStorage when we see PutByValAlias

        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination):

2011-12-09  David Levin  <levin@chromium.org>

        Hash* iterators should allow comparison between const and const versions.
        https://bugs.webkit.org/show_bug.cgi?id=73370

        Reviewed by Darin Adler.

        * wtf/HashTable.h: Add the operators needed to do this.
        (WTF::HashTableConstIterator::operator==):
        (WTF::HashTableConstIterator::operator!=):
        (WTF::HashTableIterator::operator==):
        (WTF::HashTableIterator::operator!=):
        (WTF::operator==):
        (WTF::operator!=):

2011-12-09  Michael Saboff  <msaboff@apple.com>

        YARR: Multi-character read optimization for 8bit strings
        https://bugs.webkit.org/show_bug.cgi?id=74191

        Reviewed by Oliver Hunt.

        Changed generatePatternCharacterOnce to generate
        code for 1 to 4 characters in the 8 bit case.
        This is worth 29% improvement on SunSpider regexp-dna test.
        It provides no benefit to v8-regexp.

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
        (JSC::Yarr::YarrGenerator::generate): Spelling fix in comment.

2011-12-09  David Levin  <levin@chromium.org>

        Regression(r53595): Sync xhr requests in workers aren't terminated on worker close.
        https://bugs.webkit.org/show_bug.cgi?id=71695

        Reviewed by Zoltan Herczeg.

        * wtf/MessageQueue.h:
        (WTF::MessageQueue::tryGetMessageIgnoringKilled): Added a way to get messages
        even after the queue has been killed. This is useful when one wants to
        kill a queue but then go through it to run clean up tasks from it.

2011-12-09  Adrienne Walker  <enne@google.com>

        Fix HashMap<..., OwnPtr<...> >::add compilation errors
        https://bugs.webkit.org/show_bug.cgi?id=74159

        Reviewed by Darin Adler.

        Add a constructor to OwnPtr that takes the empty value (nullptr_t)
        from HashTraits so that this function can compile.

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

2011-12-09  Oliver Hunt  <oliver@apple.com>

        Avoid reloading storage pointer for indexed properties unnecessarily
        https://bugs.webkit.org/show_bug.cgi?id=74136

        Reviewed by Filip Pizlo.

        Add a node to represent loading property storage for indexed properties.
        This allows us to reduce code generated for sequential access of arrays,
        strings, etc.  This results in up to 5% improvement in code that is 
        very heavy on indexed reads, such as matrix operations in typed arrays
        and 20% faster on microbenchmarks.

        Currently this is only supported by GetByVal and other similar indexed reads.

        * bytecode/PredictedType.h:
        (JSC::isFixedIndexedStorageObjectPrediction):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsic):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGNode.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::getIndexedPropertyStorageLoadElimination):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnByteArray):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
        (JSC::DFG::SpeculativeJIT::compileGetIndexedPropertyStorage):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-12-08  Fady Samuel  <fsamuel@chromium.org>

        [Chromium] Enable viewport metatag
        https://bugs.webkit.org/show_bug.cgi?id=73495

        Reviewed by Darin Fisher.

        * wtf/Platform.h: Added ENABLE(VIEWPORT) tag.

2011-12-08  Adam Klein  <adamk@chromium.org>

        Use HashMap<Node*, OwnPtr<...>> in ChildListMutationScope
        https://bugs.webkit.org/show_bug.cgi?id=73964

        Reviewed by Darin Adler.

        * wtf/HashTraits.h: Add passOut(std::nullptr_t) to allow callers to use HashMap::take on a HashMap of OwnPtrs.

2011-12-08  Thouraya ANDOLSI  <thouraya.andolsi@st.com>

        https://bugs.webkit.org/show_bug.cgi?id=74005
        fix unaligned access memory in generatePatternCharacterOnce function
        for SH4 platforms.

        Reviewed by Gavin Barraclough.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::load16Unaligned):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::load16Unaligned):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::load16Unaligned):
        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::lshift32):
        (JSC::MacroAssemblerSH4::load8):
        (JSC::MacroAssemblerSH4::load16):
        (JSC::MacroAssemblerSH4::load16Unaligned):
        (JSC::MacroAssemblerSH4::branch8):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::load16Unaligned):
        * jit/JIT.h:
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):

2011-12-08  Michael Saboff  <msaboff@apple.com>

        Add 8 bit paths for StringTypeAdapter classes
        https://bugs.webkit.org/show_bug.cgi?id=73882

        Reviewed by Darin Adler.

        Added is8Bit() method and writeTo(LChar*) methods
        to StringTypeAdapter<> classes.  The writeTo(LChar*)
        method can be used if is8Bit() returns true.  The
        non-native 8 bit classes contain ASSERT(is8Bit())
        in their writeTo(LChar*).

        Updated all of the various versions of tryMakeString() to
        use 8 bit processing in the updated StringTypeAdapter<>
        classes.

        This has slight if any performance improvement on kraken.

        * runtime/UStringConcatenate.h:
        * wtf/text/StringConcatenate.h:
        (WTF::tryMakeString):
        * wtf/text/StringOperators.h:
        (WTF::StringAppend::is8Bit):
        (WTF::StringAppend::writeTo):

2011-12-07  Filip Pizlo  <fpizlo@apple.com>

        DFG CSE should know that CheckFunction is pure
        https://bugs.webkit.org/show_bug.cgi?id=74044

        Reviewed by Oliver Hunt.
        
        Possible slight win on V8, no regressions.

        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::checkFunctionElimination):

2011-12-07  Michael Saboff  <msaboff@apple.com>

        StringBuilderTest.Append and StringBuilderTest.ToStringPreserveCapacity are failing.
        https://bugs.webkit.org/show_bug.cgi?id=73995

        Reviewed by Geoffrey Garen.

        Problem was that a call to characters on an StringImpl associated
        with a StringBuilder that is being appended to gets stale.
        Added a new m_valid16BitShadowlen that keeps the length of
        the 16 bit shadow that has been upconverted or will be up converted
        with the first getCharacters().  When StringBuilder::characters or
        ::reifyString is called, further characters are upconverted if
        we have a shadow16bit copy and the m_valid16BitShadowlen is updated.

        * JavaScriptCore.exp:
        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::reifyString):
        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::StringBuilder):
        (WTF::StringBuilder::characters):
        (WTF::StringBuilder::clear): Cleaned up as part of the change.
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::getData16SlowCase):
        (WTF::StringImpl::upconvertCharacters):
        * wtf/text/StringImpl.h:

2011-12-07  Filip Pizlo  <fpizlo@apple.com>

        Compare and Swap should be enabled on ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=74023

        Reviewed by Geoff Garen.
        
        Implemented weakCompareAndSwap in terms of LDREX/STREX and enabled PARALLEL_GC.
        It gives the expected speed-up on multi-core ARMv7 devices.

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

2011-12-07  Filip Pizlo  <fpizlo@apple.com>

        DFG CSE is overzealous with GetByVal
        https://bugs.webkit.org/show_bug.cgi?id=74042

        Reviewed by Oliver Hunt.
        
        Made sure that the purity of GetByVal and the limited-clobber-itude of PutByVal
        is tested in all places that matter.

        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::byValIsPure):
        (JSC::DFG::Propagator::clobbersWorld):
        (JSC::DFG::Propagator::getByValLoadElimination):
        (JSC::DFG::Propagator::checkStructureLoadElimination):
        (JSC::DFG::Propagator::getByOffsetLoadElimination):
        (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
        (JSC::DFG::Propagator::performNodeCSE):

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

        Unreviewed, rolling out r102267.
        http://trac.webkit.org/changeset/102267
        https://bugs.webkit.org/show_bug.cgi?id=74032

        Breaks build on Chromium Mac Debug (Requested by aklein on
        #webkit).

        * wtf/HashTraits.h:

2011-12-07  Adam Klein  <adamk@chromium.org>

        Use HashMap<Node*, OwnPtr<...>> in ChildListMutationScope
        https://bugs.webkit.org/show_bug.cgi?id=73964

        Reviewed by Ryosuke Niwa.

        * wtf/HashTraits.h: Add passOut(std::nullptr_t) to allow callers to use HashMap::take on an entry whose value is null.

2011-12-07  Filip Pizlo  <fpizlo@apple.com>

        Non-Mac devices should benefit from a larger heap
        https://bugs.webkit.org/show_bug.cgi?id=74015

        Reviewed by Geoff Garen.
        
        Removed the ENABLE(LARGE_HEAP) option from Platform.h, since it was only used in
        Heap.cpp, and got in the way of having more granular, per-platform control over
        what the heap size should be. Bumped the heap size to 8MB on iOS (was 512KB).

        * heap/Heap.cpp:
        (JSC::GCTimer::heapSizeForHint):
        * wtf/Platform.h:

2011-11-30  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] V8 build fixes.

        Reviewed by Tor Arne Vestbø.

        * yarr/yarr.pri: Don't rely on Source/JavaScriptCore being in
        VPATH. Prefix SOURCES correctly and make sure that runtime/ is
        in the include search path when building with v8.

2011-12-06  Filip Pizlo  <fpizlo@apple.com>

        Zapping a block that is Marked leads to dead objects being mistaken for live ones
        https://bugs.webkit.org/show_bug.cgi?id=73982

        Reviewed by Geoff Garen.
        
        Changed the zapping code to ignore blocks that are Marked or Zapped. Additionally,
        the code asserts that:
        
        - If we zap a Marked or Zapped block then the free list is empty, because this
          can only happen if the block was never free-listed.
          
        - Zapping can only happen for Marked, Zapped, or FreeListed blocks, since Allocated
          blocks are those that cannot be referred to by SizeClass::currentBlock (since
          SizeClass::currentBlock only refers to blocks that are candidates for allocation,
          and Allocated blocks are those who have been exhausted by allocation and will not
          be allocated from again), and New blocks cannot be referred to by anything except
          during a brief window inside the allocation slow-path.

        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::zapFreeList):

2011-12-06  Filip Pizlo  <fpizlo@apple.com>

        DFG 32_64 call linking does not handle non-cell callees correctly
        https://bugs.webkit.org/show_bug.cgi?id=73965

        Reviewed by Sam Weinig.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitCall):

2011-12-06  Sam Weinig  <sam@webkit.org>

        Remove unintentional type name shadowing in the Interpreter
        https://bugs.webkit.org/show_bug.cgi?id=73963

        Reviewed by Oliver Hunt.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::prepareForRepeatCall): Replace the parameter name FunctionExecutable,
        which shadows the FunctionExecutable type name, with functionExecutable.

2011-12-06  Michael Saboff  <msaboff@apple.com>

        r102146 from 73875 broke fast/js/encode-URI-test.html
        https://bugs.webkit.org/show_bug.cgi?id=73950

        Reviewed by Gavin Barraclough.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncUnescape): Restructured to handle
        the %uHHHH case to output the resulting character
        and continue so that a failure in finding 4 hex
        digits will fall through and output the '%'.
        Due to style check, changed the temporary
        character variable to a more descriptive name.

2011-12-06  Filip Pizlo  <fpizlo@apple.com>

        GC zapping logic could benefit from some more assertions
        https://bugs.webkit.org/show_bug.cgi?id=73947

        Reviewed by Gavin Barraclough.
        
        - If you're in a zapped block and you're zapped, then your mark bit should
          never be set.
          
        - If you're being marked, then you should never be zapped.

        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::isLive):
        * runtime/Structure.h:
        (JSC::MarkStack::internalAppend):

2011-12-06  Oliver Hunt  <oliver@apple.com>

        Don't allocate register in typedarray control flow
        https://bugs.webkit.org/show_bug.cgi?id=73944

        Reviewed by Gavin Barraclough.

        Move a temporary allocation outside of control flow.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):

2011-12-06  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=68328
        The generator and intrinsic fields in HashTableValue/HashEntry and associated structures and methods are redundant

        Reviewed by Geoff Garen.

        Move the instrinsic enum out of the DFG, into runtime. Add entires for all host functions
        that have an intrinsic in the form of a generated thunk. Remove the thunk pointer from the
        hashtable, and make Intrinsic field no longer ifdef on JIT/DFG. In getHostFunction select
        a thunk genertaor to use based on the Intrinsic.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * create_hash_table:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::handleIntrinsic):
        * dfg/DFGCapabilities.h:
        * dfg/DFGIntrinsic.h: Removed.
        * jit/JITStubs.cpp:
        (JSC::JITThunks::hostFunctionStub):
        * jit/JITStubs.h:
        * runtime/Executable.cpp:
        (JSC::ExecutableBase::intrinsic):
        (JSC::NativeExecutable::intrinsic):
        * runtime/Executable.h:
        (JSC::ExecutableBase::intrinsicFor):
        (JSC::NativeExecutable::create):
        (JSC::NativeExecutable::finishCreation):
        * runtime/Intrinsic.h: Copied from Source/JavaScriptCore/dfg/DFGIntrinsic.h.
        * runtime/JSGlobalData.cpp:
        (JSC::thunkGeneratorForIntrinsic):
        (JSC::JSGlobalData::getHostFunction):
        * runtime/JSGlobalData.h:
        * runtime/Lookup.cpp:
        (JSC::HashTable::createTable):
        (JSC::setUpStaticFunctionSlot):
        * runtime/Lookup.h:
        (JSC::HashEntry::initialize):
        (JSC::HashEntry::intrinsic):

2011-12-06  Michael Saboff  <msaboff@apple.com>

        Add 8 bit paths to global object functions
        https://bugs.webkit.org/show_bug.cgi?id=73875

        Added 8 bit paths for converions methods.

        This is worth 1.5% on kraken audio-oscillator,
        1.6% on stanford-crypto-ccm and 2.5% on
        stanford-crypto-sha256-iterative.  See bug for
        a full report.

        Reviewed by Oliver Hunt.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::decode): Split into a templated helper.
        (JSC::parseInt): Split into a templated helper.
        (JSC::parseFloat): Added an 8 bit path
        (JSC::globalFuncEscape): Added 8 bit path
        (JSC::globalFuncUnescape): Added 8 bit path
        * runtime/JSStringBuilder.h:
        (JSC::JSStringBuilder::append): New append for LChar
        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::append): New append for LChar

2011-11-21  Balazs Kelemen  <kbalazs@webkit.org>

        Enable ParallelJobs by default
        https://bugs.webkit.org/show_bug.cgi?id=70032

        Reviewed by Zoltan Herczeg.

        According to measurements on Mac and Linux it is a
        considerable speedup for SVG on multicore.

        Remove the ENABLE(PARALLEL_JOBS) guard.
        Fix build on Windows and Chromium.

        * JavaScriptCore.gypi:  Add the files to the build. It was
        missing for the gyp build system.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        Export symbols.
        * wtf/ParallelJobs.h:
        * wtf/ParallelJobsGeneric.cpp:
        (WTF::ParallelEnvironment::ParallelEnvironment):
        (WTF::ParallelEnvironment::execute):
        Deinline these to avoid exporting a lot of symbols.
        These are non-trivial and called only once on a given object
        so it doesn't seems to be worthwile to inline them.
        Additionally fix a signed-unsigned comparison in the constructor.
        * wtf/ParallelJobsGeneric.h:
        * wtf/Platform.h:

2011-12-06  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] build-jsc script doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=73910

        Reviewed by Tor Arne Vestbø.

        * JavaScriptCore.pro: Build WTF before JavaScriptCore and JSC
        (moved from top-level WebKit.pro). Also add v8 scopes to only build
        WTF during v8 builds.

2011-12-05  Anders Carlsson  <andersca@apple.com>

        Add HashMap::keys() and HashMap::values() for easy iteration of hash map keys and values in C++11.

        Reviewed by Darin Adler.

        * wtf/HashMap.h:

2011-12-05  Michael Saboff  <msaboff@apple.com>

        Create StringImpl::empty() as an 8 bit string
        https://bugs.webkit.org/show_bug.cgi?id=73871

        Reviewed by Oliver Hunt.

        * wtf/text/StringStatics.cpp:
        (WTF::StringImpl::empty): Changed to be an 8 bit string.

2011-12-05  Darin Adler  <darin@apple.com>

        Convert JSClassRef to use HashMap<OwnPtr>
        https://bugs.webkit.org/show_bug.cgi?id=73780

        Reviewed by Andreas Kling.

        * API/JSCallbackObjectFunctions.h:
        (JSC::JSCallbackObject::getOwnPropertyNames): Use get() on the hash map
        entries because the hash map now has an OwnPtr instead of a raw pointer.

        * API/JSClassRef.cpp:
        (OpaqueJSClass::OpaqueJSClass): No need to initialize m_staticValues and
        m_staticFunctions since they are now OwnPtr. Use adoptPtr when allocating.
        Removed the code that gets and deletes existing entries, and just use set,
        which now handles deletion automatically due to it being OwnPtr.
        (OpaqueJSClass::~OpaqueJSClass): Replaced code to do all the deletion
        with assertion-only NDEBUG-only code.
        (OpaqueJSClassContextData::OpaqueJSClassContextData): Use adoptPtr when
        allocating. Use OwnPtr when adding. Removed unneeded code to set
        staticValues and staticFunctions to 0. Removed unneeded destructor.
        (OpaqueJSClass::staticValues): Added get call. Also removed unneeded local.
        (OpaqueJSClass::staticFunctions): Ditto.
        (OpaqueJSClass::prototype): Added use of adoptPtr.

        * API/JSClassRef.h: Made the static values and static functions tables
        use OwnPtr for the entries. Also used OwnPtr for the pointers to the
        tables themselves. Also removed ~OpaqueJSClassContextData(), letting
        the compiler generate it.

2011-12-05  Oliver Hunt  <oliver@apple.com>

        Land uncommitted bit of float array support
        https://bugs.webkit.org/show_bug.cgi?id=73873

        Reviewed by Filip Pizlo.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):

2011-12-05  Benjamin Poulain  <benjamin@webkit.org>

        Update String::containsOnlyASCII() to handle 8 bits strings
        https://bugs.webkit.org/show_bug.cgi?id=73799

        Reviewed by Darin Adler.

        Implement String::containsOnlyASCII() so that it does not
        call String::characters().

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

2011-12-05  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed build fix for non-DFG platforms.

        * dfg/DFGRepatch.h:

2011-12-05  Filip Pizlo  <fpizlo@apple.com>

        Old JIT emits 32-bit offsets for put_by_id but sometimes patches them as if they
        were compact offsets
        https://bugs.webkit.org/show_bug.cgi?id=73861

        Reviewed by Gavin Barraclough.

        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::resetPatchPutById):

2011-12-05  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, build fixes for ARM.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::unreachableForPlatform):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::loadDouble):
        (JSC::MacroAssemblerARMv7::loadFloat):
        (JSC::MacroAssemblerARMv7::storeFloat):
        (JSC::MacroAssemblerARMv7::convertFloatToDouble):
        (JSC::MacroAssemblerARMv7::convertDoubleToFloat):

2011-12-05  Benjamin Poulain  <benjamin@webkit.org>

        Update String::containsOnlyLatin1() to avoid converting to 16 bits
        https://bugs.webkit.org/show_bug.cgi?id=73797

        Reviewed by Andreas Kling.

        When the String use 8bits StringImpl, there is no need to iterate
        over the string.

        The function charactersAreAllLatin1() is removed because it is not
        used anywhere.

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

2011-12-05  Michael Saboff  <msaboff@apple.com>

        8 bit string work slows down Kraken json-stringify-tinderbox
        https://bugs.webkit.org/show_bug.cgi?id=73457

        Added 8 bit path to StringBuilder.  StringBuilder starts
        assuming 8 bit contents and gets converted to 16 bit upon
        seeing the first 16 bit character or string.  Split
        appendUninitialiezed into an inlined fast and function call
        slow case.

        Factored out the processing of the UString argument from
        Stringifier::appendQuotedString() to a static templated function
        based on character size.

        This change eliminates 5% of the 7% slowdown to json-stringify-tinderbox.
        This change introduces a 4.8% slowdown to json-parse-financial.
        This slowdown will be addressed in a subsequent patch to StringImpl::equal.

        Reviewed by Oliver Hunt.

        * runtime/JSONObject.cpp:
        (JSC::appendStringToUStringBuilder):
        (JSC::Stringifier::appendQuotedString):
        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::resize):
        (WTF::StringBuilder::allocateBuffer):
        (WTF::StringBuilder::allocateBufferUpConvert):
        (WTF::LChar):
        (WTF::UChar):
        (WTF::StringBuilder::reserveCapacity):
        (WTF::StringBuilder::appendUninitialized):
        (WTF::StringBuilder::appendUninitializedSlow):
        (WTF::StringBuilder::append):
        (WTF::StringBuilder::shrinkToFit):
        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::StringBuilder):
        (WTF::StringBuilder::append):
        (WTF::StringBuilder::operator[]):
        (WTF::StringBuilder::characters8):
        (WTF::StringBuilder::characters16):
        (WTF::StringBuilder::charactersBlah):
        (WTF::LChar):
        (WTF::UChar):

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

        https://bugs.webkit.org/show_bug.cgi?id=73624
        JIT + INTERPRETER builds are broken

        Reviewed by Geoff Garen, Sam Weinig.

        These don't fallback to the interpreter correctly.
        Thunk creation assumes that is the JIT is compiled in, then it is enabled.

        * jit/JITStubs.cpp:
        (JSC::JITThunks::JITThunks):
        * runtime/Executable.h:
        (JSC::NativeExecutable::create):
        (JSC::NativeExecutable::finishCreation):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::getHostFunction):

2011-12-05  Zoltan Herczeg  <zherczeg@webkit.org>

        MacroAssemblerSH4 does not implement readCallTarget
        https://bugs.webkit.org/show_bug.cgi?id=73434

        Reviewed by Csaba Osztrogonác.

        * assembler/MacroAssemblerSH4.h: Support for SH4.
        (JSC::MacroAssemblerSH4::readCallTarget):
        * assembler/SH4Assembler.h:
        (JSC::SH4Assembler::readCallTarget):

2011-12-04  Filip Pizlo  <fpizlo@apple.com>

        DFG should optimize strict equality
        https://bugs.webkit.org/show_bug.cgi?id=73764

        Reviewed by Oliver Hunt.
        
        1% speed-up on V8.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::compileStrictEqForConstant):
        (JSC::DFG::SpeculativeJIT::compileStrictEq):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compileIntegerCompare):
        (JSC::DFG::SpeculativeJIT::compileDoubleCompare):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compileIntegerCompare):
        (JSC::DFG::SpeculativeJIT::compileDoubleCompare):
        (JSC::DFG::SpeculativeJIT::compile):

2011-12-03  Darin Adler  <darin@apple.com>

        Use HashMap<OwnPtr> for ScriptSampleRecordMap
        https://bugs.webkit.org/show_bug.cgi?id=73758

        Reviewed by Andreas Kling.

        * bytecode/SamplingTool.cpp:
        (JSC::SamplingTool::notifyOfScope): Added adoptPtr.
        (JSC::SamplingTool::dump): Added get.
        * bytecode/SamplingTool.h: Changed the value type of ScriptSampleRecordMap to be OwnPtr.

2011-12-03  Darin Adler  <darin@apple.com>

        Use HashMap<OwnPtr> for the opaqueJSClassData map
        https://bugs.webkit.org/show_bug.cgi?id=73759

        Reviewed by Andreas Kling.

        * API/JSClassRef.cpp:
        (OpaqueJSClass::contextData): Update types.
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::~JSGlobalData): Add an explicit clear of opaqueJSClassData to keep the
        timing the same. If we didn't care about the order of operations, we could remove this, too.
        * runtime/JSGlobalData.h: Use OwnPtr instead of raw pointer for the mapped type in the
        opaqueJSClassData map.

2011-12-03  Darin Adler  <darin@apple.com>

        Change HashMap implementation to use the pass type and peek type from traits for the mapped value
        https://bugs.webkit.org/show_bug.cgi?id=72474

        Reviewed by Anders Carlsson.

        * wtf/HashMap.h: Added ReferenceTypeMaker struct template. Get PassInType, PassOutType,
        and PeekType from the traits of the mapped value instead of hard-coding them here.
        Changed inlineAdd to take a reference to the PassInType instead of the PassInType itself,
        to accomodate a PassInType that can't be copied. Use the store, peek, and passOut
        functions from the traits as well.

        * wtf/HashTraits.h: Updated GenericHashTraits and HashTraits for OwnPtr to include
        PassInType, PassOutType, PeekType, store, passOut, and peek. Before this, the file had
        an earlier version that was just PassType, PeekType, pass, and peek. Also commented
        the HashTraits for RefPtr to foreshadow some work we can do there.

        * wtf/RefPtrHashMap.h: Same changes as HashMap.h.

2011-12-02  David Levin  <levin@chromium.org>

        Rename WTF class from TemporarilyChange to TemporaryChange.
        https://bugs.webkit.org/show_bug.cgi?id=73479

        Reviewed by Eric Seidel.

        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/TemporaryChange.h: Renamed from Source/JavaScriptCore/wtf/TemporarilyChange.h.
        (WTF::TemporaryChange::TemporaryChange):
        (WTF::TemporaryChange::~TemporaryChange):

2011-12-02  Mark Hahnenberg  <mhahnenberg@apple.com>

        REGRESSION (r99754): All layout tests crash on Windows
        https://bugs.webkit.org/show_bug.cgi?id=72305

        Reviewed by Geoffrey Garen.

        Fixes a crash in release builds on Windows.  Windows was optimizing the out-of-line virtual destructor in 
        JSFunction away, which left it with no virtual functions.  Its vtable ptr was then identical to that of 
        a different class, therefore the optimization in the visitChildren helper function in MarkedStack.cpp was calling an 
        incorrect version of visitChildren on the object, which left its children unmarked, causing them to be 
        collected when they were still reachable.

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::vtableAnchor): Add a virtual function to JSFunction that Visual Studio can't optimize away.
        * runtime/JSFunction.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::storeVPtrs): Add checks to make sure that all virtual pointers that we rely on for optimization
        purposes are distinct from one another.

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

        Improve float array support in the DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=73722

        Reviewed by Gavin Barraclough.

        Add basic support for float typed arrays in JSC.  This is currently
        less optimal than it could be in the following ways:
         * float32Array1[0] = float32Array2[0] (eg. an element by element copy) 
           promotes float to double and then back to float.
         * float64Array[0] will always perform NaN tests in order to prevent
           signalling NaNs from entering the engine.

        We also don't support Float32Array on ARMv7

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::loadDouble):
        (JSC::MacroAssemblerARMv7::loadFloat):
        (JSC::MacroAssemblerARMv7::storeDouble):
        (JSC::MacroAssemblerARMv7::storeFloat):
        (JSC::MacroAssemblerARMv7::convertFloatToDouble):
        (JSC::MacroAssemblerARMv7::convertDoubleToFloat):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::loadDouble):
        (JSC::MacroAssemblerX86Common::loadFloat):
        (JSC::MacroAssemblerX86Common::storeDouble):
        (JSC::MacroAssemblerX86Common::storeFloat):
        (JSC::MacroAssemblerX86Common::convertDoubleToFloat):
        (JSC::MacroAssemblerX86Common::convertFloatToDouble):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::cvtsd2ss_rr):
        (JSC::X86Assembler::cvtss2sd_rr):
        (JSC::X86Assembler::movsd_rm):
        (JSC::X86Assembler::movss_rm):
        (JSC::X86Assembler::movsd_mr):
        (JSC::X86Assembler::movss_mr):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateFloat32Array):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnFloatTypedArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForFloatTypedArray):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::compile):

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

        Unreviewed, rolling out r101801.
        http://trac.webkit.org/changeset/101801
        https://bugs.webkit.org/show_bug.cgi?id=73667

        Build is still broken (Requested by Ossy on #webkit).

        * assembler/SH4Assembler.h:

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

        Prepare to deploy pass and peek types in the HashMap class
        https://bugs.webkit.org/show_bug.cgi?id=73477

        Reviewed by Adam Roben.

        This patch adds private typedefs inside the HashMap class,
        and uses them as appropriate. A future patch will actually
        tie those typedefs to hash traits, which will allow us to
        make HashMap work with OwnPtr mapped values and to optimize
        how HashMap works with RefPtr mapped values.

        Also changed the hash translator and adapter struct templates
        to use template functions to simplify them and make them more
        flexible.

        Also removed some unused template arguments.

        This goes out of its way to not change behavior. Future patches
        will change the peek type to be a reference type, which will
        reduce reference count churn a bit for hash tables with RefPtr
        mapped values, and then do further optimizations for RefPtr
        and OwnPtr by getting types from the hash traits.

        * wtf/HashMap.h: Added MappedPassInType, MappedPassOutType,
        and MappedPeekType typedefs, and used them for the arguments
        and return types of the get, set, add, take, and inlineAdd
        functions.
        (WTF::HashMapTranslator): Changed this struct template to take
        fewer arguments, and changed its member functions to be
        function templates instead. This allows the compiler to
        determine types more flexibly and also simplifies use of it.
        (WTF::HashMapTranslatorAdapter): Ditto.
        (WTF::HashMap::find): Updated to use new HashMapTranslatorAdapter.
        Also reduced the arguments passed to the HashTable function template.
        (WTF::HashMap::contains): Ditto.
        (WTF::HashMap::inlineAdd): Ditto. Also take MappedPassInType.
        (WTF::HashMap::set): Ditto.
        (WTF::HashMap::add): Ditto.
        (WTF::HashMap::inlineGet): Ditto, but return MappedPeekType.
        (WTF::HashMap::get): Ditto.
        (WTF::HashMap::take): Ditto, but return MappedPassOutType and use
        that type in the implementation.
        (WTF::deleteAllValues): Removed unneeded template arguments from
        call to deleteAllPairSeconds.
        (WTF::deleteAllKeys): Removed unneeded template arguments from
        call to deleteAllPairFirsts.

        * wtf/HashSet.h:
        (WTF::IdentityExtractor): Changed this to be a struct rather than
        a struct template, and replaced the extract function with a function
        template. This allows the compiler to deduce the type.
        (WTF::HashSetTranslatorAdapter): Changed this struct template to take
        fewer arguments, and changed its member functions to be
        function templates instead. This allows the compiler to
        determine types more flexibly and also simplifies use of it.
        (WTF::HashSet::find): Updated to use new HashSetTranslatorAdapter.
        Also reduced the arguments passed to the HashTable function template.
        (WTF::HashSet::contains): Ditto.
        (WTF::HashSet::add): Ditto.

        * wtf/HashTable.h:
        (WTF::IdentityHashTranslator): Changed this struct template to take
        fewer arguments, and changed its member functions to be
        function templates instead. This allows the compiler to
        determine types more flexibly and also simplifies use of it.
        (WTF::HashTable::add): Reduced arguments passed to the function template.
        (WTF::HashTable::find): Ditto, also reversed the template arguments so the
        translator comes first so the compiler can deduce the other type.
        (WTF::HashTable::contains): Ditto.
        (WTF::HashTable::lookup): Ditto.
        (WTF::HashTable::lookupForWriting): Ditto.
        (WTF::HashTable::checkKey): Ditto.
        (WTF::HashTable::fullLookupForWriting): Ditto.
        (WTF::HashTable::add): Ditto.
        (WTF::HashTable::addPassingHashCode): Ditto.
        (WTF::HashTable::find): Ditto.
        (WTF::HashTable::contains): Ditto.

        * wtf/ListHashSet.h:
        (WTF::ListHashSetNodeHashFunctions): Changed this struct template to take
        fewer arguments, and changed its member functions to be function templates
        instead. This allows the compiler to determine types more flexibly and
        also simplifies use of it.
        (WTF::ListHashSet::find): Reduced the arguments passed to the HashTable
        functon template.
        (WTF::ListHashSetTranslatorAdapter): Changed this struct template in the
        same way we changed ListHashSetNodeHashFunctions above.
        (WTF::ListHashSetTranslatorAdapter::equal):
        (WTF::::contains):
        (WTF::::add):
        (WTF::::insertBefore):

        * wtf/RefPtrHashMap.h: Updated comments. Removed the
        RefPtrHashMapRawKeyTranslator struct template; we can use the
        HashMapTranslator struct template from HashMap.h instead now that
        it is more flexible. Added MappedPassInType, MappedPassOutType,
        and MappedPeekType typedefs, and used them for the arguments
        and return types of the get, inlineGet, set, add, take, and inlineAdd
        functions. Changed the name of the RawKeyTranslator type to
        Translator since it's now a class that can handle both raw keys
        and conventional keys.
        (WTF::HashMap::find): Changed to use Translator instead of RawKeyTranslator.
        Reduced the arguments passed to the HashTable function template.
        (WTF::HashMap::contains): Ditto.
        (WTF::HashMap::inlineAdd): Ditto. Also take MappedPassInType.
        (WTF::HashMap::set): Ditto.
        (WTF::HashMap::add): Ditto.
        (WTF::HashMap::inlineGet): Ditto, but return MappedPeekType.
        (WTF::HashMap::get): Ditto.
        (WTF::HashMap::take): Ditto, but return MappedPassOutType and use
        that type in the implementation.
        (WTF::deleteAllValues): Removed unneeded template arguments from
        call to deleteAllPairSeconds.
        (WTF::deleteAllKeys): Removed unneeded template arguments from
        call to deleteAllPairFirsts.

2011-12-02  Zoltan Herczeg  <zherczeg@webkit.org>

        MacroAssemblerSH4 does not implement readCallTarget
        https://bugs.webkit.org/show_bug.cgi?id=73434

        Reviewed by Csaba Osztrogonác.

        * assembler/SH4Assembler.h:
        (JSC::SH4Assembler::readCallTarget): Support for SH4.

2011-12-02  Hajime Morrita  <morrita@chromium.org>

        Unreviewed, rolling out r101751 and r101775.
        http://trac.webkit.org/changeset/101751
        http://trac.webkit.org/changeset/101775
        https://bugs.webkit.org/show_bug.cgi?id=73191

        breaks Windows build

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * config.h:
        * runtime/JSExportMacros.h: Removed.
        * wtf/ExportMacros.h:
        * wtf/Platform.h:
        * wtf/WTFThreadData.h:
        * wtf/text/AtomicString.h:
        * wtf/text/StringStatics.cpp:

2011-12-01  Hajime Morrita  <morrita@chromium.org>

        JS_INLINE and WTF_INLINE should be visible from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=73191

        - Moved Export related macro definitions from config.h to ExportMacros.h and JSExportMacros.h.
        - Moved WTF_USE_JSC and WTF_USE_V8 from various config.h family to Platform.h.
        - Replaced JS_EXPORTDATA in wtf moudule with newly introduced WTF_EXPORTDATA.

        Reviewed by Kevin Ollivier.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * config.h:
        * runtime/JSExportMacros.h: Added.
        * wtf/ExportMacros.h:
        * wtf/Platform.h:
        * wtf/WTFThreadData.h:
        * wtf/text/AtomicString.h:
        * wtf/text/StringStatics.cpp:

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

        Changes proposed for 73457 slow down Kraken json-parse-financial
        https://bugs.webkit.org/show_bug.cgi?id=73584

        Restructured StringImpl::equal to take advantage of 8 or 4 bytes
        at a time when possible.

        This is worth ~3% on Kraken json-parse-financial. It provides 
        ~2% on SunSpider string-unpack-code.

        Reviewed by Sam Weinig.

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

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

        Support integer typed arrays in the DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=73608

        Reviewed by Filip Pizlo.

        Add support for all the integral typed arrays in the DFG JIT.
        Currently this loads the contents of Uint32 arrays as doubles,
        which is clearly not as efficient as it could be, but this is
        still in the order of 10-20x faster than the existing behaviour.

        This needed us to add support for writing 16bit values to the
        macroassembler, and also to support double<->unsigned conversion.

        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::strh):
        (JSC::ARMv7Assembler::vcvt_floatingPointToUnsigned):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::store16):
        (JSC::MacroAssemblerARMv7::truncateDoubleToUint32):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::store16):
        (JSC::MacroAssemblerX86Common::truncateDoubleToUint32):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::movw_rm):
        (JSC::X86Assembler::cvttsd2siq_rr):
        * bytecode/PredictedType.cpp:
        (JSC::predictionToString):
        (JSC::predictionFromClassInfo):
        * bytecode/PredictedType.h:
        (JSC::isInt8ArrayPrediction):
        (JSC::isInt16ArrayPrediction):
        (JSC::isInt32ArrayPrediction):
        (JSC::isUint8ArrayPrediction):
        (JSC::isUint16ArrayPrediction):
        (JSC::isUint32ArrayPrediction):
        (JSC::isFloat32ArrayPrediction):
        (JSC::isFloat64ArrayPrediction):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::initialize):
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateInt8Array):
        (JSC::DFG::Node::shouldSpeculateInt16Array):
        (JSC::DFG::Node::shouldSpeculateInt32Array):
        (JSC::DFG::Node::shouldSpeculateUint8Array):
        (JSC::DFG::Node::shouldSpeculateUint16Array):
        (JSC::DFG::Node::shouldSpeculateUint32Array):
        (JSC::DFG::Node::shouldSpeculateFloat32Array):
        (JSC::DFG::Node::shouldSpeculateFloat64Array):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::SpeculativeJIT::compileGetTypedArrayLength):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnIntTypedArray):
        (JSC::DFG::SpeculativeJIT::compilePutByValForIntTypedArray):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * runtime/JSGlobalData.h:

2011-12-01  Benjamin Poulain  <benjamin@webkit.org>

        URLs are encoded in UTF-8, then decoded as if they are Latin1
        https://bugs.webkit.org/show_bug.cgi?id=71758

        Reviewed by Darin Adler.

        Add the operator == between a String and a Vector of char. The implementation
        is the same as the comparison of String and char* but adds the length as a
        parameter for comparing the strings.

        * JavaScriptCore.exp:
        * wtf/text/StringImpl.h:
        (WTF::equal):
        * wtf/text/WTFString.h:
        (WTF::operator==):
        (WTF::operator!=):

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

        [GTK] Read fonts from the jhbuild root
        https://bugs.webkit.org/show_bug.cgi?id=73487

        Reviewed by Gustavo Noronha Silva.

        Read fonts from the jhbuild root instead of from the system. This will ensure
        that all testers use the same fonts instead of leaving this up to luck.

        * wtf/gobject/GlibUtilities.h: Add Assertions.h which was required for the WebKit2TestRunner.

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

        [GTK] Add a helper function to find the current executable's path
        https://bugs.webkit.org/show_bug.cgi?id=73473

        Reviewed by Gustavo Noronha Silva.

        Add a WTF helper which gets the binary path. This is currently only used
        in WebKit2.

        * GNUmakefile.list.am: Add the new file to the source list.
        * wtf/gobject/GlibUtilities.cpp: Added.
        (getCurrentExecutablePath):
        * wtf/gobject/GlibUtilities.h: Added.

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

        Unreviewed, rolling out r101691.
        http://trac.webkit.org/changeset/101691
        https://bugs.webkit.org/show_bug.cgi?id=73588

        Tests fail on Chromium bots, early warning system warned
        committer, please adjust test_expectations in patch (Requested
        by scheib on #webkit).

        * JavaScriptCore.exp:
        * wtf/text/StringImpl.h:
        * wtf/text/WTFString.h:

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

        ARMv7 only allows for one-shot patching of compact offsets, while the
        JIT expects to be able to repatch
        https://bugs.webkit.org/show_bug.cgi?id=73548

        Reviewed by Oliver Hunt.

        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::setUInt7ForLoad):

2011-11-30  Benjamin Poulain  <benjamin@webkit.org>

        URLs are encoded in UTF-8, then decoded as if they are Latin1
        https://bugs.webkit.org/show_bug.cgi?id=71758

        Reviewed by Darin Adler.

        Add the operator == between a String and a Vector of char. The implementation
        is the same as the comparison of String and char* but adds the length as a
        parameter for comparing the strings.

        * JavaScriptCore.exp:
        * wtf/text/StringImpl.h:
        (WTF::equal):
        * wtf/text/WTFString.h:
        (WTF::operator==):
        (WTF::operator!=):

2011-11-30  Dmitry Lomov  <dslomov@google.com>

        https://bugs.webkit.org/show_bug.cgi?id=73503
        [Chromium][V8] Implement ArrayBuffer transfer in chromium.
        Portions of this patch come from Luke Zarko.

        Reviewed by David Levin.

        * wtf/ArrayBuffer.cpp:
        (WTF::ArrayBuffer::transfer): Changed prototype from pointers to RefPtr.
        * wtf/ArrayBuffer.h:
        (WTF::ArrayBufferContents::transfer): Changed prototype from pointers to RefPtr.
        (WTF::ArrayBuffer::isNeutered):
        * wtf/TypedArrayBase.h:
        (WTF::TypedArrayBase::neuter):

2011-12-01  Chao-ying Fu  <fu@mips.com>

        MacroAssemblerMIPS does not implement readCallTarget
        https://bugs.webkit.org/show_bug.cgi?id=73432

        Reviewed by Zoltan Herczeg.

        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::readCallTarget):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::readCallTarget):

2011-12-01  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] Remove wtf/qt/ThreadingQt.cpp from the gyp projects
        https://bugs.webkit.org/show_bug.cgi?id=73527

        Reviewed by Simon Hausmann.

        wtf/qt/ThreadingQt.cpp was removed in r101477

        * JavaScriptCore.gypi: remove wtf/qt/ThreadingQt.cpp

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

        BitVector isInline check could fail
        https://bugs.webkit.org/show_bug.cgi?id=70691

        Reviewed by Gavin Barraclough.
        
        Switch back to using the high bit as the inline marker, to make
        all of the bit indexing operations simpler. Computing the size in
        words and in bytes of a bitvector, using the number of bits as
        input is error-prone enough; and with the current approach to
        solving the X86 bug we end up getting it wrong. Making it right
        seems hard.
        
        So instead, to solve the original problem (the high bit may be
        meaningful on 32-bit systems), the out-of-line storage pointer is
        right-shifted by 1. Compared to the original BitVector code, this
        is a much smaller change (just three lines).
        
        This solves a bug where the DFG was corrupting its call frame
        because BitVector lost track of some bits.

        * wtf/BitVector.cpp:
        (WTF::BitVector::setSlow):
        (WTF::BitVector::resizeOutOfLine):
        * wtf/BitVector.h:
        (WTF::BitVector::quickGet):
        (WTF::BitVector::quickSet):
        (WTF::BitVector::quickClear):
        (WTF::BitVector::makeInlineBits):
        (WTF::BitVector::isInline):
        (WTF::BitVector::outOfLineBits):

2011-11-30  Filip Pizlo  <fpizlo@apple.com>

        DFG should make it easier to notice node boundaries in disassembly
        https://bugs.webkit.org/show_bug.cgi?id=73509

        Rubber-stamped by Gavin Barraclough
        
        If you set XOR_DEBUG_AID to 1 in DFGCommon.h, a pair of xor's will
        be emitted at node boundaries, where the immediate being xor'd is the
        node index.

        * dfg/DFGCommon.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        Removed ArgList iterators.

        Reviewed by Gavin Barraclough.
        
        Another step toward reversing the argument order.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct): Switched from iterator to int.

        * runtime/ArgList.h:
        (JSC::ArgList::ArgList):
        (JSC::ArgList::isEmpty): Removed iterators.

        * runtime/JSArray.cpp:
        (JSC::JSArray::finishCreation): Switched from iterator to int.

2011-11-30  Yuqiang Xian  <yuqiang.xian@intel.com>

        32 bit DFG should handle logicalNot slow case instead of simply bailing out
        https://bugs.webkit.org/show_bug.cgi?id=73515

        Reviewed by Filip Pizlo.

        This improves Kraken performance by 14%, mainly due to ~3X improvement
        on imaging-desaturate.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):

2011-11-30  Max Vujovic  <mvujovic@adobe.com>

        Some date values not handled consistently with IE/Firefox
        https://bugs.webkit.org/show_bug.cgi?id=14176

        Reviewed by Gavin Barraclough.

        Changed time zone offset parsing behavior to match IE/Firefox/Opera's in
        implementation dependent cases like "GMT-4".

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

2011-11-30  Mark Hahnenberg  <mhahnenberg@apple.com>

        toStringCallback and valueOfCallback do not check the entire prototype chain for convertToType callback
        https://bugs.webkit.org/show_bug.cgi?id=73368

        Reviewed by Darin Adler.

        We need to search the entire prototype chain for the convertToType callback, rather than just calling whatever
        happens to be in the first class of the chain, which potentially could be null.

        <rdar://problem/10493218>

        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::toStringCallback):
        (JSC::JSCallbackFunction::valueOfCallback):

2011-11-29  Sam Weinig  <sam@webkit.org>

        Add adoptCF and adoptNS convenience functions to RetainPtr.h
        https://bugs.webkit.org/show_bug.cgi?id=73399

        Reviewed by Anders Carlsson.

        * wtf/RetainPtr.h:
        (WTF::adoptCF):
        (WTF::adoptNS):
        These adoption functions match the pattern we use in other
        smart pointer classes.

2011-11-30  Adam Roben  <aroben@apple.com>

        Fix RetainPtr's move assignment operators

        Fixes <http://webkit.org/b/73449> RetainPtr's move assignment operators don't modify the
        pointer being assigned to

        I didn't write a test for this because we don't have a way of unit testing C++11 code (see
        <http://webkit.org/b/73448>).

        Reviewed by Anders Carlsson.

        * wtf/RetainPtr.h:
        (WTF::RetainPtr::operator=): Adopt the passed-in RetainPtr's underlying pointer, not our own
        pointer.

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

        Unreviewed rolling out incorrect r101481.

        * assembler/MIPSAssembler.h:
        * assembler/MacroAssemblerMIPS.h:

2011-11-30  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix compilation with MingW.

        Reviewed by Csaba Osztrogonác.

        * wtf/ThreadingWin.cpp:
        (WTF::initializeCurrentThreadInternal): MingW doesn't support MSVC exception handling, so for
        the time being make the thread name setting unimplemented for MingW.

2011-11-30  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed propective build fix for Qt/Windows part 2 after r101477.

        * wtf/ThreadSpecific.h: Fix the OS(WINDOWS) defines for the friend declaration for ThreadSpecific<T>::Data

2011-11-30  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed propective build fix for Qt/Windows after r101477.

        * wtf/ThreadSpecific.h: Use OS(WINDOWS) for declaring "destructor", as it's
        only referenced from within another OS(WINDOWS) section.

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

        Unreviewed speculative buildfix after r101457.

        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::readCallTarget):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::readCallTarget):

2011-11-30  Andrew Wason  <rectalogic@rectalogic.com>

        Replace Qt QThread threading back-end with pthread/Win32 threading back-ends
        https://bugs.webkit.org/show_bug.cgi?id=72155

        Reviewed by Simon Hausmann.

        Use ThreadingPthreads and ThreadingWin instead of ThreadingQt.

        * heap/MachineStackMarker.cpp:
        * wtf/MainThread.cpp:
        (WTF::initializeMainThread):
        * wtf/Platform.h:
        * wtf/ThreadSpecific.h: Drop QThreadStorage related code.
        (WTF::::destroy):
        * wtf/ThreadingPrimitives.h:
        * wtf/qt/MainThreadQt.cpp: Drop Qt specific isMainThread().
        (WTF::initializeMainThreadPlatform): Initialize MainThreadInvoker on main thread to avoid infecting secondary thread with QAdoptedThread.
        (WTF::scheduleDispatchFunctionsOnMainThread):
        * wtf/qt/ThreadingQt.cpp: Removed.
        * wtf/wtf.pro:

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

        MacroAssemblerARM does not implement readCallTarget
        https://bugs.webkit.org/show_bug.cgi?id=73413

        Based on Filip Pizlo's patch.

        Buildfix. Rubber-stamped by Gabor Loki.

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::readCallTarget):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::readCallTarget):

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

        Resetting a put_by_id inline cache should preserve the "isDirect" bit
        https://bugs.webkit.org/show_bug.cgi?id=73375

        Reviewed by Gavin Barraclough.
        
        For the replace case, we can find out if it was direct by looking at the
        slow call. For the transition case, we explicitly remember if it was
        direct.

        * bytecode/CodeBlock.cpp:
        (JSC::printStructureStubInfo):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::deref):
        (JSC::StructureStubInfo::visitWeakReferences):
        * bytecode/StructureStubInfo.h:
        (JSC::isPutByIdAccess):
        (JSC::StructureStubInfo::initPutByIdTransition):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::tryCachePutByID):
        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::resetPatchPutById):
        (JSC::JIT::isDirectPutById):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::resetPatchPutById):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCachePutByID):

2011-11-29  Sam Weinig  <sam@webkit.org>

        Remove RetainPtr::releaseRef
        https://bugs.webkit.org/show_bug.cgi?id=73396

        Reviewed by Dan Bernstein.

        * wtf/RetainPtr.h:
        Be gone releaseRef! Long live leakRef!

2011-11-29  Sam Weinig  <sam@webkit.org>

        Add move semantics to RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=73393

        Reviewed by Anders Carlsson.

        * wtf/RetainPtr.h:
        (WTF::RetainPtr::RetainPtr):
        Add a move constructor and move enabled assignment operators
        to RetainPtr if the compiler being used supports rvalue
        references. If the compiler does not support it, we fallback
        to the copy semantics we have always had.

2011-11-29  Yuqiang Xian  <yuqiang.xian@intel.com>

        DFG local CSE may cause incorrect reference counting for a node
        https://bugs.webkit.org/show_bug.cgi?id=73390

        Reviewed by Filip Pizlo.

        When performing a node substitution, the ref count of the replaced
        child will be increased, no matter whether the user node is skipped in
        code generation or not. This will cause the reference count of the
        replaced child never get the chance to become zero and so the
        registers occupied by it cannot be reused simply without spilling, if
        it's used by a "skipped" node.
        This is a 1% gain on V8 benchmark, tested on IA32 Linux.

        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::performSubstitution):
        (JSC::DFG::Propagator::performNodeCSE):

2011-11-29  David Levin  <levin@chromium.org>

        Add a way to revert a variable to its previous value after leaving a scope.
        https://bugs.webkit.org/show_bug.cgi?id=73371

        Reviewed by Adam Barth.

        In case anyone from Chromium sees this, it is nearly identical to AutoReset
        but if the same name were used, it causes unnecessary ambiguity.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/TemporarilyChange.h: Added.
        (WTF::TemporarilyChange::TemporarilyChange):
        (WTF::TemporarilyChange::~TemporarilyChange):

2011-11-29  Sam Weinig  <sam@webkit.org>

        Add COMPILER_SUPPORTS macro to allow for compiler feature testing
        https://bugs.webkit.org/show_bug.cgi?id=73386

        Reviewed by Anders Carlsson.

        * wtf/Compiler.h:
        Add COMPILER_SUPPORTS and #defines for C++11 variadic templates and
        rvalue references for Clang.

2011-11-29  Oliver Hunt  <oliver@apple.com>

        Allow WebCore to describe typed arrays to JSC
        https://bugs.webkit.org/show_bug.cgi?id=73355

        Reviewed by Gavin Barraclough.

        Allow globaldata to track the structure of typed arrays.

        * runtime/JSGlobalData.h:
        (JSC::TypedArrayDescriptor::TypedArrayDescriptor):

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

        DFG debugCall() mechanism only works on X86 and X86-64
        https://bugs.webkit.org/show_bug.cgi?id=73282

        Reviewed by Oliver Hunt.

        * dfg/DFGAssemblyHelpers.h:
        (JSC::DFG::AssemblyHelpers::debugCall):

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

        DFG non-X86 ArithDiv does speculation failure after mutating state,
        without a value recovery
        https://bugs.webkit.org/show_bug.cgi?id=73286

        Reviewed by Gavin Barraclough.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        Unreviewed build fixes for ARM.

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::readCallTarget):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::setupArgumentsWithExecState):

2011-11-20  Roland Steiner  <rolandsteiner@chromium.org>

        <style scoped>: add ENABLE(STYLE_SCOPED) flag to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=72848

        Add ENABLE_STYLE_SCOPED flag.

        Reviewed by Dimitri Glazkov.

        * Configurations/FeatureDefines.xcconfig:

2011-11-28  Jon Lee  <jonlee@apple.com>

        Create skeleton framework for notifications support in WK2
        https://bugs.webkit.org/show_bug.cgi?id=73253
        <rdar://problem/10356943>

        * Configurations/FeatureDefines.xcconfig: Split out ENABLE_NOTIFICATIONS based on platform.

2011-11-28  Oliver Hunt  <oliver@apple.com>

        Fix windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-11-28  Oliver Hunt  <oliver@apple.com>

        Fix gyp build

        * JavaScriptCore.gypi:

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

        GetById should not always speculate cell
        https://bugs.webkit.org/show_bug.cgi?id=73181

        Reviewed by Gavin Barraclough.
        
        GetById will now speculate cell if the predictions of the base are cell.
        Otherwise it will do like the old JIT (and like the old non-speculative
        DFG JIT): if not cell, go straight to slow-path but otherwise don't OSR
        out. This is a 1% speed-up on SunSpider.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::setupArgumentsWithExecState):
        (JSC::DFG::SpeculativeJIT::callOperation):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetById):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-11-28  Oliver Hunt  <oliver@apple.com>

        Move typed array implementations into wtf
        https://bugs.webkit.org/show_bug.cgi?id=73248

        Reviewed by Sam Weinig.

        Move typed array implementation files from WebCore to wtf.  Inline the
        .cpp files for each of the array views to cut down on unnecessary exports
        and function call overhead for trivial operations.

        Added files to all the project files.

        * GNUmakefile.list.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/ArrayBuffer.cpp: Renamed from Source/WebCore/html/canvas/Float32Array.cpp.
        (WTF::ArrayBuffer::transfer):
        (WTF::ArrayBuffer::addView):
        (WTF::ArrayBuffer::removeView):
        * wtf/ArrayBuffer.h: Renamed from Source/WebCore/html/canvas/ArrayBuffer.cpp.
        (WTF::ArrayBufferContents::ArrayBufferContents):
        (WTF::ArrayBufferContents::data):
        (WTF::ArrayBufferContents::sizeInBytes):
        (WTF::ArrayBufferContents::transfer):
        (WTF::ArrayBuffer::~ArrayBuffer):
        (WTF::ArrayBuffer::clampValue):
        (WTF::ArrayBuffer::create):
        (WTF::ArrayBuffer::ArrayBuffer):
        (WTF::ArrayBuffer::data):
        (WTF::ArrayBuffer::byteLength):
        (WTF::ArrayBuffer::slice):
        (WTF::ArrayBuffer::sliceImpl):
        (WTF::ArrayBuffer::clampIndex):
        (WTF::ArrayBufferContents::tryAllocate):
        (WTF::ArrayBufferContents::~ArrayBufferContents):
        * wtf/ArrayBufferView.cpp: Copied from Source/WebCore/bindings/js/JSArrayBufferCustom.cpp.
        (WTF::ArrayBufferView::ArrayBufferView):
        (WTF::ArrayBufferView::~ArrayBufferView):
        (WTF::ArrayBufferView::neuter):
        * wtf/ArrayBufferView.h: Renamed from Source/WebCore/html/canvas/ArrayBufferView.h.
        (WTF::ArrayBufferView::isByteArray):
        (WTF::ArrayBufferView::isUnsignedByteArray):
        (WTF::ArrayBufferView::isShortArray):
        (WTF::ArrayBufferView::isUnsignedShortArray):
        (WTF::ArrayBufferView::isIntArray):
        (WTF::ArrayBufferView::isUnsignedIntArray):
        (WTF::ArrayBufferView::isFloatArray):
        (WTF::ArrayBufferView::isDoubleArray):
        (WTF::ArrayBufferView::isDataView):
        (WTF::ArrayBufferView::buffer):
        (WTF::ArrayBufferView::baseAddress):
        (WTF::ArrayBufferView::byteOffset):
        (WTF::ArrayBufferView::verifySubRange):
        (WTF::ArrayBufferView::clampOffsetAndNumElements):
        (WTF::ArrayBufferView::setImpl):
        (WTF::ArrayBufferView::setRangeImpl):
        (WTF::ArrayBufferView::zeroRangeImpl):
        (WTF::ArrayBufferView::calculateOffsetAndLength):
        * wtf/CMakeLists.txt:
        * wtf/Float32Array.h: Renamed from Source/WebCore/html/canvas/Float32Array.h.
        (WTF::Float32Array::set):
        (WTF::Float32Array::item):
        (WTF::Float32Array::isFloatArray):
        (WTF::Float32Array::create):
        (WTF::Float32Array::Float32Array):
        (WTF::Float32Array::subarray):
        * wtf/Float64Array.h: Renamed from Source/WebCore/html/canvas/Float64Array.h.
        (WTF::Float64Array::set):
        (WTF::Float64Array::item):
        (WTF::Float64Array::isDoubleArray):
        (WTF::Float64Array::create):
        (WTF::Float64Array::Float64Array):
        (WTF::Float64Array::subarray):
        * wtf/Int16Array.h: Renamed from Source/WebCore/html/canvas/Int16Array.cpp.
        (WTF::Int16Array::set):
        (WTF::Int16Array::isShortArray):
        (WTF::Int16Array::create):
        (WTF::Int16Array::Int16Array):
        (WTF::Int16Array::subarray):
        * wtf/Int32Array.h: Renamed from Source/WebCore/html/canvas/Int32Array.cpp.
        (WTF::Int32Array::set):
        (WTF::Int32Array::isIntArray):
        (WTF::Int32Array::create):
        (WTF::Int32Array::Int32Array):
        (WTF::Int32Array::subarray):
        * wtf/Int8Array.h: Renamed from Source/WebCore/html/canvas/Int8Array.cpp.
        (WTF::Int8Array::set):
        (WTF::Int8Array::isByteArray):
        (WTF::Int8Array::create):
        (WTF::Int8Array::Int8Array):
        (WTF::Int8Array::subarray):
        * wtf/IntegralTypedArrayBase.h: Renamed from Source/WebCore/html/canvas/IntegralTypedArrayBase.h.
        (WTF::IntegralTypedArrayBase::set):
        (WTF::IntegralTypedArrayBase::item):
        (WTF::IntegralTypedArrayBase::IntegralTypedArrayBase):
        * wtf/TypedArrayBase.h: Renamed from Source/WebCore/html/canvas/TypedArrayBase.h.
        (WTF::TypedArrayBase::data):
        (WTF::TypedArrayBase::set):
        (WTF::TypedArrayBase::setRange):
        (WTF::TypedArrayBase::zeroRange):
        (WTF::TypedArrayBase::length):
        (WTF::TypedArrayBase::byteLength):
        (WTF::TypedArrayBase::TypedArrayBase):
        (WTF::TypedArrayBase::create):
        (WTF::TypedArrayBase::subarrayImpl):
        * wtf/Uint16Array.h: Renamed from Source/WebCore/html/canvas/Uint16Array.cpp.
        (WTF::Uint16Array::set):
        (WTF::Uint16Array::isUnsignedShortArray):
        (WTF::Uint16Array::create):
        (WTF::Uint16Array::Uint16Array):
        (WTF::Uint16Array::subarray):
        * wtf/Uint32Array.h: Renamed from Source/WebCore/html/canvas/Uint32Array.cpp.
        (WTF::Uint32Array::set):
        (WTF::Uint32Array::isUnsignedIntArray):
        (WTF::Uint32Array::create):
        (WTF::Uint32Array::Uint32Array):
        (WTF::Uint32Array::subarray):
        * wtf/Uint8Array.h: Renamed from Source/WebCore/html/canvas/Uint8Array.h.
        (WTF::Uint8Array::set):
        (WTF::Uint8Array::isUnsignedByteArray):
        (WTF::Uint8Array::create):
        (WTF::Uint8Array::Uint8Array):
        (WTF::Uint8Array::subarray):
        * wtf/wtf.pro:

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

        Don't try to optimize huge code blocks
        https://bugs.webkit.org/show_bug.cgi?id=73187

        Reviewed by Oliver Hunt.
        
        This unifies the heuristics used for deciding if a code block is too big
        to optimize, and sets this heuristic to 1000, which is intuitively better
        than numeric_limits<unsigned>::max(). It also results in what looks like
        a speed-up on both SunSpider and V8 (in Tools/Scripts/bencher).

        * dfg/DFGCapabilities.h:
        (JSC::DFG::mightCompileEval):
        (JSC::DFG::mightCompileProgram):
        (JSC::DFG::mightCompileFunctionForCall):
        (JSC::DFG::mightCompileFunctionForConstruct):
        * runtime/Heuristics.cpp:
        (JSC::Heuristics::initializeHeuristics):
        * runtime/Heuristics.h:

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

        Either remove the GetMethod node from the DFG backend, or find a use for it
        https://bugs.webkit.org/show_bug.cgi?id=73178

        Reviewed by Gavin Barraclough.
        
        More testing seemed to imply that the GetMethod code was indeed not profitable
        in any major test. So, it's probably best to just remove it.

        * bytecode/CodeBlock.cpp:
        (JSC::MethodCallLinkInfo::reset):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasIdentifier):
        (JSC::DFG::Node::hasHeapPrediction):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        * dfg/DFGRepatch.cpp:
        * dfg/DFGRepatch.h:
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetById):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::cachedGetById):
        (JSC::DFG::SpeculativeJIT::compile):

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

        Change set 101187 from bug 73154 removed already lower case optimization
        https://bugs.webkit.org/show_bug.cgi?id=73174

        Added back the "string is already lower case" optimization.

        Reviewed by Geoffrey Garen.

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncToLowerCase):

2011-11-28  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed prospective build fix. Touch the file to trigger correct
        rebuild on the Qt mips/sh4/sl bot.

        * wtf/unicode/qt4/UnicodeQt4.h:

2011-11-28  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove cruft from project file

        Reviewed by Simon Hausmann.

        * Target.pri:

2011-11-28  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] WTF should be built as separate static library
        https://bugs.webkit.org/show_bug.cgi?id=73201

        Reviewed by Tor Arne Vestbø.

        * Target.pri: Don't claim to build WTF, as that would cause
        the debug-with-shlibs build to not link in wtf.
        * jsc.pro: Require wtf.
        * wtf/wtf.pri: Removed.
        * wtf/wtf.pro: Added. Pro file to build wtf statically.

2011-11-28  Martin Robinson  <mrobinson@igalia.com>

        [GTK] JavaScriptCore generated sources should build in the DerivedSources directory
        https://bugs.webkit.org/show_bug.cgi?id=73197

        Reviewed by Philippe Normand.

        Build all JavaScriptCore generated sources in DerivedSources.

        * GNUmakefile.am: Update generation rules.
        * GNUmakefile.list.am: Update source lists.

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

        DFG should not emit GetMethod node
        https://bugs.webkit.org/show_bug.cgi?id=73175

        Reviewed by Gavin Barraclough.
        
        Replaces all instances of the GetMethod node with GetById. This appears to
        be a slight win on V8. This patch leaves GetMethod support in the code-base,
        making this decision easy to reverse, for now.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):

2011-11-26  Hajime Morrita  <morrita@chromium.org>

        Needs WTF_INLINE and JS_INLINE
        https://bugs.webkit.org/show_bug.cgi?id=72853

        Reviewed by Kevin Ollivier.

        Added WTF_HIDDEN, WTF_INLINE and JS_INLINE which
        indirect __attribute__((visibility("hidden"))

        * config.h:
        * wtf/ExportMacros.h:

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

        String.prototype.toLower should be optimized for 8 bit strings
        https://bugs.webkit.org/show_bug.cgi?id=73154

        Changed stringProtoFuncToLowerCase to use StringImpl::lower() which has
        been optimized for 8 bit strings.

        This is worth ~7% to sunspider string.tagcloud.

        Reviewed by Filip Pizlo.

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncToLowerCase):

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

        Array.toString always uses StringImpl::characters()
        https://bugs.webkit.org/show_bug.cgi?id=72969

        If all component strings are 8 bit, create an 8 bit result string for toString().

        This appears to be performance neutral to sunspider and v8.

        Reviewed by Filip Pizlo.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):

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

        UString methods are not character size aware
        https://bugs.webkit.org/show_bug.cgi?id=72975

        Changed the UString number constructors to build 8 bit strings.
        Modified the other methods to check string bitness and process
        with 8 bits wherre appropriate.

        * runtime/UString.cpp:
        (JSC::UString::number):
        (JSC::operator==):
        (JSC::operator<):
        (JSC::UString::ascii):

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

        JavaScript string to number conversion functions use characters()
        https://bugs.webkit.org/show_bug.cgi?id=72974

        Change the various JS to number routines to process strings
        using characters8() or characters16() as appropriate.
        Implemented using static template methods.

        Reviewed by Filip Pizlo.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::isInfinity):
        (JSC::jsHexIntegerLiteral):
        (JSC::jsStrDecimalLiteral):
        (JSC::toDouble):
        (JSC::jsToNumber):

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

        Empty JSStrings are created as 16 bit
        https://bugs.webkit.org/show_bug.cgi?id=72968

        Clear m_is8Bit flag for empty strings.

        Reviewed by Filip Pizlo.

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

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

        Tune JSStringBuilder for 8 bit Strings
        https://bugs.webkit.org/show_bug.cgi?id=72683

        Changed JSStringBuilder to use 8 bit buffers until 16 bit data is added.
        When 16 bit data is to be added, the 8 bit buffer is converted to 16 bit
        and building continues with a 16 bit buffer.

        Reviewed by Filip Pizlo.

        * runtime/JSStringBuilder.h:
        (JSC::JSStringBuilder::JSStringBuilder):
        (JSC::JSStringBuilder::append):
        (JSC::JSStringBuilder::upConvert):
        (JSC::JSStringBuilder::build):
        * runtime/UString.h:
        (JSC::UString::adopt):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::adopt):

2011-11-24  Zeno Albisser  <zeno@webkit.org>

        [Qt]WK2][Mac] Use Mac port's IPC implementation instead of Unix sockets
        https://bugs.webkit.org/show_bug.cgi?id=72495

        Update defines to not use Unix Domain Sockets for platform Qt on Mac.
        This enables Qt to reuse existing code for mach ports and Grand
        Central Dispatch based IPC.

        Reviewed by Simon Hausmann.

        * wtf/Platform.h:

2011-11-24  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] REGRESSION(r101131): WTF::scheduleDispatchFunctionsOnMainThread() doesn't work reliably

        Reviewed by Andreas Kling.

        We must make sure that the MainThreadInvoker object lives in the gui thread. There are a few
        ways of doing that and this fix seems like the least intrusive one by simply pushing the
        invoker to the gui thread if it's not there already.

        * wtf/qt/MainThreadQt.cpp:
        (WTF::scheduleDispatchFunctionsOnMainThread):

2011-11-24  Patrick Gansterer  <paroga@webkit.org>

        [Qt] Use QEvent for dispatchFunctionsFromMainThread()
        https://bugs.webkit.org/show_bug.cgi?id=72704

        Reviewed by Simon Hausmann.

        Replace QMetaObject::invokeMethod with QCoreApplication::postEvent.
        This is the same as what invokeMethod does internally, but reduces
        the dependency on some internal QThread stuff.

        * wtf/qt/MainThreadQt.cpp:
        (WTF::MainThreadInvoker::MainThreadInvoker):
        (WTF::MainThreadInvoker::event):
        (WTF::scheduleDispatchFunctionsOnMainThread):

2011-11-23  George Staikos  <staikos@webkit.org>

        Remove BlackBerry OS support from RandomNumberSeed, making QNX=UNIX.
        https://bugs.webkit.org/show_bug.cgi?id=73028

        Reviewed by Daniel Bates.

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

2011-11-23  Nikolas Zimmermann  <nzimmermann@rim.com>

        Add flags/precision arguments to String::number(double) to allow fine-grained control over the result string
        https://bugs.webkit.org/show_bug.cgi?id=72793

        Reviewed by Zoltan Herczeg.

        This new code will be used in follow-up patches to replace the String::format("%.2f") usage in
        platform/text/TextStream.cpp, and String::format("%.6lg") usage in svg/SVGPathStringBuilder.cpp.

        The String::number(double) currently calls String::format("%.6lg") in trunk. In order to replace
        this by a variant that properly rounds to six significant figures, JSC code could be refactored.
        JSCs Number.toPrecision/toFixed uses wtf/dtoa/double-conversion which provides all features we need,
        except truncating trailing zeros, needed to mimic the "g" format, which is either f or e but with
        trailing zeros removed, producing shorter results. Changed the default signature to:

        "static String number(double, unsigned = ShouldRoundSignificantFigures | ShouldTruncateTrailingZeros, unsigned precision = 6);".

        In WebCore we can now replace String::format() calls like this:
        String::format("%.2f", f) -> String::number(f, ShouldRoundDecimalPlaces, 2)
        String::format("%.6lg", f) -> String::number(f)

        The default parameters for precison & flags exactly match the format of the string produced now, except that the result
        is rounded according to the rounding mode / formatting mode and precision. This paves the way towards reliable results
        in the d="" attribute dumps of SVG paths  across platforms. The dtoa rounding code enforces a unique zero, resolving
        all 0.0 vs. -0.0 issues currently seen on Windows, and some Gtk/Qt bots.

        This patch needs a rebaseline of svg/dom/length-list-parser.html as we don't perfecly mimic the String::format() "lg" mode
        result for exponentials, we used to return eg. "e-7" and now return "e-07" - the trailing zero truncation hasn't been
        implemented for exponentials, as this really affects only this test and thus wasn't worth the trouble - in contrary the
        trailing zero truncation is needed for thousands of other results in "f" notation, and thus needed to match the DRT results.

        Here's a performance comparision using a JSC release build and some arbitary numbers:
        Converting 123.456 using old approach took 95.527100ms. avg 0.000955ms/call.
        Converting 123.456 using new approach took 28.126953ms. avg 0.000281ms/call.

        Converting 123 using old approach took 85.411133ms. avg 0.000854ms/call.
        Converting 123 using new approach took 24.190186ms. avg 0.000242ms/call.

        Converting 0.1 using old approach took 92.622803ms. avg 0.000926ms/call.
        Converting 0.1 using new approach took 23.317871ms. avg 0.000233ms/call.

        Converting 1/i using old approach took 106.893066ms. avg 0.001069ms/call.
        Converting 1/i using new approach took 27.164062ms. avg 0.000272ms/call.

        For all numbers I've tested in RoundingSignificantFigures mode and 6 digit precision the speedup was at least 250%.

        * JavaScriptCore.exp: Change String::number(double) signature.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Ditto.
        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToFixed): Refactor this into numberToFixedPrecisionString(), move to wtf/dtoa.cpp.
        (JSC::numberProtoFuncToPrecision): Ditto, refactor this into numberToFixedWidthString.
        * wtf/dtoa.cpp: Moved fixedWidth/Precision helpers into dtoa, extend numberToFixedPrecisionString(). Add a mode which allows to truncate trailing zeros/decimal point.
                        to make it possible to use them to generate strings that match the output from String::format("%6.lg"), while using our dtoas rounding facilities.
        * wtf/dtoa.h:
        * wtf/dtoa/utils.h: Expose new helper method, which allows us to truncate the result, before generating the output const char*.
        (WTF::double_conversion::StringBuilder::SetPosition):
        * wtf/text/WTFString.cpp:
        (WTF::String::number): Remove String::format("%6.lg") usage! Switch to rounding to six significant figures, while matching the output of String::format.
        * wtf/text/WTFString.h:

2011-11-23  Hajime Morrita  <morrita@chromium.org>

        WTF::String has extra WTF_EXPORT_PRIVATE
        https://bugs.webkit.org/show_bug.cgi?id=72858

        Reviewed by Kevin Ollivier.

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

2011-11-23  Raphael Kubo da Costa  <kubo@profusion.mobi>

        [CMake] Move the top-level logic to the top-level directory.
        https://bugs.webkit.org/show_bug.cgi?id=72685

        Reviewed by Brent Fulgham.

        * CMakeLists.txt: Point to the right Source/ directory.
        * wtf/CMakeLists.txt: Ditto.

2011-11-22  Yuqiang Xian  <yuqiang.xian@intel.com>

        Strength reduction for Mul and Mod operations for known constants in DFG
        https://bugs.webkit.org/show_bug.cgi?id=72878

        Reviewed by Filip Pizlo.

        Also the code should be commonly shared by both 32_64 and 64.

        * dfg/DFGNode.h:
        (JSC::DFG::nodeMayOverflow):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::fmodAsDFGOperation):
        (JSC::DFG::SpeculativeJIT::compileInstanceOf):
        (JSC::DFG::isPowerOfTwo):
        (JSC::DFG::logTwo):
        (JSC::DFG::SpeculativeJIT::compileSoftModulo):
        (JSC::DFG::SpeculativeJIT::compileArithMul):
        (JSC::DFG::SpeculativeJIT::compileArithMod):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        Add WTF infrastructure for the BlackBerry port
        https://bugs.webkit.org/show_bug.cgi?id=72970

        Reviewed by Antonio Gomes.

        * wtf/Assertions.cpp: Added BlackBerry-specific logging directive.
        * wtf/MathExtras.h:
        (abs): Added; stdlib doesn't contain abs() on QNX.
        * wtf/Platform.h: Define WTF_PLATFORM_BLACKBERRY and enable some platform features.
        * wtf/RandomNumberSeed.h:
        (WTF::initializeRandomNumberGenerator): For the BlackBerry port, we initialize
        the bad pseudo random number generator using time(3) before initializing the
        Mersenne Twister random number generator.
        * wtf/ThreadingPthreads.cpp:
        (WTF::createThreadInternal): Added.
        * wtf/blackberry: Added.
        * wtf/blackberry/MainThreadBlackBerry.cpp: Added.
        (WTF::initializeMainThreadPlatform):
        (WTF::scheduleDispatchFunctionsOnMainThread):
        * wtf/text/WTFString.h: Added constructor and conversion operator for
        BlackBerry WebString string object.

2011-11-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100988.
        http://trac.webkit.org/changeset/100988
        https://bugs.webkit.org/show_bug.cgi?id=72941

        "Broke pixel tests on Chromium-Linux" (Requested by kbalazs on
        #webkit).

        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/ParallelJobs.h:
        * wtf/ParallelJobsGeneric.cpp:
        * wtf/ParallelJobsGeneric.h:
        (WTF::ParallelEnvironment::ParallelEnvironment):
        (WTF::ParallelEnvironment::execute):
        * wtf/Platform.h:

2011-11-21  Balazs Kelemen  <kbalazs@webkit.org>

        Enable ParallelJobs by default
        https://bugs.webkit.org/show_bug.cgi?id=70032

        Reviewed by Zoltan Herczeg.

        According to measurements on Mac and Linux it is a
        considerable speedup for SVG on multicore.

        Remove the ENABLE(PARALLEL_JOBS) guard.
        Fix build on Windows and Chromium.

        * JavaScriptCore.gypi:  Add the files to the build. It was
        missing for the gyp build system.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        Export symbols.
        * wtf/ParallelJobs.h:
        * wtf/ParallelJobsGeneric.cpp:
        (WTF::ParallelEnvironment::ParallelEnvironment):
        (WTF::ParallelEnvironment::execute):
        Deinline these to avoid exporting a lot of symbols.
        These are non-trivial and called only once on a given object
        so it doesn't seems to be worthwile to inline them.
        Additionally fix a signed-unsigned comparison in the constructor.
        * wtf/ParallelJobsGeneric.h:
        * wtf/Platform.h:

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

        DFG should have richer debug output for CFA and phi processing
        https://bugs.webkit.org/show_bug.cgi?id=72922

        Reviewed by Gavin Barraclough.
        
        In the default verbose mode, we now print information about variable
        state at the bottom of basic blocks in addition to the top, and we
        also print local variable linking. In the verbose propagation mode,
        the state of phi processing is dumped more richly and CFA merging (the
        most subtle part of CFA) is traced as well.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::endBasicBlock):
        (JSC::DFG::AbstractState::mergeStateAtTail):
        * dfg/DFGAbstractValue.h:
        (JSC::DFG::StructureAbstractValue::dump):
        (JSC::DFG::AbstractValue::dump):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::processPhiStack):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGCommon.h:
        (JSC::DFG::NodeIndexTraits::dump):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::dumpChildren):
        * dfg/DFGOSRExitCompiler.cpp:
        * dfg/DFGOperands.h:
        (JSC::DFG::OperandValueTraits::dump):
        (JSC::DFG::dumpOperands):

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

        Showing the data overlay in OpenStreetMap doesn't work, zooming partially broken
        https://bugs.webkit.org/show_bug.cgi?id=71505

        Reviewed by Gavin Barraclough.
        
        It turns out that we were corrupting phi nodes in case of overflow. The bug is
        really obvious, but producing a test case that causes the badness is hard. Even
        when the phi nodes do get corrupt, there's more that has to happen before it
        causes incorrect execution - and I wasn't able to reproduce in any kind of
        sensible reduced case.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::processPhiStack):

2011-11-21  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Speed up debug builds.
        https://bugs.webkit.org/show_bug.cgi?id=72882

        Reviewed by Tor Arne Vestbø.

        * Target.pri: Make BUILDING_JavaScriptCore available earlier, so it can be
        used by the build system.

2011-11-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r100913.
        http://trac.webkit.org/changeset/100913
        https://bugs.webkit.org/show_bug.cgi?id=72885

        "Break Windows build" (Requested by kbalazs on #webkit).

        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/ParallelJobs.h:
        * wtf/ParallelJobsGeneric.cpp:
        * wtf/ParallelJobsGeneric.h:
        (WTF::ParallelEnvironment::ParallelEnvironment):
        (WTF::ParallelEnvironment::execute):
        * wtf/Platform.h:

2011-11-21  Balazs Kelemen  <kbalazs@webkit.org>

        Enable ParallelJobs by default
        https://bugs.webkit.org/show_bug.cgi?id=70032

        Reviewed by Zoltan Herczeg.

        According to measurements on Mac and Linux it is a
        considerable speedup for SVG on multicore.

        Remove the ENABLE(PARALLEL_JOBS) guard.
        Fix build on Windows and Chromium.

        * JavaScriptCore.gypi:  Add the files to the build. It was
        missing for the gyp build system.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        Export symbols.
        * wtf/ParallelJobs.h:
        * wtf/ParallelJobsGeneric.cpp:
        (WTF::ParallelEnvironment::ParallelEnvironment):
        (WTF::ParallelEnvironment::execute):
        Deinline these to avoid exporting a lot of symbols.
        These are non-trivial and called only once on a given object
        so it doesn't seems to be worthwile to inline them.
        Additionally fix a signed-unsigned comparison in the constructor.
        * wtf/ParallelJobsGeneric.h:
        * wtf/Platform.h:

2011-11-21  Andy Wingo  <wingo@igalia.com>

        Add .dir-locals.el file for better Emacs defaults
        https://bugs.webkit.org/show_bug.cgi?id=72483

        Reviewed by Xan Lopez.

        * .dir-locals.el: Set appropriate directory-local variables for Emacs.

2011-11-21  Filip Pizlo  <fpizlo@apple.com>
        
        Another attempt at a build fix.

        * dfg/DFGRepatch.h:
        (JSC::DFG::dfgResetGetByID):
        (JSC::DFG::dfgResetPutByID):

2011-11-20  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed interpreter build fix.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::finalizeUnconditionally):
        * dfg/DFGRepatch.h:

2011-11-20  Yuqiang Xian  <yuqiang.xian@intel.com>

        Improve modulo operation on 32bit platforms
        https://bugs.webkit.org/show_bug.cgi?id=72501

        Reviewed by Filip Pizlo.

        Extend softModulo to support X86 and MIPS in baseline JIT.
        Apply the same optimization to 32bit DFG JIT.
        1% gain on Kraken, tested on Linux Core i7 Nehalem 32bit.

        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compileSoftModulo):
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_op_mod):
        (JSC::JIT::emitSlow_op_mod):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::softModulo):
        * wtf/Platform.h:

2011-11-18  Filip Pizlo  <fpizlo@apple.com>

        Inline caches that refer to otherwise dead objects should be cleared
        https://bugs.webkit.org/show_bug.cgi?id=72311

        Reviewed by Geoff Garen.

        DFG code blocks now participate in the weak reference harvester fixpoint
        so that they only consider themselves to be live if either they are
        currently executing, or their owner is live and all of their weak references
        are live. If not, the relevant code blocks are jettisoned.

        Inline caches in both the old JIT and the DFG are now cleared if any of
        their references are not marked at the end of a GC.

        This is performance-neutral on SunSpider, V8, and Kraken. With the clear-
        all-code-on-GC policy that we currently have, it shows a slight reduction
        in memory usage. If we turn that policy off, it's pretty easy to come up
        with an example program that will cause ToT to experience linear heap
        growth, while with this patch, the heap stays small and remains at a
        constant size.

        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::readCallTarget):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::readCallTarget):
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::readCallTarget):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::readCallTarget):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitAggregate):
        (JSC::CodeBlock::performTracingFixpointIteration):
        (JSC::CodeBlock::visitWeakReferences):
        (JSC::CodeBlock::finalizeUnconditionally):
        (JSC::CodeBlock::stronglyVisitStrongReferences):
        (JSC::MethodCallLinkInfo::reset):
        (JSC::ProgramCodeBlock::jettison):
        (JSC::EvalCodeBlock::jettison):
        (JSC::FunctionCodeBlock::jettison):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::reoptimize):
        (JSC::CodeBlock::shouldImmediatelyAssumeLivenessDuringScan):
        * bytecode/Instruction.h:
        (JSC::PolymorphicAccessStructureList::visitWeak):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::visitWeakReferences):
        * bytecode/StructureStubInfo.h:
        (JSC::isGetByIdAccess):
        (JSC::isPutByIdAccess):
        (JSC::StructureStubInfo::reset):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGOperations.cpp:
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::dfgRepatchByIdSelfAccess):
        (JSC::DFG::dfgResetGetByID):
        (JSC::DFG::dfgResetPutByID):
        * dfg/DFGRepatch.h:
        (JSC::DFG::dfgResetGetByID):
        (JSC::DFG::dfgResetPutByID):
        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::resetPatchGetById):
        (JSC::JIT::resetPatchPutById):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::resetPatchGetById):
        (JSC::JIT::resetPatchPutById):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITWriteBarrier.h:
        (JSC::JITWriteBarrierBase::clearToMaxUnsigned):

2011-11-20  Filip Pizlo  <fpizlo@apple.com>

        Showing the data overlay in OpenStreetMap doesn't work, zooming partially broken
        https://bugs.webkit.org/show_bug.cgi?id=71505

        Reviewed by Oliver Hunt.
        
        The bytecode generator was assuming that call_varargs never reuses the base register
        (i.e. the function being called) for the result. This is no longer true.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitCallVarargs):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ApplyFunctionCallDotNode::emitBytecode):

2011-11-20  Filip Pizlo  <fpizlo@apple.com>

        DFG 32_64 should directly store double virtual registers on SetLocal
        https://bugs.webkit.org/show_bug.cgi?id=72845

        Reviewed by Oliver Hunt.
        
        2% win on Kraken.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-11-20  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] Remove DFG::JITCodeGenerator from the gyp projects
        https://bugs.webkit.org/show_bug.cgi?id=72842

        Reviewed by Filip Pizlo.

        dfg/DFGJITCodeGenerator.{h,cpp} were removed in r100244

        * JavaScriptCore.gypi: remove dfg/DFGJITCodeGenerator.{h,cpp}

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

        Add CMake build infrastructure for the BlackBerry port
        https://bugs.webkit.org/show_bug.cgi?id=72768

        Reviewed by Antonio Gomes.

        * PlatformBlackBerry.cmake: Added.
        * shell/PlatformBlackBerry.cmake: Added.
        * wtf/PlatformBlackBerry.cmake: Added.

2011-11-18  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT fails speculation on InstanceOf if the base is not an object
        https://bugs.webkit.org/show_bug.cgi?id=72709

        Reviewed by Geoff Garen.
        
        InstanceOf already leverages the fact that we only allow the default
        hasInstance implementation. So, if the base is predicted to possibly
        be not an object and the CFA has not yet proven otherwise, InstanceOf
        will abstain from speculating cell and instead return false if the
        base is not a cell.
        
        This appears to be a 1% speed-up on V8 on the V8 harness. 3-4% or so
        speed-up in earley-boyer. Neutral according to bencher on SunSpider,
        V8, and Kraken. In 32-bit, it's a 0.5% win on SunSpider and a 1.9%
        win on V8 even on my harness, due to a 12.5% win on earley-boyer.
        
        I also took this opportunity to make the code for InstanceOf common
        between the two JITs. This was partially successful, in that the
        "common code" has a bunch of #if's, but overall it seems like a code
        size reduction.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileInstanceOfForObject):
        (JSC::DFG::SpeculativeJIT::compileInstanceOf):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-11-18  Mark Hahnenberg  <mhahnenberg@apple.com>

        Forgot to completely de-virtualize isDynamicScope
        https://bugs.webkit.org/show_bug.cgi?id=72763

        Reviewed by Darin Adler.

        * runtime/JSActivation.h: Removed virtual keyword.

2011-11-18  Filip Pizlo  <fpizlo@apple.com>

        Crash in JSC::DFG::OSRExitCompiler::compileExit(JSC::DFG::OSRExit const&, JSC::DFG::SpeculationRecovery*)
        https://bugs.webkit.org/show_bug.cgi?id=72292

        Reviewed by Darin Adler.
        
        Fix this for 32_64.

        * dfg/DFGOSRExitCompiler32_64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):

2011-11-18  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize ExecutableBase::intrinsic
        https://bugs.webkit.org/show_bug.cgi?id=72548

        Reviewed by Oliver Hunt.

        * runtime/Executable.cpp:
        (JSC::ExecutableBase::intrinsic): Dynamic cast to NativeExecutable. If successful, call intrinsic, otherwise return default value. 
        * runtime/Executable.h:
        * runtime/JSCell.h:
        (JSC::jsDynamicCast): Add jsDynamicCast that duplicates the functionality of dynamic_cast in C++ but uses ClassInfo
        rather than requiring C++ RTTI.

2011-11-18  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Remove duplicate dtoa files from CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=72711

        Reviewed by Brent Fulgham.

        * wtf/CMakeLists.txt:

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

        [Qt] REGRESSION(r100510): Enable 8 Bit Strings in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=72602

        Fixed StringImpl::foldCase by adding return in the case we need to handle
        folding of 8 bit strings with Latin-1 characters.

        Fixed case where StringImpl::replace was using a char temp instead of an
        LChar temp.

        Because of the second change, I changed other uses of char or
        unsigned char to LChar.

        Reviewed by Zoltan Herczeg.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::upper):
        (WTF::StringImpl::foldCase):
        (WTF::equal):
        (WTF::equalIgnoringCase):
        (WTF::StringImpl::replace):

2011-11-17  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Move FAST_MALLOC specific lines from Platform*.cmake to CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=72644

        Reviewed by Brent Fulgham.

        All ports need to do the same determination about fast malloc. Move the CMake code from
        platform specific files into the generic one, so that additional ports can reuse it.

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

2011-11-17  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add finalizer to JSActivation
        https://bugs.webkit.org/show_bug.cgi?id=72575

        Reviewed by Geoffrey Garen.

        * runtime/JSActivation.cpp:
        (JSC::JSActivation::finishCreation): Attach finalize function to objects during creation.
        (JSC::JSActivation::finalize):
        * runtime/JSActivation.h: Replaced virtual destructor with static finalize function.

2011-11-15  Filip Pizlo  <fpizlo@apple.com>

        Code block jettisoning should be part of the GC's transitive closure
        https://bugs.webkit.org/show_bug.cgi?id=72467

        Reviewed by Geoff Garen.
        
        Replaced JettisonedCodeBlocks with DFGCodeBlocks. The latter knows about all
        DFG code blocks (i.e. those that may be jettisoned, and may have inlined weak
        references) and helps track what state each of those code blocks is in during
        GC. The state consists of two flags; mayBeExecuting, which tells if the code block
        is live from call frames; and isJettisoned, which tells if the code block is
        not owned by any executable and thus should be deleted as soon as it is not
        mayBeExecuting.
        
        - Not executing, Not jettisoned: The code block may or may not be reachable from
          any executables, but it is owned by an executable, and hence should be
          kept alive if its executable is live and if all of its weak references are
          live. Otherwise it should be deleted during the current GC cycle, and its
          outgoing references should not be scanned.
          
        - Not executing but jettisoned: The code block should be deleted as soon as
          possible and none of its outgoing references should be scanned.
          
        - Executing but not jettisoned: The code block should be kept alive during this
          GC cycle, and all of its outgoing references (including the weak ones)
          should be scanned and marked strongly. The mayBeExecuting bit will be cleared at
          the end of the GC cycle.
          
        - Executing and jettisoned: The code block should be kept alive during this
          GC cycle, and all of its outgoing references (including the weak ones)
          should be scanned and marked strongly. However, on the next GC cycle, it
          will have its mayBeExecuting bit cleared and hence it will become a candidate
          for immediate deletion provided it is not executing again.

        This is performance-neutral.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::setJITCode):
        (JSC::CodeBlock::DFGData::DFGData):
        (JSC::DFGCodeBlocks::mark):
        * heap/ConservativeRoots.cpp:
        (JSC::ConservativeRoots::add):
        * heap/ConservativeRoots.h:
        * heap/DFGCodeBlocks.cpp: Added.
        (JSC::DFGCodeBlocks::DFGCodeBlocks):
        (JSC::DFGCodeBlocks::~DFGCodeBlocks):
        (JSC::DFGCodeBlocks::jettison):
        (JSC::DFGCodeBlocks::clearMarks):
        (JSC::DFGCodeBlocks::deleteUnmarkedJettisonedCodeBlocks):
        (JSC::DFGCodeBlocks::traceMarkedCodeBlocks):
        * heap/DFGCodeBlocks.h: Added.
        * heap/Heap.cpp:
        (JSC::Heap::jettisonDFGCodeBlock):
        (JSC::Heap::markRoots):
        (JSC::Heap::collect):
        * heap/Heap.h:
        * heap/JettisonedCodeBlocks.cpp: Removed.
        * heap/JettisonedCodeBlocks.h: Removed.
        * interpreter/RegisterFile.cpp:
        (JSC::RegisterFile::gatherConservativeRoots):
        * interpreter/RegisterFile.h:
        * runtime/Executable.cpp:
        (JSC::jettisonCodeBlock):

2011-11-16  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed, build fix for 32-bit.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        Some CachedCall cleanup, in preparation for reversing argument order.

        Reviewed by Gavin Barraclough.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::stronglyVisitWeakReferences): A build fix for the interpreter,
        so I can test it.

        * interpreter/CachedCall.h:
        (JSC::CachedCall::CachedCall): Renamed argCount to argumentCount because
        we are not that desperate for character saving.

        (JSC::CachedCall::setThis):
        (JSC::CachedCall::setArgument): Adopted new 0-based argument indexing for
        CallFrameClosure.

        * interpreter/CallFrameClosure.h:
        (JSC::CallFrameClosure::setThis):
        (JSC::CallFrameClosure::setArgument):
        (JSC::CallFrameClosure::resetCallFrame): Provide 0-based argument indexing,
        with an explicit setter for 'this', since that's how most clients think.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::prepareForRepeatCall):
        * interpreter/Interpreter.h: Change argCount to argumentCountIncludingThis,
        for clarity.

2011-11-16  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize ScriptExecutable::unlinkCalls
        https://bugs.webkit.org/show_bug.cgi?id=72546

        Reviewed by Geoffrey Garen.

        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::~FunctionExecutable): Added an empty explicit virtual destructor to prevent a very odd compilation error
        due to the fact that the compiler was trying to generate the implicit inline destructor in every translation unit, some of which 
        didn't have complete type information on the things that needed to be destructed in the implicit destructor.
        * runtime/Executable.h:
        (JSC::EvalExecutable::createStructure): Used new type value from JSType
        (JSC::ProgramExecutable::createStructure): Ditto
        (JSC::FunctionExecutable::createStructure): Ditto
        (JSC::ScriptExecutable::unlinkCalls): Condition upon the type value, cast and call the corresponding unlinkCalls implementation.
        * runtime/JSType.h: Added new values for EvalExecutable, ProgramExecutable, and FunctionExecutable.  Remove explicit numbers, since 
        that just adds noise to patches and they currently have no significance.

2011-11-16  Filip Pizlo  <fpizlo@apple.com>

        JSC::CodeBlock should know which references generated by the DFG are weak
        https://bugs.webkit.org/show_bug.cgi?id=72563

        Reviewed by Geoff Garen.
        
        CodeBlock::m_dfgData now tracks weak references and weak reference transitions
        (like ephemerons) generated by the DFG. The DFG makes sure to notify the
        CodeBlock of all uses of weak references and weak reference transitions.
        CodeBlock currently marks them strongly, since the weak marking logic is not
        in place, yet.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitAggregate):
        (JSC::CodeBlock::stronglyVisitWeakReferences):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::appendWeakReference):
        (JSC::CodeBlock::shrinkWeakReferencesToFit):
        (JSC::CodeBlock::appendWeakReferenceTransition):
        (JSC::CodeBlock::shrinkWeakReferenceTransitionsToFit):
        (JSC::CodeBlock::WeakReferenceTransition::WeakReferenceTransition):
        * bytecode/CodeOrigin.h:
        (JSC::CodeOrigin::codeOriginOwner):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addWeakReference):
        (JSC::DFG::JITCompiler::addWeakReferenceTransition):
        (JSC::DFG::JITCompiler::branchWeakPtr):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::fillJSValue):
        (JSC::DFG::SpeculativeJIT::compile):

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

        LayoutTests for Debug Builds Crashes in JavaScriptCore/yarr/YarrInterpreter.cpp(185)
        https://bugs.webkit.org/show_bug.cgi?id=72561

        Removed #if USE(JSC) and therefore the ASSERT_NOT_REACHED().
        Simplified the code in the process.

        Reviewed by James Robinson.

        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::CharAccess::CharAccess):
        (JSC::Yarr::Interpreter::CharAccess::~CharAccess):

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

        Interpreter build fixes.

        * bytecode/CodeBlock.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):

2011-11-16  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed. Build fix for !ENABLE(JIT) after r100363.

        * bytecode/CodeBlock.h:

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

        Rolled back in r100375 and r100385 with 32-bit build fixed.

        * dfg/DFGOperations.cpp:
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/ArgList.cpp:
        (JSC::ArgList::getSlice):
        * runtime/ArgList.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::finishCreation):
        * runtime/JSArray.h:
        (JSC::JSArray::create):
        * runtime/JSGlobalObject.h:
        (JSC::constructArray):

2011-11-16  Filip Pizlo  <fpizlo@apple.com>

        DFG global variable CSE mishandles the cross-global-object inlining corner case
        https://bugs.webkit.org/show_bug.cgi?id=72542

        Reviewed by Geoff Garen.
        
        Moved code to get the global object for a code origin into CodeBlock, so it is
        more broadly accessible. Fixed CSE to compare both the variable number, and the
        global object, before deciding to perform elimination.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::globalObjectFor):
        * dfg/DFGAssemblyHelpers.h:
        (JSC::DFG::AssemblyHelpers::globalObjectFor):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::globalVarLoadElimination):
        (JSC::DFG::Propagator::performNodeCSE):

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

        Enable 8 Bit Strings in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=71337

        This patch turns on 8 bit strings in StringImpl and enables
        their use in JavaScriptCore. Some of the changes are to
        turn on code that had been staged (Lexer.cpp, Identifier.cpp,
        SmallStrings.cpp and some of StringImpl.{h,cpp}).
        Other changes are minor fixes to make 8 bit strings work
        (UString.h, StringImpl::getData16SlowCase()).
        Changed StringBuffer to be a templated class based on character
        type.  This change rippled into WebCore code as well.

        Reviewed by Geoffrey Garen.

        * JavaScriptCore.exp:
        * parser/Lexer.cpp:
        (JSC::::append8): Changed to use 8 bit buffers.
        (JSC::::parseIdentifier): Changed to use 8 bit buffers.
        (JSC::::parseString): Changed to use 8 bit buffers.
        * runtime/Identifier.cpp:
        (JSC::IdentifierCStringTranslator::translate): 8 bit version keeps data 8 bit
        (JSC::Identifier::toUInt32FromCharacters): Templated helper.
        (JSC::Identifier::toUInt32): Added 8 bit optimized path.
        * runtime/SmallStrings.cpp:
        (JSC::SmallStringsStorage::SmallStringsStorage): Changed to be 8 bit strings
        * runtime/UString.h:
        (JSC::UString::characters): Now calls StringImpl::characters()
        * wtf/Forward.h:
        * wtf/text/StringBuffer.h: Made StringBuffer a template base on character type.
        (WTF::StringBuffer::StringBuffer):
        (WTF::StringBuffer::characters):
        (WTF::StringBuffer::release):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::create):
        (WTF::StringImpl::getData16SlowCase): Fixed null terminated case.
        (WTF::StringImpl::removeCharacters): Added 8 bit path.
        (WTF::StringImpl::simplifyMatchedCharactersToSpace):
        (WTF::StringImpl::simplifyWhiteSpace):
        (WTF::equal): Removed bug from code copied from null terminated version.
        (WTF::StringImpl::adopt): Added 8 bit path.
        (WTF::StringImpl::createWithTerminatingNullCharacter): Fixed 8 bi flag propagation.
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::StringImpl): Added new 8 bit constructor.
        (WTF::StringImpl::characters8): Removed ASSERT_NOT_REACHED().
        (WTF::getCharacters<LChar>): Added templated accessor for 8 bit strings.
        (WTF::getCharacters<UChar>): Added templated accessor for 16 bit strings.
        * wtf/text/WTFString.h:
        (WTF::String::adopt): Changed to use StringBuffer template.

2011-11-16  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize ExecutableBase::clearCodeVirtual
        https://bugs.webkit.org/show_bug.cgi?id=72337

        Reviewed by Darin Adler.

        Added static finalize functions to the subclasses of ExecutableBase that provide an implementation 
        of clearCodeVirtual, changed all of the clearCodeVirtual methods to non-virtual clearCode method,
        and had the finalize functions call the corresponding clearCode methods.

        * runtime/Executable.cpp:
        (JSC::ExecutableBase::clearCode):
        (JSC::NativeExecutable::finalize):
        (JSC::EvalExecutable::finalize):
        (JSC::EvalExecutable::clearCode):
        (JSC::ProgramExecutable::finalize):
        (JSC::ProgramExecutable::clearCode):
        (JSC::FunctionExecutable::discardCode):
        (JSC::FunctionExecutable::finalize):
        (JSC::FunctionExecutable::clearCode):
        * runtime/Executable.h:
        (JSC::ExecutableBase::finishCreation):
        (JSC::NativeExecutable::create):
        (JSC::EvalExecutable::create):
        (JSC::ProgramExecutable::create):
        (JSC::FunctionExecutable::create):

2011-11-16  Yusuke Suzuki  <utatane.tea@gmail.com>

        String new RegExp('\n').toString() returns is invalid RegularExpressionLiteral
        https://bugs.webkit.org/show_bug.cgi?id=71572

        Reviewed by Gavin Barraclough and Darin Adler.

        * runtime/RegExpObject.cpp:
        (JSC::regExpObjectSource):

2011-11-16  Darin Adler  <darin@apple.com>

        Specialize HashTraits for OwnPtr to use PassOwnPtr and raw pointer
        https://bugs.webkit.org/show_bug.cgi?id=72475

        Reviewed by Adam Roben.

        * wtf/HashTraits.h: Specialize HashTraits for OwnPtr.
        Do overloads so we can pass a nullptr and also be sure to get the
        raw pointer type from the OwnPtr template so we handle both forms
        of OwnPtr: OwnPtr<T> and OwnPtr<T*>.

2011-11-16  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Centralize hide_symbols and ensure all libs are built with symbol visibility & bsymbolic_functions

        Reviewed by Tor Arne Vestbø.

        * Target.pri: Eliminate duplicated symbol stuff that lives now in default_post.prf.

2011-11-16  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed, rolling out r100266.
        http://trac.webkit.org/changeset/100266

        Broke WTR.

        * Target.pri:

2011-11-16  Darin Adler  <darin@apple.com>

        Add a "pass type" and "peek type" concept to HashTraits
        https://bugs.webkit.org/show_bug.cgi?id=72473

        Reviewed by Filip Pizlo.

        * wtf/HashTraits.h: Added the pass type and peek type.
        For OwnPtr, the pass type will be PassOwnPtr and the peek
        type will be a raw pointer.

2011-11-16  Darin Adler  <darin@apple.com>

        Fix some hash traits that don't derive from the base hash traits
        https://bugs.webkit.org/show_bug.cgi?id=72470

        Reviewed by Filip Pizlo.

        Hash traits structures need to derive from the base hash traits in
        HashTraits.h, but some were not. This is needed for compatibility with
        some additional traits we will be adding to make OwnPtr work with HashMap.

        * runtime/Identifier.h: Make IdentifierMapIndexHashTraits derive from
        HashTraits<int>. This enabled removal of all the members except for the
        ones that control the empty value, because this is otherwise the same
        as the standard int hash.

        * runtime/SymbolTable.h: Changed SymbolTableIndexHashTraits to derive
        from HashTraits<SymbolTableEntry> and removed redundant members.

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

        Unreviewed, rolling out r100375 and r100385.
        http://trac.webkit.org/changeset/100375
        http://trac.webkit.org/changeset/100385
        https://bugs.webkit.org/show_bug.cgi?id=72465

        They broke 32 bit builds on Qt (Requested by ossy on #webkit).

        * dfg/DFGOperations.cpp:
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/ArgList.cpp:
        (JSC::ArgList::getSlice):
        * runtime/ArgList.h:
        (JSC::ArgList::ArgList):
        * runtime/JSArray.cpp:
        * runtime/JSArray.h:
        * runtime/JSGlobalObject.h:

2011-11-15  George Staikos  <staikos@webkit.org>

        Remove the guard page from the addressable stack region on QNX.
        https://bugs.webkit.org/show_bug.cgi?id=72455

        Reviewed by Daniel Bates.

        * wtf/StackBounds.cpp:
        (WTF::StackBounds::initialize):

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

        Towards 8 bit Strings - Update utf8() and ascii() methods for 8 bit strings
        https://bugs.webkit.org/show_bug.cgi?id=72323

        Added 8 bit optimized paths for String and UString ascii() and utf8() methods.

        Added String::characters8(), characters16() and is8Bit() helper methods.

        Added an new Unicode::convertLatin1ToUTF8() method that works on
        LChar (8 bit) strings that is a stripped down version of convertUTF16ToUTF8().

        Reviewed by Geoff Garen.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/UString.cpp:
        (JSC::UString::utf8):
        * wtf/text/WTFString.cpp:
        (WTF::String::ascii):
        (WTF::String::utf8):
        * wtf/text/WTFString.h:
        (WTF::String::characters8):
        (WTF::String::characters16):
        (WTF::String::is8Bit):
        (WTF::LChar):
        (WTF::UChar):
        * wtf/unicode/UTF8.cpp:
        (WTF::Unicode::convertLatin1ToUTF8):
        * wtf/unicode/UTF8.h:
        * wtf/unicode/Unicode.h:

2011-11-15  Darin Adler  <darin@apple.com>

        REGRESSION (r98887): ParserArena and Keywords leaking
        https://bugs.webkit.org/show_bug.cgi?id=72428

        Reviewed by Sam Weinig.

        * parser/Lexer.h: Made Keywords destructor public since OwnPtr and PassOwnPtr
        need to be able to destroy it.

        * parser/Parser.cpp:
        (JSC::Parser::Parser): Use get now that parserArena is an OwnPtr.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData): Use adoptPtr to initialize OwnPtr members.

        * runtime/JSGlobalData.h: Make parserArena and keywords be OwnPtr.

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

        Removed another use of ArgList that baked in the assumption that arguments
        are forward in the regiter file.

        Reviewed by Sam Weinig.

        * dfg/DFGOperations.cpp:
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION): Use our new array creation API, instead of
        working through ArgList.

        * runtime/ArgList.h: Removed!

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

        Removed a use of ArgList that baked in the assumption that arguments
        are forward in the regiter file.

        Reviewed by Sam Weinig.

        * dfg/DFGOperations.cpp:
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION): Use new API.

        * runtime/ArgList.cpp:
        (JSC::ArgList::getSlice): No need to provide an arbitrary constructor --
        getSlice can do the right thing by using its rights to private data.

        * runtime/ArgList.h: Removed constructor that took a forward-contiguous
        set of arguments.

        * runtime/JSArray.cpp:
        (JSC::JSArray::finishCreation):
        * runtime/JSArray.h:
        (JSC::JSArray::create):
        * runtime/JSGlobalObject.h:
        (JSC::constructArray): Added explicit support for creating an array from
        a pre-allocated set of values, so we could stop relying on the ArgList
        API we want to remove.

2011-11-15  Filip Pizlo  <fpizlo@apple.com>

        Crash in JSC::DFG::OSRExitCompiler::compileExit(JSC::DFG::OSRExit const&, JSC::DFG::SpeculationRecovery*)
        https://bugs.webkit.org/show_bug.cgi?id=72292

        Reviewed by Geoff Garen.
        
        We need to be careful about how we look for the baseline CodeBlock if we're lazy-compiling
        an OSR exit after our CodeBlock has been jettisoned. In short, use CodeBlock::baselineVersion()
        instead of CodeBlock::alternative().
        
        No performance effect.
        
        No tests because all of our heuristics work very hard to make sure that this never happens in
        the first place. OSR exits are rare by design, and jettisoning of CodeBlocks (i.e. recompilation)
        is even rarer. Furthermore, OSR exits after a CodeBlock has been jettisoned is rarer still
        because the whole point of jettisoning is to bring the probability of future OSR exits to as
        close to zero as possible. But even that isn't enough to trigger this bug; it requires the OSR
        exit after a jettison to be the first of its kind; our whole design tries to ensure that
        CodeBlocks tend to OSR exit at a handful (i.e. 1 in most cases) of points, and since jettisoning
        is triggered by OSR, in most sane cases the OSR exits after jettison will not require lazy OSR
        compilation. So this is a truly evil case, and any test for it would be quite fragile.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::specializationKind):
        (JSC::CodeBlock::largeFailCountThreshold):
        (JSC::CodeBlock::largeFailCountThresholdForLoop):
        * dfg/DFGAssemblyHelpers.h:
        (JSC::DFG::AssemblyHelpers::AssemblyHelpers):
        (JSC::DFG::AssemblyHelpers::baselineCodeBlockFor):
        (JSC::DFG::AssemblyHelpers::baselineCodeBlock):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * dfg/DFGOSRExitCompiler.cpp:
        * dfg/DFGOSRExitCompiler64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):

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

        Use MarkedArgumentBuffer to avoid making assumptions about argument order
        https://bugs.webkit.org/show_bug.cgi?id=72418

        Reviewed by Sam Weinig.
        
        A step toward reversing the argument order.

        * runtime/JSONObject.cpp:
        (JSC::Stringifier::toJSON):
        (JSC::Stringifier::appendStringifiedValue):
        (JSC::Walker::callReviver): Don't assume that ArgList wants to point
        at arguments in forward order. Instead, use MarkedArgumentBuffer, which
        will make the decision for us.

2011-11-15  Filip Pizlo  <fpizlo@apple.com>

        DFG should distinguish between constants in the constant pool and weak
        constants added as artifacts of code generation
        https://bugs.webkit.org/show_bug.cgi?id=72367

        Reviewed by Geoff Garen.
        
        Added the notion of a WeakJSConstant, which is like a JSConstant except that
        it can only refer to JSCell*. Currently all WeakJSConstants are also backed
        by constants in the constant pool, since weak references originated from
        machine code are not yet properly handled.
        
        Replaced CheckMethod, and MethodCheckData, with a combination of WeakJSConstant
        and CheckStructure. This results in improved CSE, leading to a 1% win on V8.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::cellConstant):
        (JSC::DFG::ByteCodeParser::prepareToParseBlock):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::getJSConstantPrediction):
        (JSC::DFG::Graph::valueOfJSConstant):
        (JSC::DFG::Graph::valueOfInt32Constant):
        (JSC::DFG::Graph::valueOfNumberConstant):
        (JSC::DFG::Graph::valueOfBooleanConstant):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::isWeakConstant):
        (JSC::DFG::Node::hasConstant):
        (JSC::DFG::Node::weakConstant):
        (JSC::DFG::Node::valueOfJSConstant):
        (JSC::DFG::Node::isInt32Constant):
        (JSC::DFG::Node::isDoubleConstant):
        (JSC::DFG::Node::isNumberConstant):
        (JSC::DFG::Node::isBooleanConstant):
        (JSC::DFG::Node::hasIdentifier):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        Towards 8 bit Strings - Initial JS String Tuning
        https://bugs.webkit.org/show_bug.cgi?id=72326

        Added 8 bit optimized paths for the methods below.

        Reviewed by Geoffrey Garen.

        * runtime/JSString.h:
        (JSC::jsSubstring8):
        * runtime/StringPrototype.cpp:
        (JSC::jsSpliceSubstrings):
        (JSC::jsSpliceSubstringsWithSeparators):
        (JSC::stringProtoFuncReplace):
        (JSC::stringProtoFuncCharCodeAt):

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

        Result of Error.prototype.toString not ES5 conformant
        https://bugs.webkit.org/show_bug.cgi?id=70889

        Reviewed by Oliver Hunt.

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

2011-11-15  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Centralize hide_symbols and ensure all libs are built with symbol visibility & bsymbolic_functions

        Reviewed by Tor Arne Vestbø.

        * Target.pri: Eliminate duplicated symbol stuff that lives now in default_post.prf.

2011-11-15  Yuqiang Xian  <yuqiang.xian@intel.com>

        Remove DFGJITCompilerInlineMethods
        https://bugs.webkit.org/show_bug.cgi?id=72366

        Reviewed by Filip Pizlo.

        Those methods are actually seldom used. Modify the few such places and
        remove DFGJITCompilerInlineMethods stuffs totally.

        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addressOfDoubleConstant):
        * dfg/DFGJITCompilerInlineMethods.h: Removed.
        * dfg/DFGSpeculativeJIT.cpp:
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::silentFillFPR):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::fillJSValue):
        (JSC::DFG::SpeculativeJIT::cachedGetMethod):

2011-11-14  Filip Pizlo  <fpizlo@apple.com>

        DFG::SpeculativeJIT and DFG::JITCodeGenerator should be combined
        https://bugs.webkit.org/show_bug.cgi?id=72348

        Reviewed by Gavin Barraclough.
        
        Moved all of JITCodeGenerator into SpeculativeJIT.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * dfg/DFGJITCodeGenerator.cpp: Removed.
        * dfg/DFGJITCodeGenerator.h: Removed.
        * dfg/DFGJITCodeGenerator32_64.cpp: Removed.
        * dfg/DFGJITCodeGenerator64.cpp: Removed.
        * dfg/DFGJITCompiler.cpp:
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::generateProtoChainAccessStub):
        (JSC::DFG::tryCacheGetByID):
        (JSC::DFG::tryCachePutByID):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::clearGenerationInfo):
        (JSC::DFG::SpeculativeJIT::fillStorage):
        (JSC::DFG::SpeculativeJIT::useChildren):
        (JSC::DFG::SpeculativeJIT::isStrictInt32):
        (JSC::DFG::SpeculativeJIT::isKnownInteger):
        (JSC::DFG::SpeculativeJIT::isKnownNumeric):
        (JSC::DFG::SpeculativeJIT::isKnownCell):
        (JSC::DFG::SpeculativeJIT::isKnownNotCell):
        (JSC::DFG::SpeculativeJIT::isKnownNotInteger):
        (JSC::DFG::SpeculativeJIT::isKnownNotNumber):
        (JSC::DFG::SpeculativeJIT::isKnownBoolean):
        (JSC::DFG::SpeculativeJIT::writeBarrier):
        (JSC::DFG::SpeculativeJIT::markCellCard):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeCompare):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeStrictEq):
        (JSC::DFG::dataFormatString):
        (JSC::DFG::SpeculativeJIT::dump):
        (JSC::DFG::SpeculativeJIT::checkConsistency):
        (JSC::DFG::GPRTemporary::GPRTemporary):
        (JSC::DFG::GPRTemporary::adopt):
        (JSC::DFG::FPRTemporary::FPRTemporary):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::at):
        (JSC::DFG::SpeculativeJIT::lock):
        (JSC::DFG::SpeculativeJIT::unlock):
        (JSC::DFG::SpeculativeJIT::canReuse):
        (JSC::DFG::SpeculativeJIT::reuse):
        (JSC::DFG::SpeculativeJIT::allocate):
        (JSC::DFG::SpeculativeJIT::tryAllocate):
        (JSC::DFG::SpeculativeJIT::fprAllocate):
        (JSC::DFG::SpeculativeJIT::isFilled):
        (JSC::DFG::SpeculativeJIT::isFilledDouble):
        (JSC::DFG::SpeculativeJIT::use):
        (JSC::DFG::SpeculativeJIT::selectScratchGPR):
        (JSC::DFG::SpeculativeJIT::silentSpillGPR):
        (JSC::DFG::SpeculativeJIT::silentSpillFPR):
        (JSC::DFG::SpeculativeJIT::silentFillGPR):
        (JSC::DFG::SpeculativeJIT::silentFillFPR):
        (JSC::DFG::SpeculativeJIT::silentSpillAllRegisters):
        (JSC::DFG::SpeculativeJIT::silentFillAllRegisters):
        (JSC::DFG::SpeculativeJIT::boxDouble):
        (JSC::DFG::SpeculativeJIT::unboxDouble):
        (JSC::DFG::SpeculativeJIT::spill):
        (JSC::DFG::SpeculativeJIT::isConstant):
        (JSC::DFG::SpeculativeJIT::isJSConstant):
        (JSC::DFG::SpeculativeJIT::isInt32Constant):
        (JSC::DFG::SpeculativeJIT::isDoubleConstant):
        (JSC::DFG::SpeculativeJIT::isNumberConstant):
        (JSC::DFG::SpeculativeJIT::isBooleanConstant):
        (JSC::DFG::SpeculativeJIT::isFunctionConstant):
        (JSC::DFG::SpeculativeJIT::valueOfInt32Constant):
        (JSC::DFG::SpeculativeJIT::valueOfNumberConstant):
        (JSC::DFG::SpeculativeJIT::addressOfDoubleConstant):
        (JSC::DFG::SpeculativeJIT::valueOfJSConstant):
        (JSC::DFG::SpeculativeJIT::valueOfBooleanConstant):
        (JSC::DFG::SpeculativeJIT::valueOfFunctionConstant):
        (JSC::DFG::SpeculativeJIT::isNullConstant):
        (JSC::DFG::SpeculativeJIT::identifier):
        (JSC::DFG::SpeculativeJIT::flushRegisters):
        (JSC::DFG::SpeculativeJIT::isFlushed):
        (JSC::DFG::SpeculativeJIT::valueOfJSConstantAsImmPtr):
        (JSC::DFG::SpeculativeJIT::bitOp):
        (JSC::DFG::SpeculativeJIT::shiftOp):
        (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
        (JSC::DFG::SpeculativeJIT::addressOfCallData):
        (JSC::DFG::SpeculativeJIT::tagOfCallData):
        (JSC::DFG::SpeculativeJIT::payloadOfCallData):
        (JSC::DFG::SpeculativeJIT::integerResult):
        (JSC::DFG::SpeculativeJIT::noResult):
        (JSC::DFG::SpeculativeJIT::cellResult):
        (JSC::DFG::SpeculativeJIT::booleanResult):
        (JSC::DFG::SpeculativeJIT::jsValueResult):
        (JSC::DFG::SpeculativeJIT::storageResult):
        (JSC::DFG::SpeculativeJIT::doubleResult):
        (JSC::DFG::SpeculativeJIT::initConstantInfo):
        (JSC::DFG::SpeculativeJIT::resetCallArguments):
        (JSC::DFG::SpeculativeJIT::addCallArgument):
        (JSC::DFG::SpeculativeJIT::setupArguments):
        (JSC::DFG::SpeculativeJIT::setupArgumentsExecState):
        (JSC::DFG::SpeculativeJIT::setupArgumentsWithExecState):
        (JSC::DFG::SpeculativeJIT::setupTwoStubArgs):
        (JSC::DFG::SpeculativeJIT::setupStubArguments):
        (JSC::DFG::SpeculativeJIT::callOperation):
        (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheck):
        (JSC::DFG::SpeculativeJIT::appendCallWithExceptionCheckSetResult):
        (JSC::DFG::SpeculativeJIT::setupResults):
        (JSC::DFG::SpeculativeJIT::appendCallSetResult):
        (JSC::DFG::SpeculativeJIT::addBranch):
        (JSC::DFG::SpeculativeJIT::linkBranches):
        (JSC::DFG::SpeculativeJIT::block):
        (JSC::DFG::SpeculativeJIT::checkConsistency):
        (JSC::DFG::SpeculativeJIT::BranchRecord::BranchRecord):
        (JSC::DFG::IntegerOperand::IntegerOperand):
        (JSC::DFG::IntegerOperand::~IntegerOperand):
        (JSC::DFG::IntegerOperand::index):
        (JSC::DFG::IntegerOperand::format):
        (JSC::DFG::IntegerOperand::gpr):
        (JSC::DFG::IntegerOperand::use):
        (JSC::DFG::DoubleOperand::DoubleOperand):
        (JSC::DFG::DoubleOperand::~DoubleOperand):
        (JSC::DFG::DoubleOperand::index):
        (JSC::DFG::DoubleOperand::fpr):
        (JSC::DFG::DoubleOperand::use):
        (JSC::DFG::JSValueOperand::JSValueOperand):
        (JSC::DFG::JSValueOperand::~JSValueOperand):
        (JSC::DFG::JSValueOperand::index):
        (JSC::DFG::JSValueOperand::gpr):
        (JSC::DFG::JSValueOperand::jsValueRegs):
        (JSC::DFG::JSValueOperand::isDouble):
        (JSC::DFG::JSValueOperand::fill):
        (JSC::DFG::JSValueOperand::tagGPR):
        (JSC::DFG::JSValueOperand::payloadGPR):
        (JSC::DFG::JSValueOperand::fpr):
        (JSC::DFG::JSValueOperand::use):
        (JSC::DFG::StorageOperand::StorageOperand):
        (JSC::DFG::StorageOperand::~StorageOperand):
        (JSC::DFG::StorageOperand::index):
        (JSC::DFG::StorageOperand::gpr):
        (JSC::DFG::StorageOperand::use):
        (JSC::DFG::GPRTemporary::~GPRTemporary):
        (JSC::DFG::GPRTemporary::gpr):
        (JSC::DFG::FPRTemporary::~FPRTemporary):
        (JSC::DFG::FPRTemporary::fpr):
        (JSC::DFG::FPRTemporary::FPRTemporary):
        (JSC::DFG::GPRResult::GPRResult):
        (JSC::DFG::GPRResult2::GPRResult2):
        (JSC::DFG::FPRResult::FPRResult):
        (JSC::DFG::FPRResult::lockedResult):
        (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::fillInteger):
        (JSC::DFG::SpeculativeJIT::fillDouble):
        (JSC::DFG::SpeculativeJIT::fillJSValue):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeKnownConstantArithOp):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeBasicArithOp):
        (JSC::DFG::SpeculativeJIT::cachedGetById):
        (JSC::DFG::SpeculativeJIT::cachedPutById):
        (JSC::DFG::SpeculativeJIT::cachedGetMethod):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::emitCall):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::fillInteger):
        (JSC::DFG::SpeculativeJIT::fillDouble):
        (JSC::DFG::SpeculativeJIT::fillJSValue):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToNumber):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeValueToInt32):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeUInt32ToNumber):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeKnownConstantArithOp):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeBasicArithOp):
        (JSC::DFG::SpeculativeJIT::cachedGetById):
        (JSC::DFG::SpeculativeJIT::cachedPutById):
        (JSC::DFG::SpeculativeJIT::cachedGetMethod):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompareNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranchNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeCompareNull):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeBranch):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeCompare):
        (JSC::DFG::SpeculativeJIT::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::nonSpeculativeNonPeepholeStrictEq):
        (JSC::DFG::SpeculativeJIT::emitCall):
        * runtime/JSFunction.h:

2011-11-14  Filip Pizlo  <fpizlo@apple.com>

        Weak reference harvesters should run to fixpoint
        https://bugs.webkit.org/show_bug.cgi?id=72346

        Reviewed by Oliver Hunt.

        * heap/Heap.cpp:
        (JSC::Heap::markRoots):
        * heap/ListableHandler.h:
        (JSC::ListableHandler::next):
        (JSC::ListableHandler::List::head):
        (JSC::ListableHandler::List::removeNext):
        (JSC::ListableHandler::List::removeAll):
        * heap/MarkStack.cpp:
        (JSC::MarkStackThreadSharedData::reset):
        (JSC::SlotVisitor::harvestWeakReferences):
        * heap/MarkStack.h:
        (JSC::MarkStack::isEmpty):

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

        Start migrating typed array impl types to WTF
        https://bugs.webkit.org/show_bug.cgi?id=72336

        Reviewed by Geoffrey Garen.

        Add typed array impls to WTF forwarding header.

        * wtf/Forward.h:

2011-11-14  Julien Chaffraix  <jchaffraix@webkit.org>

        Add --css-grid-layout to build-webkit and the build systems
        https://bugs.webkit.org/show_bug.cgi?id=72320

        Reviewed by Ojan Vafai.

        * Configurations/FeatureDefines.xcconfig:

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

        A little bit of arguments / activation cleanup
        https://bugs.webkit.org/show_bug.cgi?id=72339

        Reviewed by Gavin Barraclough.
        
        Renamed copyRegisters => tearOff to match bytecode and other terminology.
        
        Renamed setActivation => didTearOffActivation to indicate that this is a
        notification the object may choose to ignore. Moved "Should I ignore?"
        code into the arguments object to avoid duplication elsewhere.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::retrieveArguments):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Arguments.h:
        (JSC::Arguments::createAndTearOff):
        (JSC::Arguments::didTearOffActivation):
        (JSC::Arguments::finishCreationButDontTearOff):
        (JSC::Arguments::finishCreation):
        (JSC::Arguments::finishCreationAndTearOff):
        (JSC::Arguments::tearOff):

        * runtime/JSActivation.h:
        (JSC::JSActivation::tearOff): Moved Activation's code into its own header
        because that's where it belongs.

2011-11-14  Gavin Barraclough  <barraclough@apple.com>

        Should sign the jsc binary
        https://bugs.webkit.org/show_bug.cgi?id=72332

        Reviewed by David Kilzer.

        * Configurations/JSC.xcconfig:
        * entitlements.plist: Added.

2011-11-14  Filip Pizlo  <fpizlo@apple.com>

        DFG's inline references to objects should be tracked
        https://bugs.webkit.org/show_bug.cgi?id=72313

        Reviewed by Gavin Barraclough.
        
        Added a pinCell() method in the parser that currently creates a
        dummy constant in CodeBlock. Added calls to pinCell() wherever the
        DFG would inline a constant reference that the original code would
        not have referred to.
        
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getCellConstantIndex):
        (JSC::DFG::ByteCodeParser::pinCell):
        (JSC::DFG::ByteCodeParser::cellConstant):
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::parseBlock):

2011-11-14  Filip Pizlo  <fpizlo@apple.com>

        DFG put_by_id transition optimizations test the wrong structures
        https://bugs.webkit.org/show_bug.cgi?id=72324

        Reviewed by Gavin Barraclough.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::structureChainIsStillValid):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):

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

        Further changes and cleanup to JSString.h and cpp.

        Reviewed by Darin Adler.

        * runtime/JSString.cpp:
        (JSC::JSString::resolveRope): Change PassRefPtr to RefPtr.  Eliminated exec in slow case calls.
        (JSC::JSString::resolveRopeSlowCase8): Darin and I agreed that this should have 8 in name.
        (JSC::JSString::resolveRopeSlowCase): Removed exec parameter.
        * runtime/JSString.h:

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

        DateMath.cpp should not depend on JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=71747

        Reviewed by Darin Adler.

        This patch moves the JSC-specific parts of DateMath into JSDateMath in
        JavaScriptCore.  There shouldn't be any behavior change.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * runtime/DateConstructor.cpp:
        * runtime/DateConversion.cpp:
        * runtime/DateInstance.cpp:
        * runtime/DateInstanceCache.h:
        * runtime/DatePrototype.cpp:
        * runtime/InitializeThreading.cpp:
        * runtime/JSDateMath.cpp: Copied from Source/JavaScriptCore/wtf/DateMath.cpp.
        (JSC::timeToMS):
        (JSC::msToSeconds):
        * runtime/JSDateMath.h: Copied from Source/JavaScriptCore/wtf/DateMath.h.
        * wtf/DateMath.cpp:
        (WTF::isLeapYear):
        (WTF::msToDays):
        (WTF::msToMinutes):
        (WTF::msToHours):
        (WTF::parseDateFromNullTerminatedCharacters):
        (WTF::makeRFC2822DateString):
        * wtf/DateMath.h:

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

        Towards 8 bit strings - Add 8 bit handling to JSString Ropes
        https://bugs.webkit.org/show_bug.cgi?id=72317

        Added bit to track that a rope is made up of all 8 bit fibers.
        Created an 8 bit path (fast and slow cases) to handle 8 bit 
        only ropes.

        Reviewed by Oliver Hunt.

        * runtime/JSString.cpp:
        (JSC::JSString::resolveRope):
        (JSC::JSString::resolveRopeSlowCase8):
        (JSC::JSString::resolveRopeSlowCase16):
        * runtime/JSString.h:
        (JSC::RopeBuilder::finishCreation):
        (JSC::RopeBuilder::is8Bit):
        (JSC::jsSubstring8):

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

        A little bit of function call cleanup
        https://bugs.webkit.org/show_bug.cgi?id=72314

        Reviewed by Oliver Hunt.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitCall): Renamed callFrame to registerOffset
        because this value doesn't give you the offset of the callee's call frame.

        (JSC::BytecodeGenerator::emitReturn): Tightened to use equality instead
        of greater-than. Removed comment since its reasoning was wrong.
        
        (JSC::BytecodeGenerator::emitConstruct): Updated for rename mentioned above.

        (JSC::BytecodeGenerator::isArgumentNumber): Provided a more precise way
        to ask this question, giving the bytecode generator more freedom to change
        internal implementation details.
        
        * bytecompiler/BytecodeGenerator.h: Reduced default vector capacity because
        16 was overkill.
        (JSC::CallArguments::registerOffset): Updated for rename mentioned above.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::CallArguments::CallArguments):
        (JSC::CallArguments::newArgument): Factored out argument allocation into
        a helper function, so I can change it later.

        (JSC::CallFunctionCallDotNode::emitBytecode):
        (JSC::FunctionBodyNode::emitBytecode): Use helper function mentioned above.

2011-11-14  Tony Chang  <tony@chromium.org>

        Remove the CSS3_FLEXBOX compile time flag and enable on all ports
        https://bugs.webkit.org/show_bug.cgi?id=72196

        Reviewed by Ojan Vafai.

        * Configurations/FeatureDefines.xcconfig:

2011-11-14  Mark Rowe  <mrowe@apple.com>

        <rdar://problem/10424154> testRegExp should not be installed as part of JavaScriptCore

        testRegExp and testapi.js were being installed in the JavaScriptCore framework.
        As test-only tools they shouldn't be installed there by default, only when
        FORCE_TOOL_INSTALL is set to YES.

        This patch incorprorates a few related changes:
        1) Make the jsc and testRegExp targets be configured via .xcconfig files.
        2) Sets up testRegExp so that SKIP_INSTALL is YES by default, and only NO when
           FORCE_TOOL_INSTALL is YES.
        3) Switches the testapi target to using a script build phase to install testapi.js
           so that the installation will be skipped when SKIP_INSTALL is YES. I'm not sure
           why this isn't the built-in behavior when a Copy Files build phase has "Copy only
           when installing" checked, but it doesn't seem to be.
        4) Other random cleanup such as removing a bogus group that refers to files that do
           not exist, moving testRegExp.cpp in to the tests group, etc.

        Reviewed by Geoff Garen.

        * Configurations/JSC.xcconfig: Added.
        * Configurations/TestRegExp.xcconfig: Added.
        * JavaScriptCore.xcodeproj/project.pbxproj:

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

        Towards 8 bit strings - Add 8 bit paths to StringImpl methods
        https://bugs.webkit.org/show_bug.cgi?id=72290

        Added 8 bit patchs to StringImpl to number and find methods.

        Reviewed by Oliver Hunt.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::toIntStrict):
        (WTF::StringImpl::toUIntStrict):
        (WTF::StringImpl::toInt64Strict):
        (WTF::StringImpl::toUInt64Strict):
        (WTF::StringImpl::toIntPtrStrict):
        (WTF::StringImpl::toInt):
        (WTF::StringImpl::toUInt):
        (WTF::StringImpl::toInt64):
        (WTF::StringImpl::toUInt64):
        (WTF::StringImpl::toIntPtr):
        (WTF::StringImpl::toDouble):
        (WTF::StringImpl::toFloat):
        (WTF::StringImpl::find):
        (WTF::StringImpl::reverseFind):
        * wtf/text/WTFString.cpp:
        (WTF::toIntegralType):
        (WTF::lengthOfCharactersAsInteger):
        (WTF::charactersToIntStrict):
        (WTF::charactersToUIntStrict):
        (WTF::charactersToInt64Strict):
        (WTF::charactersToUInt64Strict):
        (WTF::charactersToIntPtrStrict):
        (WTF::charactersToInt):
        (WTF::charactersToUInt):
        (WTF::charactersToInt64):
        (WTF::charactersToUInt64):
        (WTF::charactersToIntPtr):
        (WTF::toDoubleType):
        (WTF::charactersToDouble):
        (WTF::charactersToFloat):
        * wtf/text/WTFString.h:
        (WTF::find):
        (WTF::reverseFind):

2011-11-14  Vincent Scheib  <scheib@chromium.org>

        Mouse Lock: Renaming to 'Pointer Lock': ENABLE Flags
        https://bugs.webkit.org/show_bug.cgi?id=72286

        Reviewed by Adam Barth.

        * wtf/Platform.h:

2011-11-14  Gavin Barraclough  <barraclough@apple.com>

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

        Rubber stamped by Geoff Garen.

        Fix 32-bit Lion.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/OSAllocatorPosix.cpp:
        (WTF::OSAllocator::reserveAndCommit):

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

        32-bit Build fix: declare virtual register indices to be int rather than
        unsigned, since they can be positive or negative.
        
        For better clarity, explicitly use ReturnPC instead of -1 as the "invalid"
        state, since we'll never load and operate on the ReturnPC as a JS value.

        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitLoadTag):
        (JSC::JIT::emitLoadPayload):
        (JSC::JIT::emitLoad):
        (JSC::JIT::emitLoad2):
        (JSC::JIT::emitLoadDouble):
        (JSC::JIT::emitLoadInt32ToDouble):
        (JSC::JIT::emitStore):
        (JSC::JIT::emitStoreInt32):
        (JSC::JIT::emitStoreAndMapInt32):
        (JSC::JIT::emitStoreCell):
        (JSC::JIT::emitStoreBool):
        (JSC::JIT::emitStoreDouble):
        (JSC::JIT::map):
        (JSC::JIT::unmap):
        (JSC::JIT::isMapped):
        (JSC::JIT::getMappedPayload):
        (JSC::JIT::getMappedTag):
        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):

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

        Remove unused m_data member from UStringSourceProvider
        https://bugs.webkit.org/show_bug.cgi?id=72289

        Removed unused m_data member from UStringSourceProvider.

        Reviewed by Oliver Hunt.

        * parser/SourceProvider.h:
        (JSC::UStringSourceProvider::UStringSourceProvider):

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

        Towards 8 Bit Strings: Templatize YARR Parser
        https://bugs.webkit.org/show_bug.cgi?id=72288

        Changed Yarr::Parser to be a template based on character type.

        Reviewed by Oliver Hunt.

        * yarr/YarrParser.h:
        (JSC::Yarr::Parser::Parser):
        (JSC::Yarr::parse):

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

        32-bit build fix: Removed unused declaration.

        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::emitCall):

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

        Standardized the JS calling convention
        https://bugs.webkit.org/show_bug.cgi?id=72221
        
        Reviewed by Oliver Hunt.

        This patch standardizes the calling convention so that the caller always
        sets up the callee's CallFrame. Adjustments for call type, callee type,
        argument count, etc. now always take place after that initial setup.
        
        This is a step toward reversing the argument order, but also has these
        immediate benefits (measured on x64):
        
        (1) 1% benchmark speedup across the board.
        
        (2) 50% code size reduction in baseline JIT function calls.
        
        (3) 1.5x speedup for single-dispatch .apply forwarding.
        
        (4) 1.1x speedup for multi-dispatch .apply forwarding.

        This change affected the baseline JIT most, since the baseline JIT had
        lots of ad hoc calling conventions for different caller / callee types.

        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::branchPtr):
        (JSC::MacroAssemblerX86_64::branchAddPtr): Optimize compare to 0 into
        a test, like other assemblers do. (I added some compares to 0, and didn't
        want them to be slow.)

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump): Merged op_load_varargs into op_call_varargs so
        op_call_varargs could share code generation with other forms of op_call.
        This is also a small optimization, since op_*varargs no longer have to
        pass arguments to each other through the register file.

        (JSC::CallLinkInfo::unlink):
        * bytecode/CodeBlock.h: Added a new call type: CallVarargs. This allows
        us to link functions called through .apply syntax. We need to distinguish
        CallVarargs from Call because CallVarargs changes its argument count
        on each inovcation, so we must always link to the argument count checking
        version of the callee.

        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitCallVarargs):
        * bytecompiler/BytecodeGenerator.h: Merged op_load_varargs into op_call_varargs.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::ApplyFunctionCallDotNode::emitBytecode): Ditto. Also, simplified
        some of this bytecode generation to remove redundant copies.

        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::emitCall):
        * dfg/DFGJITCodeGenerator64.cpp:
        (JSC::DFG::JITCodeGenerator::emitCall): Added a new call type: CallVarargs.
        DFG doesn't support this type, but its code needs to change slightly
        to accomodate a 3-state variable.

        Stopped passing the argument count in regT1 because this is non-standard.
        (The argument count goes in the CallFrame. This trades speed on the slow
        path for speed and code size on the fast path, and simplicity on all paths.
        A good trade, in my opinion.)

        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileEntry):
        (JSC::DFG::JITCompiler::link):
        (JSC::DFG::JITCompiler::compile):
        (JSC::DFG::JITCompiler::compileFunction): Tweaked code to make CallFrame
        setup more obvious when single-stepping. Also, updated for argument count
        not being in regT1.

        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addJSCall):
        (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord): Added a new call
        type: CallVarargs.

        * dfg/DFGOperations.cpp: Do finish CallFrame setup in one place before
        doing anything else. Don't check for stack overflow because we have no callee
        registers, and our caller has already checked for its own registers.

        * dfg/DFGRepatch.cpp:
        (JSC::DFG::dfgLinkFor): We can link to our callee even if our argument
        count doesn't match -- we just need to link to the argument count checking
        version.

        * interpreter/CallFrameClosure.h:
        (JSC::CallFrameClosure::setArgument): BUG FIX: When supplying too many
        arguments from C++, we need to supply a full copy of the arguments prior
        to the subset copy that matches our callee's argument count. (That is what
        the standard calling convention would have produced in JS.) I would have
        split this into its own patch, but I couldn't find a way to get the JIT
        to fail a regression test in this area without my patch applied.

        * interpreter/Interpreter.cpp: Let the true code bomb begin!

        (JSC::eval): Fixed up this helper function to operate on eval()'s CallFrame,
        and not eval()'s caller frame. We no longer leave the CallFrame pointing
        to eval()'s caller during a call to eval(), since that is not standard.

        (JSC::loadVarargs): Factored out a shared helper function for use by JIT
        and interpreter because half the code means one quarter the bugs -- in my
        programming, at least.

        (JSC::Interpreter::execute): Removed a now-unused way to invoke eval.
        
        (JSC::Interpreter::privateExecute): Removed an invalid ASSERT following
        putDirect, because it got in the way of my testing. (When putting a
        function, the cached base of a PutPropertySlot can be 0 to signify "do
        not optimize".)
        
        op_call_eval: Updated for new, standard eval calling convention.
        
        op_load_varargs: Merged op_load_varargs into op_call_varargs.

        op_call_varags: Updated for new, standard eval calling convention. Don't
        check for stack overflow because the loadVarargs helper function already
        checked.

        * interpreter/Interpreter.h:
        (JSC::Interpreter::execute): Headers are fun and educational!

        * interpreter/RegisterFile.cpp:
        (JSC::RegisterFile::growSlowCase):
        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::grow): Factored out the slow case into a slow
        case because it was cramping the style of my fast case.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompile): Moved initialization of
        RegisterFile::CodeBlock to make it more obvious when debugging. Removed
        assumption that argument count is in regT1, as above. Removed call to
        restoreArgumentReference() because the JITStubCall abstraction does this for us.

        (JSC::JIT::linkFor): Link even if we miss on argument count, as above.

        * jit/JIT.h:
        * jit/JITCall32_64.cpp:
        (JSC::JIT::emitSlow_op_call):
        (JSC::JIT::emitSlow_op_call_eval):
        (JSC::JIT::emitSlow_op_call_varargs):
        (JSC::JIT::emitSlow_op_construct):
        (JSC::JIT::emit_op_call_eval):
        (JSC::JIT::emit_op_call_varargs): Share all function call code generation.
        Don't count call_eval when accounting for linkable function calls because
        eval doesn't link. (Its fast path is to perform the eval.)

        (JSC::JIT::compileLoadVarargs): Ported this inline copying optimization
        to our new calling convention. The key to this optimization is the
        observation that, in a function that declares no arguments, if any
        arguments are passed, they all end up right behind 'this'.

        (JSC::JIT::compileCallEval):
        (JSC::JIT::compileCallEvalSlowCase): Factored out eval for a little clarity.

        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase): If you are still with me, dear reader,
        this is the whole point of my patch. The caller now unconditionally moves
        the CallFrame forward and fills in the data it knows before taking any
        branches to deal with weird caller/callee pairs.
        
        This also means that there is almost no slow path for calls -- it all
        gets folded into the shared virtual call stub. The only things remaining
        in the slow path are the rare case counter and a call to the stub.

        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::privateCompileCTINativeCall): Updated for values being in
        different registers or in memory, based on our new standard calling
        convention.
        
        Added a shared path for calling out to CTI helper functions for non-JS
        calls.

        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_method_check): method_check emits its own code and
        the following get_by_id's code, so it needs to add both when informing
        result chaining of its result. This is important because the standard
        calling convention can now take advantage of this chaining.

        * jit/JITCall.cpp:
        (JSC::JIT::compileLoadVarargs):
        (JSC::JIT::compileCallEval):
        (JSC::JIT::compileCallEvalSlowCase):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::emit_op_call_eval):
        (JSC::JIT::emit_op_call_varargs):
        (JSC::JIT::emitSlow_op_call):
        (JSC::JIT::emitSlow_op_call_eval):
        (JSC::JIT::emitSlow_op_call_varargs):
        (JSC::JIT::emitSlow_op_construct): Observe, as I write all of my code a
        second time, now with 64 bits.

        * jit/JITStubs.cpp:
        (JSC::throwExceptionFromOpCall):
        (JSC::jitCompileFor):
        (JSC::arityCheckFor):
        (JSC::lazyLinkFor): A lot of mechanical changes here for one purpose:
        Exceptions thrown in the middle of a function call now use a shared helper
        function (throwExceptionFromOpCall). This function understands that the
        CallFrame currently points to the callEE, and the exception must be
        thrown by the callER. (The old calling convention would often still have
        the CallFrame pointing at the callER at the point of an exception. That
        is not the way of our new, standard calling convention.)

        (JSC::op_call_eval): Finish standard CallFrame setup before calling 
        our eval helper function, which now depends on that setup.

        * runtime/Arguments.h:
        (JSC::Arguments::length): Renamed numProvidedArguments() to length()
        because that's what other objects call it, and the difference made our
        new loadVarargs helper function hard to read.

        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal): Interpreter build
        fixes.

        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncApply): Honor Arguments::MaxArguments even when
        the .apply call_varargs optimization fails. (This bug appears on layout
        tests when you disable the optimization.)

2011-11-11  Jer Noble  <jer.noble@apple.com>

        Implement MediaController.
        https://bugs.webkit.org/show_bug.cgi?id=71408

        Reviewed by Eric Carlson.

        Change the definition of WTF_USE_COREAUDIO to exclude Windows completely, as 
        CoreAudioClock.h is not available there.

        * wtf/Platform.h:

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

        [WIN] Remove dependency on pthread from FastMalloc
        https://bugs.webkit.org/show_bug.cgi?id=72098

        Reviewed by Adam Roben.

        All pthread calls are already ported to native Windows calls.
        Use the native version for all OS(WINDOWS) to remove the
        runtime dependency on the pthread dll.

        * wtf/FastMalloc.cpp:

2011-11-14  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Replace use of QApplication with QGuiApplication.

        Reviewed by Tor Arne Vestbø.

        * wtf/qt/compat/qguiapplication.h:
        (QGuiApplication::styleHints): Introduce styleHints wrapper hack.

2011-11-14  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck build.

        * GNUmakefile.list.am: Add missing files.

2011-11-11  Yury Semikhatsky  <yurys@chromium.org>

        Web Inspector: function remote objetct should provide access to function position in the script
        https://bugs.webkit.org/show_bug.cgi?id=71808

        Exposed accessor for function source code.

        Reviewed by Pavel Feldman.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::sourceCode):
        * runtime/JSFunction.h:

2011-11-13  Yuqiang Xian  <yuqiang.xian@intel.com>

        Fix silent spilling/filling GPRs in DFG 32_64
        https://bugs.webkit.org/show_bug.cgi?id=72201

        Reviewed by Gavin Barraclough.

        Current silentSpillGPR/silentFillGPR may not work as expected for some
        cases in 32_64. If there's a JSValue which was retained by two GPRs,
        we may end up failing to spill/fill some GPRs or redundantly
        spilling/filling some GPRs. For example, if we tend to exclude "eax"
        from spilling while a JSValue is retained by both "eax" and "edx",
        then "edx" won't be spilled as well (wrong). And if another JSValue is
        retained by "ecx" and "ebx", both "ecx" and "ebx" will be spilled
        twice. The similar problem applies to silentFillGPR.
        The fix is to make silentSpillGPR/silentFillGPR more straightforward,
        i.e., spilling/filling based on the GPR instead of the virtual
        register. FPR spilling/filling is also modified accordingly to make it
        consistent with GPR spilling/filling.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::silentSpillGPR):
        (JSC::DFG::JITCodeGenerator::silentSpillFPR):
        (JSC::DFG::JITCodeGenerator::silentFillGPR):
        (JSC::DFG::JITCodeGenerator::silentFillFPR):
        (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters):
        (JSC::DFG::JITCodeGenerator::silentFillAllRegisters):

2011-11-12  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        [Qt][Symbian] Remove support for WINSCW compiler
        https://bugs.webkit.org/show_bug.cgi?id=70178

        Reviewed by Chang Shu.

        * API/JSStringRef.h:
        * create_hash_table: Revert r45553.
        * runtime/JSGlobalData.cpp: Revert r45553.
        * runtime/LiteralParser.cpp: Remove WINSCW comment.
        (JSC::LiteralParser::Lexer::lexString):
        * runtime/Lookup.h: Revert r45553.
        * runtime/Structure.h: Revert r48461.
        * wtf/Alignment.h:
        * wtf/Assertions.h: Revert r52337.
        * wtf/Compiler.h:
        * wtf/ListRefPtr.h: Revert r48988.
        (WTF::ListRefPtr::~ListRefPtr):
        * wtf/OwnArrayPtr.h: Revert r45911.
        (WTF::OwnArrayPtr::operator UnspecifiedBoolType):
        * wtf/PassOwnArrayPtr.h:
        (WTF::PassOwnArrayPtr::operator UnspecifiedBoolType):
        * wtf/PassRefPtr.h:
        * wtf/StaticConstructors.h:
        * wtf/unicode/qt4/UnicodeQt4.h:

2011-11-12  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed. Add ENABLE(DFG_JIT) around DFGCorrectableJumpPoint code.

        * dfg/DFGCorrectableJumpPoint.cpp:
        * dfg/DFGCorrectableJumpPoint.h:

2011-11-12  Patrick Gansterer  <paroga@webkit.org>

        [CMake] Move list of DFG source files into correct file
        https://bugs.webkit.org/show_bug.cgi?id=72212

        Reviewed by Daniel Bates.

        The DFG files are platform independent. So move them from
        the EFL specific file into the general CMakeLists.txt.

        * CMakeLists.txt:
        * PlatformEfl.cmake:

2011-11-12  Patrick Gansterer  <paroga@webkit.org>

        Fix "unused variable" warning in JSLock
        https://bugs.webkit.org/show_bug.cgi?id=72213

        Reviewed by Anders Carlsson.

        Use ASSERT_UNUSED() instead of ASSERT() to make sure
        that the variable is also used in the release build.

        * runtime/JSLock.cpp:
        (JSC::JSLock::lock):
        (JSC::JSLock::unlock):

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

        Update iOS compiler version.

        Reviewed by David Kilzer.

        * Configurations/CompilerVersion.xcconfig:
            - Update compiler version.

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

        Update iOS port's configuration setting, particularly in Platform.h
        https://bugs.webkit.org/show_bug.cgi?id=72187
        
        Reviewed by David Kilzer.

        * interpreter/Interpreter.h:
            - Lower the reentry depth.
        * runtime/DatePrototype.cpp:
            - iOS also uses CF.
        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::IncrementalScavenge):
            - Update fastmalloc configuration for iOS.
        * wtf/OSAllocatorPosix.cpp:
        (WTF::OSAllocator::reserveAndCommit):
            - Added flag.
        * wtf/Platform.h:
            - Update platform configuration for iOS.

2011-11-11  David Kilzer  <ddkilzer@apple.com>

        Only define BUILDING_ON_* and TARGETING_* macros when building for Mac OS X
        <http://webkit.org/b/72175>

        Reviewed by Joseph Pecoraro.

        * wtf/Platform.h: Move the definition of the BUILDING_ON_* and
        TARGETING_* macros to where the WTF_OS_MAC_OS_X macro is defined
        so that they're only defined on Mac OS X builds.  Also include
        Availability.h, which is needed on iOS builds.

2011-11-11  Darin Adler  <darin@apple.com>

        Remove all releaseRef implementations except for RetainPtr
        https://bugs.webkit.org/show_bug.cgi?id=71423

        Reviewed by Julien Chaffraix.

        * API/JSRetainPtr.h: Removed releaseRef.
        * wtf/PassRefPtr.h: Removed releaseRef.

2011-11-11  Darin Adler  <darin@apple.com>

        * JavaScriptCore.xcodeproj/project.pbxproj: Let a newer Xcode update this file.
        If an older Xcode downgrades this file and we have a risk of some kind of
        oscillating commit situation, please contact me so I know not to do this again.

2011-11-11  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add jsCast to replace static_cast
        https://bugs.webkit.org/show_bug.cgi?id=72071

        Reviewed by Geoffrey Garen.

        Added new jsCast and changed all of the static_cast sites in functions that 
        are in the MethodTable to use jsCast instead.

        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::toStringCallback):
        (JSC::JSCallbackFunction::valueOfCallback):
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::visitChildren):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::className):
        (JSC::::getOwnPropertySlot):
        (JSC::::getOwnPropertyDescriptor):
        (JSC::::put):
        (JSC::::deleteProperty):
        (JSC::::deletePropertyByIndex):
        (JSC::::getConstructData):
        (JSC::::hasInstance):
        (JSC::::getCallData):
        (JSC::::getOwnPropertyNames):
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::visitChildren):
        (JSC::DebuggerActivation::className):
        (JSC::DebuggerActivation::getOwnPropertySlot):
        (JSC::DebuggerActivation::put):
        (JSC::DebuggerActivation::putWithAttributes):
        (JSC::DebuggerActivation::deleteProperty):
        (JSC::DebuggerActivation::getOwnPropertyNames):
        (JSC::DebuggerActivation::getOwnPropertyDescriptor):
        (JSC::DebuggerActivation::defineGetter):
        (JSC::DebuggerActivation::defineSetter):
        * runtime/Arguments.cpp:
        (JSC::Arguments::visitChildren):
        (JSC::Arguments::getOwnPropertySlotByIndex):
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::getOwnPropertyDescriptor):
        (JSC::Arguments::getOwnPropertyNames):
        (JSC::Arguments::putByIndex):
        (JSC::Arguments::put):
        (JSC::Arguments::deletePropertyByIndex):
        (JSC::Arguments::deleteProperty):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::getOwnPropertySlot):
        (JSC::ArrayConstructor::getOwnPropertyDescriptor):
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::getOwnPropertySlot):
        (JSC::ArrayPrototype::getOwnPropertyDescriptor):
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::getOwnPropertySlot):
        (JSC::BooleanPrototype::getOwnPropertyDescriptor):
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::getOwnPropertySlot):
        (JSC::DateConstructor::getOwnPropertyDescriptor):
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::getOwnPropertySlot):
        (JSC::DatePrototype::getOwnPropertyDescriptor):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::getOwnPropertySlot):
        (JSC::ErrorPrototype::getOwnPropertyDescriptor):
        * runtime/Executable.cpp:
        (JSC::ExecutableBase::clearCode):
        (JSC::EvalExecutable::visitChildren):
        (JSC::ProgramExecutable::visitChildren):
        (JSC::FunctionExecutable::visitChildren):
        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::visitChildren):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::visitChildren):
        (JSC::JSActivation::getOwnPropertyNames):
        (JSC::JSActivation::getOwnPropertySlot):
        (JSC::JSActivation::put):
        (JSC::JSActivation::putWithAttributes):
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertySlotByIndex):
        (JSC::JSArray::getOwnPropertySlot):
        (JSC::JSArray::getOwnPropertyDescriptor):
        (JSC::JSArray::put):
        (JSC::JSArray::putByIndex):
        (JSC::JSArray::deleteProperty):
        (JSC::JSArray::deletePropertyByIndex):
        (JSC::JSArray::getOwnPropertyNames):
        (JSC::JSArray::visitChildren):
        * runtime/JSBoundFunction.cpp:
        (JSC::JSBoundFunction::hasInstance):
        (JSC::JSBoundFunction::visitChildren):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::getOwnPropertySlot):
        (JSC::JSByteArray::getOwnPropertyDescriptor):
        (JSC::JSByteArray::getOwnPropertySlotByIndex):
        (JSC::JSByteArray::put):
        (JSC::JSByteArray::putByIndex):
        (JSC::JSByteArray::getOwnPropertyNames):
        * runtime/JSCell.h:
        (JSC::JSCell::visitChildren):
        (JSC::jsCast):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::visitChildren):
        (JSC::JSFunction::getCallData):
        (JSC::JSFunction::getOwnPropertySlot):
        (JSC::JSFunction::getOwnPropertyDescriptor):
        (JSC::JSFunction::getOwnPropertyNames):
        (JSC::JSFunction::put):
        (JSC::JSFunction::deleteProperty):
        (JSC::JSFunction::getConstructData):
        * runtime/JSGlobalData.cpp:
        (JSC::StackPreservingRecompiler::operator()):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::put):
        (JSC::JSGlobalObject::putWithAttributes):
        (JSC::JSGlobalObject::defineGetter):
        (JSC::JSGlobalObject::defineSetter):
        (JSC::JSGlobalObject::visitChildren):
        (JSC::JSGlobalObject::getOwnPropertySlot):
        (JSC::JSGlobalObject::getOwnPropertyDescriptor):
        (JSC::JSGlobalObject::clearRareData):
        * runtime/JSGlobalThis.cpp:
        (JSC::JSGlobalThis::visitChildren):
        * runtime/JSONObject.cpp:
        (JSC::JSONObject::getOwnPropertySlot):
        (JSC::JSONObject::getOwnPropertyDescriptor):
        * runtime/JSObject.cpp:
        (JSC::JSObject::finalize):
        (JSC::JSObject::visitChildren):
        (JSC::JSObject::getOwnPropertySlotByIndex):
        (JSC::JSObject::put):
        (JSC::JSObject::putByIndex):
        (JSC::JSObject::deleteProperty):
        (JSC::JSObject::deletePropertyByIndex):
        * runtime/JSObject.h:
        (JSC::JSObject::getOwnPropertySlot):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::visitChildren):
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::visitChildren):
        (JSC::JSStaticScopeObject::put):
        (JSC::JSStaticScopeObject::putWithAttributes):
        (JSC::JSStaticScopeObject::getOwnPropertySlot):
        * runtime/JSString.cpp:
        (JSC::JSString::visitChildren):
        (JSC::JSString::toThisObject):
        (JSC::JSString::getOwnPropertySlot):
        (JSC::JSString::getOwnPropertySlotByIndex):
        * runtime/JSVariableObject.cpp:
        (JSC::JSVariableObject::deleteProperty):
        (JSC::JSVariableObject::getOwnPropertyNames):
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::visitChildren):
        * runtime/MathObject.cpp:
        (JSC::MathObject::getOwnPropertySlot):
        (JSC::MathObject::getOwnPropertyDescriptor):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::visitChildren):
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::getOwnPropertySlot):
        (JSC::NumberConstructor::getOwnPropertyDescriptor):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::getOwnPropertySlot):
        (JSC::NumberPrototype::getOwnPropertyDescriptor):
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::getOwnPropertySlot):
        (JSC::ObjectConstructor::getOwnPropertyDescriptor):
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::put):
        (JSC::ObjectPrototype::getOwnPropertySlotByIndex):
        (JSC::ObjectPrototype::getOwnPropertySlot):
        (JSC::ObjectPrototype::getOwnPropertyDescriptor):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::getOwnPropertySlot):
        (JSC::RegExpConstructor::getOwnPropertyDescriptor):
        (JSC::RegExpConstructor::put):
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::getOwnPropertySlot):
        (JSC::RegExpMatchesArray::getOwnPropertySlotByIndex):
        (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
        (JSC::RegExpMatchesArray::put):
        (JSC::RegExpMatchesArray::putByIndex):
        (JSC::RegExpMatchesArray::deleteProperty):
        (JSC::RegExpMatchesArray::deletePropertyByIndex):
        (JSC::RegExpMatchesArray::getOwnPropertyNames):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::visitChildren):
        (JSC::RegExpObject::getOwnPropertySlot):
        (JSC::RegExpObject::getOwnPropertyDescriptor):
        (JSC::RegExpObject::put):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::getOwnPropertySlot):
        (JSC::RegExpPrototype::getOwnPropertyDescriptor):
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::visitChildren):
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::getOwnPropertySlot):
        (JSC::StringConstructor::getOwnPropertyDescriptor):
        * runtime/StringObject.cpp:
        (JSC::StringObject::getOwnPropertySlot):
        (JSC::StringObject::getOwnPropertySlotByIndex):
        (JSC::StringObject::getOwnPropertyDescriptor):
        (JSC::StringObject::deleteProperty):
        (JSC::StringObject::getOwnPropertyNames):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::getOwnPropertySlot):
        (JSC::StringPrototype::getOwnPropertyDescriptor):
        * runtime/Structure.cpp:
        (JSC::Structure::visitChildren):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::visitChildren):

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

        Enable DFG JIT for ARMv7/iOS.

        Rubber stamped by Oliver Hunt.

        * wtf/Platform.h:
            - enable DFG JIT for ARMv7/iOS.

2011-11-11  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize supportsProfiling, supportsRichSourceInfo, shouldInterruptScript in JSGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=72035

        Reviewed by Geoffrey Garen.

        De-virtualized the methods through the use of a new method table just for JSGlobalObject and subclasses.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * bytecompiler/BytecodeGenerator.cpp: Changed call sites to use the new GlobalObjectMethodTable.
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * interpreter/Interpreter.cpp: Ditto.
        (JSC::Interpreter::execute):
        * runtime/JSGlobalObject.cpp: Added a static const GlobalObjectMethodTable with the correct function pointers.
        * runtime/JSGlobalObject.h: Added a field in JSGlobalObject to keep track of the current method table.
        (JSC::JSGlobalObject::JSGlobalObject):
        (JSC::JSGlobalObject::globalObjectMethodTable): The new struct to contain the function pointers.
        (JSC::JSGlobalObject::supportsProfiling): Made static to put in the method table.
        (JSC::JSGlobalObject::supportsRichSourceInfo): Ditto.
        (JSC::JSGlobalObject::shouldInterruptScript): Ditto.
        * runtime/TimeoutChecker.cpp: Changed call sites to use the new GlobalObjectMethodTable for lookup.
        (JSC::TimeoutChecker::didTimeOut):

2011-11-11  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSGlobalObject::allowsAccessFrom
        https://bugs.webkit.org/show_bug.cgi?id=71969

        Reviewed by Darin Adler.

        * runtime/JSGlobalObject.h: Removed allowsAccessFrom from JSGlobalObject since it is exclusive to 
        JSDOMWindowBase and WebScriptObject.

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

        Unreviewed, rolling out r99950.
        http://trac.webkit.org/changeset/99950
        https://bugs.webkit.org/show_bug.cgi?id=72117

        "Landed wrong patch by mistake" (Requested by yurys on
        #webkit).

        * JavaScriptCore.exp:
        * runtime/JSFunction.cpp:
        * runtime/JSFunction.h:

2011-11-11  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed. Build fix for !ENABLE(JIT) after r99898.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):

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

        Disabling assertions breaks the debug build
        https://bugs.webkit.org/show_bug.cgi?id=72091

        Reviewed by Geoff Garen.

        * dfg/DFGNode.h: Made hasIdentifier() available when assertions are
        disabled. It is used in Graph::dump().
        * runtime/JSObject.cpp:
        (JSC::JSObject::visitChildren): Update m_isCheckingForDefaultMarkViolation
        only if assertions are enabled.
        * wtf/Deque.h:
        (WTF::::checkIndexValidity): Changed ASSERT to ASSERT_UNUSED.
        * wtf/ThreadRestrictionVerifier.h:
        (WTF::ThreadRestrictionVerifier::setShared): Guarded the definition of
        a local variable that is only used in an assertion.

2011-11-10  Filip Pizlo  <fpizlo@apple.com>

        JSString forgets to clear m_fibers when resolving ropes
        https://bugs.webkit.org/show_bug.cgi?id=72089

        Reviewed by Geoff Garen.

        * runtime/JSString.cpp:
        (JSC::JSString::resolveRopeSlowCase):

2011-11-09  Filip Pizlo  <fpizlo@apple.com>

        DFG byte array support sometimes clamps values incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=71975

        Reviewed by Oliver Hunt.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):

2011-11-10  Filip Pizlo  <fpizlo@apple.com>

        ValueProfile/PredictedType contains dead code, and doesn't recognize functions
        https://bugs.webkit.org/show_bug.cgi?id=72065

        Reviewed by Gavin Barraclough and Geoff Garen.
        
        Added PredictFunction support, and did some cleaning up along the way.
        ValueProfile no longer has statistics machinery, because we never used
        it. Rearranged some bits in PredictedType to more easily make room for
        one more object type. Changed some debug code to use more consistent
        conventions (ByteArray becomes Bytearray so that if we ever have a
        "Byte" prediction we don't get confused between a prediction that is
        the union of Byte and Array and a prediction that indicates precisely
        a ByteArray).

        * bytecode/PredictedType.cpp:
        (JSC::predictionToString):
        (JSC::predictionFromClassInfo):
        * bytecode/PredictedType.h:
        (JSC::isFunctionPrediction):
        * bytecode/ValueProfile.cpp:
        * bytecode/ValueProfile.h:
        (JSC::ValueProfile::dump):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):

2011-11-10  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/72049> Specify testapi.js install path using JAVASCRIPTCORE_FRAMEWORKS_DIR

        Reviewed by Joseph Pecoraro.

        * JavaScriptCore.xcodeproj/project.pbxproj: The testapi.js
        script should use JAVASCRIPTCORE_FRAMEWORKS_DIR in its dstPath
        for installation.  Also removed "Versions/A/" from the path
        since this is unneeded due the default symlinks present in the
        framework.

2011-11-10  Gavin Barraclough  <barraclough@apple.com>

        Add ARMv7 support to the DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=72061

        Reviewed by Geoff Garen.

        * dfg/DFGAssemblyHelpers.h:
        (JSC::DFG::AssemblyHelpers::preserveReturnAddressAfterCall):
        (JSC::DFG::AssemblyHelpers::restoreReturnAddressBeforeReturn):
        (JSC::DFG::AssemblyHelpers::emitPutImmediateToCallFrameHeader):
        (JSC::DFG::AssemblyHelpers::boxDouble):
        (JSC::DFG::AssemblyHelpers::unboxDouble):
            - Add CPU(ARM) copies of these functions.
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::spill):
            - Fix matching of '}' re #if blocks, makes some tools happy.
        (JSC::DFG::JITCodeGenerator::setupArguments):
        (JSC::DFG::JITCodeGenerator::setupArgumentsWithExecState):
        (JSC::DFG::JITCodeGenerator::appendCallWithExceptionCheckSetResult):
        (JSC::DFG::JITCodeGenerator::appendCallSetResult):
            - Add CPU(ARM) / 4 argument register copies of these functions.
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
            - Should use callOperation to plant a call to a DFG_OPERATION.
        (JSC::DFG::JITCodeGenerator::cachedGetById):
        (JSC::DFG::JITCodeGenerator::cachedPutById):
            - These methods need to plant a relinkable jump; we currently do so
              using beginUninterruptedSequence() / endUninterruptedSequence().
        * dfg/DFGJITCodeGenerator64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
            - Should use callOperation to plant a call to a DFG_OPERATION.
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::linkOSRExits):
            - This method needs to plant a relinkable jump; we currently do so
              using beginUninterruptedSequence() / endUninterruptedSequence().
        (JSC::DFG::JITCompiler::compileBody):
            - Add abstraction to retrieve the pc after a call.
        * dfg/DFGOSRExitCompiler.cpp:
            - Fix a bug - CodeLocationLabel needs a data address rather than an
              executable one, but can just take a MacroAssemblerCodePtr instead!
        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::compileClampDoubleToByte):
            - Add FIXME comment to come back to! - bug#72054.
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::speculationCheck):
            - Add missing method (ooops, required by bug#72047)
        * dfg/DFGSpeculativeJIT32_64.cpp:
            - Need to wrap fmod on ARMv7.


2011-11-10  Filip Pizlo  <fpizlo@apple.com>

        DFG should not reparse code that was just parsed
        https://bugs.webkit.org/show_bug.cgi?id=71977

        Reviewed by Geoff Garen.
        
        The instruction stream of a code block is now kept around until
        the next GC. When doing either an optimizing compilation of an
        executable, or inlining of an executable, we now try to find the
        already preexisting bytecode. If we find it, we don't have to parse.
        If we don't find it, we parse as before. Inlining takes the extra
        step of caching code blocks, so if the same executable gets inlined
        multiple times into the same caller, then we parse it at most once
        even if prior to inlining that executable did not have any code
        blocks with an instruction stream.
        
        Also fixed a silly bug where the strict mode for various operations
        was being determined by looking at the machine code block rather
        than the inlinee.

        To enable the delete-on-next-GC policy, I introduced the notion
        of an ultra weak finalizer, which anyone can register during
        tracing. This is thread-safe (for parallel GC) and
        stop-the-world-safe (so calls to free() are postponed until the
        world is resumed). This required reusing some facilities previously
        created for WeakReferenceHarvester, so I created a common utility
        class. I also retweaked the handling of WeakReferenceHarvesters,
        since they should be executed during stop-the-world since in the
        future we may want to allow them to call drain().
        
        2% win on SunSpider. 2% win on V8, when run in my harness. Neutral
        elsewhere.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::visitAggregate):
        (JSC::CodeBlock::copyPostParseDataFrom):
        (JSC::CodeBlock::copyPostParseDataFromAlternative):
        (JSC::CodeBlock::finalizeUnconditionally):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::canProduceCopyWithBytecode):
        (JSC::CodeBlock::discardBytecodeLater):
        (JSC::CodeBlock::handleBytecodeDiscardingOpportunity):
        (JSC::GlobalCodeBlock::GlobalCodeBlock):
        (JSC::ProgramCodeBlock::ProgramCodeBlock):
        (JSC::EvalCodeBlock::EvalCodeBlock):
        (JSC::FunctionCodeBlock::FunctionCodeBlock):
        (JSC::BytecodeDestructionBlocker::BytecodeDestructionBlocker):
        (JSC::BytecodeDestructionBlocker::~BytecodeDestructionBlocker):
        * dfg/DFGAssemblyHelpers.h:
        (JSC::DFG::AssemblyHelpers::strictModeFor):
        * dfg/DFGByteCodeCache.h: Added.
        (JSC::DFG::CodeBlockKey::CodeBlockKey):
        (JSC::DFG::CodeBlockKey::operator==):
        (JSC::DFG::CodeBlockKey::hash):
        (JSC::DFG::CodeBlockKey::executable):
        (JSC::DFG::CodeBlockKey::kind):
        (JSC::DFG::CodeBlockKey::isHashTableDeletedValue):
        (JSC::DFG::CodeBlockKeyHash::hash):
        (JSC::DFG::CodeBlockKeyHash::equal):
        (JSC::DFG::ByteCodeCache::ByteCodeCache):
        (JSC::DFG::ByteCodeCache::~ByteCodeCache):
        (JSC::DFG::ByteCodeCache::get):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleInlining):
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::cachedPutById):
        * dfg/DFGJITCodeGenerator64.cpp:
        (JSC::DFG::JITCodeGenerator::cachedPutById):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * heap/Heap.cpp:
        (JSC::Heap::finalizeUnconditionally):
        (JSC::Heap::markRoots):
        (JSC::Heap::collect):
        * heap/Heap.h:
        * heap/ListableHandler.h: Added.
        (JSC::ListableHandler::ListableHandler):
        (JSC::ListableHandler::~ListableHandler):
        (JSC::ListableHandler::List::List):
        (JSC::ListableHandler::List::addNotThreadSafe):
        (JSC::ListableHandler::List::addThreadSafe):
        (JSC::ListableHandler::List::hasNext):
        (JSC::ListableHandler::List::removeNext):
        * heap/MarkStack.cpp:
        (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
        (JSC::SlotVisitor::harvestWeakReferences):
        (JSC::SlotVisitor::finalizeUnconditionally):
        * heap/MarkStack.h:
        (JSC::MarkStack::addWeakReferenceHarvester):
        (JSC::MarkStack::addUnconditionalFinalizer):
        * heap/SlotVisitor.h:
        * heap/UnconditionalFinalizer.h: Added.
        (JSC::UnconditionalFinalizer::~UnconditionalFinalizer):
        * heap/WeakReferenceHarvester.h:
        (JSC::WeakReferenceHarvester::WeakReferenceHarvester):
        (JSC::WeakReferenceHarvester::~WeakReferenceHarvester):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::baselineCodeBlockFor):
        (JSC::FunctionExecutable::codeBlockWithBytecodeFor):
        (JSC::FunctionExecutable::produceCodeBlockFor):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        * runtime/Executable.h:
        (JSC::FunctionExecutable::profiledCodeBlockFor):

2011-11-10  Gavin Barraclough  <barraclough@apple.com>

        Add ARMv7 register info for the DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=72050

        Reviewed by Geoff Garen.

        * dfg/DFGFPRInfo.h:
        (JSC::DFG::FPRInfo::toRegister):
        (JSC::DFG::FPRInfo::toIndex):
        (JSC::DFG::FPRInfo::debugName):
        * dfg/DFGGPRInfo.h:
        (JSC::DFG::GPRInfo::toRegister):
        (JSC::DFG::GPRInfo::toIndex):
        (JSC::DFG::GPRInfo::debugName):

2011-11-10  Gavin Barraclough  <barraclough@apple.com>

        #ifdef CPU(X86) specific div/mod code in DFGSpeculativeJIT32_64
        https://bugs.webkit.org/show_bug.cgi?id=72047

        Reviewed by Geoff Garen.

        We currently don't attempt to abstract divide through the macro assembler,
        due to these instructions commonly having specific requirements. This means
        there is architecture specific code in the JIT - #ifdef it, and provide a
        common implementation.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::fmodAsDFGOperation):
        (JSC::DFG::SpeculativeJIT::compile):

2011-11-10  Gavin Barraclough  <barraclough@apple.com>

        Add ENABLE_VALUE_PROFILER support for ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=72043

        Reviewed by Geoff Garen.

        This requires us to make a bucketCounterRegister available; to do so we'll need to spill more registers on entry to JIT code.

        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emitSlow_op_mod):
            - cleanup location of UNUSED_PARAM
        * jit/JITStubs.cpp:
        (JSC::ctiTrampoline):
        (JSC::ctiVMThrowTrampoline):
        (JSC::ctiOpThrowNotCaught):
        (JSC::JITThunks::JITThunks):
        * jit/JITStubs.h:
            - Update JITStackFrame structure & asm code to spill more registers.
        * jit/JSInterfaceJIT.h:
            - Assign a bucketCounterRegister.

2011-11-10  Gavin Barraclough  <barraclough@apple.com>

        Fix sampling counters on ARMv7, move add64 functionality to macro assembler
        https://bugs.webkit.org/show_bug.cgi?id=72040

        Reviewed by Geoff Garen.

        The ability to add an integer to a uint64_t in memory is poorly copied in
        multiple places & ifdef'ed on architecture, addWithCarry32 is also a badly
        designed interface since add32 is not required to set flags (we have no
        concept of flags in the macro assembler interface).

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::add64):
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::add64):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::add64):
        * dfg/DFGAssemblyHelpers.cpp:
        * dfg/DFGAssemblyHelpers.h:
        (JSC::DFG::AssemblyHelpers::emitCount):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::writeBarrier):
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitCount):

011-11-10  Ryuan Choi  <ryuan.choi@samsung.com>

        [CMAKE] Refactoring CMakeLists${PORT}.txt to Platform${PORT}.cmake
        https://bugs.webkit.org/show_bug.cgi?id=56705

        Reviewed by Adam Roben.

        * CMakeLists.txt:
        * PlatformEfl.cmake: Renamed from Source/JavaScriptCore/CMakeListsEfl.txt.
        * PlatformWinCE.cmake: Renamed from Source/JavaScriptCore/CMakeListsWinCE.txt.
        * shell/CMakeLists.txt:
        * shell/PlatformEfl.cmake: Renamed from Source/JavaScriptCore/shell/CMakeListsEfl.txt.
        * shell/PlatformWinCE.cmake: Renamed from Source/JavaScriptCore/shell/CMakeListsWinCE.txt.
        * wtf/CMakeLists.txt:
        * wtf/PlatformEfl.cmake: Renamed from Source/JavaScriptCore/wtf/CMakeListsEfl.txt.
        * wtf/PlatformWinCE.cmake: Renamed from Source/JavaScriptCore/wtf/CMakeListsWinCE.txt.

2011-11-10  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix make distcheck build.

        * GNUmakefile.list.am: Add missing files.

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

        Towards 8 Bit Strings: Templatize JSC::LiteralParser class by character type
        https://bugs.webkit.org/show_bug.cgi?id=71862

        Changed LiteralParser to be templatized of character type.

        Moved five enums out of class definition to work around a clang compiler defect.

        Added lexIdentifier templated method to break out character specific versions.
        Added static setParserTokenString templated method to handle setting approriately
        sized string pointer.

        To keep code in LiteralParser.cpp and keep LiteralParser.h small, the two
        flavors of LiteralParser are explicitly instantiated at the end of
        LiteralParser.cpp.

        Reviewed by Oliver Hunt.

        * API/JSValueRef.cpp:
        (JSValueMakeFromJSONString):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::callEval):
        (JSC::Interpreter::execute):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * runtime/JSONObject.cpp:
        (JSC::JSONProtoFuncParse):
        * runtime/LiteralParser.cpp:
        (JSC::isJSONWhiteSpace):
        (JSC::::tryJSONPParse):
        (JSC::::makeIdentifier):
        (JSC::::Lexer::lex):
        (JSC::::Lexer::lexIdentifier):
        (JSC::::Lexer::next):
        (JSC::LChar):
        (JSC::UChar):
        (JSC::isSafeStringCharacter):
        (JSC::::Lexer::lexString):
        (JSC::::Lexer::lexNumber):
        (JSC::::parse):
        * runtime/LiteralParser.h:
        (JSC::LiteralParser::LiteralParser):
        (JSC::LiteralParser::getErrorMessage):
        (JSC::LiteralParser::tryLiteralParse):
        (JSC::LiteralParser::Lexer::Lexer):
        (JSC::LiteralParser::Lexer::currentToken):
        (JSC::LiteralParser::Lexer::getErrorMessage):
        * runtime/UString.h:
        (JSC::LChar):
        (JSC::UChar):
        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::append):
        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::append):

2011-11-09  Filip Pizlo  <fpizlo@apple.com>

        Multiple CodeBlock should be able to share the same instruction
        stream without copying
        https://bugs.webkit.org/show_bug.cgi?id=71978

        Reviewed by Oliver Hunt.
        
        This refactors CodeBlock::m_instructions to be a Vector boxed in a
        ref-counted object, but otherwise does not take advantage of this.
        
        This is performance neutral.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::printStructure):
        (JSC::CodeBlock::printStructures):
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::visitAggregate):
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::hasInstructions):
        (JSC::CodeBlock::numberOfInstructions):
        (JSC::CodeBlock::instructions):
        * jit/JIT.cpp:
        (JSC::JIT::JIT):

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

        Renovate ARMv7 assembler/macro-assembler
        https://bugs.webkit.org/show_bug.cgi?id=71982

        Reviewed by Geoff Garen.

        ARMv7Assembler:
        * add support for strb (byte stores)
        * rename the VMOV_CtoS opcodes (there are currently backwards!)
        * add support for adc (add with carry)
        * add support for vsqrt, vabs
        * add support for vmov (between FPRs, and to/from GPR pairs).
        * remove '_F64' postfixes from instructions (these aren't helpful, functions can already be distinguished by their signatures).
        * rename vcvt_F64_S32  to vcvt_signedToFloatingPoint, the prior postfix was unhelpful in failing to distinguish the types (S32 indicates a single precision register, but the type could be float, int32, or uint32).
        * rename vcvtr_S32_F64 to vcvt_floatingPointToSigned, as for previous, also vcvtr was the incorrect name for the operation (the emitted instruction truncates).

        MacroAssemblerARMv7:
        * add 3-operand versions of and32, lshift32, or32, rshift32, urshift32, sub32, xor32, 
        * add store8, and store32 imm to base-index.
        * fix load32WithCompactAddressOffsetPatch to work for all gprs (the fix is a little kludgy but functional; to do better we'll have to also fix the repatching code).
        * Update supportsFloating* flags (all features now supported).
        * add moveDouble, storeDouble to absolute address, addDouble to absolute address
        * add 3-operand double operations.
        * implement sqrtDouble/absDouble
        * add branchTruncateDoubleToInt32, implement truncateDoubleToInt32
        * move should do nothing if src == dest
        * branchTest8-on-memory can be implemented in terms of branchTest32-on-register (branchTest8-on-register has been removed).
        * add 3-operand branchAdd32, branchSub32, also branchAdd32 absolute address.

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

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

        Reviewed by Geoff Garen.

        Incrementally re-landing these changes, trying to determine what went wrong.
        (The whole patch failed tests on the build bot but worked locally.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsic):

2011-11-09  Filip Pizlo  <fpizlo@apple.com>

        DFG OSR exit code should be lazily generated
        https://bugs.webkit.org/show_bug.cgi?id=71744

        Reviewed by Gavin Barraclough.
        
        The OSR exit code is now generated the first time it is executed,
        rather than right after speculative compilation. Because most OSR
        exits are never taken, this should greatly reduce both code size
        and compilation time.
        
        This is a 1% win on SunSpider, and a 1% win on V8 when running in
        my harness. No change in V8 in V8's harness (due to the long runs,
        so compile time is not an issue) and no change in Kraken (again,
        long runs of small code so compile time has no measurable effect).

        * CMakeListsEfl.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * assembler/AbstractMacroAssembler.h:
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::jump):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::jump):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::jmp_m):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::createDFGDataIfNecessary):
        (JSC::CodeBlock::appendDFGOSREntryData):
        (JSC::CodeBlock::numberOfDFGOSREntries):
        (JSC::CodeBlock::dfgOSREntryData):
        (JSC::CodeBlock::dfgOSREntryDataForBytecodeIndex):
        (JSC::CodeBlock::appendOSRExit):
        (JSC::CodeBlock::appendSpeculationRecovery):
        (JSC::CodeBlock::numberOfOSRExits):
        (JSC::CodeBlock::numberOfSpeculationRecoveries):
        (JSC::CodeBlock::osrExit):
        (JSC::CodeBlock::speculationRecovery):
        * dfg/DFGAssemblyHelpers.h:
        (JSC::DFG::AssemblyHelpers::debugCall):
        * dfg/DFGCorrectableJumpPoint.cpp: Added.
        (JSC::DFG::CorrectableJumpPoint::codeLocationForRepatch):
        * dfg/DFGCorrectableJumpPoint.h: Added.
        (JSC::DFG::CorrectableJumpPoint::CorrectableJumpPoint):
        (JSC::DFG::CorrectableJumpPoint::switchToLateJump):
        (JSC::DFG::CorrectableJumpPoint::correctInitialJump):
        (JSC::DFG::CorrectableJumpPoint::correctLateJump):
        (JSC::DFG::CorrectableJumpPoint::initialJump):
        (JSC::DFG::CorrectableJumpPoint::lateJump):
        (JSC::DFG::CorrectableJumpPoint::correctJump):
        (JSC::DFG::CorrectableJumpPoint::getJump):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::linkOSRExits):
        (JSC::DFG::JITCompiler::compileBody):
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        * dfg/DFGOSRExit.cpp: Added.
        (JSC::DFG::OSRExit::OSRExit):
        (JSC::DFG::OSRExit::dump):
        * dfg/DFGOSRExit.h:
        * dfg/DFGOSRExitCompiler.cpp: Added.
        * dfg/DFGOSRExitCompiler.h:
        * dfg/DFGOSRExitCompiler32_64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOSRExitCompiler64.cpp:
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::speculationCheck):
        * dfg/DFGThunks.cpp: Added.
        (JSC::DFG::osrExitGenerationThunkGenerator):
        * dfg/DFGThunks.h: Added.
        * jit/JITCode.h:
        (JSC::JITCode::dataAddressAtOffset):
        * runtime/JSGlobalData.h:

2011-11-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        Fixing build breakage

        Unreviewed build fix

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-11-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSVariableObject::isDynamicScope
        https://bugs.webkit.org/show_bug.cgi?id=71933

        Reviewed by Geoffrey Garen.

        * runtime/JSActivation.cpp:
        * runtime/JSActivation.h: Inlined and de-virtualized isDynamicScope
        (JSC::JSActivation::isDynamicScope):
        * runtime/JSGlobalObject.cpp:
        * runtime/JSGlobalObject.h: Inlined and de-virtualized isDynamicScope
        (JSC::JSGlobalObject::isDynamicScope):
        * runtime/JSStaticScopeObject.cpp:
        * runtime/JSStaticScopeObject.h: Inlined and de-virtualized isDynamicScope
        (JSC::JSStaticScopeObject::createStructure): Changed createStructure to use new JSType
        (JSC::JSStaticScopeObject::isDynamicScope):
        * runtime/JSType.h: Added new type for JSStaticScopeObject
        * runtime/JSVariableObject.cpp: De-virtualized and added an implementation that checks the 
        object's type and calls the corresponding implementation.
        (JSC::JSVariableObject::isDynamicScope):
        * runtime/JSVariableObject.h:

2011-11-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSGlobalObject::hasOwnPropertyForWrite
        https://bugs.webkit.org/show_bug.cgi?id=71934

        Reviewed by Geoffrey Garen.

        * runtime/JSGlobalObject.h: Removed the virtual-ness of hasOwnPropertyForWrite since nobody overrides it.

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

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

        Reviewed by Geoff Garen.

        Incrementally re-landing these changes, trying to determine what went wrong.
        (The whole patch failed tests on the build bot but worked locally.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::absDouble):
        * assembler/MacroAssemblerARMv7.h:
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::absDouble):
        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::absDouble):
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::absDouble):
        * assembler/MacroAssemblerX86Common.h:
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::absDouble):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/ThunkGenerators.cpp:
        (JSC::absThunkGenerator):

2011-11-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::getOwnPropertyDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=71523

        Reviewed by Sam Weinig.

        Added getOwnPropertyDescriptor to the MethodTable, changed all of the 
        virtual versions of getOwnPropertyDescriptor to static ones, and 
        changed all of the call sites to the corresponding lookup in the MethodTable.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::getOwnPropertyDescriptor):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::getOwnPropertyDescriptor):
        * debugger/DebuggerActivation.h:
        * runtime/Arguments.cpp:
        (JSC::Arguments::getOwnPropertyDescriptor):
        * runtime/Arguments.h:
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::getOwnPropertyDescriptor):
        * runtime/ArrayConstructor.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::getOwnPropertyDescriptor):
        * runtime/ArrayPrototype.h:
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::getOwnPropertyDescriptor):
        * runtime/BooleanPrototype.h:
        * runtime/ClassInfo.h:
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::getOwnPropertyDescriptor):
        * runtime/DateConstructor.h:
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::getOwnPropertyDescriptor):
        * runtime/DatePrototype.h:
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::getOwnPropertyDescriptor):
        * runtime/ErrorPrototype.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertyDescriptor):
        * runtime/JSArray.h:
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::getOwnPropertyDescriptor):
        * runtime/JSByteArray.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::getOwnPropertyDescriptor):
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertyDescriptor):
        * runtime/JSFunction.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::getOwnPropertyDescriptor):
        * runtime/JSGlobalObject.h:
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::getOwnPropertyDescriptor):
        * runtime/JSNotAnObject.h:
        * runtime/JSONObject.cpp:
        (JSC::JSONObject::getOwnPropertyDescriptor):
        * runtime/JSONObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::vtableAnchor):
        (JSC::JSObject::propertyIsEnumerable):
        (JSC::JSObject::getOwnPropertyDescriptor):
        (JSC::JSObject::getPropertyDescriptor):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        * runtime/JSString.cpp: Removed getOwnPropertyDescriptor, since this seems to be a relic from a 
        bygone era when getOwnPropertyDescriptor was rooted in JSCell rather than JSObject.  There were 
        no call sites for this version of getOwnPropertyDescriptor in the entire project.
        * runtime/JSString.h:
        * runtime/Lookup.h:
        (JSC::getStaticPropertyDescriptor):
        (JSC::getStaticFunctionDescriptor):
        (JSC::getStaticValueDescriptor):
        * runtime/MathObject.cpp:
        (JSC::MathObject::getOwnPropertyDescriptor):
        * runtime/MathObject.h:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::getOwnPropertyDescriptor):
        * runtime/NumberConstructor.h:
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::getOwnPropertyDescriptor):
        * runtime/NumberPrototype.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::getOwnPropertyDescriptor):
        (JSC::objectConstructorGetOwnPropertyDescriptor):
        * runtime/ObjectConstructor.h:
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::getOwnPropertyDescriptor):
        * runtime/ObjectPrototype.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::getOwnPropertyDescriptor):
        * runtime/RegExpConstructor.h:
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::getOwnPropertyDescriptor):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::getOwnPropertyDescriptor):
        * runtime/RegExpObject.h:
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::getOwnPropertyDescriptor):
        * runtime/RegExpPrototype.h:
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::getOwnPropertyDescriptor):
        * runtime/StringConstructor.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::vtableAnchor): Added to prevent a weak vtable.
        (JSC::StringObject::getOwnPropertyDescriptor):
        * runtime/StringObject.h:
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::getOwnPropertyDescriptor):
        * runtime/StringPrototype.h:

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

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

        Reviewed by Geoff Garen.

        Incrementally re-landing these changes, trying to determine what went wrong.
        (The whole patch failed tests on the build bot but worked locally.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::supportsFloatingPoint):
        (JSC::MacroAssemblerARM::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerARM::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerARM::supportsFloatingPointAbs):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::supportsFloatingPoint):
        (JSC::MacroAssemblerARMv7::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerARMv7::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerARMv7::supportsFloatingPointAbs):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::supportsFloatingPoint):
        (JSC::MacroAssemblerMIPS::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerMIPS::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerMIPS::supportsFloatingPointAbs):
        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::supportsFloatingPoint):
        (JSC::MacroAssemblerSH4::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerSH4::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerSH4::supportsFloatingPointAbs):
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::supportsFloatingPoint):
        (JSC::MacroAssemblerX86::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerX86::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerX86::supportsFloatingPointAbs):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::supportsFloatingPoint):
        (JSC::MacroAssemblerX86_64::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerX86_64::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerX86_64::supportsFloatingPointAbs):
        * jit/ThunkGenerators.cpp:
        (JSC::absThunkGenerator):

2011-11-08  Darin Adler  <darin@apple.com>

        Add code path in HashTable for emptyValueIsZero that does not require copying the empty value
        https://bugs.webkit.org/show_bug.cgi?id=71875

        Reviewed by Anders Carlsson.

        This is a step along the path of making OwnPtr work as HashMap value types.

        * wtf/Alignment.h: Moved the AlignedBufferChar and AlignedBuffer types from Vector.h here.
        Also fixed include style. To include other WTF headers inside WTF, we use "" includes.
        I did not change the code to fix style checker complaints.

        * wtf/HashTable.h: Added includes as needed and fixed include style.
        (WTF::doubleHash): Removed the uneeeded and inappropriate "static" in this function, which
        gave it internal linkage for no good reason.
        (WTF::HashTable::checkKey): Made this use AlignedBuffer for the deleted value check to avoid
        construction/destruction problems instead of doing the trick where we construct and destroy
        an empty value twice. It's cleaner and simpler and avoids copying the empty value.
        (WTF::HashTable::initializeBucket): Specialized initializeBucket to use memset when the
        empty value is zero rather than copying an empty value.

        * wtf/Vector.h: Moved the AlignedBufferChar and AlignedBuffer types into Alignment.h.

2011-11-09  Gabor Rapcsanyi  <rgabor@webkit.org>

        Buildfix for 32bit debug mode.

        Reviewed by Csaba Osztrogonác.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::dump):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):

2011-11-09  Andy Wingo  <wingo@igalia.com>

        Enable the DFG JIT on X86-64 Linux platforms
        https://bugs.webkit.org/show_bug.cgi?id=71373

        Reviewed by Csaba Osztrogonác.

        * wtf/Platform.h (ENABLE_DFG_JIT): Enable the DFG JIT on the
        x86-64 GNU/Linux platform.
        * CMakeListsEfl.txt: Add JSValue64 implementations to EFL build.

2011-11-09  Csaba Osztrogonác  <ossy@webkit.org>

        Enable the DFG JIT on x86-64 Linux platforms
        https://bugs.webkit.org/show_bug.cgi?id=71373

        Enable DFG JIT by default on X86 Linux and Mac platforms
        https://bugs.webkit.org/show_bug.cgi?id=71686

        Buildfix for stricter compilers: -Werror=unused-but-set-variable

        Reviewed by Zoltan Herczeg.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-11-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r99678.
        http://trac.webkit.org/changeset/99678
        https://bugs.webkit.org/show_bug.cgi?id=71882

        broke the build with -Werror=unused-but-set-variable
        (Requested by tronical_ on #webkit).

        * CMakeListsEfl.txt:
        * wtf/Platform.h:

2011-11-09  Andy Wingo  <wingo@igalia.com>

        Enable the DFG JIT on X86-64 Linux platforms
        https://bugs.webkit.org/show_bug.cgi?id=71373

        Reviewed by Filip Pizlo.

        * wtf/Platform.h (ENABLE_DFG_JIT): Enable the DFG JIT on the
        x86-64 GNU/Linux platform.
        * CMakeListsEfl.txt: Add JSValue64 implementations to EFL build.

2011-11-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::defineOwnProperty
        https://bugs.webkit.org/show_bug.cgi?id=71429

        Reviewed by Geoffrey Garen.

        Added defineOwnProperty to the MethodTable, changed all the virtual 
        implementations of defineOwnProperty to static ones, and replaced 
        all call sites with corresponding lookups in the MethodTable.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/Arguments.cpp:
        (JSC::Arguments::createStrictModeCallerIfNecessary):
        (JSC::Arguments::createStrictModeCalleeIfNecessary):
        * runtime/ClassInfo.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::defineOwnProperty):
        * runtime/JSCell.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorDefineProperty):
        (JSC::defineProperties):

2011-11-09  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Build system cleanup
        https://bugs.webkit.org/show_bug.cgi?id=71815

        Reviewed by Kenneth Rohde Christiansen.

        * wtf/wtf.pri: Moved the glib dependency to javascriptcore.prf.

2011-11-08  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Replace use of QApplication with QGuiApplication
        https://bugs.webkit.org/show_bug.cgi?id=71794

        Reviewed by Andreas Kling.

        Add compat headers for use when building with Qt 4: QGuiApplication
        is typedef'ed to QApplication.

        * wtf/qt/compat/QGuiApplication: Added.
        * wtf/qt/compat/qguiapplication.h: Added.

2011-11-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r99647.
        http://trac.webkit.org/changeset/99647
        https://bugs.webkit.org/show_bug.cgi?id=71876

        It broke jsc and layout tests on all bot (Requested by
        Ossy_night on #webkit).

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::supportsFloatingPoint):
        (JSC::MacroAssemblerARM::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerARM::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerARM::supportsDoubleBitops):
        (JSC::MacroAssemblerARM::andnotDouble):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::supportsFloatingPoint):
        (JSC::MacroAssemblerARMv7::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerARMv7::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerARMv7::supportsDoubleBitops):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::andnotDouble):
        (JSC::MacroAssemblerMIPS::supportsFloatingPoint):
        (JSC::MacroAssemblerMIPS::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerMIPS::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerMIPS::supportsDoubleBitops):
        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::supportsFloatingPoint):
        (JSC::MacroAssemblerSH4::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerSH4::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerSH4::supportsDoubleBitops):
        (JSC::MacroAssemblerSH4::andnotDouble):
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::MacroAssemblerX86):
        (JSC::MacroAssemblerX86::supportsFloatingPoint):
        (JSC::MacroAssemblerX86::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerX86::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerX86::supportsDoubleBitops):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::andnotDouble):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::supportsFloatingPoint):
        (JSC::MacroAssemblerX86_64::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerX86_64::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerX86_64::supportsDoubleBitops):
        * assembler/X86Assembler.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsic):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/ThunkGenerators.cpp:
        (JSC::absThunkGenerator):
        * runtime/JSGlobalData.cpp:

2011-11-08  Gavin Barraclough  <barraclough@apple.com>

        Better abstract 'abs' operation through the MacroAssembler.
        https://bugs.webkit.org/show_bug.cgi?id=71873

        Reviewed by Geoff Garen.

        Currently the x86 specific instruction sequence to perform a double abs
        is duplicated throughout the JITs / thunk generators.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::supportsFloatingPoint):
        (JSC::MacroAssemblerARM::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerARM::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerARM::supportsFloatingPointAbs):
        (JSC::MacroAssemblerARM::absDouble):
            - Renamed supportsFloatingPointAbs, make these methods static so that
              we can check the JIT's capabilites before we begin compilation.
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::supportsFloatingPoint):
        (JSC::MacroAssemblerARMv7::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerARMv7::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerARMv7::supportsFloatingPointAbs):
            - Renamed supportsFloatingPointAbs, make these methods static so that
              we can check the JIT's capabilites before we begin compilation.
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::absDouble):
        (JSC::MacroAssemblerMIPS::supportsFloatingPoint):
        (JSC::MacroAssemblerMIPS::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerMIPS::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerMIPS::supportsFloatingPointAbs):
            - Renamed supportsFloatingPointAbs, make these methods static so that
              we can check the JIT's capabilites before we begin compilation.
        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::supportsFloatingPoint):
        (JSC::MacroAssemblerSH4::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerSH4::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerSH4::supportsFloatingPointAbs):
        (JSC::MacroAssemblerSH4::absDouble):
            - Renamed supportsFloatingPointAbs, make these methods static so that
              we can check the JIT's capabilites before we begin compilation.
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::absDouble):
        (JSC::MacroAssemblerX86::supportsFloatingPoint):
        (JSC::MacroAssemblerX86::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerX86::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerX86::supportsFloatingPointAbs):
            - Made supports* methods static so that we can check the JIT's
              capabilites before we begin compilation. Added absDouble.
        * assembler/MacroAssemblerX86Common.h:
            - Removed andnotDouble, added s_maskSignBit.
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::absDouble):
        (JSC::MacroAssemblerX86_64::supportsFloatingPoint):
        (JSC::MacroAssemblerX86_64::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerX86_64::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerX86_64::supportsFloatingPointAbs):
            - Made supports* methods static so that we can check the JIT's
              capabilites before we begin compilation. Added absDouble.
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::andpd_rr):
        (JSC::X86Assembler::andpd_mr):
            - Added support for andpd instruction.
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsic):
            - Added checks for supportsFloatingPointAbs, supportsFloatingPointSqrt.
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
            - Switched to use doubleAbs, we can now also reuse the operand register for the result.
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
            - Switched to use doubleAbs, we can now also reuse the operand register for the result.
        * jit/ThunkGenerators.cpp:
            - Switched to use doubleAbs.
        (JSC::absThunkGenerator):
        * runtime/JSGlobalData.cpp:
            - Declared MacroAssemblerX86Common::s_maskSignBit here.
              This is a little ugly, but it doesn't seem worth adding a whole extra .cpp
              to the compile for just one constant.

2011-11-08  Gavin Barraclough  <barraclough@apple.com>

        Move duplicates of SYMBOL_STRING* macros to the single location
        https://bugs.webkit.org/show_bug.cgi?id=71456

        Reviewed by Sam Weinig.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGOperations.cpp:
        * jit/JITStubs.cpp:
        * wtf/InlineASM.h: Added.
            - Moved asm related macros.

2011-11-08  Gavin Barraclough  <barraclough@apple.com>

        Move code to handle 8bit regs from X86Assembler to MacroAssembler
        https://bugs.webkit.org/show_bug.cgi?id=71867

        Reviewed by Oliver Hunt.

        This code is fine, but is in the wrong place really. X86 assembler should
        basically just format up exactly the instruction you request - not expand
        out to a set of instructions (that is what the macro assembler layer is
        for!). For other 8-bit ops, on X86 we don't guard against clients accessing
        the XH registers.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::store8):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::movb_rm):
            - moved some code.

2011-11-08  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed build fix for GTK.

        * GNUmakefile.list.am:

2011-11-08  Gavin Barraclough  <barraclough@apple.com>

        Build fix.

        * assembler/X86Assembler.h:

2011-11-08  Gavin Barraclough  <barraclough@apple.com>

        Errrk, failed to commit this in last change.

        * assembler/X86Assembler.h:

2011-11-08  Gavin Barraclough  <barraclough@apple.com>

        Remove an unused method.

        Rubber stamped by Geoff Garen.

        * assembler/AbstractMacroAssembler.h:
        * assembler/AssemblerBuffer.h:
            - removed rewindToLabel.

2011-11-08  Gavin Barraclough  <barraclough@apple.com>

        Fix OSR entry points to calculate offsets correctly WRT to branch compaction.
        https://bugs.webkit.org/show_bug.cgi?id=71864

        Reviewed by Filip Pizlo.

        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::offsetOf):
            - We use this to return the offsets into the code of the entry points.
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileEntry):
        (JSC::DFG::JITCompiler::compileBody):
        (JSC::DFG::JITCompiler::compile):
        (JSC::DFG::JITCompiler::compileFunction):
            - Move the construction of the speculative JIT outside of
              compileBody, such that it is still available to link the
              OSR entry points at the point we are linking.
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::noticeOSREntry):
            - Pass the label of the block & linkbuffer into noticeOSREntry.
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::linkOSREntries):
            - Moved call to noticeOSREntry until we we linking.
        * dfg/DFGSpeculativeJIT.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):
            - Moved calculation of entries until we we linking.
        * jit/JIT.h:
            - Removed some members.

2011-11-08  Filip Pizlo  <fpizlo@apple.com>

        DFG OSR exit code should be generated by a separate compiler, not
        related to DFG::JITCompiler
        https://bugs.webkit.org/show_bug.cgi?id=71787

        Reviewed by Gavin Barraclough.
        
        Moves the exitSpeculativeWithOSR() method from JITCompiler to
        OSRExitCompiler::compileExit().

        * CMakeListsEfl.txt:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * Target.pri:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::linkOSRExits):
        * dfg/DFGJITCompiler32_64.cpp: Removed.
        * dfg/DFGOSRExitCompiler.h: Added.
        (JSC::DFG::OSRExitCompiler::OSRExitCompiler):
        * dfg/DFGOSRExitCompiler32_64.cpp: Added.
        (JSC::DFG::OSRExitCompiler::compileExit):
        * dfg/DFGOSRExitCompiler64.cpp: Added.
        (JSC::DFG::OSRExitCompiler::compileExit):
        * runtime/JSValue.h:

2011-11-08  Filip Pizlo  <fpizlo@apple.com>

        Basic DFG definitions should be moved out of DFGNode.h
        https://bugs.webkit.org/show_bug.cgi?id=71861

        Rubber-stamped by Gavin Barraclough.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGCommon.h: Added.
        (JSC::DFG::NodeIndexTraits::defaultValue):
        * dfg/DFGNode.h:
        * dfg/DFGOSRExit.h:
        * dfg/DFGRegisterBank.h:

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

        Towards 8 Bit Strings: Templatize JSC::Parser class by Lexer type
        https://bugs.webkit.org/show_bug.cgi?id=71761

        Templatized Parser based on Lexer<T>. Moved two enums,
        SourceElementsMode and FunctionRequirements out of Parser definition
        to work around a clang compiler defect.

        Cleaned up SourceCode data() to return StringImpl* and eliminated
        the recently added stringData() virtual method.

        To keep code in Parser.cpp and keep Parser.h small, the two flavors
        of Parser are explicitly instantiated at the end of Parser.cpp.

        Reviewed by Gavin Barraclough.

        * interpreter/Interpreter.cpp:
        (JSC::appendSourceToError):
        * parser/Lexer.cpp:
        (JSC::::setCode):
        (JSC::::sourceCode):
        * parser/Parser.cpp:
        (JSC::::Parser):
        (JSC::::~Parser):
        (JSC::::parseInner):
        (JSC::::didFinishParsing):
        (JSC::::allowAutomaticSemicolon):
        (JSC::::parseSourceElements):
        (JSC::::parseVarDeclaration):
        (JSC::::parseConstDeclaration):
        (JSC::::parseDoWhileStatement):
        (JSC::::parseWhileStatement):
        (JSC::::parseVarDeclarationList):
        (JSC::::parseConstDeclarationList):
        (JSC::::parseForStatement):
        (JSC::::parseBreakStatement):
        (JSC::::parseContinueStatement):
        (JSC::::parseReturnStatement):
        (JSC::::parseThrowStatement):
        (JSC::::parseWithStatement):
        (JSC::::parseSwitchStatement):
        (JSC::::parseSwitchClauses):
        (JSC::::parseSwitchDefaultClause):
        (JSC::::parseTryStatement):
        (JSC::::parseDebuggerStatement):
        (JSC::::parseBlockStatement):
        (JSC::::parseStatement):
        (JSC::::parseFormalParameters):
        (JSC::::parseFunctionBody):
        (JSC::::parseFunctionInfo):
        (JSC::::parseFunctionDeclaration):
        (JSC::::parseExpressionOrLabelStatement):
        (JSC::::parseExpressionStatement):
        (JSC::::parseIfStatement):
        (JSC::::parseExpression):
        (JSC::::parseAssignmentExpression):
        (JSC::::parseConditionalExpression):
        (JSC::::isBinaryOperator):
        (JSC::::parseBinaryExpression):
        (JSC::::parseProperty):
        (JSC::::parseObjectLiteral):
        (JSC::::parseStrictObjectLiteral):
        (JSC::::parseArrayLiteral):
        (JSC::::parsePrimaryExpression):
        (JSC::::parseArguments):
        (JSC::::parseMemberExpression):
        (JSC::::parseUnaryExpression):
        * parser/Parser.h:
        (JSC::::parse):
        (JSC::parse):
        * parser/SourceCode.h:
        (JSC::SourceCode::data):
        (JSC::SourceCode::subExpression):
        * parser/SourceProvider.h:
        (JSC::UStringSourceProvider::data):

2011-11-08  Gavin Barraclough  <barraclough@apple.com>

        Fix PropertyAccessRecords in DFG JIT to take account of branch compaction.
        https://bugs.webkit.org/show_bug.cgi?id=71855

        Reviewed by Filip Pizlo.

        The DFG JIT presently calculates a set of offsets early, before branches have been compacted.
        This won't work on ARMv7.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::differenceBetweenCodePtr):
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::locationOf):
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::cachedGetById):
        (JSC::DFG::JITCodeGenerator::cachedPutById):
        * dfg/DFGJITCodeGenerator64.cpp:
        (JSC::DFG::JITCodeGenerator::cachedGetById):
        (JSC::DFG::JITCodeGenerator::cachedPutById):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::PropertyAccessRecord::PropertyAccessRecord):
        (JSC::DFG::JITCompiler::addPropertyAccess):

2011-11-08  Gavin Barraclough  <barraclough@apple.com>

        DFG JIT calculation of OSR entry points is not THUMB2 safe
        https://bugs.webkit.org/show_bug.cgi?id=71852

        Reviewed by Oliver Hunt.

        Executable addresses are tagged with a low bit set to distinguish
        between THUMB2 and traditional ARM.

        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGJITCompiler32_64.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        * jit/JITCode.h:
        (JSC::JITCode::executableAddressAtOffset):
        (JSC::JITCode::start):
        (JSC::JITCode::size):

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

        JSC::Parser::Parser leaks Lexer member
        https://bugs.webkit.org/show_bug.cgi?id=71847

        Changed m_lexer member of Parser to be OwnPtr to fix a memory leak.

        Reviewed by Oliver Hunt.

        * parser/Parser.cpp:
        (JSC::Parser::Parser):
        (JSC::Parser::parseFunctionBody):
        * parser/Parser.h:

2011-11-08  Yuqiang Xian  <yuqiang.xian@intel.com>

        Enable DFG JIT by default on X86 Linux and Mac platforms
        https://bugs.webkit.org/show_bug.cgi?id=71686

        Reviewed by Filip Pizlo.

        We can get 9% on SunSpider, 89% on Kraken and 37% on V8, on Linux X86.

        * wtf/Platform.h:

2011-11-08  Yuqiang Xian  <yuqiang.xian@intel.com>

        DFG 32_64 - update make lists for efl, gtk, and Qt ports with DFG change r99519
        https://bugs.webkit.org/show_bug.cgi?id=71768

        Reviewed by Geoffrey Garen.

        Also includes a fix to make the newly introduced AssemblyHelpers
        friend of JSValue as we need the Tag definitions.

        * CMakeListsEfl.txt:
        * GNUmakefile.list.am:
        * Target.pri:
        * runtime/JSValue.h:

2011-11-07  Yuqiang Xian  <yuqiang.xian@intel.com>

        Fix gcc 4.4 compilation warnings in DFG 32_64
        https://bugs.webkit.org/show_bug.cgi?id=71762

        Reviewed by Filip Pizlo.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::registersMatched):

2011-11-07  Filip Pizlo  <fpizlo@apple.com>

        DFG code base should allow for classes not related to DFG::JITCompiler
        to use DFG idioms
        https://bugs.webkit.org/show_bug.cgi?id=71746

        Reviewed by Gavin Barraclough.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGAssemblyHelpers.cpp: Added.
        (JSC::DFG::AssemblyHelpers::decodedCodeMapFor):
        (JSC::DFG::AssemblyHelpers::emitCount):
        (JSC::DFG::AssemblyHelpers::setSamplingFlag):
        (JSC::DFG::AssemblyHelpers::clearSamplingFlag):
        (JSC::DFG::AssemblyHelpers::jitAssertIsInt32):
        (JSC::DFG::AssemblyHelpers::jitAssertIsJSInt32):
        (JSC::DFG::AssemblyHelpers::jitAssertIsJSNumber):
        (JSC::DFG::AssemblyHelpers::jitAssertIsJSDouble):
        (JSC::DFG::AssemblyHelpers::jitAssertIsCell):
        * dfg/DFGAssemblyHelpers.h: Added.
        * dfg/DFGJITCompiler.cpp:
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::JITCompiler):
        (JSC::DFG::JITCompiler::graph):
        * dfg/DFGJITCompiler32_64.cpp:
        * dfg/DFGOSRExit.h: Added.
        (JSC::DFG::SpeculationRecovery::SpeculationRecovery):
        (JSC::DFG::SpeculationRecovery::type):
        (JSC::DFG::SpeculationRecovery::dest):
        (JSC::DFG::SpeculationRecovery::src):
        (JSC::DFG::OSRExit::numberOfRecoveries):
        (JSC::DFG::OSRExit::valueRecovery):
        (JSC::DFG::OSRExit::isArgument):
        (JSC::DFG::OSRExit::isVariable):
        (JSC::DFG::OSRExit::argumentForIndex):
        (JSC::DFG::OSRExit::variableForIndex):
        (JSC::DFG::OSRExit::operandForArgument):
        (JSC::DFG::OSRExit::operandForIndex):
        * dfg/DFGSpeculativeJIT.h:

2011-11-07  Filip Pizlo  <fpizlo@apple.com>

        Switch back to 1+1 value profiling buckets, since it didn't help on arewefastyet,
        but it appears to help on other benchmarks.

        Rubber stamped by Oliver Hunt.

        * bytecode/ValueProfile.h:

2011-11-07  Ariya Hidayat  <ariya@sencha.com>

        "use strict" can not contain escape sequences or line continuation
        https://bugs.webkit.org/show_bug.cgi?id=71532

        Reviewed by Darin Adler.

        Store the actual literal length (before the escapes and line
        continuation are encoded) while parsing the directive and use it
        for the directive comparison.

        * parser/Parser.cpp:
        (JSC::Parser::parseSourceElements):
        (JSC::Parser::parseStatement):
        * parser/Parser.h:

2011-11-06  Filip Pizlo  <fpizlo@apple.com>

        DFG operationCreateThis slow path may get the wrong callee in case of inlining
        https://bugs.webkit.org/show_bug.cgi?id=71647

        Reviewed by Oliver Hunt.
        
        No new tests because I only saw this manifest itself when I had other bugs
        leading to spurious slow path executions.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::callOperation):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-11-07  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::putWithAttributes
        https://bugs.webkit.org/show_bug.cgi?id=71716

        Reviewed by Darin Adler.

        Added putWithAttributes to the MethodTable, changed all the virtual 
        implementations of putWithAttributes to static ones, and replaced 
        all call sites with corresponding lookups in the MethodTable.

        * API/JSObjectRef.cpp:
        (JSObjectSetProperty):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::putWithAttributes):
        * debugger/DebuggerActivation.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        * runtime/ClassInfo.h:
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::putWithAttributes):
        * runtime/JSActivation.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::putWithAttributes):
        * runtime/JSCell.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::putWithAttributes):
        * runtime/JSGlobalObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::putWithAttributes):
        (JSC::putDescriptor):
        * runtime/JSObject.h:
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::putWithAttributes):
        * runtime/JSStaticScopeObject.h:
        * runtime/JSVariableObject.cpp:
        (JSC::JSVariableObject::putWithAttributes):
        * runtime/JSVariableObject.h:

2011-11-07  Dmitry Lomov  <dslomov@google.com>

        Unreviewed. Release build fix.

        * parser/Lexer.cpp:
        (JSC::assertCharIsIn8BitRange):

2011-11-07  Filip Pizlo  <fpizlo@apple.com>

        Switch the value profiler back to 8 buckets, because we suspect that while this
        is more expensive it's also more stable.

        Rubber stamped by Geoff Garen.

        * bytecode/ValueProfile.h:

2011-11-07  Andrew Wason  <rectalogic@rectalogic.com>

        Uninitialized Heap member var
        https://bugs.webkit.org/show_bug.cgi?id=71722

        Reviewed by Filip Pizlo.

        * heap/Heap.cpp:
        (JSC::Heap::Heap): Initialize m_blockFreeingThreadShouldQuit

2011-11-07  Yuqiang Xian  <yuqiang.xian@intel.com>

        DFG 32_64 - registers cannot be reused arbitrarily if speculation failures are possible
        https://bugs.webkit.org/show_bug.cgi?id=71684

        Reviewed by Filip Pizlo.

        Currently in DFG JIT, we try to reuse the physical register of an
        operand for temporary usage if the current use of the operand is the
        last use. But sometimes this can be wrong, for example if there are
        possible speculation failures and we need to fallback to baseline JIT,
        the value of the operand which is supposed to be hold in the physical
        register can be modified by register reusing. The fixes the last
        inspector failures in layout test on Mac 32-bit if switching on DFG.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
        (JSC::DFG::SpeculativeJIT::compile):

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

        REGRESSION(r99436): Broke Snow Leopard debug build
        https://bugs.webkit.org/show_bug.cgi?id=71713

        Reviewed by Darin Adler.

        Put the assertion in a template and use template specialization
        to avoid warning when instantiated with UChar or LChar.

        In the long term, we should have traits for unsigned integral types
        and use that to specialize template instead of specializing it for UChar and LChar.

        * parser/Lexer.cpp:
        (JSC::assertCharIsIn8BitRange):
        (JSC::::append8):

2011-11-07  ChangSeok Oh  <shivamidow@gmail.com>

        [EFL] Support requestAnimationFrame API
        https://bugs.webkit.org/show_bug.cgi?id=67112

        Reviewed by Andreas Kling.

        Let EFL port use REQUEST_ANIMATION_FRAME_TIMER.

        * wtf/Platform.h:

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

        Towards 8 Bit Strings: Templatize JSC::Lexer class by character type
        https://bugs.webkit.org/show_bug.cgi?id=71331

        Change the Lexer class to be a template class based on the character
        type of the source.  In the process updated the parseIdentifier()
        and parseString() methods to create 8 bit strings where possible.
        Also added some helper methods for accumulating temporary string
        data in the 8 and 16 bit vectors.

        Changed the SourceProvider::data() virtual method to return a
        StringImpl* instead of a UChar*.

        Updated the KeywordLookup generator to create code to match keywords
        for both 8 and 16 bit source strings.

        Due to a compiler bug (<rdar://problem/10194295>) moved enum
        definition outside of Lexer class declaration.  Remove second enum
        no longer needed.

        Reviewed by Darin Adler.

        * KeywordLookupGenerator.py:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::callEval):
        * parser/Lexer.cpp:
        (JSC::::Lexer):
        (JSC::::~Lexer):
        (JSC::::getInvalidCharMessage):
        (JSC::::currentCharacter):
        (JSC::::setCode):
        (JSC::::internalShift):
        (JSC::::shift):
        (JSC::::peek):
        (JSC::::getUnicodeCharacter):
        (JSC::::shiftLineTerminator):
        (JSC::::lastTokenWasRestrKeyword):
        (JSC::::record8):
        (JSC::::append8):
        (JSC::::append16):
        (JSC::::record16):
        (JSC::::parseIdentifier):
        (JSC::::parseIdentifierSlowCase):
        (JSC::::parseString):
        (JSC::::parseStringSlowCase):
        (JSC::::parseHex):
        (JSC::::parseOctal):
        (JSC::::parseDecimal):
        (JSC::::parseNumberAfterDecimalPoint):
        (JSC::::parseNumberAfterExponentIndicator):
        (JSC::::parseMultilineComment):
        (JSC::::nextTokenIsColon):
        (JSC::::lex):
        (JSC::::scanRegExp):
        (JSC::::skipRegExp):
        (JSC::::clear):
        (JSC::::sourceCode):
        * parser/Lexer.h:
        (JSC::Lexer::append16):
        (JSC::Lexer::currentOffset):
        (JSC::Lexer::setOffsetFromCharOffset):
        (JSC::::isWhiteSpace):
        (JSC::::isLineTerminator):
        (JSC::::convertHex):
        (JSC::::convertUnicode):
        (JSC::::makeIdentifier):
        (JSC::::setCodeStart):
        (JSC::::makeIdentifierLCharFromUChar):
        (JSC::::lexExpectIdentifier):
        * parser/Parser.cpp:
        (JSC::Parser::Parser):
        (JSC::Parser::parseProperty):
        (JSC::Parser::parseMemberExpression):
        * parser/Parser.h:
        (JSC::Parser::next):
        (JSC::Parser::nextExpectIdentifier):
        * parser/ParserArena.h:
        (JSC::IdentifierArena::makeIdentifier):
        (JSC::IdentifierArena::makeIdentifierLCharFromUChar):
        * parser/SourceCode.h:
        (JSC::SourceCode::subExpression):
        * parser/SourceProvider.h:
        (JSC::UStringSourceProvider::stringData):
        * parser/SourceProviderCache.h:
        * parser/SyntaxChecker.h:
        * runtime/FunctionPrototype.cpp:
        (JSC::insertSemicolonIfNeeded):
        * runtime/Identifier.cpp:
        (JSC::IdentifierTable::add):
        (JSC::IdentifierLCharFromUCharTranslator::hash):
        (JSC::IdentifierLCharFromUCharTranslator::equal):
        (JSC::IdentifierLCharFromUCharTranslator::translate):
        (JSC::Identifier::add8):
        * runtime/Identifier.h:
        (JSC::Identifier::Identifier):
        (JSC::Identifier::createLCharFromUChar):
        (JSC::Identifier::canUseSingleCharacterString):
        (JSC::IdentifierCharBufferTranslator::hash):
        (JSC::IdentifierCharBufferTranslator::equal):
        (JSC::IdentifierCharBufferTranslator::translate):
        (JSC::Identifier::add):
        (JSC::Identifier::equal):
        (JSC::IdentifierTable::add):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::decode):
        (JSC::parseIntOverflow):
        (JSC::globalFuncUnescape):
        * runtime/JSGlobalObjectFunctions.h:
        (JSC::parseIntOverflow):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::tryJSONPParse):
        (JSC::LiteralParser::Lexer::lexString):
        * wtf/text/StringImpl.h:

2011-11-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Put the jsc binary in 'bin' instead of leaving it deep in the build tree

        Allows us to not package up the whole Source/JavaScriptCore directory for the
        buildbots.

        Reviewed-by Simon Hausmann.

        * jsc.pro:

2011-11-06  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION(r99374): GTK+ build of the jsc binary doesn't like the call
        to initializeMainThread, and crashes
        https://bugs.webkit.org/show_bug.cgi?id=71643

        Reviewed by Sam Weinig.

        * jsc.cpp:
        (main):

2011-11-06  Sam Weinig  <sam@webkit.org>

        Add space missing from some class declarations
        https://bugs.webkit.org/show_bug.cgi?id=71632

        Reviewed by Anders Carlsson.

        * assembler/AssemblerBufferWithConstantPool.h:
        * bytecode/CodeBlock.h:
        * dfg/DFGVariableAccessData.h:
        * heap/VTableSpectrum.h:
        * jit/ExecutableAllocator.cpp:
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        * wtf/MetaAllocatorHandle.h:
        * wtf/UnionFind.h:

2011-11-06  Sam Weinig  <sam@webkit.org>

        Allow use of FINAL in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=71630

        Reviewed by Anders Carlsson.

        * Configurations/Base.xcconfig:
        Don't warn about C++11 extensions used in C++98 mode.

2011-11-05  Filip Pizlo  <fpizlo@apple.com>

        Value profiling should just use two buckets
        https://bugs.webkit.org/show_bug.cgi?id=71619

        Reviewed by Gavin Barraclough.
        
        Added one more configuration options (like Heuristics::minimumOptimizationDelay),
        improved debugging in JIT optimization support, changed the number of buckets
        in the value profile from 9 to 2, and wrote a more optimal value profiling path
        in the old JIT to take advantage of this. It's still possible to play around with
        larger numbers of buckets, and we should probably keep this for a little while
        until we convince ourselves that using just two buckets is the right call.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::shouldOptimizeNow):
        * bytecode/ValueProfile.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitValueProfilingSite):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Heuristics.cpp:
        (JSC::Heuristics::initializeHeuristics):
        * runtime/Heuristics.h:

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

        JSC should be able to sample itself in a more flexible way than just sampling flags
        https://bugs.webkit.org/show_bug.cgi?id=71522

        Reviewed by Gavin Barraclough.
        
        Added a construct that looks like SamplingRegion samplingRegion("name").

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/SamplingTool.cpp:
        (JSC::SamplingRegion::Locker::Locker):
        (JSC::SamplingRegion::Locker::~Locker):
        (JSC::SamplingRegion::sample):
        (JSC::SamplingRegion::dump):
        (JSC::SamplingRegion::dumpInternal):
        (JSC::SamplingThread::threadStartFunc):
        * bytecode/SamplingTool.h:
        (JSC::SamplingRegion::SamplingRegion):
        (JSC::SamplingRegion::~SamplingRegion):
        (JSC::SamplingRegion::exchangeCurrent):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * heap/Heap.cpp:
        (JSC::Heap::markRoots):
        (JSC::Heap::collect):
        * heap/VTableSpectrum.cpp:
        (JSC::VTableSpectrum::countVPtr):
        (JSC::VTableSpectrum::dump):
        * heap/VTableSpectrum.h:
        * jsc.cpp:
        (main):
        (runWithScripts):
        * parser/Parser.h:
        (JSC::parse):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        * wtf/Atomics.h:
        (WTF::weakCompareAndSwap):
        * wtf/Platform.h:
        * wtf/Spectrum.h: Added.
        (WTF::Spectrum::Spectrum):
        (WTF::Spectrum::add):
        (WTF::Spectrum::get):
        (WTF::Spectrum::begin):
        (WTF::Spectrum::end):
        (WTF::Spectrum::KeyAndCount::KeyAndCount):
        (WTF::Spectrum::KeyAndCount::operator<):
        (WTF::Spectrum::buildList):
        * wtf/wtf.pri:

2011-11-05  Sam Weinig  <sam@webkit.org>

        Fix windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-11-04  Sam Weinig  <sam@webkit.org>

        Reduce the number of putWithAttributes
        https://bugs.webkit.org/show_bug.cgi?id=71597

        Reviewed by Adam Roben.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        Remove exports of removed functions.

        * runtime/JSActivation.cpp:
        (JSC::JSActivation::putWithAttributes):
        Calling the overload without the extra parameters does the same thing.

        * runtime/JSObject.cpp:
        (JSC::JSObject::putWithAttributes):
        * runtime/JSObject.h:
        Remove four unused JSObject::putWithAttributes overloads and make one of the remaining
        two overloads not virtual, since no one overrides it.

2011-11-04  Pratik Solanki  <psolanki@apple.com>

        sqrtDouble and andnotDouble should be declared noreturn
        https://bugs.webkit.org/show_bug.cgi?id=71592

        Reviewed by Sam Weinig.

        * assembler/MacroAssemblerARMv7.h:

2011-11-04  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::hasInstance
        https://bugs.webkit.org/show_bug.cgi?id=71430

        Reviewed by Darin Adler.

        Added hasInstance to the MethodTable, changed all the virtual 
        implementations of hasInstance to static ones, and replaced 
        all call sites with corresponding lookups in the MethodTable.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::hasInstance):
        * API/JSValueRef.cpp:
        (JSValueIsInstanceOfConstructor):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/ClassInfo.h:
        * runtime/JSBoundFunction.cpp:
        (JSC::JSBoundFunction::hasInstance):
        * runtime/JSBoundFunction.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::hasInstance):
        * runtime/JSCell.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::hasInstance):
        * runtime/JSObject.h:

2011-11-04  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Refactor and clean up the qmake build system

        The qmake build system has accumulated a bit of cruft and redundancy
        over time. There's also a fairly tight coupling between how to build
        the various targets, and _what_ to build, making it harder to add new
        rules or sources. This patch aims to elevate these issues somewhat.

        This is a short-list of the changes:

          * The rules for how to build targets are now mostly contained as
            prf-files in Tools/qmake/mkspecs/features. Using mkspecs also
            allows us to do pre- and post-processing of each project file,
            which helps to clean up the actual project files.

          * Derived sources are no longer generated as a separate make-step
            but is part of each target's project file as a subdir. Makefile
            rules are used to ensure that we run make on the derived sources
            before running qmake on the actual target makefile. This makes
            it easier to keep a proper dependency between derived sources
            and the target.

          * We use GNU make and the compiler to generate dependencies on
            UNIX-based systems running Qt 5. This allows us to lessen the
            need to run qmake, which should reduce compile time.

          * WebKit2 is now build by default if building with Qt 5. It can
            be disabled by passing --no-webkit2 to build-webkit.

        The result of these changes are hopefully a cleaner and easier
        build system to modify, and faster build times due to no longer
        running qmake on every single build. It's also a first step
        towards possibly generating the list of sources using another
        build system.

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

        Reviewed by Simon Hausmann.

        * DerivedSources.pri: Added.
        * DerivedSources.pro: Removed.
        * JavaScriptCore.pro:
        * Target.pri: Copied from Source/JavaScriptCore/JavaScriptCore.pro.
        * headers.pri: Removed.
        * jsc.pro:
        * wtf/wtf.pri:
        * yarr/yarr.pri:

2011-11-04  Yuqiang Xian  <yuqiang.xian@intel.com>

        More code clean-up in DFG 32_64
        https://bugs.webkit.org/show_bug.cgi?id=71540

        Remove unnecessary code duplications, and fix compilation warnings.

        Reviewed by Gavin Barraclough.

        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::emitCount):
        (JSC::DFG::JITCompiler::setSamplingFlag):
        (JSC::DFG::JITCompiler::clearSamplingFlag):
        (JSC::DFG::JITCompiler::jitAssertIsCell):
        * dfg/DFGJITCompiler32_64.cpp:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-11-04  Csaba Osztrogonác  <ossy@webkit.org>

        De-virtualize JSObject::hasInstance
        https://bugs.webkit.org/show_bug.cgi?id=71430

        Unreviewed rolling out r99238, because it made a test crash on all platform.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::hasInstance):
        * API/JSValueRef.cpp:
        (JSValueIsInstanceOfConstructor):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/ClassInfo.h:
        * runtime/JSBoundFunction.cpp:
        (JSC::JSBoundFunction::hasInstance):
        * runtime/JSBoundFunction.h:
        * runtime/JSCell.cpp:
        * runtime/JSCell.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::hasInstance):
        * runtime/JSObject.h:

2011-11-03  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::getPropertyNames
        https://bugs.webkit.org/show_bug.cgi?id=71306

        Reviewed by Darin Adler.

        Added getPropertyNames to the MethodTable, changed all the virtual 
        implementations of getPropertyNames to static ones, and replaced 
        all call sites with corresponding lookups in the MethodTable.

        * API/JSObjectRef.cpp:
        (JSObjectCopyPropertyNames):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::getOwnPropertyNames):
        * runtime/ClassInfo.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::getPropertyNames):
        * runtime/JSCell.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::getPropertyNames):
        (JSC::JSObject::getOwnPropertyNames):
        * runtime/JSObject.h:
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::create):
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::print):
        * runtime/Structure.cpp:
        (JSC::Structure::getPropertyNamesFromStructure):
        * runtime/Structure.h:

2011-11-03  Darin Adler  <darin@apple.com>

        Change remaining callers of releaseRef to call leakRef
        https://bugs.webkit.org/show_bug.cgi?id=71422

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

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

        Change remaining callers of releaseRef to call leakRef
        https://bugs.webkit.org/show_bug.cgi?id=71422

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

2011-11-03  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::hasInstance
        https://bugs.webkit.org/show_bug.cgi?id=71430

        Reviewed by Darin Adler.

        Added hasInstance to the MethodTable, changed all the virtual 
        implementations of hasInstance to static ones, and replaced 
        all call sites with corresponding lookups in the MethodTable.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::hasInstance):
        * API/JSValueRef.cpp:
        (JSValueIsInstanceOfConstructor):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/ClassInfo.h:
        * runtime/JSBoundFunction.cpp:
        (JSC::JSBoundFunction::hasInstance):
        * runtime/JSBoundFunction.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::hasInstance):
        * runtime/JSCell.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::hasInstance):
        * runtime/JSObject.h:

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

        JIT-specific code should be able to refer to register types even on JIT-disabled builds
        https://bugs.webkit.org/show_bug.cgi?id=71498

        Reviewed by Gavin Barraclough.

        * assembler/MacroAssembler.h:
        (MacroAssembler::MacroAssembler):

2011-11-03  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::className
        https://bugs.webkit.org/show_bug.cgi?id=71428

        Reviewed by Sam Weinig.

        Added className to the MethodTable, changed all the virtual 
        implementations of className to static ones, and replaced 
        all call sites with corresponding lookups in the MethodTable.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::className):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::className):
        * debugger/DebuggerActivation.h:
        * jsc.cpp:
        (GlobalObject::createStructure):
        * profiler/Profiler.cpp:
        (JSC::Profiler::createCallIdentifier):
        * runtime/ClassInfo.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::className):
        * runtime/JSCell.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::className):
        * runtime/JSObject.h:
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncToString):
        * testRegExp.cpp:
        (GlobalObject::createStructure):

2011-11-02  Jer Noble  <jer.noble@apple.com>

        Add Clock class and platform-specific implementations.
        https://bugs.webkit.org/show_bug.cgi?id=71341

        Reviewed by Sam Weinig.

        Add WTF_USE_COREAUDIO macro for use by PlatformClockCA.

        * wtf/Platform.h:

2011-11-03  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: fixing win build. step2.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-11-03  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: fix windows build, step1

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-11-03  Pavel Feldman  <pfeldman@google.com>

        Web Inspector: preserve script location for inline handlers.
        https://bugs.webkit.org/show_bug.cgi?id=71367

        Makes SourceCode factories receive TextPosition instead of the line number;
        Stores consistent position values in SourceCode and SourceProvider;

        Reviewed by Yury Semikhatsky.

        * API/JSBase.cpp:
        (JSEvaluateScript):
        (JSCheckScriptSyntax):
        * API/JSObjectRef.cpp:
        (JSObjectMakeFunction):
        * parser/SourceCode.h:
        (JSC::makeSource):
        * parser/SourceProvider.h:
        (JSC::SourceProvider::SourceProvider):
        (JSC::SourceProvider::startPosition):
        (JSC::UStringSourceProvider::create):
        (JSC::UStringSourceProvider::UStringSourceProvider):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/FunctionConstructor.h:

2011-11-03  Kentaro Hara  <haraken@chromium.org>

        Fixed wrong implementation of doubleValue % 2^{64}.
        https://bugs.webkit.org/show_bug.cgi?id=67980

        Reviewed by Hajime Morita.

        fast/events/constructors/progress-event-constructor.html was failing
        because of the wrong implementation of conversion from an ECMAScript value
        to an IDL unsigned long long value (Spec: http://www.w3.org/TR/WebIDL/#es-unsigned-long-long).
        In particular, the calculation of doubleValue % 2^{64} was wrong.
        This patch implemented it correctly in doubleToInteger() in wtf/MathExtras.h.

        * wtf/MathExtras.h:
        (doubleToInteger): Implemented the spec correctly.

2011-11-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r99089.
        http://trac.webkit.org/changeset/99089
        https://bugs.webkit.org/show_bug.cgi?id=71448

        @plt postfix for math functions cause crash on Linux 32 (the
        symbol is defined but it points to NULL) (Requested by
        zherczeg on #webkit).

        * dfg/DFGOperations.cpp:
        * jit/JITStubs.cpp:
        * jit/ThunkGenerators.cpp:

2011-11-02  Filip Pizlo  <fpizlo@apple.com>

        DFG inlining breaks function.arguments[something] if the argument being
        retrieved was subjected to DFG's unboxing optimizations
        https://bugs.webkit.org/show_bug.cgi?id=71436

        Reviewed by Oliver Hunt.
        
        This makes inlined arguments retrieval use some of the same machinery as
        OSR to determine where from, and how, to retrieve a value that the DFG
        might have somehow squirreled away while the old JIT would put it in its
        obvious location, using an obvious format.
        
        To that end, previously DFG-internal notions such as DataFormat,
        VirtualRegister, and ValueRecovery are now in bytecode/ since they are
        stored as part of InlineCallFrames.

        * bytecode/CodeOrigin.h:
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGJITCompiler32_64.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGNode.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::trueCallerFrame):
        * interpreter/CallFrame.h:
        (JSC::ExecState::inlineCallFrame):
        * interpreter/Register.h:
        (JSC::Register::asInlineCallFrame):
        (JSC::Register::unboxedInt32):
        (JSC::Register::unboxedBoolean):
        (JSC::Register::unboxedCell):
        * runtime/Arguments.h:
        (JSC::Arguments::finishCreationAndCopyRegisters):

2011-11-02  Filip Pizlo  <fpizlo@apple.com>

        ValueRecovery should be moved out of the DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=71439

        Reviewed by Oliver Hunt.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/DataFormat.h: Added.
        (JSC::dataFormatToString):
        (JSC::needDataFormatConversion):
        (JSC::isJSFormat):
        (JSC::isJSInteger):
        (JSC::isJSDouble):
        (JSC::isJSCell):
        (JSC::isJSBoolean):
        * bytecode/ValueRecovery.h: Added.
        (JSC::ValueRecovery::ValueRecovery):
        (JSC::ValueRecovery::alreadyInRegisterFile):
        (JSC::ValueRecovery::alreadyInRegisterFileAsUnboxedInt32):
        (JSC::ValueRecovery::alreadyInRegisterFileAsUnboxedCell):
        (JSC::ValueRecovery::alreadyInRegisterFileAsUnboxedBoolean):
        (JSC::ValueRecovery::inGPR):
        (JSC::ValueRecovery::inPair):
        (JSC::ValueRecovery::inFPR):
        (JSC::ValueRecovery::displacedInRegisterFile):
        (JSC::ValueRecovery::constant):
        (JSC::ValueRecovery::technique):
        (JSC::ValueRecovery::isInRegisters):
        (JSC::ValueRecovery::gpr):
        (JSC::ValueRecovery::tagGPR):
        (JSC::ValueRecovery::payloadGPR):
        (JSC::ValueRecovery::fpr):
        (JSC::ValueRecovery::virtualRegister):
        (JSC::ValueRecovery::dump):
        * bytecode/VirtualRegister.h: Added.
        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::GenerationInfo::isJSFormat):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::ValueSource::dump):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGVariableAccessData.h:

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

        Object.getOwnPropertyDescriptor() does not retrieve the getter/setter from a property on the window that has been overridden with a getter/setter
        https://bugs.webkit.org/show_bug.cgi?id=71333

        Reviewed by Gavin Barraclough.

        Tested by fast/dom/getter-on-window-object2.html

        * runtime/PropertyDescriptor.cpp:
        (JSC::PropertyDescriptor::setDescriptor):
        The attributes returned from Structure::get do not include Getter or Setter, so
        instead check if the value is a GetterSetter like we do elsewhere. If it is, update
        the descriptor's attributes accordingly.

2011-11-02  Yuqiang Xian  <yuqiang.xian@intel.com>

        FunctionPtr should accept FASTCALL functions on X86
        https://bugs.webkit.org/show_bug.cgi?id=71434

        Reviewed by Filip Pizlo.

        On X86 we sometimes use FASTCALL convention functions, for example the
        cti functions, and we may need the pointers to such functions, e.g.,
        in current DFG register file check and arity check, though long term
        we may avoid such usage of cti calls in DFG.

        * assembler/MacroAssemblerCodeRef.h:
        (JSC::FunctionPtr::FunctionPtr):

2011-11-02  Filip Pizlo  <fpizlo@apple.com>

        Inlined uses of the global object should use the right global object
        https://bugs.webkit.org/show_bug.cgi?id=71427

        Reviewed by Oliver Hunt.

        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::globalObjectFor):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-11-02  Yuqiang Xian  <yuqiang.xian@intel.com>

        Remove some unnecessary loads/stores in DFG JIT 32_64
        https://bugs.webkit.org/show_bug.cgi?id=71090

        Reviewed by Filip Pizlo.

        In fillSpeculateCell and OSR exit, some unnecessary loads/stores can
        be eliminated.

        * dfg/DFGJITCompiler32_64.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):

2011-11-02  Adam Klein  <adamk@chromium.org>

        Replace usage of StringImpl with String where possible in CharacterData and Text
        https://bugs.webkit.org/show_bug.cgi?id=71383

        Reviewed by Darin Adler.

        * wtf/text/WTFString.h:
        (WTF::String::containsOnlyWhitespace): Added new method.

2011-11-02  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::getOwnPropertyNames
        https://bugs.webkit.org/show_bug.cgi?id=71307

        Reviewed by Darin Adler.

        Added getOwnPropertyNames to the MethodTable, changed all the virtual 
        implementations of getOwnPropertyNames to static ones, and replaced 
        all call sites with corresponding lookups in the MethodTable.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::getOwnPropertyNames):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::getOwnPropertyNames):
        * debugger/DebuggerActivation.h:
        * runtime/Arguments.cpp:
        (JSC::Arguments::getOwnPropertyNames):
        * runtime/Arguments.h:
        * runtime/ClassInfo.h:
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::getOwnPropertyNames):
        * runtime/JSActivation.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertyNames):
        * runtime/JSArray.h:
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::getOwnPropertyNames):
        * runtime/JSByteArray.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::getOwnPropertyNames):
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertyNames):
        * runtime/JSFunction.h:
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::getOwnPropertyNames):
        * runtime/JSNotAnObject.h:
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Holder::appendNextProperty):
        (JSC::Walker::walk):
        * runtime/JSObject.cpp:
        (JSC::JSObject::getPropertyNames):
        (JSC::JSObject::getOwnPropertyNames):
        * runtime/JSObject.h:
        * runtime/JSVariableObject.cpp:
        (JSC::JSVariableObject::~JSVariableObject):
        (JSC::JSVariableObject::getOwnPropertyNames):
        * runtime/JSVariableObject.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorGetOwnPropertyNames):
        (JSC::objectConstructorKeys):
        (JSC::defineProperties):
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::getOwnPropertyNames):
        * runtime/StringObject.cpp:
        (JSC::StringObject::getOwnPropertyNames):
        * runtime/StringObject.h:
        * runtime/Structure.h:

2011-11-02  Dean Jackson  <dino@apple.com>

        Add ENABLE_CSS_SHADERS flag
        https://bugs.webkit.org/show_bug.cgi?id=71394

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2011-11-02  Alexey Shabalin  <a.shabalin@gmail.com>

        TEXTREL in libjavascriptcoregtk-1.0.so.0.11.0 on x86 (or i586)
        https://bugs.webkit.org/show_bug.cgi?id=70610

        Reviewed by Martin Robinson.

        Properly annotate ASM on BSD and Linux x86 systems.

        * dfg/DFGOperations.cpp: Add annotation for X86.
        * jit/JITStubs.cpp: Ditto.
        * jit/ThunkGenerators.cpp: Ditto.

2011-11-02  Xianzhu Wang  <wangxianzhu@chromium.org>

        Missing Force8BitConstructor in 8-bit version of StringImpl::reallocate()
        https://bugs.webkit.org/show_bug.cgi?id=71347

        Reviewed by Geoffrey Garen.

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

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

        Cut down on malloc/free a bit in the parser arena
        https://bugs.webkit.org/show_bug.cgi?id=71343

        Reviewed by Oliver Hunt.

        * parser/ParserArena.cpp:
        (JSC::ParserArena::deallocateObjects): Call the destructors of
        the deletable objects before freeing the pools. Don't call
        fastFree on the deletable objects any more.

        * parser/ParserArena.h:
        (JSC::ParserArena::allocateDeletable): Use allocateFreeable
        instead of fastMalloc here.

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

        Implement __lookupGetter__/__lookupSetter__ in terms of getPropertyDescriptor
        https://bugs.webkit.org/show_bug.cgi?id=71336

        Reviewed by Darin Adler.

        * debugger/DebuggerActivation.cpp:
        * debugger/DebuggerActivation.h:
        Remove overrides of lookupGetter/lookupSetter, which are no longer needed
        due to implementing getPropertyDescriptor.

        * runtime/JSObject.cpp:
        (JSC::JSObject::lookupGetter):
        (JSC::JSObject::lookupSetter):
        * runtime/JSObject.h:
        De-virtualize lookupGetter/lookupSetter, and implement them in terms of
        getPropertyDescriptor.

2011-11-01  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::defineSetter
        https://bugs.webkit.org/show_bug.cgi?id=71303

        Reviewed by Darin Adler.

        Added defineSetter to the MethodTable, changed all the virtual 
        implementations of defineSetter to static ones, and replaced 
        all call sites with corresponding lookups in the MethodTable.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::defineSetter):
        * debugger/DebuggerActivation.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/ClassInfo.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::defineSetter):
        * runtime/JSCell.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::defineSetter):
        * runtime/JSGlobalObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::defineSetter):
        (JSC::putDescriptor):
        * runtime/JSObject.h:
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncDefineSetter):

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

        DFG inlining breaks function.arguments
        https://bugs.webkit.org/show_bug.cgi?id=71329

        Reviewed by Oliver Hunt.
        
        The DFG was forgetting to store code origin mappings for inlined
        call sites. Some of the fast-path optimizations for
        CallFrame::trueCallerFrame() were wrong. An assertion in Arguments
        was wrong.
        
        I also took the opportunity to decrease code duplication between
        DFG64 and DFG32_64, because I didn't feel like writing the same
        code twice.

        * bytecode/CodeBlock.h:
        (JSC::ExecState::isInlineCallFrame):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileEntry):
        (JSC::DFG::JITCompiler::compileBody):
        (JSC::DFG::JITCompiler::link):
        (JSC::DFG::JITCompiler::compile):
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGJITCompiler32_64.cpp:
        * dfg/DFGNode.h:
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::trueCallerFrame):
        * interpreter/CallFrame.h:
        * runtime/Arguments.h:
        (JSC::Arguments::getArgumentsData):

2011-11-01  Xianzhu Wang  <wangxianzhu@chromium.org>

        StringImpl::reallocate() should have a 8-bit version
        https://bugs.webkit.org/show_bug.cgi?id=71210

        Reviewed by Geoffrey Garen.

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

2011-10-31  Filip Pizlo  <fpizlo@apple.com>

        The GC should be parallel
        https://bugs.webkit.org/show_bug.cgi?id=70995

        Reviewed by Geoff Garen.
        
        Added parallel tracing to the GC. This works by having local mark
        stacks per thread, and a global shared one. Threads sometimes
        donate cells from the mark stack to the global one if the heuristics
        tell them that it's affordable to do so. Threads that have depleted
        their local mark stacks try to steal some from the shared one.

        Marking is now done using an atomic weak relaxed CAS (compare-and-swap).
        
        This is a 23% speed-up on V8-splay when I use 4 marking threads,
        leading to a 3.5% speed-up on V8.
        
        It also appears that this reduces GC pause times on real websites by
        more than half.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::~Heap):
        (JSC::Heap::markRoots):
        * heap/Heap.h:
        * heap/MarkStack.cpp:
        (JSC::MarkStackSegmentAllocator::MarkStackSegmentAllocator):
        (JSC::MarkStackSegmentAllocator::~MarkStackSegmentAllocator):
        (JSC::MarkStackSegmentAllocator::allocate):
        (JSC::MarkStackSegmentAllocator::release):
        (JSC::MarkStackSegmentAllocator::shrinkReserve):
        (JSC::MarkStackArray::MarkStackArray):
        (JSC::MarkStackArray::~MarkStackArray):
        (JSC::MarkStackArray::expand):
        (JSC::MarkStackArray::refill):
        (JSC::MarkStackArray::donateSomeCellsTo):
        (JSC::MarkStackArray::stealSomeCellsFrom):
        (JSC::MarkStackThreadSharedData::markingThreadMain):
        (JSC::MarkStackThreadSharedData::markingThreadStartFunc):
        (JSC::MarkStackThreadSharedData::MarkStackThreadSharedData):
        (JSC::MarkStackThreadSharedData::~MarkStackThreadSharedData):
        (JSC::MarkStackThreadSharedData::reset):
        (JSC::MarkStack::reset):
        (JSC::SlotVisitor::donateSlow):
        (JSC::SlotVisitor::drain):
        (JSC::SlotVisitor::drainFromShared):
        (JSC::MarkStack::mergeOpaqueRoots):
        (JSC::SlotVisitor::harvestWeakReferences):
        * heap/MarkStack.h:
        (JSC::MarkStackSegment::data):
        (JSC::MarkStackSegment::capacityFromSize):
        (JSC::MarkStackSegment::sizeFromCapacity):
        (JSC::MarkStackArray::postIncTop):
        (JSC::MarkStackArray::preDecTop):
        (JSC::MarkStackArray::setTopForFullSegment):
        (JSC::MarkStackArray::setTopForEmptySegment):
        (JSC::MarkStackArray::top):
        (JSC::MarkStackArray::validatePrevious):
        (JSC::MarkStack::addWeakReferenceHarvester):
        (JSC::MarkStack::mergeOpaqueRootsIfNecessary):
        (JSC::MarkStack::mergeOpaqueRootsIfProfitable):
        (JSC::MarkStack::MarkStack):
        (JSC::MarkStack::addOpaqueRoot):
        (JSC::MarkStack::containsOpaqueRoot):
        (JSC::MarkStack::opaqueRootCount):
        (JSC::MarkStackArray::append):
        (JSC::MarkStackArray::canRemoveLast):
        (JSC::MarkStackArray::removeLast):
        (JSC::MarkStackArray::isEmpty):
        (JSC::MarkStackArray::canDonateSomeCells):
        (JSC::MarkStackArray::size):
        (JSC::ParallelModeEnabler::ParallelModeEnabler):
        (JSC::ParallelModeEnabler::~ParallelModeEnabler):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::testAndSetMarked):
        * heap/SlotVisitor.h:
        (JSC::SlotVisitor::donate):
        (JSC::SlotVisitor::donateAndDrain):
        (JSC::SlotVisitor::donateKnownParallel):
        (JSC::SlotVisitor::SlotVisitor):
        * heap/WeakReferenceHarvester.h:
        * runtime/Heuristics.cpp:
        (JSC::Heuristics::initializeHeuristics):
        * runtime/Heuristics.h:
        * wtf/Atomics.h:
        (WTF::weakCompareAndSwap):
        * wtf/Bitmap.h:
        (WTF::::Bitmap):
        (WTF::::get):
        (WTF::::set):
        (WTF::::testAndSet):
        (WTF::::testAndClear):
        (WTF::::concurrentTestAndSet):
        (WTF::::concurrentTestAndClear):
        (WTF::::clear):
        (WTF::::clearAll):
        (WTF::::nextPossiblyUnset):
        (WTF::::findRunOfZeros):
        (WTF::::count):
        (WTF::::isEmpty):
        (WTF::::isFull):
        * wtf/MainThread.h:
        (WTF::isMainThreadOrGCThread):
        * wtf/Platform.h:
        * wtf/ThreadSpecific.h:
        (WTF::::isSet):
        * wtf/mac/MainThreadMac.mm:
        (WTF::initializeGCThreads):
        (WTF::initializeMainThreadPlatform):
        (WTF::initializeMainThreadToProcessMainThreadPlatform):
        (WTF::registerGCThread):
        (WTF::isMainThreadOrGCThread):

2011-10-31  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::defaultValue
        https://bugs.webkit.org/show_bug.cgi?id=71146

        Reviewed by Sam Weinig.

        Added defaultValue to the MethodTable.  Replaced all virtual versions of 
        defaultValue with static versions.  Replaced all call sites with lookups in the 
        MethodTable.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/ClassInfo.h:
        * runtime/ExceptionHelpers.cpp:
        (JSC::InterruptedExecutionError::defaultValue):
        (JSC::TerminatedExecutionError::defaultValue):
        * runtime/ExceptionHelpers.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::defaultValue):
        * runtime/JSCell.h:
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::defaultValue):
        * runtime/JSNotAnObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::getPrimitiveNumber):
        (JSC::JSObject::defaultValue):
        * runtime/JSObject.h:
        (JSC::JSObject::toPrimitive):

2011-10-31  Mark Hahnenberg  <mhahnenberg@apple.com>

        Interpreter build fix

        Unreviewed build fix

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):

2011-10-31  Filip Pizlo  <fpizlo@apple.com>

        DFG OSR exits should add to value profiles
        https://bugs.webkit.org/show_bug.cgi?id=71202

        Reviewed by Oliver Hunt.
        
        Value profiles now have an extra special slot not used by the old JIT's
        profiling, which is reserved for OSR exits.
        
        The DFG's OSR exit code now knows which register, node index, and value
        profiling site was responsible for the (possibly flawed) information that
        led to the OSR failure. This is somewhat opportunistic and imperfect;
        if there's a lot of control flow between the value profiling site and the
        OSR failure point, then this mechanism simply gives up. It also gives up
        if the OSR failure is caused by either known deficiencies in the DFG
        (like that we always assume that the index in a strict charCodeAt access
        is within bounds) or where the OSR failure would be catalogues and
        profiled through other means (like slow case counters).
        
        This patch also adds the notion of a JSValueRegs, which is either a
        single register in JSVALUE64 or a pair in JSVALUE32_64. We should
        probably move the 32_64 DFG towards using this, since it often makes it
        easier to share code between 64 and 32_64.
        
        Also fixed a number of pathologies that this uncovered. op_method_check 
        didn't have a value profiling site on the slow path. GetById should not
        always force OSR exit if it never executed in the old JIT; we may be
        able to infer its type if it's a array or string length get. Finally,
        these changes benefit from a slight tweak to optimization delay
        heuristics (profile fullness is now 0.35 instead of 0.25).
        
        3.8% speed-up on Kraken, mostly due to ~35% on both stanford-crypto-aes
        and imaging-darkroom.

        * bytecode/ValueProfile.cpp:
        (JSC::ValueProfile::computeStatistics):
        (JSC::ValueProfile::computeUpdatedPrediction):
        * bytecode/ValueProfile.h:
        (JSC::ValueProfile::ValueProfile):
        (JSC::ValueProfile::specFailBucket):
        (JSC::ValueProfile::numberOfSamples):
        (JSC::ValueProfile::isLive):
        (JSC::ValueProfile::numberOfInt32s):
        (JSC::ValueProfile::numberOfDoubles):
        (JSC::ValueProfile::numberOfCells):
        (JSC::ValueProfile::numberOfObjects):
        (JSC::ValueProfile::numberOfFinalObjects):
        (JSC::ValueProfile::numberOfStrings):
        (JSC::ValueProfile::numberOfArrays):
        (JSC::ValueProfile::numberOfBooleans):
        (JSC::ValueProfile::dump):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getPredictionWithoutOSRExit):
        (JSC::DFG::ByteCodeParser::getPrediction):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGPRInfo.h:
        (JSC::DFG::JSValueRegs::JSValueRegs):
        (JSC::DFG::JSValueRegs::operator!):
        (JSC::DFG::JSValueRegs::gpr):
        (JSC::DFG::JSValueSource::JSValueSource):
        (JSC::DFG::JSValueSource::unboxedCell):
        (JSC::DFG::JSValueSource::operator!):
        (JSC::DFG::JSValueSource::isAddress):
        (JSC::DFG::JSValueSource::offset):
        (JSC::DFG::JSValueSource::base):
        (JSC::DFG::JSValueSource::gpr):
        (JSC::DFG::JSValueSource::asAddress):
        (JSC::DFG::JSValueSource::notAddress):
        (JSC::DFG::JSValueRegs::tagGPR):
        (JSC::DFG::JSValueRegs::payloadGPR):
        (JSC::DFG::JSValueSource::tagGPR):
        (JSC::DFG::JSValueSource::payloadGPR):
        (JSC::DFG::JSValueSource::hasKnownTag):
        (JSC::DFG::JSValueSource::tag):
        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::GenerationInfo::jsValueRegs):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::valueProfileFor):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::JSValueOperand::jsValueRegs):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::valueProfileFor):
        * dfg/DFGJITCompiler32_64.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::OSRExit::OSRExit):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
        (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnByteArray):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::speculationCheck):
        (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
        (JSC::DFG::SpeculativeJIT::compileObjectEquality):
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
        (JSC::DFG::SpeculativeJIT::compileObjectEquality):
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitSlow_op_method_check):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emitSlow_op_method_check):
        * runtime/Heuristics.cpp:
        (JSC::Heuristics::initializeHeuristics):
        * runtime/JSValue.h:

2011-10-31  Sam Weinig  <sam@webkit.org>

        Remove need for virtual JSObject::unwrappedObject
        https://bugs.webkit.org/show_bug.cgi?id=71034

        Reviewed by Geoffrey Garen.

        * JavaScriptCore.exp:
        Update exports.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        Add JSGlobalThis.cpp.

        * runtime/JSGlobalThis.cpp: Added.
        (JSC::JSGlobalThis::visitChildren):
        (JSC::JSGlobalThis::unwrappedObject):
        * runtime/JSGlobalThis.h:
        (JSC::JSGlobalThis::createStructure):
        Move underlying object from JSDOMWindowShell down to JSGlobalThis
        and corresponding visitChildren method.

        * runtime/JSObject.cpp:
        (JSC::JSObject::unwrappedObject):
        Change unwrappedObject from virtual, to just needing an if check.

        * runtime/JSObject.h:
        (JSC::JSObject::isGlobalThis):
        * runtime/JSType.h:
        Add isGlobalThis predicate and type.

2011-10-31  Xianzhu Wang  <wangxianzhu@chromium.org>

        WTF::StringImpl::create(const char*, unsigned) calls itself
        https://bugs.webkit.org/show_bug.cgi?id=71206

        The original implementation just calls itself, causing infinite recursion.
        Cast the first parameter to const LChar* to fix that.

        Reviewed by Ryosuke Niwa.

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

2011-10-31  Andy Wingo  <wingo@igalia.com>

        Fix DFG JIT compilation on Linux targets.
        https://bugs.webkit.org/show_bug.cgi?id=70904

        Reviewed by Darin Adler.

        * jit/JITStubs.cpp (SYMBOL_STRING_RELOCATION): Simplify this
        macro.

        * dfg/DFGOperations.cpp (SYMBOL_STRING_RELOCATION): Copy the
        simplified definition from jit/JITStubs.cpp.
        (FUNCTION_WRAPPER_WITH_RETURN_ADDRESS, getHostCallReturnValue):
        Use the macro to access trampoline targets through the PLT on PIC
        systems, instead of introducing a text relocation.  Otherwise, the
        library fails to link.

2011-10-31  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSObject::defineGetter
        https://bugs.webkit.org/show_bug.cgi?id=71134

        Reviewed by Darin Adler.

        Added defineGetter to the MethodTable.  Replaced all virtual versions of defineGetter
        with static versions.  Replaced all call sites with lookups in the MethodTable.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::defineGetter):
        * debugger/DebuggerActivation.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/ClassInfo.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::defineGetter):
        * runtime/JSCell.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::defineGetter):
        * runtime/JSGlobalObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::defineGetter):
        (JSC::putDescriptor):
        * runtime/JSObject.h:
        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncDefineGetter):

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

        Towards 8-bit Strings: Move Lexer and Parser Objects out of JSGlobalData
        https://bugs.webkit.org/show_bug.cgi?id=71138

        Restructure and movement of Lexer and Parser code.
        Moved Lexer and Parser objects out of JSGlobalData.
        Added a new ParserTokens class and instance to JSGlobalData that
        have JavaScript token related definitions.
        Replaced JSGlobalData arguments to Node classes with lineNumber,
        as that was the only use of the JSGlobalData.
        Combined JSParser and Parser classes into one class,
        eliminating JSParser.h and .cpp.
        Various supporting #include changes.

        These mostly mechanical changes are done in preparation to
        making the Lexer and Parser template classes.

        Reviewed by Darin Adler.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ArrayNode::toArgumentList):
        (JSC::ApplyFunctionCallDotNode::emitBytecode):
        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::ASTBuilder):
        (JSC::ASTBuilder::createSourceElements):
        (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::createRegExp):
        (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::createPropertyList):
        (JSC::ASTBuilder::createElementList):
        (JSC::ASTBuilder::createFormalParameterList):
        (JSC::ASTBuilder::createClause):
        (JSC::ASTBuilder::createClauseList):
        (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::combineCommaNodes):
        (JSC::ASTBuilder::appendBinaryOperation):
        (JSC::ASTBuilder::createAssignment):
        (JSC::ASTBuilder::createNumber):
        (JSC::ASTBuilder::makeTypeOfNode):
        (JSC::ASTBuilder::makeDeleteNode):
        (JSC::ASTBuilder::makeNegateNode):
        (JSC::ASTBuilder::makeBitwiseNotNode):
        (JSC::ASTBuilder::makeMultNode):
        (JSC::ASTBuilder::makeDivNode):
        (JSC::ASTBuilder::makeModNode):
        (JSC::ASTBuilder::makeAddNode):
        (JSC::ASTBuilder::makeSubNode):
        (JSC::ASTBuilder::makeLeftShiftNode):
        (JSC::ASTBuilder::makeRightShiftNode):
        (JSC::ASTBuilder::makeURightShiftNode):
        (JSC::ASTBuilder::makeBitOrNode):
        (JSC::ASTBuilder::makeBitAndNode):
        (JSC::ASTBuilder::makeBitXOrNode):
        (JSC::ASTBuilder::makeFunctionCallNode):
        (JSC::ASTBuilder::makeBinaryNode):
        (JSC::ASTBuilder::makeAssignNode):
        (JSC::ASTBuilder::makePrefixNode):
        (JSC::ASTBuilder::makePostfixNode):
        * parser/JSParser.cpp: Removed.
        * parser/JSParser.h: Removed.
        * parser/Lexer.cpp:
        (JSC::Keywords::Keywords):
        (JSC::Lexer::Lexer):
        (JSC::Lexer::~Lexer):
        (JSC::Lexer::setCode):
        (JSC::Lexer::parseIdentifier):
        * parser/Lexer.h:
        (JSC::Keywords::isKeyword):
        (JSC::Keywords::getKeyword):
        (JSC::Keywords::~Keywords):
        (JSC::Lexer::setIsReparsing):
        (JSC::Lexer::isReparsing):
        (JSC::Lexer::lineNumber):
        (JSC::Lexer::setLastLineNumber):
        (JSC::Lexer::lastLineNumber):
        (JSC::Lexer::prevTerminator):
        (JSC::Lexer::sawError):
        (JSC::Lexer::getErrorMessage):
        (JSC::Lexer::currentOffset):
        (JSC::Lexer::setOffset):
        (JSC::Lexer::setLineNumber):
        (JSC::Lexer::sourceProvider):
        (JSC::Lexer::isWhiteSpace):
        (JSC::Lexer::isLineTerminator):
        (JSC::Lexer::convertHex):
        (JSC::Lexer::convertUnicode):
        (JSC::Lexer::makeIdentifier):
        (JSC::Lexer::lexExpectIdentifier):
        * parser/NodeConstructors.h:
        (JSC::ParserArenaFreeable::operator new):
        (JSC::ParserArenaDeletable::operator new):
        (JSC::ParserArenaRefCounted::ParserArenaRefCounted):
        (JSC::Node::Node):
        (JSC::ExpressionNode::ExpressionNode):
        (JSC::StatementNode::StatementNode):
        (JSC::NullNode::NullNode):
        (JSC::BooleanNode::BooleanNode):
        (JSC::NumberNode::NumberNode):
        (JSC::StringNode::StringNode):
        (JSC::RegExpNode::RegExpNode):
        (JSC::ThisNode::ThisNode):
        (JSC::ResolveNode::ResolveNode):
        (JSC::ElementNode::ElementNode):
        (JSC::ArrayNode::ArrayNode):
        (JSC::PropertyNode::PropertyNode):
        (JSC::PropertyListNode::PropertyListNode):
        (JSC::ObjectLiteralNode::ObjectLiteralNode):
        (JSC::BracketAccessorNode::BracketAccessorNode):
        (JSC::DotAccessorNode::DotAccessorNode):
        (JSC::ArgumentListNode::ArgumentListNode):
        (JSC::ArgumentsNode::ArgumentsNode):
        (JSC::NewExprNode::NewExprNode):
        (JSC::EvalFunctionCallNode::EvalFunctionCallNode):
        (JSC::FunctionCallValueNode::FunctionCallValueNode):
        (JSC::FunctionCallResolveNode::FunctionCallResolveNode):
        (JSC::FunctionCallBracketNode::FunctionCallBracketNode):
        (JSC::FunctionCallDotNode::FunctionCallDotNode):
        (JSC::CallFunctionCallDotNode::CallFunctionCallDotNode):
        (JSC::ApplyFunctionCallDotNode::ApplyFunctionCallDotNode):
        (JSC::PrePostResolveNode::PrePostResolveNode):
        (JSC::PostfixResolveNode::PostfixResolveNode):
        (JSC::PostfixBracketNode::PostfixBracketNode):
        (JSC::PostfixDotNode::PostfixDotNode):
        (JSC::PostfixErrorNode::PostfixErrorNode):
        (JSC::DeleteResolveNode::DeleteResolveNode):
        (JSC::DeleteBracketNode::DeleteBracketNode):
        (JSC::DeleteDotNode::DeleteDotNode):
        (JSC::DeleteValueNode::DeleteValueNode):
        (JSC::VoidNode::VoidNode):
        (JSC::TypeOfResolveNode::TypeOfResolveNode):
        (JSC::TypeOfValueNode::TypeOfValueNode):
        (JSC::PrefixResolveNode::PrefixResolveNode):
        (JSC::PrefixBracketNode::PrefixBracketNode):
        (JSC::PrefixDotNode::PrefixDotNode):
        (JSC::PrefixErrorNode::PrefixErrorNode):
        (JSC::UnaryOpNode::UnaryOpNode):
        (JSC::UnaryPlusNode::UnaryPlusNode):
        (JSC::NegateNode::NegateNode):
        (JSC::BitwiseNotNode::BitwiseNotNode):
        (JSC::LogicalNotNode::LogicalNotNode):
        (JSC::BinaryOpNode::BinaryOpNode):
        (JSC::MultNode::MultNode):
        (JSC::DivNode::DivNode):
        (JSC::ModNode::ModNode):
        (JSC::AddNode::AddNode):
        (JSC::SubNode::SubNode):
        (JSC::LeftShiftNode::LeftShiftNode):
        (JSC::RightShiftNode::RightShiftNode):
        (JSC::UnsignedRightShiftNode::UnsignedRightShiftNode):
        (JSC::LessNode::LessNode):
        (JSC::GreaterNode::GreaterNode):
        (JSC::LessEqNode::LessEqNode):
        (JSC::GreaterEqNode::GreaterEqNode):
        (JSC::ThrowableBinaryOpNode::ThrowableBinaryOpNode):
        (JSC::InstanceOfNode::InstanceOfNode):
        (JSC::InNode::InNode):
        (JSC::EqualNode::EqualNode):
        (JSC::NotEqualNode::NotEqualNode):
        (JSC::StrictEqualNode::StrictEqualNode):
        (JSC::NotStrictEqualNode::NotStrictEqualNode):
        (JSC::BitAndNode::BitAndNode):
        (JSC::BitOrNode::BitOrNode):
        (JSC::BitXOrNode::BitXOrNode):
        (JSC::LogicalOpNode::LogicalOpNode):
        (JSC::ConditionalNode::ConditionalNode):
        (JSC::ReadModifyResolveNode::ReadModifyResolveNode):
        (JSC::AssignResolveNode::AssignResolveNode):
        (JSC::ReadModifyBracketNode::ReadModifyBracketNode):
        (JSC::AssignBracketNode::AssignBracketNode):
        (JSC::AssignDotNode::AssignDotNode):
        (JSC::ReadModifyDotNode::ReadModifyDotNode):
        (JSC::AssignErrorNode::AssignErrorNode):
        (JSC::CommaNode::CommaNode):
        (JSC::ConstStatementNode::ConstStatementNode):
        (JSC::SourceElements::SourceElements):
        (JSC::EmptyStatementNode::EmptyStatementNode):
        (JSC::DebuggerStatementNode::DebuggerStatementNode):
        (JSC::ExprStatementNode::ExprStatementNode):
        (JSC::VarStatementNode::VarStatementNode):
        (JSC::IfNode::IfNode):
        (JSC::IfElseNode::IfElseNode):
        (JSC::DoWhileNode::DoWhileNode):
        (JSC::WhileNode::WhileNode):
        (JSC::ForNode::ForNode):
        (JSC::ContinueNode::ContinueNode):
        (JSC::BreakNode::BreakNode):
        (JSC::ReturnNode::ReturnNode):
        (JSC::WithNode::WithNode):
        (JSC::LabelNode::LabelNode):
        (JSC::ThrowNode::ThrowNode):
        (JSC::TryNode::TryNode):
        (JSC::ParameterNode::ParameterNode):
        (JSC::FuncExprNode::FuncExprNode):
        (JSC::FuncDeclNode::FuncDeclNode):
        (JSC::CaseClauseNode::CaseClauseNode):
        (JSC::ClauseListNode::ClauseListNode):
        (JSC::CaseBlockNode::CaseBlockNode):
        (JSC::SwitchNode::SwitchNode):
        (JSC::ConstDeclNode::ConstDeclNode):
        (JSC::BlockNode::BlockNode):
        (JSC::ForInNode::ForInNode):
        * parser/NodeInfo.h:
        * parser/Nodes.cpp:
        (JSC::StatementNode::setLoc):
        (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::Node::lineNo):
        * parser/Parser.cpp:
        (JSC::Parser::Parser):
        (JSC::Parser::~Parser):
        (JSC::Parser::parseInner):
        (JSC::Parser::allowAutomaticSemicolon):
        (JSC::Parser::parseSourceElements):
        (JSC::Parser::parseVarDeclaration):
        (JSC::Parser::parseConstDeclaration):
        (JSC::Parser::parseDoWhileStatement):
        (JSC::Parser::parseWhileStatement):
        (JSC::Parser::parseVarDeclarationList):
        (JSC::Parser::parseConstDeclarationList):
        (JSC::Parser::parseForStatement):
        (JSC::Parser::parseBreakStatement):
        (JSC::Parser::parseContinueStatement):
        (JSC::Parser::parseReturnStatement):
        (JSC::Parser::parseThrowStatement):
        (JSC::Parser::parseWithStatement):
        (JSC::Parser::parseSwitchStatement):
        (JSC::Parser::parseSwitchClauses):
        (JSC::Parser::parseSwitchDefaultClause):
        (JSC::Parser::parseTryStatement):
        (JSC::Parser::parseDebuggerStatement):
        (JSC::Parser::parseBlockStatement):
        (JSC::Parser::parseStatement):
        (JSC::Parser::parseFormalParameters):
        (JSC::Parser::parseFunctionBody):
        (JSC::Parser::parseFunctionInfo):
        (JSC::Parser::parseFunctionDeclaration):
        (JSC::LabelInfo::LabelInfo):
        (JSC::Parser::parseExpressionOrLabelStatement):
        (JSC::Parser::parseExpressionStatement):
        (JSC::Parser::parseIfStatement):
        (JSC::Parser::parseExpression):
        (JSC::Parser::parseAssignmentExpression):
        (JSC::Parser::parseConditionalExpression):
        (JSC::isUnaryOp):
        (JSC::Parser::isBinaryOperator):
        (JSC::Parser::parseBinaryExpression):
        (JSC::Parser::parseProperty):
        (JSC::Parser::parseObjectLiteral):
        (JSC::Parser::parseStrictObjectLiteral):
        (JSC::Parser::parseArrayLiteral):
        (JSC::Parser::parsePrimaryExpression):
        (JSC::Parser::parseArguments):
        (JSC::Parser::parseMemberExpression):
        (JSC::Parser::parseUnaryExpression):
        * parser/Parser.h:
        (JSC::isEvalNode):
        (JSC::EvalNode):
        (JSC::DepthManager::DepthManager):
        (JSC::DepthManager::~DepthManager):
        (JSC::ScopeLabelInfo::ScopeLabelInfo):
        (JSC::Scope::Scope):
        (JSC::Scope::startSwitch):
        (JSC::Scope::endSwitch):
        (JSC::Scope::startLoop):
        (JSC::Scope::endLoop):
        (JSC::Scope::inLoop):
        (JSC::Scope::breakIsValid):
        (JSC::Scope::continueIsValid):
        (JSC::Scope::pushLabel):
        (JSC::Scope::popLabel):
        (JSC::Scope::getLabel):
        (JSC::Scope::setIsFunction):
        (JSC::Scope::isFunction):
        (JSC::Scope::isFunctionBoundary):
        (JSC::Scope::declareVariable):
        (JSC::Scope::declareWrite):
        (JSC::Scope::preventNewDecls):
        (JSC::Scope::allowsNewDecls):
        (JSC::Scope::declareParameter):
        (JSC::Scope::useVariable):
        (JSC::Scope::setNeedsFullActivation):
        (JSC::Scope::collectFreeVariables):
        (JSC::Scope::getUncapturedWrittenVariables):
        (JSC::Scope::getCapturedVariables):
        (JSC::Scope::setStrictMode):
        (JSC::Scope::strictMode):
        (JSC::Scope::isValidStrictMode):
        (JSC::Scope::shadowsArguments):
        (JSC::Scope::copyCapturedVariablesToVector):
        (JSC::Scope::saveFunctionInfo):
        (JSC::Scope::restoreFunctionInfo):
        (JSC::ScopeRef::ScopeRef):
        (JSC::ScopeRef::operator->):
        (JSC::ScopeRef::index):
        (JSC::ScopeRef::hasContainingScope):
        (JSC::ScopeRef::containingScope):
        (JSC::Parser::AllowInOverride::AllowInOverride):
        (JSC::Parser::AllowInOverride::~AllowInOverride):
        (JSC::Parser::AutoPopScopeRef::AutoPopScopeRef):
        (JSC::Parser::AutoPopScopeRef::~AutoPopScopeRef):
        (JSC::Parser::AutoPopScopeRef::setPopped):
        (JSC::Parser::currentScope):
        (JSC::Parser::pushScope):
        (JSC::Parser::popScopeInternal):
        (JSC::Parser::popScope):
        (JSC::Parser::declareVariable):
        (JSC::Parser::declareWrite):
        (JSC::Parser::findCachedFunctionInfo):
        (JSC::Parser::isFunctionBodyNode):
        (JSC::Parser::next):
        (JSC::Parser::nextExpectIdentifier):
        (JSC::Parser::nextTokenIsColon):
        (JSC::Parser::consume):
        (JSC::Parser::getToken):
        (JSC::Parser::match):
        (JSC::Parser::tokenStart):
        (JSC::Parser::tokenLine):
        (JSC::Parser::tokenEnd):
        (JSC::Parser::getTokenName):
        (JSC::Parser::updateErrorMessageSpecialCase):
        (JSC::Parser::updateErrorMessage):
        (JSC::Parser::updateErrorWithNameAndMessage):
        (JSC::Parser::startLoop):
        (JSC::Parser::endLoop):
        (JSC::Parser::startSwitch):
        (JSC::Parser::endSwitch):
        (JSC::Parser::setStrictMode):
        (JSC::Parser::strictMode):
        (JSC::Parser::isValidStrictMode):
        (JSC::Parser::declareParameter):
        (JSC::Parser::breakIsValid):
        (JSC::Parser::continueIsValid):
        (JSC::Parser::pushLabel):
        (JSC::Parser::popLabel):
        (JSC::Parser::getLabel):
        (JSC::Parser::autoSemiColon):
        (JSC::Parser::canRecurse):
        (JSC::Parser::lastTokenEnd):
        (JSC::Parser::DepthManager::DepthManager):
        (JSC::Parser::DepthManager::~DepthManager):
        (JSC::Parser::parse):
        (JSC::parse):
        * parser/ParserTokens.h: Added.
        (JSC::JSTokenInfo::JSTokenInfo):
        * parser/SourceCode.h:
        (JSC::SourceCode::subExpression):
        * parser/SourceProviderCacheItem.h:
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::SyntaxChecker):
        (JSC::SyntaxChecker::makeFunctionCallNode):
        (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::createRegExp):
        (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::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::combineCommaNodes):
        (JSC::SyntaxChecker::operatorStackPop):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::checkSyntax):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::produceCodeBlockFor):
        (JSC::FunctionExecutable::fromGlobalCode):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::~JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::tryJSONPParse):

2011-10-31  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION (r97118): Reproducible crash in JSCell::toPrimitive when adding
        https://bugs.webkit.org/show_bug.cgi?id=71227

        Reviewed by Oliver Hunt.
        
        No new tests, since while I can see exactly where the DFG went wrong on the
        site in question from looking at the generated machine code, and while I can
        certainly believe that such a scenario would happen, I cannot visualize how
        to make it happen reproducibly. It requires an odd combination of double
        values getting spilled and then refilled, but then reboxed at just the right
        time so that the spilled value is an unboxed double while the in-register
        value is a boxed double.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::silentFillGPR):

2011-10-30  Filip Pizlo  <fpizlo@apple.com>

        JSParser::parsePrimaryExpression should have an overflow check
        https://bugs.webkit.org/show_bug.cgi?id=71197

        Reviewed by Geoff Garen.

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

2011-10-30  Filip Pizlo  <fpizlo@apple.com>

        DFG ValueAdd(string, int) should not fail speculation
        https://bugs.webkit.org/show_bug.cgi?id=71195

        Reviewed by Geoff Garen.
        
        1% speed-up on V8.

        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldNotSpeculateInteger):
        (JSC::DFG::Node::shouldSpeculateInteger):

2011-10-30  Filip Pizlo  <fpizlo@apple.com>

        The DFG inliner should not flush the callee
        https://bugs.webkit.org/show_bug.cgi?id=71191

        Reviewed by Oliver Hunt.
        
        0.6% speed-up on V8.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitAggregate):
        * bytecode/CodeOrigin.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::flush):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGJITCompiler32_64.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::trueCallerFrameSlow):

2011-10-28  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize isGlobalObject, isVariableObject, isActivationObject, and isErrorInstance in JSObject
        https://bugs.webkit.org/show_bug.cgi?id=70968

        Reviewed by Geoffrey Garen.

        * API/JSCallbackObject.cpp: Added two specializations for createStructure that use different JSTypes in their
        TypeInfo.  Had to also create a specialization for JSNonFinalObject, even JSGlobalObject was the only that 
        needed it because Windows wouldn't build without it.
        (JSC::::createStructure):
        * API/JSCallbackObject.h:
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/ErrorInstance.h: Removed virtual function and changed JSType provided to TypeInfo in createStructure. 
        (JSC::ErrorInstance::createStructure):
        * runtime/ErrorPrototype.h: Ditto
        (JSC::ErrorPrototype::createStructure):
        * runtime/JSActivation.h: Ditto
        (JSC::JSActivation::createStructure):
        * runtime/JSGlobalObject.h: Ditto
        (JSC::JSGlobalObject::createStructure):
        * runtime/JSObject.h: De-virtualized functions.  They now check the JSType of the object for the corresponding type.
        (JSC::JSObject::isGlobalObject):
        (JSC::JSObject::isVariableObject):
        (JSC::JSObject::isActivationObject):
        (JSC::JSObject::isErrorInstance):
        * runtime/JSType.h: Added new types for GlobalObject, VariableObject, ActivationObject, and ErrorInstance.
        * runtime/JSVariableObject.cpp: Removed virtual function.
        * runtime/JSVariableObject.h: Changed JSType provided to TypeInfo in createStructure.
        (JSC::JSVariableObject::createStructure):

2011-10-28  Pavel Feldman  <pfeldman@google.com>

        Reset line numbers for scripts generated with document.write.
        https://bugs.webkit.org/show_bug.cgi?id=71099

        Reviewed by Yury Semikhatsky.

        * wtf/text/TextPosition.h:
        (WTF::OrdinalNumber::OrdinalNumber):

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

        CMake: Add support to optionally install the built JavaScript shell
        https://bugs.webkit.org/show_bug.cgi?id=71062

        Reviewed by Antonio Gomes.

        Generate an installation rule for installing the JavaScript shell in
        /bin (with respect to the prefix path) when SHOULD_INSTALL_JS_SHELL
        is defined.

        * shell/CMakeLists.txt:

2011-10-27  Kentaro Hara  <haraken@chromium.org>

        Generate WebKitCSSMatrix constructor for JSC by [Constructor] IDL
        https://bugs.webkit.org/show_bug.cgi?id=70215

        Reviewed by Adam Barth.

        Added a method that judges if a given JSValue is empty.

        Tests: transforms/svg-vs-css.xhtml
               transforms/cssmatrix-2d-interface.xhtml
               transforms/cssmatrix-3d-interface.xhtml

        * runtime/JSValue.h:
        * runtime/JSValueInlineMethods.h:
        (JSC::JSValue::isEmpty):

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

        ENH: Add 8 bit string support to JSC JIT
        https://bugs.webkit.org/show_bug.cgi?id=71073

        Changed the JIT String character access generation to create code
        to check the character size and load8() or load16() as approriate.

        Reviewed by Gavin Barraclough.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::load8):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::movzbl_mr):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitLoadCharacterString):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::stringGetByValStubGenerator):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::stringGetByValStubGenerator):
        * jit/JSInterfaceJIT.h:
        (JSC::ThunkHelpers::stringImplFlagsOffset):
        (JSC::ThunkHelpers::stringImpl8BitFlag):
        * jit/ThunkGenerators.cpp:
        (JSC::stringCharLoad):

2011-10-27  Filip Pizlo  <fpizlo@apple.com>

        If the bytecode generator emits code after the return in the first basic block,
        DFG's inliner crashes
        https://bugs.webkit.org/show_bug.cgi?id=71071

        Reviewed by Gavin Barraclough.
        
        Removed some cruft dealing with parsing failures due to unsupported functionality
        (that's never reached anymore due to it being caught in DFGCapabilities). This
        allowed me to repurpose the bool return from parseBlock() to mean: true if we
        should continue to parse, or false if we've already parsed all live code.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::parseCodeBlock):

2011-10-27  Joseph Pecoraro  <pecoraro@apple.com>

        Reviewed by David Kilzer.

        Make FeatureDefines Identical Across OS X Projects
        https://bugs.webkit.org/show_bug.cgi?id=71051

        * Configurations/FeatureDefines.xcconfig:

2011-10-27  Filip Pizlo  <fpizlo@apple.com>

        Crash in JSC::Structure::materializePropertyMap when viewing Garden-O-Matic
        https://bugs.webkit.org/show_bug.cgi?id=71045

        Reviewed by Geoff Garen.
        
        Make sure that if a structure is pinned, it also has a property map.

        * runtime/Structure.cpp:
        (JSC::Structure::changePrototypeTransition):
        (JSC::Structure::despecifyFunctionTransition):
        (JSC::Structure::getterSetterTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::preventExtensionsTransition):
        (JSC::Structure::addPropertyWithoutTransition):
        (JSC::Structure::removePropertyWithoutTransition):
        (JSC::Structure::pin):
        (JSC::Structure::copyPropertyTableForPinning):
        * runtime/Structure.h:
        (JSC::Structure::materializePropertyMapIfNecessaryForPinning):

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

        32bit build failure after r98624
        https://bugs.webkit.org/show_bug.cgi?id=71064

        Disambiguated operator overload with unsigned index (0u).

        Reviewed by Sam Weinig.

        * runtime/UString.h:
        (JSC::operator==):

2011-10-27  Gustavo Noronha Silva  <gns@gnome.org>

        Fix building on GNU/kFreeBSD
        https://bugs.webkit.org/show_bug.cgi?id=71005

        Reviewed by Darin Adler.

        * config.h:
        * wtf/Platform.h:

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

        Investigate storing strings in 8-bit buffers when possible
        https://bugs.webkit.org/show_bug.cgi?id=66161

        Investigate storing strings in 8-bit buffers when possible
        https://bugs.webkit.org/show_bug.cgi?id=66161

        Added support for 8 bit string data in StringImpl.  Changed
        (UChar*) m_data to m_data16.  Added char* m_data8 as a union
        with m_data16.  Added UChar* m_copyData16 to the other union
        to store a 16 bit copy of an 8 bit string when needed.
        Added characters8() and characters16() accessor methods
        that assume the caller has checked the underlying string type
        via the new is8Bit() method. The characters() method will
        return a UChar* of the string, materializing a 16 bit copy if the
        string is an 8 bit string.  Added two flags, one for 8 bit buffer
        and a second for a 16 bit copy for an 8 bit string.

        Fixed method name typo (StringHasher::defaultCoverter()).

        Over time the goal is to eliminate calls to characters() and
        us the character8() and characters16() accessors.

        This patch does not include changes that actually create 8 bit
        strings. This is the first of at least 8 patches.  Subsequent
        patches will be submitted for JIT changes, making the JSC lexer,
        parser and literal parser, JavaScript string changes and
        then changes in webcore to take advantage of the 8 bit strings.

        This change is performance neutral for SunSpider and V8 when
        run from the command line with "jsc".

        Reviewed by Geoffrey Garen.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::callEval):
        * parser/SourceProvider.h:
        (JSC::UStringSourceProvider::data):
        (JSC::UStringSourceProvider::UStringSourceProvider):
        * runtime/Identifier.cpp:
        (JSC::IdentifierCStringTranslator::hash):
        (JSC::IdentifierCStringTranslator::equal):
        (JSC::IdentifierCStringTranslator::translate):
        (JSC::Identifier::add):
        (JSC::Identifier::toUInt32):
        * runtime/Identifier.h:
        (JSC::Identifier::equal):
        (JSC::operator==):
        (JSC::operator!=):
        * runtime/JSString.cpp:
        (JSC::JSString::resolveRope):
        (JSC::JSString::resolveRopeSlowCase):
        * runtime/RegExp.cpp:
        (JSC::RegExp::match):
        * runtime/StringPrototype.cpp:
        (JSC::jsSpliceSubstringsWithSeparators):
        * runtime/UString.cpp:
        (JSC::UString::UString):
        (JSC::equalSlowCase):
        (JSC::UString::utf8):
        * runtime/UString.h:
        (JSC::UString::characters):
        (JSC::UString::characters8):
        (JSC::UString::characters16):
        (JSC::UString::is8Bit):
        (JSC::UString::operator[]):
        (JSC::UString::find):
        (JSC::operator==):
        * wtf/StringHasher.h:
        (WTF::StringHasher::computeHash):
        (WTF::StringHasher::defaultConverter):
        * wtf/text/AtomicString.cpp:
        (WTF::CStringTranslator::hash):
        (WTF::CStringTranslator::equal):
        (WTF::CStringTranslator::translate):
        (WTF::AtomicString::add):
        * wtf/text/AtomicString.h:
        (WTF::AtomicString::AtomicString):
        (WTF::AtomicString::contains):
        (WTF::AtomicString::find):
        (WTF::AtomicString::add):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::equalIgnoringCase):
        * wtf/text/StringConcatenate.h:
        * wtf/text/StringHash.h:
        (WTF::StringHash::equal):
        (WTF::CaseFoldingHash::hash):
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::~StringImpl):
        (WTF::StringImpl::createUninitialized):
        (WTF::StringImpl::create):
        (WTF::StringImpl::getData16SlowCase):
        (WTF::StringImpl::containsOnlyWhitespace):
        (WTF::StringImpl::substring):
        (WTF::StringImpl::characterStartingAt):
        (WTF::StringImpl::lower):
        (WTF::StringImpl::upper):
        (WTF::StringImpl::fill):
        (WTF::StringImpl::foldCase):
        (WTF::StringImpl::stripMatchedCharacters):
        (WTF::StringImpl::removeCharacters):
        (WTF::StringImpl::simplifyMatchedCharactersToSpace):
        (WTF::StringImpl::toIntStrict):
        (WTF::StringImpl::toUIntStrict):
        (WTF::StringImpl::toInt64Strict):
        (WTF::StringImpl::toUInt64Strict):
        (WTF::StringImpl::toIntPtrStrict):
        (WTF::StringImpl::toInt):
        (WTF::StringImpl::toUInt):
        (WTF::StringImpl::toInt64):
        (WTF::StringImpl::toUInt64):
        (WTF::StringImpl::toIntPtr):
        (WTF::StringImpl::toDouble):
        (WTF::StringImpl::toFloat):
        (WTF::equal):
        (WTF::equalIgnoringCase):
        (WTF::StringImpl::find):
        (WTF::StringImpl::findIgnoringCase):
        (WTF::StringImpl::reverseFind):
        (WTF::StringImpl::replace):
        (WTF::StringImpl::defaultWritingDirection):
        (WTF::StringImpl::adopt):
        (WTF::StringImpl::createWithTerminatingNullCharacter):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::StringImpl):
        (WTF::StringImpl::create):
        (WTF::StringImpl::create8):
        (WTF::StringImpl::tryCreateUninitialized):
        (WTF::StringImpl::flagsOffset):
        (WTF::StringImpl::flagIs8Bit):
        (WTF::StringImpl::dataOffset):
        (WTF::StringImpl::is8Bit):
        (WTF::StringImpl::characters8):
        (WTF::StringImpl::characters16):
        (WTF::StringImpl::characters):
        (WTF::StringImpl::has16BitShadow):
        (WTF::StringImpl::setHash):
        (WTF::StringImpl::hash):
        (WTF::StringImpl::copyChars):
        (WTF::StringImpl::operator[]):
        (WTF::StringImpl::find):
        (WTF::StringImpl::findIgnoringCase):
        (WTF::equal):
        (WTF::equalIgnoringCase):
        (WTF::StringImpl::isolatedCopy):
        * wtf/text/WTFString.cpp:
        (WTF::String::String):
        (WTF::String::append):
        (WTF::String::format):
        (WTF::String::fromUTF8):
        (WTF::String::fromUTF8WithLatin1Fallback):
        * wtf/text/WTFString.h:
        (WTF::String::find):
        (WTF::String::findIgnoringCase):
        (WTF::String::contains):
        (WTF::String::append):
        (WTF::String::fromUTF8):
        (WTF::String::fromUTF8WithLatin1Fallback):
        (WTF::operator==):
        (WTF::operator!=):
        (WTF::equalIgnoringCase):
        * wtf/unicode/Unicode.h:
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::execute):
        * yarr/YarrJIT.h:
        (JSC::Yarr::YarrCodeBlock::execute):
        * yarr/YarrParser.h:
        (JSC::Yarr::Parser::Parser):

2011-10-27  Mark Hahnenberg  <mhahnenberg@apple.com>

        Fixing windows build

        Unreviewed build fix

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-10-27  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add ability to check for presence of static members at compile time
        https://bugs.webkit.org/show_bug.cgi?id=70986

        Reviewed by Geoffrey Garen.

        Added new CREATE_MEMBER_CHECKER macro to instantiate the template and the 
        HAS_MEMBER_NAMED macro to use that template to check if the specified class 
        does indeed have a method with that name.  This mechanism is not currently 
        used anywhere, but will be in the future when adding virtual methods from 
        JSObject to the MethodTable.

        * runtime/ClassInfo.h:

2011-10-27  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSCell::toThisObject
        https://bugs.webkit.org/show_bug.cgi?id=70958

        Reviewed by Geoffrey Garen.

        Converted all instances of toThisObject to static functions, 
        added toThisObject to the MethodTable, and replaced all call sites
        with a corresponding lookup in the MethodTable.

        * API/JSContextRef.cpp:
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/ClassInfo.h:
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::toThisObject):
        * runtime/JSActivation.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::toThisObject):
        * runtime/JSCell.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
        (JSC::JSObject::toThisObject):
        * runtime/JSObject.h:
        (JSC::JSValue::toThisObject):
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::toThisObject):
        * runtime/JSStaticScopeObject.h:
        * runtime/JSString.cpp:
        (JSC::JSString::toThisObject):
        * runtime/JSString.h:
        * runtime/StrictEvalActivation.cpp:
        (JSC::StrictEvalActivation::toThisObject):
        * runtime/StrictEvalActivation.h:

2011-10-27  Yuqiang Xian  <yuqiang.xian@intel.com>

        Fix a small bug in callOperation after r98431
        https://bugs.webkit.org/show_bug.cgi?id=70984

        Reviewed by Geoffrey Garen.

        TrustedImmPtr is not expecting "int" type parameters.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::callOperation):

2011-10-26  Oliver Hunt  <oliver@apple.com>

        Restore structure-clearing behaviour of allocateCell<>
        https://bugs.webkit.org/show_bug.cgi?id=70976

        Reviewed by Geoffrey Garen.

        This restores the logic that allows the markstack to filter
        live objects that have not yet been initialised.

        * runtime/JSCell.h:
        (JSC::JSCell::clearStructure):
           Validation-safe method to clear a cell's structure.
        (JSC::allocateCell):
           Call the above method.
        * runtime/Structure.h:
        (JSC::MarkStack::internalAppend):
           Don't visit cells that haven't been initialised.

2011-10-26  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION (r97030): Cannot log in to progressive.com
        https://bugs.webkit.org/show_bug.cgi?id=70094

        Reviewed by Oliver Hunt.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleCall):

2011-10-26  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove getOwnPropertySlotVirtual
        https://bugs.webkit.org/show_bug.cgi?id=70741

        Reviewed by Geoffrey Garen.

        Removed all declarations and definitions of getOwnPropertySlotVirtual.
        Also replaced all call sites to getOwnPropertyVirtualVirtual with a 
        corresponding lookup in the MethodTable.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::getOwnPropertyDescriptor):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::getOwnPropertySlot):
        * debugger/DebuggerActivation.h:
        * runtime/Arguments.cpp:
        * runtime/Arguments.h:
        * runtime/ArrayConstructor.cpp:
        * runtime/ArrayConstructor.h:
        * runtime/ArrayPrototype.cpp:
        * runtime/ArrayPrototype.h:
        * runtime/BooleanPrototype.cpp:
        * runtime/BooleanPrototype.h:
        * runtime/DateConstructor.cpp:
        * runtime/DateConstructor.h:
        * runtime/DatePrototype.cpp:
        * runtime/DatePrototype.h:
        (JSC::DatePrototype::create):
        * runtime/ErrorPrototype.cpp:
        * runtime/ErrorPrototype.h:
        * runtime/JSActivation.cpp:
        * runtime/JSActivation.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertySlotByIndex):
        * runtime/JSArray.h:
        * runtime/JSByteArray.cpp:
        * runtime/JSByteArray.h:
        * runtime/JSCell.cpp:
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertyDescriptor):
        (JSC::JSFunction::getOwnPropertyNames):
        (JSC::JSFunction::put):
        * runtime/JSFunction.h:
        * runtime/JSGlobalObject.cpp:
        * runtime/JSGlobalObject.h:
        * runtime/JSNotAnObject.cpp:
        * runtime/JSNotAnObject.h:
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Holder::appendNextProperty):
        (JSC::Walker::walk):
        * runtime/JSONObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::getOwnPropertySlotByIndex):
        (JSC::JSObject::hasOwnProperty):
        * runtime/JSObject.h:
        (JSC::JSCell::fastGetOwnPropertySlot):
        (JSC::JSObject::getPropertySlot):
        (JSC::JSValue::get):
        * runtime/JSStaticScopeObject.cpp:
        * runtime/JSStaticScopeObject.h:
        * runtime/JSString.cpp:
        (JSC::JSString::getOwnPropertySlot):
        * runtime/JSString.h:
        * runtime/MathObject.cpp:
        * runtime/MathObject.h:
        (JSC::MathObject::create):
        * runtime/NumberConstructor.cpp:
        * runtime/NumberConstructor.h:
        * runtime/NumberPrototype.cpp:
        * runtime/NumberPrototype.h:
        * runtime/ObjectConstructor.cpp:
        * runtime/ObjectConstructor.h:
        * runtime/ObjectPrototype.cpp:
        * runtime/ObjectPrototype.h:
        * runtime/RegExpConstructor.cpp:
        * runtime/RegExpConstructor.h:
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::createStructure):
        * runtime/RegExpObject.cpp:
        * runtime/RegExpObject.h:
        * runtime/RegExpPrototype.cpp:
        * runtime/RegExpPrototype.h:
        * runtime/StringConstructor.cpp:
        * runtime/StringConstructor.h:
        * runtime/StringObject.cpp:
        * runtime/StringObject.h:
        * runtime/StringPrototype.cpp:
        * runtime/StringPrototype.h:

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

        [GTK] [WK2] Add WebKit2 distcheck support
        https://bugs.webkit.org/show_bug.cgi?id=70933

        Reviewed by Martin Robinson.

        * GNUmakefile.list.am: Add MemoryStatistics.h to the sources list.

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

        Increase StringImpl Flag Bits for 8 bit Strings
        https://bugs.webkit.org/show_bug.cgi?id=70937

        Increased the number of bits used for flags in StringImpl
        from 6 to 8 bits. This frees up 2 flag bits that will be
        used for 8-bit string support. Updated hash methods accordingly.
        Changed hash value masking from the low bits to the high
        bits.

        Reviewed by Darin Adler.

        * create_hash_table:
        * wtf/StringHasher.h:
        (WTF::StringHasher::hash):
        * wtf/text/StringImpl.h:

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

        Build fix.

        Reverted r98488, which caused the scripts’ status messages to be included in the generated
        files.

        * create_hash_table:
        * create_jit_stubs:

2011-10-26  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Don't print regular output to STDERR when generating hashtables and JIT stubs

        Reviewed by Simon Hausmann.

        * create_hash_table:
        * create_jit_stubs:

2011-10-25  Gavin Barraclough  <barraclough@apple.com>

        Split DFGJITCodeGenerator::callOperation methods
        https://bugs.webkit.org/show_bug.cgi?id=70870

        Reviewed by Filip Pizlo.

        The DFGJITCodeGenerator currently contains two sets of callOperation methods.
        One set works with the JSVALUE64 value representation and passes arguments in
        registers (suitable for use on x86-64), and one set works with the JSVALUE32_64
        value representation and passes arguments in memory  (suitable for use on x86).
        By refactoring out the representation and calling convention specific aspects
        of the code we can also configure the DFG JIT to operator on platforms that use
        the JSVALUE32_64 value representation but pass arguments in registers.

        On platforms supported by the JIT, the payload precedes the tag of a value in
        argument/result ordering, as such, in order to make the setupResults method
        generally applicable to return the results of a function that are returned in
        two registers, the ordering of arguments to this function has been reversed -
        as is the ordering of augments passed to setupArguments methods, with respect
        to the ordering with which they are passed in to callOperation.
        This inconsistency will be resolved in a later change when we combine the pairs
        of arguments passed into callOperation, such that the function signatures can
        be made consistent across the two value representations (the callOperation
        methods will be passed a reference to a struct representing the JSValue
        temporary, this will consist of two gprs on 32_64 and one on 64).

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::resetCallArguments):
        (JSC::DFG::addCallArgument):
            - moved, removed tag,payload version of this method.
        (JSC::DFG::setupArguments):
        (JSC::DFG::setupArgumentsExecState):
        (JSC::DFG::setupArgumentsWithExecState):
            - Calling convention specific portion of callOperation refactored out into these methods.
        (JSC::DFG::callOperation):
            - updated these methods to use setupArguments* methods.
        (JSC::DFG::setupResults):
            - setupResults is now passed payload,tag.
        (JSC::DFG::appendCallWithExceptionCheckSetResult):
            - Added fpr versions of this function.
        (JSC::DFG::appendCallSetResult):
            - Added versions of this function without exception check.
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::emitCall):
            - setupResults is now passed payload,tag.

2011-10-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove deletePropertyVirtual
        https://bugs.webkit.org/show_bug.cgi?id=70738

        Reviewed by Geoffrey Garen.

        Removed all declarations and definitions of deletePropertyVirtual.
        Also replaced all call sites to deletePropertyVirtual with a 
        corresponding lookup in the MethodTable.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::deletePropertyByIndex):
        * API/JSObjectRef.cpp:
        (JSObjectDeleteProperty):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::deleteProperty):
        * debugger/DebuggerActivation.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Arguments.cpp:
        * runtime/Arguments.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncPop):
        (JSC::arrayProtoFuncReverse):
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        * runtime/JSActivation.cpp:
        * runtime/JSActivation.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::deleteProperty):
        (JSC::JSArray::deletePropertyByIndex):
        * runtime/JSArray.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::deleteProperty):
        (JSC::JSCell::deletePropertyByIndex):
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        * runtime/JSFunction.h:
        * runtime/JSNotAnObject.cpp:
        * runtime/JSNotAnObject.h:
        * runtime/JSONObject.cpp:
        (JSC::Walker::walk):
        * runtime/JSObject.cpp:
        (JSC::JSObject::deletePropertyByIndex):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        * runtime/JSVariableObject.cpp:
        * runtime/JSVariableObject.h:
        * runtime/RegExpMatchesArray.h:
        * runtime/StrictEvalActivation.cpp:
        * runtime/StrictEvalActivation.h:
        * runtime/StringObject.cpp:
        * runtime/StringObject.h:

2011-10-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove putVirtual
        https://bugs.webkit.org/show_bug.cgi?id=70740

        Reviewed by Geoffrey Garen.

        Removed all declarations and definitions of putVirtual.
        Also replaced all call sites to putVirtual with a 
        corresponding lookup in the MethodTable.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        * API/JSObjectRef.cpp:
        (JSObjectSetProperty):
        (JSObjectSetPropertyAtIndex):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::put):
        * debugger/DebuggerActivation.h:
        * dfg/DFGOperations.cpp:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        (JSC::Interpreter::privateExecute):
        * jsc.cpp:
        (GlobalObject::finishCreation):
        * runtime/Arguments.cpp:
        * runtime/Arguments.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::putProperty):
        (JSC::arrayProtoFuncConcat):
        (JSC::arrayProtoFuncPush):
        (JSC::arrayProtoFuncReverse):
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSlice):
        (JSC::arrayProtoFuncSort):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        (JSC::arrayProtoFuncFilter):
        (JSC::arrayProtoFuncMap):
        * runtime/JSActivation.cpp:
        * runtime/JSActivation.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::push):
        (JSC::JSArray::shiftCount):
        (JSC::JSArray::unshiftCount):
        * runtime/JSArray.h:
        * runtime/JSByteArray.cpp:
        * runtime/JSByteArray.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::put):
        (JSC::JSCell::putByIndex):
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        * runtime/JSFunction.h:
        * runtime/JSGlobalObject.cpp:
        * runtime/JSGlobalObject.h:
        * runtime/JSNotAnObject.cpp:
        * runtime/JSNotAnObject.h:
        * runtime/JSONObject.cpp:
        (JSC::Walker::walk):
        * runtime/JSObject.cpp:
        (JSC::JSObject::putByIndex):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        (JSC::JSValue::put):
        * runtime/JSStaticScopeObject.cpp:
        * runtime/JSStaticScopeObject.h:
        * runtime/ObjectPrototype.cpp:
        * runtime/ObjectPrototype.h:
        * runtime/RegExpConstructor.cpp:
        * runtime/RegExpConstructor.h:
        * runtime/RegExpMatchesArray.h:
        * runtime/RegExpObject.cpp:
        * runtime/RegExpObject.h:
        * runtime/StringObject.cpp:
        * runtime/StringObject.h:
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncSplit):

2011-10-25  Gavin Barraclough  <barraclough@apple.com>

        Separate out function linking & exception check data structures.
        https://bugs.webkit.org/show_bug.cgi?id=70858

        Reviewed by Oliver Hunt.

        This will make it easier to refactor the callOperation methods to spilt the value
        representation specific handling from the cpu/calling-convention implementation.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::appendCallWithExceptionCheck):
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::emitCall):
        * dfg/DFGJITCodeGenerator64.cpp:
        (JSC::DFG::JITCodeGenerator::emitCall):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileBody):
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::CallLinkRecord::CallLinkRecord):
        (JSC::DFG::CallExceptionRecord::CallExceptionRecord):
        (JSC::DFG::JITCompiler::JITCompiler):
        (JSC::DFG::JITCompiler::notifyCall):
        (JSC::DFG::JITCompiler::appendCall):
        (JSC::DFG::JITCompiler::addExceptionCheck):
        (JSC::DFG::JITCompiler::addFastExceptionCheck):
        * dfg/DFGJITCompiler32_64.cpp:
        (JSC::DFG::JITCompiler::compileBody):
        (JSC::DFG::JITCompiler::link):

2011-10-25  Filip Pizlo  <fpizlo@apple.com>

        Tiered compilation may introduce dangling pointers in constant buffers
        https://bugs.webkit.org/show_bug.cgi?id=70854

        Reviewed by Oliver Hunt.
        
        Tiered compilation now copies constant buffers, which fixes the regression in
        https://bugs.webkit.org/show_bug.cgi?id=70246. No new tests because this
        regression relies on a subtle interleaving of optimized compilation and garbage
        collection, and cannot be reproduced in a simple test.
        
        This also adds some new debug support, which was used to fix this bug and is
        likely to be useful in the future.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::copyDataFrom):
        (JSC::CodeBlock::usesOpcode):
        * bytecode/CodeBlock.h:
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):

2011-10-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Fixing Windows build after r98367

        Unreviewed build fix

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-10-25  Yuqiang Xian  <yuqiang.xian@intel.com>

        Add missing DFG file entries to the make lists for GTK and Qt ports
        https://bugs.webkit.org/show_bug.cgi?id=70806

        Reviewed by Darin Adler.

        * GNUmakefile.list.am:
        * JavaScriptCore.pro:

2011-10-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add getOwnPropertySlot to MethodTable
        https://bugs.webkit.org/show_bug.cgi?id=69807

        Reviewed by Oliver Hunt.

        * JavaScriptCore.exp:
        * runtime/ClassInfo.h: Added both versions of getOwnPropertySlot to the MethodTable.
        * runtime/JSCell.h: Changed getOwnPropertySlot to be protected so other classes can 
        reference it in their MethodTables.

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

        Need to support marking of multiple nested codeblocks when compiling
        https://bugs.webkit.org/show_bug.cgi?id=70832

        Reviewed by Gavin Barraclough.

        When inlining a function we end up with multiple codeblocks being
        compiled at the same time, so we need to support a list of live
        codeblocks.

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

2011-10-24  Yuqiang Xian  <yuqiang.xian@intel.com>

        DFG JIT 32_64 - fillInteger should accept DataFormatJSInteger
        https://bugs.webkit.org/show_bug.cgi?id=70798

        Reviewed by Filip Pizlo.

        When filling an integer for a known integer node (not speculated), it
        should accept DataFormatJSInteger as well.

        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::fillInteger):

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

        Build fix: removed some cases of threadsafeCopy() that I missed in
        my previous patch.

        * JavaScriptCore.order:

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

        Removed SharedUChar and tightened language around its previous uses
        https://bugs.webkit.org/show_bug.cgi?id=70698

        Reviewed by David Levin.

        - Removed SharedUChar because most of its functionality has moved into
        other abstraction layers, and we want remaining clients to choose their
        abstractions explicitly instead of relying on StringImpl to provide this
        behavior implicitly, since we think they can sometimes make more efficient
        choices.

        - Renamed "threadSafeCopy" and "crossThreadCopy" to "isolatedCopy" because
        the former names could give the impression that the resulting object was
        thread-safe, but actually it's just an isolated copy, which is not
        thread-safe by itself, but can be used to implement a thread-safe
        algorithm through isolation.

        * wtf/CrossThreadRefCounted.h: Removed.

        * JavaScriptCore.exp: Export!

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::~StringImpl): Removed the stuff mentioned above.

        * wtf/text/StringImpl.h:
        (WTF::StringImpl::length): Ditto.

        (WTF::StringImpl::isolatedCopy): Inlined this, since it's now trivial.

        * wtf/text/WTFString.cpp:
        (WTF::String::isolatedCopy):
        * wtf/text/WTFString.h: Updated for StringImpl changes.

        * API/OpaqueJSString.h:
        * GNUmakefile.list.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.order:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/OwnFastMallocPtr.h:
        * wtf/RefCounted.h:
        * wtf/SizeLimits.cpp:
        * wtf/ThreadSafeRefCounted.h:
        * wtf/wtf.pri:
        * yarr/YarrPattern.h: Updated these files to accomodate removal of
        CrossThreadRefCounted.h.

2011-10-24  Oliver Hunt  <oliver@apple.com>

        Crash in void JSC::validateCell<JSC::RegExp*>(JSC::RegExp*)
        https://bugs.webkit.org/show_bug.cgi?id=70689

        Reviewed by Filip Pizlo.

        While performing codegen we need to make the GlobalData explicitly
        aware of the codeblock being compiled, as compilation may trigger GC
        and CodeBlock holds GC values, but has not yet been assigned to its
        owner executable.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::~BytecodeGenerator):
        * bytecompiler/BytecodeGenerator.h:
        * heap/AllocationSpace.cpp:
        (JSC::AllocationSpace::allocateSlowCase):
        * heap/Heap.cpp:
        (JSC::Heap::markRoots):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::startedCompiling):
        (JSC::JSGlobalData::finishedCompiling):

2011-10-24  Filip Pizlo  <fpizlo@apple.com>

        Object-or-other branch speculation may corrupt the state for OSR if the child of the
        branch is an integer
        https://bugs.webkit.org/show_bug.cgi?id=70777

        Reviewed by Oliver Hunt.

        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):

2011-10-24  Filip Pizlo  <fpizlo@apple.com>

        op_new_array_buffer is not inlined correctly
        https://bugs.webkit.org/show_bug.cgi?id=70770

        Reviewed by Oliver Hunt.
        
        Disabled inlining of op_new_array_buffer, for now.

        * dfg/DFGCapabilities.h:
        (JSC::DFG::canInlineOpcode):

2011-10-24  Yuqiang Xian  <yuqiang.xian@intel.com>

        Add boolean speculations to DFG JIT 32_64
        https://bugs.webkit.org/show_bug.cgi?id=70706

        Reviewed by Filip Pizlo.

        Different from the boolean speculations in DFG 64, the boolean
        speculations in DFG 32_64 will use a 32bit GPR to hold the primitive
        boolean instead of a JSBoolean. This choice is not only for
        performance, but also to save a register as we're short of registers on
        X86.
        To accomplish this we make use of DataFormatBoolean, allow a value to
        be represented as a primitive boolean and converted from/to a
        JSBoolean.
        This patch also fixes SpillOrder in 32_64, which should be different
        from 64, and fixes needDataFormatConversion logic in 32_64.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::branchTest32):
            We don't expect byte test actually as it doesn't work for registers
            esp..edi on X86.
        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::needDataFormatConversion):
        (JSC::DFG::GenerationInfo::initBoolean):
        (JSC::DFG::GenerationInfo::gpr):
        (JSC::DFG::GenerationInfo::fillInteger):
        (JSC::DFG::GenerationInfo::fillBoolean):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::checkConsistency):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::use):
        (JSC::DFG::JITCodeGenerator::silentSpillGPR):
        (JSC::DFG::JITCodeGenerator::silentFillGPR):
        (JSC::DFG::JITCodeGenerator::spill):
        (JSC::DFG::cellResult):
        (JSC::DFG::booleanResult):
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompareNull):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq):
        * dfg/DFGJITCompiler32_64.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::ValueSource::dump):
        (JSC::DFG::ValueRecovery::dump):
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::ValueSource::forPrediction):
        (JSC::DFG::ValueRecovery::alreadyInRegisterFileAsUnboxedBoolean):
        (JSC::DFG::ValueRecovery::inGPR):
        (JSC::DFG::ValueRecovery::gpr):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
        (JSC::DFG::SpeculativeJIT::compileObjectEquality):
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-24  Mark Hahnenberg  <mhahnenberg@apple.com>

        Fixing Windows build

        Unreviewed build fix

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-10-24  Yuqiang Xian  <yuqiang.xian@intel.com>

        BitVector isInline check could fail
        https://bugs.webkit.org/show_bug.cgi?id=70691

        Reviewed by Geoffrey Garen.

        Current BitVector uses the highest bit of m_bitsOrPointer to indicate
        whether it's an inlined bit set or a pointer to an outOfLine bit set.
        This check may fail in case the pointer also has the highest bit set,
        which is surely possible on IA32 (Linux).
        In this case the check failure can result in unexpected behaviors,
        for example if the BitVector is incorrectly determined as having an
        inlined bit set, then setting a bit exceeding maxInlineBits will wrongly
        modify the memory adjacent to the BitVector object.
        This fix is to use the lowest bit of m_bitsOrPointer to indicate inline
        or outofline, based on the assumption that the pointer to OutOfLineBits
        should be 4 or 8 byte aligned.
        We could mark the lowest bit (bit 0) with 1 for inlined bit set,
        and bits 1~bitsInPointer are used for bit set/test.
        In this case we need do one bit more shift for bit set/test.

        * wtf/BitVector.cpp:
        (WTF::BitVector::resizeOutOfLine):
        * wtf/BitVector.h:
        (WTF::BitVector::quickGet):
        (WTF::BitVector::quickSet):
        (WTF::BitVector::quickClear):
        (WTF::BitVector::makeInlineBits):
        (WTF::BitVector::isInline):

2011-10-24  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename static getOwnPropertySlot to getOwnPropertySlotByIndex
        https://bugs.webkit.org/show_bug.cgi?id=70271

        Reviewed by Darin Adler.

        Renaming versions of getOwnPropertySlot that use an unsigned as the property
        name to "getOwnPropertySlotByIndex" in preparation for adding them to the 
        MethodTable, which requires unique names for each method.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/Arguments.cpp:
        (JSC::Arguments::getOwnPropertySlotVirtual):
        (JSC::Arguments::getOwnPropertySlotByIndex):
        * runtime/Arguments.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertySlotVirtual):
        (JSC::JSArray::getOwnPropertySlotByIndex):
        (JSC::JSArray::getOwnPropertySlot):
        * runtime/JSArray.h:
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::getOwnPropertySlotVirtual):
        (JSC::JSByteArray::getOwnPropertySlotByIndex):
        * runtime/JSByteArray.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::getOwnPropertySlotVirtual):
        (JSC::JSCell::getOwnPropertySlotByIndex):
        * runtime/JSCell.h:
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::getOwnPropertySlotVirtual):
        (JSC::JSNotAnObject::getOwnPropertySlotByIndex):
        * runtime/JSNotAnObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::getOwnPropertySlotVirtual):
        (JSC::JSObject::getOwnPropertySlotByIndex):
        * runtime/JSObject.h:
        * runtime/JSString.cpp:
        (JSC::JSString::getOwnPropertySlotVirtual):
        (JSC::JSString::getOwnPropertySlotByIndex):
        * runtime/JSString.h:
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::getOwnPropertySlotVirtual):
        (JSC::ObjectPrototype::getOwnPropertySlotByIndex):
        * runtime/ObjectPrototype.h:
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::getOwnPropertySlotVirtual):
        (JSC::RegExpMatchesArray::getOwnPropertySlotByIndex):
        * runtime/StringObject.cpp:
        (JSC::StringObject::getOwnPropertySlotVirtual):
        (JSC::StringObject::getOwnPropertySlotByIndex):
        * runtime/StringObject.h:

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

        Interpreter build fix after r98179.

        * bytecode/CodeBlock.h:
        Moved CodeBlock::baselineVersion() into ENABLE(JIT) block,
        since it is only used there.

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

        Fixed a typo Darin spotted.

        * wtf/StringHasher.h:
        (WTF::StringHasher::hash): Expelliarmus!

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

        Removed StringImpl::createStrippingNullCharacters
        https://bugs.webkit.org/show_bug.cgi?id=70700

        Reviewed by David Levin.
        
        It was unused.

        * JavaScriptCore.exp:
        * wtf/text/StringImpl.cpp:
        * wtf/text/StringImpl.h:

2011-10-22  Filip Pizlo  <fpizlo@apple.com>

        DFG should inline constructors
        https://bugs.webkit.org/show_bug.cgi?id=70675

        Reviewed by Oliver Hunt.
        
        Adds support for inlining constructors. Also fixes two pathologies
        uncovered along the way: CheckMethod claimed that it never returned a
        result (causing CheckMethod -> SetLocal -> GetLocal sequences to
        result in the GetLocal doing OSR exit), and get_by_id parsing never
        checked if it was hot in slow path. Also fiddled with inlining
        heuristics; it appears that for now, the more inlining, the happier
        V8 is. Finally, a bug was uncovered where a silent spill of a boxed
        integer that had previously been spilled unboxed causes the silent
        fill to forget to unbox.
        
        This appears to be a 4% speed-up on V8 in their harness, or a 1%
        speed-up in my harness. The difference is due to warm-up: in my
        harness we see significant amounts of time spent in compilation, but
        in V8's harness compilation gets amortizes. Profiling indicates that
        we have the potential for a 5% win from basic optimizations like
        generating OSR exits lazily and holding onto bytecode longer.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleCall):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::handleMinMax):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::mightInlineFunctionForConstruct):
        (JSC::DFG::canInlineOpcode):
        (JSC::DFG::mightInlineFunctionFor):
        (JSC::DFG::canInlineFunctionFor):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::silentFillGPR):
        * runtime/Executable.h:
        (JSC::isCall):
        (JSC::ExecutableBase::intrinsicFor):
        * runtime/Heuristics.cpp:
        (JSC::Heuristics::initializeHeuristics):
        * runtime/Heuristics.h:

2011-10-23  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] Remove RopeImpl.{h,cpp} from the gyp projects
        https://bugs.webkit.org/show_bug.cgi?id=70703

        Reviewed by Kent Tamura.

        runtime/RopeImpl.{h,cpp} were removed in r97872, remove references
        to these files from the gyp project files.

        * JavaScriptCore.gypi:

2011-10-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add deleteProperty to the MethodTable
        https://bugs.webkit.org/show_bug.cgi?id=70162

        Reviewed by Sam Weinig.

        * JavaScriptCore.exp:
        * runtime/ClassInfo.h: Added both versions of deleteProperty to the MethodTable.
        * runtime/JSFunction.h: Changed JSFunction::deleteProperty to 
        be protected rather than private for subclasses who don't provide their own
        implementation.

2011-10-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove getConstructDataVirtual
        https://bugs.webkit.org/show_bug.cgi?id=70638

        Reviewed by Darin Adler.

        Removed all declarations and definitions of getConstructDataVirtual.
        Also replaced all call sites to getConstructDataVirtual with a 
        corresponding lookup in the MethodTable.

        * API/JSCallbackConstructor.cpp:
        * API/JSCallbackConstructor.h:
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        * API/JSObjectRef.cpp:
        (JSObjectIsConstructor):
        (JSObjectCallAsConstructor):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * dfg/DFGOperations.cpp:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/ArrayConstructor.cpp:
        * runtime/ArrayConstructor.h:
        * runtime/BooleanConstructor.cpp:
        * runtime/BooleanConstructor.h:
        * runtime/DateConstructor.cpp:
        * runtime/DateConstructor.h:
        * runtime/Error.h:
        (JSC::StrictModeTypeErrorFunction::getConstructData):
        * runtime/ErrorConstructor.cpp:
        * runtime/ErrorConstructor.h:
        * runtime/FunctionConstructor.cpp:
        * runtime/FunctionConstructor.h:
        * runtime/JSCell.cpp:
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        * runtime/JSFunction.h:
        * runtime/JSObject.h:
        (JSC::getConstructData):
        * runtime/NativeErrorConstructor.cpp:
        * runtime/NativeErrorConstructor.h:
        * runtime/NumberConstructor.cpp:
        * runtime/NumberConstructor.h:
        * runtime/ObjectConstructor.cpp:
        * runtime/ObjectConstructor.h:
        * runtime/RegExpConstructor.cpp:
        * runtime/RegExpConstructor.h:
        * runtime/StringConstructor.cpp:
        * runtime/StringConstructor.h:

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

        Try to fix the SL build.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry): Cast
        away int vs unisgned warning.

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

        Separated string lifetime bits from character buffer state bits
        https://bugs.webkit.org/show_bug.cgi?id=70673

        Reviewed by Anders Carlsson.
        
        Moved the static/immortal bit into the bottom bit of the refcount, and
        moved all other bits into the high bits of the hash code.
        
        This is the first step toward a new Characters/PassString class, and it
        makes ref/deref slightly more efficient.

        * create_hash_table:
        * wtf/StringHasher.h:
        (WTF::StringHasher::hash): Tweaked the string hashing function to leave
        the top bits clear, so they can be used as flags.
        
        Fixed some small differences between the PERL copy of this function and
        the C++ copy of this function, which could have in theory caused subtle
        crashes.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::sharedBuffer):
        (WTF::StringImpl::createWithTerminatingNullCharacter):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::StringImpl):
        (WTF::StringImpl::cost): Renamed s_refCountFlagShouldReportedCost to
        s_didReportExtraCost, since the original name was both self-contradictory
        and used as a double-negative.

        (WTF::StringImpl::isIdentifier):
        (WTF::StringImpl::setIsIdentifier):
        (WTF::StringImpl::hasTerminatingNullCharacter):
        (WTF::StringImpl::isAtomic):
        (WTF::StringImpl::setIsAtomic):
        (WTF::StringImpl::setHash):
        (WTF::StringImpl::rawHash):
        (WTF::StringImpl::hasHash):
        (WTF::StringImpl::existingHash):
        (WTF::StringImpl::hash):
        (WTF::StringImpl::hasOneRef):
        (WTF::StringImpl::ref):
        (WTF::StringImpl::deref):
        (WTF::StringImpl::bufferOwnership):
        (WTF::StringImpl::isStatic): Moved the static/immortal bit into the bottom
        bit of the refcount. Now, all lifetime information lives in the refcount
        field. Moved the other bits into the hash code field.

2011-10-21  Filip Pizlo  <fpizlo@apple.com>

        DFG inlining sometimes fails to reset constant references
        https://bugs.webkit.org/show_bug.cgi?id=70668

        Reviewed by Anders Carlsson.
        
        Reset constant references when we need to (new block created) and not
        when we don't (change of inlining depth).

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::prepareToParseBlock):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::parseCodeBlock):

2011-10-21  Filip Pizlo  <fpizlo@apple.com>

        DFG should have inlining
        https://bugs.webkit.org/show_bug.cgi?id=69996

        Reviewed by Oliver Hunt.
        
        Implements inlining that's hooked into the bytecode parser. Only
        works for calls, for now, though nothing fundamentally prevents us
        from inlining constructor calls. 2% overall speed-up on all
        benchmarks. 7% speed-up on V8 (around 34% and 27% on deltablue and
        richards respectively), neutral on Kraken and SunSpider. 
        
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitAggregate):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::baselineVersion):
        (JSC::CodeBlock::setInstructionCount):
        (JSC::CodeBlock::likelyToTakeSlowCase):
        (JSC::CodeBlock::couldTakeSlowCase):
        (JSC::CodeBlock::likelyToTakeSpecialFastCase):
        (JSC::CodeBlock::likelyToTakeDeepestSlowCase):
        (JSC::CodeBlock::likelyToTakeAnySlowCase):
        * bytecode/CodeOrigin.h:
        (JSC::CodeOrigin::inlineDepthForCallFrame):
        (JSC::CodeOrigin::inlineDepth):
        (JSC::CodeOrigin::operator==):
        (JSC::CodeOrigin::inlineStack):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::beginBasicBlock):
        (JSC::DFG::AbstractState::execute):
        (JSC::DFG::AbstractState::mergeStateAtTail):
        * dfg/DFGBasicBlock.h:
        (JSC::DFG::BasicBlock::BasicBlock):
        (JSC::DFG::BasicBlock::ensureLocals):
        (JSC::DFG::UnlinkedBlock::UnlinkedBlock):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::getDirect):
        (JSC::DFG::ByteCodeParser::get):
        (JSC::DFG::ByteCodeParser::setDirect):
        (JSC::DFG::ByteCodeParser::set):
        (JSC::DFG::ByteCodeParser::getLocal):
        (JSC::DFG::ByteCodeParser::getArgument):
        (JSC::DFG::ByteCodeParser::flush):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::~InlineStackEntry):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::remapOperand):
        (JSC::DFG::ByteCodeParser::handleInlining):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::processPhiStack):
        (JSC::DFG::ByteCodeParser::linkBlock):
        (JSC::DFG::ByteCodeParser::linkBlocks):
        (JSC::DFG::ByteCodeParser::handleSuccessor):
        (JSC::DFG::ByteCodeParser::determineReachability):
        (JSC::DFG::ByteCodeParser::buildOperandMapsIfNecessary):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        (JSC::DFG::ByteCodeParser::parseCodeBlock):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGCapabilities.cpp:
        (JSC::DFG::canHandleOpcodes):
        (JSC::DFG::canCompileOpcodes):
        (JSC::DFG::canInlineOpcodes):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::mightCompileEval):
        (JSC::DFG::mightCompileProgram):
        (JSC::DFG::mightCompileFunctionForCall):
        (JSC::DFG::mightCompileFunctionForConstruct):
        (JSC::DFG::mightInlineFunctionForCall):
        (JSC::DFG::mightInlineFunctionForConstruct):
        (JSC::DFG::canInlineOpcode):
        (JSC::DFG::canInlineOpcodes):
        (JSC::DFG::canInlineFunctionForCall):
        (JSC::DFG::canInlineFunctionForConstruct):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::printWhiteSpace):
        (JSC::DFG::Graph::dumpCodeOrigin):
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        (JSC::DFG::GetBytecodeBeginForBlock::operator()):
        (JSC::DFG::Graph::blockIndexForBytecodeOffset):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::decodedCodeMapFor):
        (JSC::DFG::JITCompiler::linkOSRExits):
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::debugCall):
        (JSC::DFG::JITCompiler::baselineCodeBlockFor):
        * dfg/DFGJITCompiler32_64.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasVariableAccessData):
        (JSC::DFG::Node::shouldGenerate):
        * dfg/DFGOperands.h:
        (JSC::DFG::Operands::ensureLocals):
        (JSC::DFG::Operands::setLocal):
        (JSC::DFG::Operands::getLocal):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::OSRExit::OSRExit):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::trueCallerFrameSlow):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::baselineCodeBlockFor):
        (JSC::FunctionExecutable::produceCodeBlockFor):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        * runtime/Executable.h:
        (JSC::FunctionExecutable::profiledCodeBlockFor):
        (JSC::FunctionExecutable::parameterCount):
        * runtime/Heuristics.cpp:
        (JSC::Heuristics::initializeHeuristics):
        * runtime/Heuristics.h:
        * runtime/JSFunction.h:

2011-10-21  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add put to the MethodTable
        https://bugs.webkit.org/show_bug.cgi?id=70439

        Reviewed by Oliver Hunt.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/ClassInfo.h: Added put and putByIndex to the MethodTable.
        * runtime/JSFunction.h: Changed access modifier for put to protected since some
        subclasses of JSFunction need to reference it in their MethodTables.

2011-10-21  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add finalizer to JSObject
        https://bugs.webkit.org/show_bug.cgi?id=70336

        Reviewed by Darin Adler.

        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::callDestructor): Skip the call to the destructor 
        if we're a JSFinalObject, since the finalizer takes care of things.
        * runtime/JSCell.h:
        (JSC::JSCell::~JSCell): Remove the GC validation due to a conflict with 
        future changes and the fact that we no longer always call the destructor, making 
        the information provided less useful.
        * runtime/JSObject.cpp:
        (JSC::JSObject::finalize): Add finalizer for JSObject.
        (JSC::JSObject::allocatePropertyStorage): The first time we need to allocate out-of-line
        property storage, we add a finalizer to ourself.
        * runtime/JSObject.h:

2011-10-21  Simon Hausmann  <simon.hausmann@nokia.com>

        Remove QtScript source code from WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=64088

        Reviewed by Tor Arne Vestbø.

        Removed dead code that isn't developed anymore.

        * JavaScriptCore.gypi:
        * JavaScriptCore.pri:
        * qt/api/QtScript.pro: Removed.
        * qt/api/qscriptconverter_p.h: Removed.
        * qt/api/qscriptengine.cpp: Removed.
        * qt/api/qscriptengine.h: Removed.
        * qt/api/qscriptengine_p.cpp: Removed.
        * qt/api/qscriptengine_p.h: Removed.
        * qt/api/qscriptfunction.cpp: Removed.
        * qt/api/qscriptfunction_p.h: Removed.
        * qt/api/qscriptoriginalglobalobject_p.h: Removed.
        * qt/api/qscriptprogram.cpp: Removed.
        * qt/api/qscriptprogram.h: Removed.
        * qt/api/qscriptprogram_p.h: Removed.
        * qt/api/qscriptstring.cpp: Removed.
        * qt/api/qscriptstring.h: Removed.
        * qt/api/qscriptstring_p.h: Removed.
        * qt/api/qscriptsyntaxcheckresult.cpp: Removed.
        * qt/api/qscriptsyntaxcheckresult.h: Removed.
        * qt/api/qscriptsyntaxcheckresult_p.h: Removed.
        * qt/api/qscriptvalue.cpp: Removed.
        * qt/api/qscriptvalue.h: Removed.
        * qt/api/qscriptvalue_p.h: Removed.
        * qt/api/qscriptvalueiterator.cpp: Removed.
        * qt/api/qscriptvalueiterator.h: Removed.
        * qt/api/qscriptvalueiterator_p.h: Removed.
        * qt/api/qtscriptglobal.h: Removed.
        * qt/benchmarks/benchmarks.pri: Removed.
        * qt/benchmarks/benchmarks.pro: Removed.
        * qt/benchmarks/qscriptengine/qscriptengine.pro: Removed.
        * qt/benchmarks/qscriptengine/tst_qscriptengine.cpp: Removed.
        * qt/benchmarks/qscriptvalue/qscriptvalue.pro: Removed.
        * qt/benchmarks/qscriptvalue/tst_qscriptvalue.cpp: Removed.
        * qt/tests/qscriptengine/qscriptengine.pro: Removed.
        * qt/tests/qscriptengine/tst_qscriptengine.cpp: Removed.
        * qt/tests/qscriptstring/qscriptstring.pro: Removed.
        * qt/tests/qscriptstring/tst_qscriptstring.cpp: Removed.
        * qt/tests/qscriptvalue/qscriptvalue.pro: Removed.
        * qt/tests/qscriptvalue/tst_qscriptvalue.cpp: Removed.
        * qt/tests/qscriptvalue/tst_qscriptvalue.h: Removed.
        * qt/tests/qscriptvalue/tst_qscriptvalue_generated_comparison.cpp: Removed.
        * qt/tests/qscriptvalue/tst_qscriptvalue_generated_init.cpp: Removed.
        * qt/tests/qscriptvalue/tst_qscriptvalue_generated_istype.cpp: Removed.
        * qt/tests/qscriptvalue/tst_qscriptvalue_generated_totype.cpp: Removed.
        * qt/tests/qscriptvalueiterator/qscriptvalueiterator.pro: Removed.
        * qt/tests/qscriptvalueiterator/tst_qscriptvalueiterator.cpp: Removed.
        * qt/tests/tests.pri: Removed.
        * qt/tests/tests.pro: Removed.

2011-10-21  Zheng Liu  <zheng.z.liu@intel.com>

        bytecompiler sometimes generates incorrect bytecode for put_by_id
        https://bugs.webkit.org/show_bug.cgi?id=70403

        Reviewed by Filip Pizlo.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::AssignDotNode::emitBytecode):
        (JSC::AssignBracketNode::emitBytecode):

2011-10-20  Filip Pizlo  <fpizlo@apple.com>

        DFG should not try to predict argument types by looking at the values of
        argument registers at the time of compilation
        https://bugs.webkit.org/show_bug.cgi?id=70578

        Reviewed by Oliver Hunt.

        * bytecode/CodeBlock.cpp:
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        (JSC::DFG::tryCompile):
        (JSC::DFG::tryCompileFunction):
        * dfg/DFGDriver.h:
        (JSC::DFG::tryCompileFunction):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::predictArgumentTypes):
        * dfg/DFGGraph.h:
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::compileOptimizedForCall):
        (JSC::FunctionExecutable::compileOptimizedForConstruct):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        * runtime/Executable.h:
        (JSC::FunctionExecutable::compileForCall):
        (JSC::FunctionExecutable::compileForConstruct):
        (JSC::FunctionExecutable::compileFor):
        (JSC::FunctionExecutable::compileOptimizedFor):

2011-10-20  Filip Pizlo  <fpizlo@apple.com>

        DFG call optimization handling will fail if the call had been unlinked due
        to the callee being optimized
        https://bugs.webkit.org/show_bug.cgi?id=70468

        Reviewed by Geoff Garen.
        
        If a call had ever been linked, we remember this fact as well as the function
        to which it was linked even if unlinkIncomingCalls() or unlinkCalls() are
        called.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitAggregate):
        * bytecode/CodeBlock.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::dfgLinkFor):
        * jit/JIT.cpp:
        (JSC::JIT::linkFor):

2011-10-20  Yuqiang Xian  <yuqiang.xian@intel.com>

        DFG JIT 32_64 - Fix ByteArray speculation
        https://bugs.webkit.org/show_bug.cgi?id=70571

        Reviewed by Filip Pizlo.

        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::ValueSource::forPrediction):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-20  Vincent Scheib  <scheib@chromium.org>

        MouseLock compile and run time flags.
        https://bugs.webkit.org/show_bug.cgi?id=70530

        Reviewed by Darin Fisher.

        * wtf/Platform.h:

2011-10-20  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename static deleteProperty to deletePropertyByIndex
        https://bugs.webkit.org/show_bug.cgi?id=70257

        Reviewed by Geoffrey Garen.

        Renaming versions of deleteProperty that use an unsigned as the property
        name to "deletePropertyByIndex" in preparation for adding them to the 
        MethodTable, which requires unique names for each method.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::deletePropertyVirtual):
        (JSC::::deletePropertyByIndex):
        * runtime/Arguments.cpp:
        (JSC::Arguments::deletePropertyVirtual):
        (JSC::Arguments::deletePropertyByIndex):
        * runtime/Arguments.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::deletePropertyVirtual):
        (JSC::JSArray::deletePropertyByIndex):
        * runtime/JSArray.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::deletePropertyVirtual):
        (JSC::JSCell::deletePropertyByIndex):
        * runtime/JSCell.h:
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::deletePropertyVirtual):
        (JSC::JSNotAnObject::deletePropertyByIndex):
        * runtime/JSNotAnObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::deletePropertyVirtual):
        (JSC::JSObject::deletePropertyByIndex):
        * runtime/JSObject.h:
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::deletePropertyVirtual):
        (JSC::RegExpMatchesArray::deletePropertyByIndex):

2011-10-20  Filip Pizlo  <fpizlo@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=70482
        DFG-related stubs in the old JIT should not be built if the DFG is disabled

        Reviewed by Zoltan Herczeg.
        
        Aiming for a slight code size/build time reduction if the DFG is not in
        play. This should also make further DFG development slightly easier since
        the bodies of these JIT stubs can now safely refer to things that are only
        declared when the DFG is enabled.

        * jit/JITStubs.cpp:
        * jit/JITStubs.h:

2011-10-19  Filip Pizlo  <fpizlo@apple.com>

        DFG ConvertThis emits slow code when the source node is known to be,
        but not predicted to be, a final object
        https://bugs.webkit.org/show_bug.cgi?id=70466

        Reviewed by Oliver Hunt.
        
        Added a new case in ConvertThis compilation.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-19  Filip Pizlo  <fpizlo@apple.com>

        Optimization triggers in the old JIT may sometimes fire repeatedly even
        though there is no optimization to be done
        https://bugs.webkit.org/show_bug.cgi?id=70467

        Reviewed by Oliver Hunt.
        
        If optimize_from_ret does nothing, it delays the next optimization trigger.
        This is performance-neutral.

        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Heuristics.cpp:
        (JSC::Heuristics::initializeHeuristics):

2011-10-19  Yuqiang Xian  <yuqiang.xian@intel.com>

        DFG JIT 32_64 - remove unnecessary double unboxings in fillDouble/fillSpeculateDouble
        https://bugs.webkit.org/show_bug.cgi?id=70460

        Reviewed by Filip Pizlo.

        As pointed out by Gavin in bug #70418, when a value is already in memory
        we can avoid loading it to two GPRs at first and then unboxing them to a FPR.
        This gives 9% improvement on Kraken if without the change in bug #70418,
        and 1% if based on the code with bug #70418 change.
        Performance is neutral in V8 and SunSpider.

        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::fillDouble):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):

2011-10-19  Gavin Barraclough  <barraclough@apple.com>

        Poisoning of strict caller,arguments inappropriately poisoning "in"
        https://bugs.webkit.org/show_bug.cgi?id=63398

        Reviewed by Oliver Hunt.

        This fixes the problem by correctly implementing the spec -
        the error should actually be being thrown from a standard JS getter/setter.
        This implements spec correct behaviour for strict mode JS functions & bound
        functions, I'll follow up with a patch to do the same for arguments.

        * runtime/JSBoundFunction.cpp:
        (JSC::JSBoundFunction::finishCreation):
            - Add the poisoned caller/arguments properties.
        * runtime/JSBoundFunction.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::finishCreation):
        (JSC::JSFunction::getOwnPropertySlot):
        (JSC::JSFunction::getOwnPropertyDescriptor):
        (JSC::JSFunction::put):
            - If the caller/arguments are accessed on a strict mode function, lazily add the ThrowTypeError getter.
        * runtime/JSFunction.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::createThrowTypeError):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::throwTypeErrorGetterSetter):
            - Add a ThrowTypeError type, per ES5 13.2.3.
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncThrowTypeError):
        * runtime/JSGlobalObjectFunctions.h:
            - Implementation of ThrowTypeError.
        * runtime/JSObject.cpp:
        (JSC::JSObject::initializeGetterSetterProperty):
        * runtime/JSObject.h:
            - This function adds a new property (must not exist already) that is an initialized getter/setter.

2011-10-19  Yuqiang Xian  <yuqiang.xian@intel.com>

        DFG JIT 32_64 - improve double boxing/unboxing
        https://bugs.webkit.org/show_bug.cgi?id=70418

        Reviewed by Gavin Barraclough.

        Double boxing/unboxing in DFG JIT 32_64 is currently implemented inefficiently,
        which tries to exchange data through memory.
        On X86 some SSE instructions can help us on such operations with better performance.
        This improves 32-bit DFG performance by 29% on Kraken, 7% on SunSpider,
        and 2% on V8, tested on Linux X86 (Core i7 Nehalem).

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::lshiftPacked):
        (JSC::MacroAssemblerX86Common::rshiftPacked):
        (JSC::MacroAssemblerX86Common::orPacked):
        (JSC::MacroAssemblerX86Common::moveInt32ToPacked):
        (JSC::MacroAssemblerX86Common::movePackedToInt32):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::movd_rr):
        (JSC::X86Assembler::psllq_i8r):
        (JSC::X86Assembler::psrlq_i8r):
        (JSC::X86Assembler::por_rr):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::boxDouble):
        (JSC::DFG::JITCodeGenerator::unboxDouble):
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::fillDouble):
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeUInt32ToNumber):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::boxDouble):
        (JSC::DFG::JITCompiler::unboxDouble):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::convertToDouble):
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-19  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        [EFL] Fix DSO linkage of wtf_efl.

        Unreviewed build fix.

        Need to add -ldl to jsc_efl (requested by dladdr).

        * wtf/CMakeListsEfl.txt:

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

        Removed StringImplBase, fusing it into StringImpl
        https://bugs.webkit.org/show_bug.cgi?id=70443

        Reviewed by Gavin Barraclough.

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.order:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::StringImpl):
        (WTF::StringImpl::ref):
        (WTF::StringImpl::length):
        * wtf/text/StringImplBase.h: Removed.
        * wtf/wtf.pri: Removed!

2011-10-19  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add getConstructData to the MethodTable
        https://bugs.webkit.org/show_bug.cgi?id=70163

        Reviewed by Geoffrey Garen.

        Adding getConstructData to the MethodTable in order to be able to 
        remove all calls to getConstructDataVirtual soon.  Part of the process 
        of de-virtualizing JSCell.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/ClassInfo.h:

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

        Support CanvasPixelArray in the DFG
        https://bugs.webkit.org/show_bug.cgi?id=70384

        Reviewed by Filip Pizlo.

        Add support for the old CanvasPixelArray optimisations to the
        DFG.  This removes the regression seen in the DFG when using
        a CPA.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::store8):
        (JSC::MacroAssemblerX86Common::truncateDoubleToInt32):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::movb_rm):
        (JSC::X86Assembler::X86InstructionFormatter::oneByteOp8):
        * bytecode/PredictedType.cpp:
        (JSC::predictionToString):
        (JSC::predictionFromClassInfo):
        * bytecode/PredictedType.h:
        (JSC::isByteArrayPrediction):
        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::initialize):
        (JSC::DFG::AbstractState::execute):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateByteArray):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::compileClampDoubleToByte):
        (JSC::DFG::SpeculativeJIT::compilePutByValForByteArray):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnByteArray):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * runtime/JSByteArray.h:
        (JSC::JSByteArray::offsetOfStorage):
        * wtf/ByteArray.cpp:
        * wtf/ByteArray.h:
        (WTF::ByteArray::offsetOfSize):
        (WTF::ByteArray::offsetOfData):

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

        Some rope cleanup following r97827
        https://bugs.webkit.org/show_bug.cgi?id=70398

        Reviewed by Oliver Hunt.

        9% speedup on date-format-xparb, neutral overall.
        
        - Removed RopeImpl*.
        - Removed JSString::m_fiberCount, since this can be deduced from other data.
        - Renamed a jsString() variant to jsStringFromArguments for clarity.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.order:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj: Removed RopeImpl*.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitLoadCharacterString):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::stringGetByValStubGenerator):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::stringGetByValStubGenerator):
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::loadJSStringArgument):
        * jit/ThunkGenerators.cpp:
        (JSC::stringCharLoad): Use a NULL m_value to signal rope-iness, instead
        of testing m_fiberCount, since m_fiberCount is gone now.

        * runtime/JSString.cpp:
        (JSC::JSString::RopeBuilder::expand):
        (JSC::JSString::visitChildren):
        (JSC::JSString::resolveRope):
        (JSC::JSString::resolveRopeSlowCase):
        (JSC::JSString::outOfMemory): Use a NULL fiber to indicate "last fiber
        in the vector" instead of testing m_fiberCount, since m_fiberCount is gone now.

        * runtime/JSString.h:
        (JSC::RopeBuilder::JSString):
        (JSC::RopeBuilder::finishCreation):
        (JSC::RopeBuilder::offsetOfLength):
        (JSC::RopeBuilder::isRope):
        (JSC::RopeBuilder::string): Removed m_fiberCount. Renamed
        jsString => jsStringFromArguments for clarity.

        * runtime/Operations.h:
        (JSC::jsStringFromArguments): Renamed.

        * runtime/RopeImpl.cpp: Removed.
        * runtime/RopeImpl.h: Removed.

        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::createEmptyString): Switched to StringImpl::empty,
        which is slightly faster.

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncConcat): Updated for rename.

        * wtf/text/StringImplBase.h:
        (WTF::StringImplBase::StringImplBase): Removed the concept of an invalid
        StringImpl, since this was only used by RopeImpl, which is now gone.

2011-10-19  Rafael Antognolli  <antognolli@profusion.mobi>

        [EFL] Fix DSO linkage of jsc_efl.
        https://bugs.webkit.org/show_bug.cgi?id=70412

        Unreviewed build fix.

        Need to add -ldl to jsc_efl (requested by dladdr).

        * shell/CMakeListsEfl.txt:

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

        Rolled out last Windows build fix because it was wrong.

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

        Rolled out last Windows build fix because it was wrong.

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

        Try to fix part of the Windows build.
        
        Export!

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

        Switched ropes from malloc memory to GC memory
        https://bugs.webkit.org/show_bug.cgi?id=70364

        Reviewed by Gavin Barraclough.

        ~1% SunSpider speedup. Neutral elsewhere. Removes one cause for strings
        having C++ destructors.

        * heap/MarkStack.cpp:
        (JSC::visitChildren): Call the JSString visitChildren function now,
        since it's no longer a no-op.

        * runtime/JSString.cpp:
        (JSC::JSString::~JSString): Moved this destructor out of line because
        it's called virtually, so there's no value to inlining.

        (JSC::JSString::RopeBuilder::expand): Switched RopeBuilder to be a thin
        initializing wrapper around JSString. JSString now represents ropes
        directly, rather than relying on an underlying malloc object.

        (JSC::JSString::visitChildren): Visit our rope fibers, since they're GC
        objects now.

        (JSC::JSString::resolveRope):
        (JSC::JSString::resolveRopeSlowCase):
        (JSC::JSString::outOfMemory): Updated for operating on JSStrings instead
        of malloc objects.

        (JSC::JSString::replaceCharacter): Removed optimizations for substringing
        ropes and replacing subsections of ropes. We want to reimplement versions
        of these optimizations in the future, but this patch already has good
        performance without them.

        * runtime/JSString.h:
        (JSC::RopeBuilder::JSString):
        (JSC::RopeBuilder::finishCreation):
        (JSC::RopeBuilder::createNull):
        (JSC::RopeBuilder::create):
        (JSC::RopeBuilder::createHasOtherOwner):
        (JSC::jsSingleCharacterString):
        (JSC::jsSingleCharacterSubstring):
        (JSC::jsNontrivialString):
        (JSC::jsString):
        (JSC::jsSubstring):
        (JSC::jsOwnedString): Lots of mechanical changes here. The two important
        things are: (1) The fibers in JSString::m_fibers are JSStrings now, not
        malloc objects; (2) I simplified the JSString constructor interface to
        only accept PassRefPtr<StringImpl>, instead of variations on that like
        UString, reducing refcount churn.

        * runtime/JSValue.h:
        * runtime/JSValue.cpp:
        (JSC::JSValue::toPrimitiveString): Updated this function to return a
        JSString instead of a UString, since that's what clients want now.

        * runtime/Operations.cpp:
        (JSC::jsAddSlowCase):
        * runtime/Operations.h:
        (JSC::jsString):
        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::createEmptyString): Updated for interface changes above.

        * runtime/StringConstructor.cpp:
        (JSC::constructWithStringConstructor):
        * runtime/StringObject.h:
        (JSC::StringObject::create): Don't create a new JSString if we already
        have a JSString.

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncConcat): Updated for interface changes above.

2011-10-18  Gavin Barraclough  <barraclough@apple.com>

        Errrk, fix partial commit of r97825!

        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncToISOString):

2011-10-18  Gavin Barraclough  <barraclough@apple.com>

        Date.prototype.toISOString fails to throw exception
        https://bugs.webkit.org/show_bug.cgi?id=70394

        Reviewed by Sam Weinig.

        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncToISOString):
            - Should throw a range error if the internal value is not finite.

2011-10-18  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename static put to putByIndex
        https://bugs.webkit.org/show_bug.cgi?id=70281

        Reviewed by Geoffrey Garen.

        Renaming versions of deleteProperty that use an unsigned as the property
        name to "deletePropertyByIndex" in preparation for adding them to the 
        MethodTable, which requires unique names for each method.

        * dfg/DFGOperations.cpp:
        (JSC::DFG::putByVal):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Arguments.cpp:
        (JSC::Arguments::putVirtual):
        (JSC::Arguments::putByIndex):
        * runtime/Arguments.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncMap):
        * runtime/JSArray.cpp:
        (JSC::JSArray::put):
        (JSC::JSArray::putVirtual):
        (JSC::JSArray::putByIndex):
        * runtime/JSArray.h:
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::putVirtual):
        (JSC::JSByteArray::putByIndex):
        * runtime/JSByteArray.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::putVirtual):
        (JSC::JSCell::putByIndex):
        * runtime/JSCell.h:
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::putVirtual):
        (JSC::JSNotAnObject::putByIndex):
        * runtime/JSNotAnObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::putVirtual):
        (JSC::JSObject::putByIndex):
        * runtime/JSObject.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpMatchesArray::fillArrayInstance):
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::putVirtual):
        (JSC::RegExpMatchesArray::putByIndex):

2011-10-18  Gavin Barraclough  <barraclough@apple.com>

        Array.prototype methods missing exception checks
        https://bugs.webkit.org/show_bug.cgi?id=70360

        Reviewed by Geoff Garen.

        Missing exception checks after calls to the static getProperty helper,
        these may result in the wrong exception being thrown (or an ASSERT being hit,
        as is currently the case running test-262).

        No performance impact.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncConcat):
        (JSC::arrayProtoFuncReverse):
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSlice):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        (JSC::arrayProtoFuncReduce):
        (JSC::arrayProtoFuncReduceRight):
        (JSC::arrayProtoFuncIndexOf):
        (JSC::arrayProtoFuncLastIndexOf):

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

        Always enable ENABLE(XPATH)
        https://bugs.webkit.org/show_bug.cgi?id=70217

        Reviewed by Eric Seidel.

        * Configurations/FeatureDefines.xcconfig:

2011-10-18  Gavin Barraclough  <barraclough@apple.com>

        Indexed arguments on the Arguments object should be enumerable.
        https://bugs.webkit.org/show_bug.cgi?id=70302

        Reviewed by Sam Weinig.

        See ECMA-262 5.1 chapter 10.6 step 11b.
        This is visible through a number of means, including Object.keys, Object.getOwnPropertyDescriptor, and operator in.

        * runtime/Arguments.cpp:
        (JSC::Arguments::getOwnPropertyDescriptor):
            - The 'enumerable' property should be true for indexed arguments.
        (JSC::Arguments::getOwnPropertyNames):
            - Don't guard the adding of indexed properties with 'IncludeDontEnumProperties'.

2011-10-18  Gustavo Noronha Silva  <gns@gnome.org>

        Fix distcheck.

        * GNUmakefile.list.am: fix a typo and add a missing header to the
        list.

2011-10-18  Balazs Kelemen  <kbalazs@webkit.org>

        ParallelJobs: maximum number of threads should be determined dynamically
        https://bugs.webkit.org/show_bug.cgi?id=68540

        Reviewed by Zoltan Herczeg.

        Add logic to determine the number of cores and use this as
        the maximum number of threads. The implementation currently
        covers Linux, Darwin, Windows, AIX, Solaris, OpenBSD and NetBSD.
        The patch was tested on Linux, Mac and Windows which was enough to
        cover all code path. It should work on the rest accoring to the
        documentation of those OS's. The hard coded constant is still used
        on uncovered OS's which should be fixed in the future.

        * wtf/ParallelJobs.h: Removed the default value of the requestedJobNumber
        argument because clients should always fill it and the 0 default value
        was incorrect anyway.
        (WTF::ParallelJobs::ParallelJobs):
        * wtf/ParallelJobsGeneric.cpp:
        (WTF::ParallelEnvironment::determineMaxNumberOfParallelThreads):
        * wtf/ParallelJobsGeneric.h:
        (WTF::ParallelEnvironment::ParallelEnvironment):

2011-10-17  Gavin Barraclough  <barraclough@apple.com>

        Reverted r997709, this caused test failures.

        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSObject.cpp:
        (JSC::JSObject::hasProperty):
        (JSC::JSObject::hasOwnProperty):

2011-10-17  Ryosuke Niwa  <rniwa@webkit.org>

        Rename deregister* to unregister*
        https://bugs.webkit.org/show_bug.cgi?id=70272

        Reviewed by Darin Adler.

        Renamed deregisterWeakMap to unregisterWeakMap.

        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::unregisterWeakMap):

2011-10-17  Gavin Barraclough  <barraclough@apple.com>

        Poisoning of strict caller/arguments inappropriately poisoning "in"
        https://bugs.webkit.org/show_bug.cgi?id=63398

        Reviewed by Sam Weinig.

        The problem here is that the has[Own]Property methods get the slot rather than
        the descriptor, and getting the slot may cause the property to be eagerly accessed.

        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
            - We don't expect hasProperty to ever throw. If it does, it won't get caught
              (since it is after the exception check), so ASSERT to guard against this.
        * runtime/JSObject.cpp:
        (JSC::JSObject::hasProperty):
        (JSC::JSObject::hasOwnProperty):
            - These methods should not check for the presence of the descriptor; never get the value.

2011-10-17  Gavin Barraclough  <barraclough@apple.com>

        Exception ordering in String.prototype.replace
        https://bugs.webkit.org/show_bug.cgi?id=70290

        If pattern is not a regexp, it should be converted toString before the replacement value has it's toString conversion called.

        Reviewed by Oliver Hunt.

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace):

2011-10-17  Filip Pizlo  <fpizlo@apple.com>

        DFG bytecode parser should understand inline stacks
        https://bugs.webkit.org/show_bug.cgi?id=70278

        Reviewed by Oliver Hunt.
        
        The DFG bytecode parser is now capable of parsing multiple code blocks at
        once. This remains turned off since not all inlining functionality is
        implemented.       
        
        This required making a few changes elsewhere in the system. The bytecode
        parser now may do some of the same things that the bytecode generator does,
        like allocating constants and identifiers. Basic block linking relies on
        bytecode indices, which are only meaningful within the context of one basic
        block. This is fine, so long as linking is done eagerly whenever switching
        from one code block to another.

        * bytecode/CodeOrigin.h:
        (JSC::CodeOrigin::CodeOrigin):
        * bytecompiler/BytecodeGenerator.h:
        * dfg/DFGBasicBlock.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::get):
        (JSC::DFG::ByteCodeParser::set):
        (JSC::DFG::ByteCodeParser::getThis):
        (JSC::DFG::ByteCodeParser::setThis):
        (JSC::DFG::ByteCodeParser::currentCodeOrigin):
        (JSC::DFG::ByteCodeParser::getPrediction):
        (JSC::DFG::ByteCodeParser::makeSafe):
        (JSC::DFG::ByteCodeParser::makeDivSafe):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::executable):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::~InlineStackEntry):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::remapOperand):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::linkBlock):
        (JSC::DFG::ByteCodeParser::linkBlocks):
        (JSC::DFG::ByteCodeParser::setupPredecessors):
        (JSC::DFG::ByteCodeParser::buildOperandMapsIfNecessary):
        (JSC::DFG::ByteCodeParser::InlineStackEntry::InlineStackEntry):
        (JSC::DFG::ByteCodeParser::parseCodeBlock):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGGraph.h:
        (JSC::DFG::GetBytecodeBeginForBlock::GetBytecodeBeginForBlock):
        (JSC::DFG::GetBytecodeBeginForBlock::operator()):
        (JSC::DFG::Graph::blockIndexForBytecodeOffset):
        * dfg/DFGNode.h:
        * runtime/Identifier.h:
        (JSC::IdentifierMapIndexHashTraits::emptyValue):
        * runtime/JSValue.h:
        * wtf/StdLibExtras.h:
        (WTF::binarySearchWithFunctor):

2011-10-17  Gavin Barraclough  <barraclough@apple.com>

        Incorrect behavior from String match/search & undefined pattern
        https://bugs.webkit.org/show_bug.cgi?id=70286

        Reviewed by Sam weinig.

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncMatch):
            - In case of undefined, pattern is "".
        (JSC::stringProtoFuncSearch):
            - In case of undefined, pattern is "".

2011-10-17  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=70207
        After deleting __defineSetter__, it is absent but appears in name list

        Reviewed by Darin Adler.

        * runtime/JSObject.cpp:
        (JSC::JSObject::getOwnPropertyNames):
            - This should check whether static functions have been reified.

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

        Mac build fix.

        * JavaScriptCore.exp: Export!

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

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export!

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

        Windows build fix.

        * heap/HandleStack.cpp: Added a missing #include.

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

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed no
        longer existant symbol.

        * heap/MarkStack.cpp:
        (JSC::MarkStackArray::shrinkAllocation): Cast to the right type.

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

        Simplified GC marking logic
        https://bugs.webkit.org/show_bug.cgi?id=70258

        Reviewed by Filip Pizlo.
        
        No perf. change.
        
        This is a first step toward GC allocating string backing stores, starting
        with ropes. It also enables future simplifications and optimizations.
        
        - Replaced some complex mark stack logic with a simple linear stack of
        JSCell pointers.
        
        - Replaced logic for short-circuiting marking based on JSType and/or
        Structure flags with special cases for object, array, and string.
        
        - Fiddled with inlining for better codegen.

        * JavaScriptCore.exp:
        * heap/HandleStack.cpp: Build!

        * heap/Heap.cpp:
        (JSC::Heap::Heap): Provide more vptrs to SlotVisitor, for use in marking.

        * heap/HeapRootVisitor.h: Removed unused functions that no longer build.

        * heap/MarkStack.cpp:
        (JSC::MarkStackArray::MarkStackArray):
        (JSC::MarkStackArray::~MarkStackArray):
        (JSC::MarkStackArray::expand):
        (JSC::MarkStackArray::shrinkAllocation):
        (JSC::MarkStack::reset):
        (JSC::visitChildren):
        (JSC::SlotVisitor::drain):
        * heap/MarkStack.h:
        (JSC::MarkStack::MarkStack):
        (JSC::MarkStack::~MarkStack):
        (JSC::MarkStackArray::append):
        (JSC::MarkStackArray::removeLast):
        (JSC::MarkStackArray::isEmpty):
        (JSC::MarkStack::append):
        (JSC::MarkStack::appendUnbarrieredPointer):
        (JSC::MarkStack::internalAppend): Replaced complex mark set logic with
        simple linear stack.

        * heap/SlotVisitor.h:
        (JSC::SlotVisitor::SlotVisitor): Updated for above changes.

        * runtime/JSArray.cpp:
        (JSC::JSArray::visitChildren):
        * runtime/JSArray.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::visitChildren):
        * runtime/JSObject.h: Don't inline visitChildren; it's too big.

        * runtime/Structure.h:
        (JSC::MarkStack::internalAppend): Nixed the short-circuit for CompoundType
        because it prevented strings from owning GC pointers.

        * runtime/WriteBarrier.h:
        (JSC::MarkStack::appendValues): No need to validate; internalAppend will
        do that for us.

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

        Windows build fix after r97536, part 3

        * runtime/JSAPIValueWrapper.h:
        * runtime/JSObject.h:
        Use JS_EXPORTDATA to export the s_info members.

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

        Interpreter build fix after r97564

        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        Moved declaration of globalData variable into ENABLE(JIT) blocks, since it is only used
        there.

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

        Windows build fix after r97536, part 2

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Added back
        JSC::setUpStaticFunctionSlot with its new mangled name. SOrted the rest of the file while I
        was at it.

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

        Windows build fix after r97536

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed export of
        JSC::setUpStaticFunctionSlot, which no longer exists. Also removed incorrect exports of
        s_info members, which need to be exported via JS_EXPORTDATA instead.

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

        Interpreter build fix after r97436, r97506, r97532 and r97537.

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

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

        Always disable ENABLE(ON_FIRST_TEXTAREA_FOCUS_SELECT_ALL) and delete associated code
        https://bugs.webkit.org/show_bug.cgi?id=70216

        Reviewed by Eric Seidel.

        * wtf/Platform.h:

2011-10-16  Noel Gordon  <noel.gordon@gmail.com>

        [chromium] Remove PageAllocatorSymbian.h, OSAllocatorSymbian.cpp, gtk/ThreadingGtk.cpp from gyp project files
        https://bugs.webkit.org/show_bug.cgi?id=70205

        Reviewed by James Robinson.

        wtf/PageAllocatorSymbian.h and wtf/OSAllocatorSymbian.cpp were removed in r97557.
        wtf/gtk/ThreadingGtk.cpp was removed in r97269.

        * JavaScriptCore.gypi:

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

        Always enable ENABLE(DOM_STORAGE)
        https://bugs.webkit.org/show_bug.cgi?id=70189

        Reviewed by Eric Seidel.

        * Configurations/FeatureDefines.xcconfig:

2011-10-15  Dan Horák <dan@danny.cz>

        The s390 and s390x architectures both use 64-bit double type
        that conforms to the IEEE-754 standard.

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

        Reviewed by Gavin Barraclough.

        * wtf/dtoa/utils.h:

2011-10-14  Filip Pizlo  <fpizlo@apple.com>

        FunctionExecutable should expose the ability to create unattached FunctionCodeBlocks
        https://bugs.webkit.org/show_bug.cgi?id=70157

        Reviewed by Geoff Garen.
        
        Added FunctionExecutable::produceCodeBlockFor() and rewired compileForCallInternal()
        and compileForConstructInternal() to use this method. This required more cleanly
        exposing some of CodeBlock's tiering functionality and moving the CompilationKind
        enum to Executable.h, as this was the easiest way to make it available to the
        declarations/definitions of CodeBlock, FunctionExecutable, and BytecodeGenerator.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::copyDataFrom):
        (JSC::CodeBlock::copyDataFromAlternative):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::setAlternative):
        * bytecompiler/BytecodeGenerator.h:
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::produceCodeBlockFor):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        * runtime/Executable.h:
        (JSC::FunctionExecutable::codeBlockFor):

2011-10-15  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        [Qt] [Symbian] Remove support for the Symbian platform for the QtWebKit port
        https://bugs.webkit.org/show_bug.cgi?id=69920

        Reviewed by Kenneth Rohde Christiansen.

        * JavaScriptCore.pri:
        * JavaScriptCore.pro:
        * heap/MarkStack.h:
        (JSC::::shrinkAllocation):
        * jit/ExecutableAllocator.cpp:
        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::cacheFlush):
        * jit/JITStubs.cpp:
        * jsc.pro:
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        * runtime/DatePrototype.cpp:
        (JSC::formatLocaleDate):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncLastIndexOf):
        * runtime/TimeoutChecker.cpp:
        (JSC::getCPUTime):
        * wtf/Assertions.cpp:
        * wtf/Assertions.h:
        * wtf/Atomics.h:
        * wtf/MathExtras.h:
        * wtf/OSAllocator.h:
        (WTF::OSAllocator::decommitAndRelease):
        * wtf/OSAllocatorSymbian.cpp: Removed.
        * wtf/OSRandomSource.cpp:
        (WTF::cryptographicallyRandomValuesFromOS):
        * wtf/PageAllocation.h:
        * wtf/PageAllocatorSymbian.h: Removed.
        * wtf/PageBlock.cpp:
        * wtf/Platform.h:
        * wtf/StackBounds.cpp:
        * wtf/wtf.pri:

2011-10-15  Yuqiang Xian  <yuqiang.xian@intel.com>

        Trivial fix for a missing change in r97512
        https://bugs.webkit.org/show_bug.cgi?id=70166

        Reviewed by Gavin Barraclough.

        * dfg/DFGJITCompiler32_64.cpp:
        (JSC::DFG::JITCompiler::link):

2011-10-14  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename getOwnPropertySlot to getOwnPropertySlotVirtual
        https://bugs.webkit.org/show_bug.cgi?id=69810

        Reviewed by Geoffrey Garen.

        Renamed the virtual version of getOwnPropertySlot to getOwnPropertySlotVirtual
        in preparation for when we add the static getOwnPropertySlot to the MethodTable 
        in ClassInfo.

        Also added a few static getOwnPropertySlot functions where they had been overlooked 
        before (especially in CodeGeneratorJS.pm).

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::getOwnPropertySlotVirtual):
        (JSC::::getOwnPropertySlot):
        (JSC::::getOwnPropertyDescriptor):
        (JSC::::staticFunctionGetter):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::getOwnPropertySlotVirtual):
        (JSC::DebuggerActivation::getOwnPropertySlot):
        * debugger/DebuggerActivation.h:
        * runtime/Arguments.cpp:
        (JSC::Arguments::getOwnPropertySlotVirtual):
        (JSC::Arguments::getOwnPropertySlot):
        * runtime/Arguments.h:
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::getOwnPropertySlotVirtual):
        (JSC::ArrayConstructor::getOwnPropertySlot):
        * runtime/ArrayConstructor.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::getOwnPropertySlotVirtual):
        * runtime/ArrayPrototype.h:
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::getOwnPropertySlotVirtual):
        * runtime/BooleanPrototype.h:
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::getOwnPropertySlotVirtual):
        * runtime/DateConstructor.h:
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::getOwnPropertySlotVirtual):
        * runtime/DatePrototype.h:
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::getOwnPropertySlotVirtual):
        * runtime/ErrorPrototype.h:
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::getOwnPropertySlotVirtual):
        * runtime/JSActivation.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertySlotVirtual):
        (JSC::JSArray::getOwnPropertySlot):
        * runtime/JSArray.h:
        * runtime/JSBoundFunction.cpp:
        (JSC::JSBoundFunction::getOwnPropertySlotVirtual):
        * runtime/JSBoundFunction.h:
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::getOwnPropertySlotVirtual):
        * runtime/JSByteArray.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::getOwnPropertySlotVirtual):
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertySlotVirtual):
        (JSC::JSFunction::getOwnPropertyDescriptor):
        (JSC::JSFunction::getOwnPropertyNames):
        (JSC::JSFunction::put):
        * runtime/JSFunction.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::getOwnPropertySlotVirtual):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::hasOwnPropertyForWrite):
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::getOwnPropertySlotVirtual):
        * runtime/JSNotAnObject.h:
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Holder::appendNextProperty):
        (JSC::JSONObject::getOwnPropertySlotVirtual):
        (JSC::Walker::walk):
        * runtime/JSONObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::getOwnPropertySlotVirtual):
        (JSC::JSObject::getOwnPropertySlot):
        (JSC::JSObject::hasOwnProperty):
        * runtime/JSObject.h:
        (JSC::JSObject::getOwnPropertySlotVirtual):
        (JSC::JSCell::fastGetOwnPropertySlot):
        (JSC::JSObject::getPropertySlot):
        (JSC::JSValue::get):
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::getOwnPropertySlotVirtual):
        * runtime/JSStaticScopeObject.h:
        * runtime/JSString.cpp:
        (JSC::JSString::getOwnPropertySlotVirtual):
        (JSC::JSString::getOwnPropertySlot):
        * runtime/JSString.h:
        * runtime/Lookup.h:
        (JSC::getStaticPropertySlot):
        (JSC::getStaticFunctionSlot):
        (JSC::getStaticValueSlot):
        * runtime/MathObject.cpp:
        (JSC::MathObject::getOwnPropertySlotVirtual):
        * runtime/MathObject.h:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::getOwnPropertySlotVirtual):
        * runtime/NumberConstructor.h:
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::getOwnPropertySlotVirtual):
        * runtime/NumberPrototype.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::getOwnPropertySlotVirtual):
        * runtime/ObjectConstructor.h:
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::getOwnPropertySlotVirtual):
        * runtime/ObjectPrototype.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::getOwnPropertySlotVirtual):
        * runtime/RegExpConstructor.h:
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::getOwnPropertySlotVirtual):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::getOwnPropertySlotVirtual):
        * runtime/RegExpObject.h:
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::getOwnPropertySlotVirtual):
        * runtime/RegExpPrototype.h:
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::getOwnPropertySlotVirtual):
        * runtime/StringConstructor.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::getOwnPropertySlotVirtual):
        * runtime/StringObject.h:
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::getOwnPropertySlotVirtual):
        * runtime/StringPrototype.h:

2011-10-14  Gavin Barraclough  <baraclough@apple.com>

        Most built-in properties are not deletable
        https://bugs.webkit.org/show_bug.cgi?id=61014

        Reviewed by Filip Pizlo.

        Our static hash tables don't allow for deleting properties.
        This is the cause of a bunch of expected failures in LayoutTests/sputnik.

        This fixes the problem by reifying all static functions immediately prior
        to the first deletion.  Reification is tracked by a flag on the structure,
        so properties will no longer 'bounce-back' on later access.

        Theoretically there could probably also be an issue with custom accessor
        properties, but we probably do not really require any of these to be
        Configurable anyway. I'll follow up with a separate patch to address this.

        * runtime/ClassInfo.h:
        (JSC::ClassInfo::hasStaticProperties):
            - detects static property tables.
        * runtime/JSObject.cpp:
        (JSC::JSObject::deleteProperty):
            - call reifyStaticFunctions before deletion.
        (JSC::JSObject::reifyStaticFunctions):
            - If the class has static functions, set them up now.
        * runtime/JSObject.h:
        (JSC::JSObject::staticFunctionsReified):
            - returns true if static functions have been reified,
              and as such should no longer be added.
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
            - If static functions have been reified do not add.
        * runtime/Lookup.h:
        (JSC::HashTable::ConstIterator::ConstIterator):
        (JSC::HashTable::ConstIterator::operator->):
        (JSC::HashTable::ConstIterator::operator*):
        (JSC::HashTable::ConstIterator::operator!=):
        (JSC::HashTable::ConstIterator::operator++):
        (JSC::HashTable::ConstIterator::skipInvalidKeys):
        (JSC::HashTable::begin):
        (JSC::HashTable::end):
        (JSC::getStaticPropertySlot):
        (JSC::getStaticPropertyDescriptor):
        (JSC::getStaticFunctionSlot):
        (JSC::getStaticFunctionDescriptor):
            - setUpStaticFunctionSlot may not add, returns a bool.
        (JSC::lookupPut):
            - remove redundant branch.
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
            - initialize new flag in constructors.
        * runtime/Structure.h:
        (JSC::Structure::staticFunctionsReified):
        (JSC::Structure::setStaticFunctionsReified):
            - added flag

2011-10-14  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename virtual put to putVirtual
        https://bugs.webkit.org/show_bug.cgi?id=69851

        Reviewed by Darin Adler.

        Renamed virtual versions of put to putVirtual in prepration for 
        adding the static put to the MethodTable in ClassInfo since the 
        compiler gets mad if the virtual and static versions have the same 
        name.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::putVirtual):
        * API/JSObjectRef.cpp:
        (JSObjectSetProperty):
        (JSObjectSetPropertyAtIndex):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::putVirtual):
        (JSC::DebuggerActivation::put):
        * debugger/DebuggerActivation.h:
        * dfg/DFGOperations.cpp:
        (JSC::DFG::putByVal):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jsc.cpp:
        (GlobalObject::finishCreation):
        * runtime/Arguments.cpp:
        (JSC::Arguments::putVirtual):
        * runtime/Arguments.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::putProperty):
        (JSC::arrayProtoFuncConcat):
        (JSC::arrayProtoFuncPush):
        (JSC::arrayProtoFuncReverse):
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSlice):
        (JSC::arrayProtoFuncSort):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        (JSC::arrayProtoFuncFilter):
        (JSC::arrayProtoFuncMap):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::putVirtual):
        * runtime/JSActivation.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::putVirtual):
        (JSC::JSArray::putSlowCase):
        (JSC::JSArray::push):
        (JSC::JSArray::shiftCount):
        (JSC::JSArray::unshiftCount):
        * runtime/JSArray.h:
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::putVirtual):
        * runtime/JSByteArray.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::putVirtual):
        (JSC::JSCell::put):
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::putVirtual):
        * runtime/JSFunction.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::putVirtual):
        (JSC::JSGlobalObject::putWithAttributes):
        * runtime/JSGlobalObject.h:
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::putVirtual):
        * runtime/JSNotAnObject.h:
        * runtime/JSONObject.cpp:
        (JSC::Walker::walk):
        * runtime/JSObject.cpp:
        (JSC::JSObject::putVirtual):
        (JSC::JSObject::put):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        (JSC::JSValue::put):
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::putVirtual):
        * runtime/JSStaticScopeObject.h:
        * runtime/Lookup.h:
        (JSC::lookupPut):
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::putVirtual):
        * runtime/ObjectPrototype.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpMatchesArray::fillArrayInstance):
        (JSC::RegExpConstructor::putVirtual):
        * runtime/RegExpConstructor.h:
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::putVirtual):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::putVirtual):
        * runtime/RegExpObject.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::putVirtual):
        * runtime/StringObject.h:
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncSplit):

2011-10-13  Filip Pizlo  <fpizlo@apple.com>

        Reflective Arguments retrieval should be hardened for the
        possibility of inlining
        https://bugs.webkit.org/show_bug.cgi?id=70068

        Reviewed by Oliver Hunt.
        
        CodeBlock can now track, as part of its RareData, the virtual inline
        stack at callsites. CallFrame walking can now rematerialize "inline"
        CallFrames by combining the meta-data in CodeBlock with the information
        already in the JS stack. Arguments can now safely retrieve the
        arguments from inline CallFrames.
        
        The DFG already had the notion of a "CodeOrigin" in preparation for
        inlining. This notion will now be saved into the CodeBlock, if the DFG
        had done inlining. So, CodeOrigin has been moved to bytecode/ and has
        been changed to behave more like a struct since that is how it's
        meant to be used.

        * GNUmakefile.list.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::inlineCallFrames):
        (JSC::CodeBlock::codeOrigins):
        (JSC::CodeBlock::hasCodeOrigins):
        (JSC::CodeBlock::codeOriginForReturn):
        * bytecode/CodeOrigin.h: Added.
        (JSC::CodeOrigin::CodeOrigin):
        (JSC::CodeOrigin::isSet):
        (JSC::getCallReturnOffsetForCodeOrigin):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGNode.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * interpreter/CallFrame.cpp:
        (JSC::CallFrame::isInlineCallFrame):
        (JSC::CallFrame::trueCallerFrame):
        * interpreter/CallFrame.h:
        (JSC::ExecState::inlineCallFrame):
        (JSC::ExecState::setInlineCallFrame):
        (JSC::ExecState::isInlineCallFrame):
        (JSC::ExecState::trueCallerFrame):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::findFunctionCallFrame):
        * interpreter/Register.h:
        (JSC::Register::operator=):
        (JSC::Register::inlineCallFrame):
        * runtime/Arguments.h:
        (JSC::Arguments::getArgumentsData):
        (JSC::Arguments::finishCreationButDontCopyRegisters):
        (JSC::Arguments::finishCreation):
        (JSC::Arguments::finishCreationAndCopyRegisters):
        * runtime/Executable.h:
        (JSC::FunctionExecutable::parameterCount):

2011-10-14  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename virtual deleteProperty to deletePropertyVirtual
        https://bugs.webkit.org/show_bug.cgi?id=69884

        Reviewed by Darin Adler.

        Renamed virtual versions of deleteProperty to deletePropertyVirtual in prepration for 
        adding the static deleteProperty to the MethodTable in ClassInfo since the 
        compiler gets mad if the virtual and static versions have the same name.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::deletePropertyVirtual):
        (JSC::::deleteProperty):
        * API/JSObjectRef.cpp:
        (JSObjectDeleteProperty):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::deletePropertyVirtual):
        (JSC::DebuggerActivation::deleteProperty):
        * debugger/DebuggerActivation.h:
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Arguments.cpp:
        (JSC::Arguments::deletePropertyVirtual):
        * runtime/Arguments.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncPop):
        (JSC::arrayProtoFuncReverse):
        (JSC::arrayProtoFuncShift):
        (JSC::arrayProtoFuncSplice):
        (JSC::arrayProtoFuncUnShift):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::deletePropertyVirtual):
        * runtime/JSActivation.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::deletePropertyVirtual):
        (JSC::JSArray::deleteProperty):
        * runtime/JSArray.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::deletePropertyVirtual):
        (JSC::JSCell::deleteProperty):
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::deletePropertyVirtual):
        * runtime/JSFunction.h:
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::deletePropertyVirtual):
        * runtime/JSNotAnObject.h:
        * runtime/JSONObject.cpp:
        (JSC::Walker::walk):
        * runtime/JSObject.cpp:
        (JSC::JSObject::deletePropertyVirtual):
        (JSC::JSObject::deleteProperty):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        * runtime/JSVariableObject.cpp:
        (JSC::JSVariableObject::deletePropertyVirtual):
        * runtime/JSVariableObject.h:
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::deletePropertyVirtual):
        * runtime/StrictEvalActivation.cpp:
        (JSC::StrictEvalActivation::deletePropertyVirtual):
        * runtime/StrictEvalActivation.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::deletePropertyVirtual):
        * runtime/StringObject.h:

2011-10-14  Peter Beverloo  <peter@chromium.org>

        [Chromium] Inherit settings from Chromium's envsetup.sh, address a NDK todo
        https://bugs.webkit.org/show_bug.cgi?id=70028

        Reviewed by Adam Barth.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2011-10-14  Yuqiang Xian  <yuqiang.xian@intel.com>

        DFG JIT 32_64 - Performance fix for ResolveGlobal
        https://bugs.webkit.org/show_bug.cgi?id=70096

        Reviewed by Gavin Barraclough.

        Structure check of global object should be a pointer comparison
        instead of a tag and payload pair comparison. This fix improves
        SunSpider by 7% on Linux 32, with bitops-bitwise-and improved by 4.75X.
        Also two trivial fixes for successful 32-bit build are included.

        * dfg/DFGSpeculativeJIT.cpp:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-13  Filip Pizlo  <fpizlo@apple.com>

        Speculation failures in ValueToInt32 are causing a 2x slow-down
        in Kraken/stanford-crypto-pbkdf2
        https://bugs.webkit.org/show_bug.cgi?id=70089

        Reviewed by Gavin Barraclough.
        
        If we can't truncate to Int32 using machine code, then don't fail
        speculation. Just call JSC::toInt32.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::callOperation):
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueToInt32):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-13  Mark Hahnenberg  <mhahnenberg@apple.com>

        Rename virtual getConstructData to getConstructDataVirtual
        https://bugs.webkit.org/show_bug.cgi?id=69872

        Reviewed by Geoffrey Garen.

        Renamed virtual getConstructData functions to getConstructDataVirtual to 
        avoid conflicts when we add static getConstructData to the MethodTable.

        * API/JSCallbackConstructor.cpp:
        (JSC::JSCallbackConstructor::getConstructDataVirtual):
        * API/JSCallbackConstructor.h:
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::getConstructDataVirtual):
        * API/JSObjectRef.cpp:
        (JSObjectIsConstructor):
        (JSObjectCallAsConstructor):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * dfg/DFGOperations.cpp:
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::getConstructDataVirtual):
        * runtime/ArrayConstructor.h:
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::getConstructDataVirtual):
        * runtime/BooleanConstructor.h:
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::getConstructDataVirtual):
        * runtime/DateConstructor.h:
        * runtime/Error.h:
        (JSC::StrictModeTypeErrorFunction::getConstructDataVirtual):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::getConstructDataVirtual):
        * runtime/ErrorConstructor.h:
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::getConstructDataVirtual):
        * runtime/FunctionConstructor.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::getConstructDataVirtual):
        * runtime/JSCell.h:
        (JSC::getConstructData):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getConstructDataVirtual):
        * runtime/JSFunction.h:
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::getConstructDataVirtual):
        * runtime/NativeErrorConstructor.h:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::getConstructDataVirtual):
        * runtime/NumberConstructor.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::getConstructDataVirtual):
        * runtime/ObjectConstructor.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::getConstructDataVirtual):
        * runtime/RegExpConstructor.h:
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::getConstructDataVirtual):
        * runtime/StringConstructor.h:

2011-10-13  Filip Pizlo  <fpizlo@apple.com>

        Rubber stamped Stephanie Lewis.
        
        DFG_ENABLE() macro was always returning false.

        * dfg/DFGNode.h:

2011-10-13  Gavin Barraclough  <baraclough@apple.com>

        Speculative build fix for !DFG builds.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):

2011-10-13  Oliver Hunt  <oliver@apple.com>

        Fix performance of ValueToInt32 node when predicting double
        https://bugs.webkit.org/show_bug.cgi?id=70063

        Reviewed by Filip Pizlo.

        Currently we fail to inline double to int conversion when
        performing a ValueToInt32 operation on a value we predict
        to be a double.

        * dfg/DFGAbstractState.cpp:
        (JSC::DFG::AbstractState::execute):
           Apply correct filter for the double prediction path
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
        * dfg/DFGJITCodeGenerator64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
           Support double parameters even when value has been spilled.
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileValueToInt32):
           Moved old valueToInt32 code to this function, and added
           path for double prediction
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
           Made the two implementations of ValueToInt32 call a single
           shared compileValueToInt32 function.

2011-10-13  Chris Marrin  <cmarrin@apple.com>

        Sync requestAnimationFrame callback to CVDisplayLink on Mac
        https://bugs.webkit.org/show_bug.cgi?id=68911

        Reviewed by Simon Fraser.

        Add REQUEST_ANIMATION_FRAME_DISPLAY_MONITOR for implementations
        that use the DisplayRefreshMonitor logic.

        * wtf/Platform.h:

2011-10-13  Gavin Barraclough  <baraclough@apple.com>

        DFG JIT should not be using ENABLE macro to enable features
        https://bugs.webkit.org/show_bug.cgi?id=70060

        Reviewed by Oliver Hunt.

        The ENABLE macro is only intended to be used to detect features that are configured
        in Platform.h. Using its to detect settings defined in other headers is an error.

        The problem is that the ENABLE macro checks if the value is defined, so will silently
        return false if you fail to include the header defining the switch. This is not a problem
        if (1) the settings are defined in the same header that defines the macro that tests them,
        or (2) the header is included everywhere.  In the case of ENABLE settings defined in
        Platform.h, both are true! To make this clear, add an explicit DFG_ENABLE macro.

        * bytecode/CodeBlock.cpp:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getPrediction):
        (JSC::DFG::ByteCodeParser::makeSafe):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::predictArgumentTypes):
        * dfg/DFGJITCodeGenerator.cpp:
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        (JSC::DFG::JITCompiler::compileBody):
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::noticeOSREntry):
        * dfg/DFGJITCompiler32_64.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        (JSC::DFG::JITCompiler::compileBody):
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGNode.h:
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::fixpoint):
        (JSC::DFG::Propagator::propagateArithNodeFlags):
        (JSC::DFG::Propagator::propagateArithNodeFlagsForward):
        (JSC::DFG::Propagator::propagateArithNodeFlagsBackward):
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::propagatePredictionsForward):
        (JSC::DFG::Propagator::propagatePredictionsBackward):
        (JSC::DFG::Propagator::propagatePredictions):
        (JSC::DFG::Propagator::toDouble):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::fixup):
        (JSC::DFG::Propagator::startIndexForChildren):
        (JSC::DFG::Propagator::endIndexForPureCSE):
        (JSC::DFG::Propagator::setReplacement):
        (JSC::DFG::Propagator::eliminate):
        (JSC::DFG::Propagator::performNodeCSE):
        (JSC::DFG::Propagator::localCSE):
        (JSC::DFG::Propagator::allocateVirtualRegisters):
        (JSC::DFG::Propagator::performBlockCFA):
        (JSC::DFG::Propagator::performForwardCFA):
        (JSC::DFG::Propagator::globalCFA):
        * dfg/DFGScoreBoard.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):

2011-10-13  Gavin Barraclough  <baraclough@apple.com>

        terminateSpeculativeExecution for fillSpeculateDouble with DataFormatCell

        Rubber stamped by Filip Pizlo

        This is breaking fast/canvas/canvas-composite-alpha.html on 32_64 DFG JIT.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):

2011-10-13  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualized JSCell::toNumber
        https://bugs.webkit.org/show_bug.cgi?id=69858

        Reviewed by Sam Weinig.


        Removed JSCallbackObject::toNumber because its no longer necessary since 
        JSObject::toNumber now suffices since we implicitly add valueOf to an object's
        prototype whenever a convertToType callback is provided.
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

        De-virtualized JSCell::toNumber, JSObject::toNumber, and JSString::toNumber.
        * runtime/JSCell.cpp:
        (JSC::JSCell::toNumber):
        * runtime/JSCell.h:
        * runtime/JSObject.h:
        * runtime/JSString.h:

        Removed JSNotAnObject::toNumber because its result doesn't matter and it implements 
        defaultValue, therefore JSObject::toNumber can cover its case.
        * runtime/JSNotAnObject.cpp:
        * runtime/JSNotAnObject.h:

2011-10-13  Xianzhu Wang  <wangxianzhu@chromium.org>

        Use realloc() to expand/shrink StringBuilder buffer
        https://bugs.webkit.org/show_bug.cgi?id=69913

        Reviewed by Darin Adler.

        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::reserveCapacity):
        (WTF::StringBuilder::reallocateBuffer):
        (WTF::StringBuilder::appendUninitialized):
        (WTF::StringBuilder::shrinkToFit):
        * wtf/text/StringBuilder.h:
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::reallocate): Added to allow StringBuilder to reallocate the buffer.
        * wtf/text/StringImpl.h:

2011-10-12  Filip Pizlo  <fpizlo@apple.com>

        If an Arguments object is being used to copy the arguments, then
        make this explicit
        https://bugs.webkit.org/show_bug.cgi?id=69995

        Reviewed by Sam Weinig.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::retrieveArguments):
        * runtime/Arguments.h:
        (JSC::Arguments::createAndCopyRegisters):
        (JSC::Arguments::finishCreationButDontCopyRegisters):
        (JSC::Arguments::finishCreation):
        (JSC::Arguments::finishCreationAndCopyRegisters):

2011-10-12  Filip Pizlo  <fpizlo@apple.com>

        DFG CFA does not filter structures aggressively enough.
        https://bugs.webkit.org/show_bug.cgi?id=69989

        Reviewed by Oliver Hunt.

        * dfg/DFGAbstractValue.h:
        (JSC::DFG::AbstractValue::clear):
        (JSC::DFG::AbstractValue::makeTop):
        (JSC::DFG::AbstractValue::clobberStructures):
        (JSC::DFG::AbstractValue::set):
        (JSC::DFG::AbstractValue::merge):
        (JSC::DFG::AbstractValue::filter):
        (JSC::DFG::AbstractValue::checkConsistency):

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

        Remove ENABLE(XHTMLMP) and associated code
        https://bugs.webkit.org/show_bug.cgi?id=69729

        Reviewed by David Levin.

        * Configurations/FeatureDefines.xcconfig:

2011-10-12  Gavin Barraclough  <baraclough@apple.com>

        MacroAssemblerX86 8-bit register ops unsafe on CPU(X86)
        https://bugs.webkit.org/show_bug.cgi?id=69978

        Reviewed by Filip Pizlo.

        Certain ops are unsafe if the register passed is esp..edi (will instead test/set the ).

        compare32/test8/test32 Call setCC, which sets an 8-bit register - we can fix this by adding
        a couple of xchg instructions.

        branchTest8 with a register argument is also affected. In all cases this is currently used
        this is testing a value that is correct to 32 or more bits, so we can simply switch these
        to branchTest32 & remove the corresponding branchTest8 (this is desirable anyway, since the
        32-bit form is cheaper to implement on platforms that don't have an 8-bit compare instruction).

        This fixes the remaining fast/js failures with the DFG JIT 32_64.

        * assembler/MacroAssemblerARMv7.h
            - removed branchTest8.
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::compare32):
        (JSC::MacroAssemblerX86Common::test8):
        (JSC::MacroAssemblerX86Common::test32):
        (JSC::MacroAssemblerX86Common::set32):
            - added set32 helper that is 'h' register safe.
            - removed branchTest8.
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
            - switch uses of branchTest8 to branchTest32.
        * dfg/DFGJITCodeGenerator64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
            - switch uses of branchTest8 to branchTest32.
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitBranch):
            - switch uses of branchTest8 to branchTest32.
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitBranch):
            - switch uses of branchTest8 to branchTest32.

2011-10-12  Gavin Barraclough  <baraclough@apple.com>

        Errrk, revert accidental commit!

        * wtf/Platform.h:

2011-10-12  Gavin Barraclough  <baraclough@apple.com>

        Unreviewed, re-land changes from #69890, #69903.

        These were reverted due to bug #69897, but #69903 fixed this problem.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::silentFillGPR):

2011-10-12  Filip Pizlo  <fpizlo@apple.com>

        ValueProfile::computeUpdatedPrediction doesn't merge statistics correctly
        https://bugs.webkit.org/show_bug.cgi?id=69906

        Reviewed by Gavin Barraclough.
        
        It turns out that the simplest fix is to switch computeUpdatedPredictions()
        to using predictionFromValue() combined with mergePrediction(). Doing so
        allowed me to kill off weakBuckets and visitWeakReferences(). Hence this
        not only fixes a performance bug but kills off a lot of code that I never
        liked to begin with.
        
        This appears to be a 1% win on V8.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitAggregate):
        * bytecode/CodeBlock.h:
        * bytecode/PredictedType.cpp:
        (JSC::predictionFromValue):
        * bytecode/ValueProfile.cpp:
        (JSC::ValueProfile::computeStatistics):
        (JSC::ValueProfile::computeUpdatedPrediction):
        * bytecode/ValueProfile.h:
        (JSC::ValueProfile::classInfo):
        (JSC::ValueProfile::numberOfSamples):
        (JSC::ValueProfile::isLive):
        (JSC::ValueProfile::dump):

2011-10-12  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSCell::toString
        https://bugs.webkit.org/show_bug.cgi?id=69677

        Reviewed by Sam Weinig.

        Removed toString from JSCallbackObject, since it is no 
        longer necessary since we now implicitly add toString and valueOf
        functions to object prototypes when a convertToType callback 
        is provided, which is now the standard way to override toString 
        and valueOf in the JSC C API.
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

        Removed toString from InterruptedExecutionError and 
        TerminatedExecutionError and replaced it with defaultValue,
        which JSObject::toString calls.  We'll probably have to de-virtualize 
        defaultValue eventually, but we'll cross that bridge when we 
        come to it.
        * runtime/ExceptionHelpers.cpp:
        (JSC::InterruptedExecutionError::defaultValue):
        (JSC::TerminatedExecutionError::defaultValue):
        * runtime/ExceptionHelpers.h:

        Removed toString from JSNotAnObject, since its return value doesn't
        actually matter and JSObject::toString can cover it.
        * runtime/JSNotAnObject.cpp:
        * runtime/JSNotAnObject.h:

        De-virtualized JSCell::toString, JSObject::toString and JSString::toString.
        Added handling of all cases for JSCell to JSCell::toString.
        * runtime/JSObject.h:
        * runtime/JSString.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::toString):
        * runtime/JSCell.h:

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

        Global stringStructure caches its prototype chain, abandoning a web page
        https://bugs.webkit.org/show_bug.cgi?id=69952

        Reviewed by Filip Pizlo.

        When visiting a structure, we don't keep the prototype chain
        alive if we're not the structure for an object type.

        * runtime/Structure.cpp:
        (JSC::Structure::visitChildren):

2011-10-12  Yuqiang Xian  <yuqiang.xian@intel.com>

        DFG JIT 32_64 - Fix ArrayPop
        https://bugs.webkit.org/show_bug.cgi?id=69918

        Reviewed by Filip Pizlo.

        The storageLengthGPR is polluted by EmptyValueTag and later used to
        index the array, which results in abnormal behaviors in execution.
        This fix makes 32_64 DFG pass v8-deltablue and kraken
        crypto-sha256-iterative on Linux ia32.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::store32):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::movl_i32m):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-12  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Fix build with GLib 2.31
        https://bugs.webkit.org/show_bug.cgi?id=69840

        Reviewed by Martin Robinson.

        * GNUmakefile.list.am: removed ThreadingGtk.cpp.
        * wtf/ThreadingPrimitives.h: remove GTK+-specific definitions.
        * wtf/gobject/GOwnPtr.cpp: remove GCond and GMutex specializations.
        * wtf/gobject/GOwnPtr.h: ditto.
        * wtf/gobject/GTypedefs.h: remove GCond and GMutex forward declarations.
        * wtf/gtk/ThreadingGtk.cpp: Removed.

2011-10-12  Filip Pizlo  <fpizlo@apple.com>

        Layout tests crashing in DFG JIT code
        https://bugs.webkit.org/show_bug.cgi?id=69897

        Reviewed by Gavin Barraclough.
        
        Abstract value filtration didn't take into account cases where a structure
        set filter, combined with predicted type knowledge, could lead to a stronger
        filter for the structure abstract value.
        
        This bug would have been benign in release builds; it would have just meant
        that the analysis was less precise and some optimization opportunities would
        be missed. I have an ASSERT that is meant to catch such cases, and it was
        triggering sporadically in one of the LayoutTests.

        * dfg/DFGAbstractValue.h:
        (JSC::DFG::AbstractValue::filter):

2011-10-11  Gavin Barraclough  <baraclough@apple.com>

        Unreviewed, temporarily reverted r97216 due to bug #69897.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::silentFillGPR):

2011-10-11  Yuqiang Xian  <yuqiang.xian@intel.com>

        DFG 32_64 - fix silentFillGPR
        https://bugs.webkit.org/show_bug.cgi?id=69903

        Reviewed by Filip Pizlo.

        Fix a small bug in silentFillGPR,
        and add the newly introduced DFG file to CMakeListsEfl.

        * CMakeListsEfl.txt:
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::silentFillGPR):

2011-10-08  Filip Pizlo  <fpizlo@apple.com>

        DFG does not have flow-sensitive intraprocedural control flow analysis
        https://bugs.webkit.org/show_bug.cgi?id=69690

        Reviewed by Gavin Barraclough.

        Implemented a control flow analysis (CFA). It currently propagates type
        proofs only. For example, if all predecessors to a basic block have
        checks that variable X is a JSFinalObject with structure 0xabcdef, then
        this basic block will now know this fact and will know that it does not
        have to emit either JSFinalObject checks or any structure checks since
        the structure is precisely known. The CFA takes heap side-effects into
        account (though somewhat conservatively), so that if the object pointed
        to by variable X could have possibly undergone a structure transition
        then this is reflected: the analysis may simply say that X's structure
        is unknown.
        
        This also propagates a wealth of other type information which is
        currently not being used. For example, we now know when a variable can
        only hold doubles. Even if a variable may hold other types at different
        points in its live range, we can still prove exactly when it will only
        be double.
        
        There's a bunch of stuff that the CFA could do that it still does not
        do, like precise handling of PutStructure (i.e. structure transitions),
        precise handling of CheckFunction and CheckMethod, etc. So this is
        very much intended to be a starting point rather than an end unto
        itself.
        
        This is a 1% win on V8 (mostly due to a 3% win on richards and deltablue)
        and a 1% win on Kraken (mostly due to a 6% win on imaging-desaturate).
        Neutral on SunSpider.

        * GNUmakefile.list.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/ActionablePrediction.h: Removed.
        * bytecode/PredictedType.cpp:
        (JSC::predictionToString):
        * bytecode/PredictedType.h:
        * dfg/DFGAbstractState.cpp: Added.
        (JSC::DFG::AbstractState::AbstractState):
        (JSC::DFG::AbstractState::~AbstractState):
        (JSC::DFG::AbstractState::beginBasicBlock):
        (JSC::DFG::AbstractState::initialize):
        (JSC::DFG::AbstractState::endBasicBlock):
        (JSC::DFG::AbstractState::reset):
        (JSC::DFG::AbstractState::execute):
        (JSC::DFG::AbstractState::clobberStructures):
        (JSC::DFG::AbstractState::mergeStateAtTail):
        (JSC::DFG::AbstractState::merge):
        (JSC::DFG::AbstractState::mergeToSuccessors):
        (JSC::DFG::AbstractState::mergeVariableBetweenBlocks):
        (JSC::DFG::AbstractState::dump):
        * dfg/DFGAbstractState.h: Added.
        (JSC::DFG::AbstractState::forNode):
        (JSC::DFG::AbstractState::isValid):
        * dfg/DFGAbstractValue.h: Added.
        (JSC::DFG::StructureAbstractValue::StructureAbstractValue):
        (JSC::DFG::StructureAbstractValue::clear):
        (JSC::DFG::StructureAbstractValue::makeTop):
        (JSC::DFG::StructureAbstractValue::top):
        (JSC::DFG::StructureAbstractValue::add):
        (JSC::DFG::StructureAbstractValue::addAll):
        (JSC::DFG::StructureAbstractValue::contains):
        (JSC::DFG::StructureAbstractValue::isSubsetOf):
        (JSC::DFG::StructureAbstractValue::doesNotContainAnyOtherThan):
        (JSC::DFG::StructureAbstractValue::isSupersetOf):
        (JSC::DFG::StructureAbstractValue::filter):
        (JSC::DFG::StructureAbstractValue::isClear):
        (JSC::DFG::StructureAbstractValue::isTop):
        (JSC::DFG::StructureAbstractValue::size):
        (JSC::DFG::StructureAbstractValue::at):
        (JSC::DFG::StructureAbstractValue::operator[]):
        (JSC::DFG::StructureAbstractValue::last):
        (JSC::DFG::StructureAbstractValue::predictionFromStructures):
        (JSC::DFG::StructureAbstractValue::operator==):
        (JSC::DFG::StructureAbstractValue::dump):
        (JSC::DFG::AbstractValue::AbstractValue):
        (JSC::DFG::AbstractValue::clear):
        (JSC::DFG::AbstractValue::isClear):
        (JSC::DFG::AbstractValue::makeTop):
        (JSC::DFG::AbstractValue::clobberStructures):
        (JSC::DFG::AbstractValue::isTop):
        (JSC::DFG::AbstractValue::top):
        (JSC::DFG::AbstractValue::set):
        (JSC::DFG::AbstractValue::operator==):
        (JSC::DFG::AbstractValue::merge):
        (JSC::DFG::AbstractValue::filter):
        (JSC::DFG::AbstractValue::validate):
        (JSC::DFG::AbstractValue::dump):
        * dfg/DFGBasicBlock.h: Added.
        (JSC::DFG::BasicBlock::BasicBlock):
        (JSC::DFG::BasicBlock::getBytecodeBegin):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getLocal):
        (JSC::DFG::ByteCodeParser::setLocal):
        (JSC::DFG::ByteCodeParser::getArgument):
        (JSC::DFG::ByteCodeParser::setArgument):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::processPhiStack):
        (JSC::DFG::ByteCodeParser::setupPredecessors):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::block):
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
        * dfg/DFGJITCodeGenerator64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::noticeOSREntry):
        * dfg/DFGNode.h:
        (JSC::DFG::NodeIndexTraits::defaultValue):
        (JSC::DFG::Node::variableAccessData):
        (JSC::DFG::Node::takenBytecodeOffsetDuringParsing):
        (JSC::DFG::Node::notTakenBytecodeOffsetDuringParsing):
        (JSC::DFG::Node::setTakenBlockIndex):
        (JSC::DFG::Node::setNotTakenBlockIndex):
        (JSC::DFG::Node::takenBlockIndex):
        (JSC::DFG::Node::notTakenBlockIndex):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGOSREntry.h:
        * dfg/DFGOperands.h: Added.
        (JSC::DFG::operandIsArgument):
        (JSC::DFG::OperandValueTraits::defaultValue):
        (JSC::DFG::Operands::Operands):
        (JSC::DFG::Operands::numberOfArguments):
        (JSC::DFG::Operands::numberOfLocals):
        (JSC::DFG::Operands::argument):
        (JSC::DFG::Operands::local):
        (JSC::DFG::Operands::setLocal):
        (JSC::DFG::Operands::setArgumentFirstTime):
        (JSC::DFG::Operands::setLocalFirstTime):
        (JSC::DFG::Operands::operand):
        (JSC::DFG::Operands::setOperand):
        (JSC::DFG::Operands::clear):
        (JSC::DFG::dumpOperands):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::fixpoint):
        (JSC::DFG::Propagator::propagateArithNodeFlags):
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::propagatePredictions):
        (JSC::DFG::Propagator::performBlockCFA):
        (JSC::DFG::Propagator::performForwardCFA):
        (JSC::DFG::Propagator::globalCFA):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compileObjectEquality):
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compileObjectEquality):
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStructureSet.h:
        (JSC::DFG::StructureSet::clear):
        (JSC::DFG::StructureSet::predictionFromStructures):
        (JSC::DFG::StructureSet::operator==):
        (JSC::DFG::StructureSet::dump):
        * dfg/DFGVariableAccessData.h: Added.

2011-10-11  Gavin Barraclough  <baraclough@apple.com>

        DFG JIT 32_64 - Fix silentFillGPR for non-integer constants.
        https://bugs.webkit.org/show_bug.cgi?id=69890

        Reviewed by Oliver Hunt.

        Cell constants are currently hitting the valueOfInt32Constant case, there is no constant handling for JSValues.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::silentFillGPR):

2011-10-11  Ryosuke Niwa  <rniwa@webkit.org>

        GTK build fix attempt after r97197.

        * wtf/BitVector.h:

2011-10-11  Oliver Hunt  <oliver@apple.com>

        Remove unintentional logging.

        * heap/Heap.cpp:

2011-10-11  Oliver Hunt  <oliver@apple.com>

        Tidy up card walking logic
        https://bugs.webkit.org/show_bug.cgi?id=69883

        Reviewed by Gavin Barraclough.

        Special case common cell sizes when walking a block's
        cards.

        * heap/CardSet.h:
        (JSC::::testAndClear):
        * heap/Heap.cpp:
        (JSC::GCTimer::GCCounter::GCCounter):
        (JSC::GCTimer::GCCounter::count):
        (JSC::GCTimer::GCCounter::~GCCounter):
        (JSC::Heap::markRoots):
        * heap/MarkStack.cpp:
        (JSC::MarkStack::reset):
        * heap/MarkStack.h:
        (JSC::MarkStack::visitCount):
        (JSC::MarkStack::MarkStack):
        (JSC::MarkStack::append):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::gatherDirtyCellsWithSize):
        (JSC::MarkedBlock::gatherDirtyCells):
        * runtime/Structure.h:
        (JSC::MarkStack::internalAppend):

2011-10-11  Filip Pizlo  <fpizlo@apple.com>

        DFG virtual register allocator should be more aggressive in
        reusing temporary slots
        https://bugs.webkit.org/show_bug.cgi?id=69868

        Reviewed by Oliver Hunt.
        
        1.2% win on V8, neutral elsewhere. The win is probably because it
        increases precision of GC conservative scans.
        
        This required making the DFG::ScoreBoard operate over a bitvector
        of preserved variables, rather than just a preserved variable
        threshold. To do this, I improved the WTF::BitVector class to make
        it more user-friendly. It still retains all previous functionality.
        Also made changes to PackedIntVector to accomodate those changes.
        Finally, this adds more debugging to the virtual register allocator
        and to the OSR exit code, as this was necessary to track down bugs
        in an earlier version of this patch.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::getLocal):
        * dfg/DFGGraph.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::allocateVirtualRegisters):
        * dfg/DFGScoreBoard.h:
        (JSC::DFG::ScoreBoard::ScoreBoard):
        (JSC::DFG::ScoreBoard::~ScoreBoard):
        (JSC::DFG::ScoreBoard::allocate):
        (JSC::DFG::ScoreBoard::use):
        (JSC::DFG::ScoreBoard::highWatermark):
        (JSC::DFG::ScoreBoard::dump):
        (JSC::DFG::ScoreBoard::max):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::ValueRecovery::dump):
        * wtf/BitVector.cpp:
        (WTF::BitVector::setSlow):
        (WTF::BitVector::resizeOutOfLine):
        (WTF::BitVector::dump):
        * wtf/BitVector.h:
        (WTF::BitVector::BitVector):
        (WTF::BitVector::operator=):
        (WTF::BitVector::quickGet):
        (WTF::BitVector::quickSet):
        (WTF::BitVector::quickClear):
        (WTF::BitVector::get):
        (WTF::BitVector::set):
        (WTF::BitVector::clear):
        * wtf/PackedIntVector.h:
        (WTF::PackedIntVector::get):
        (WTF::PackedIntVector::set):

2011-10-11  Gavin Barraclough  <baraclough@apple.com>

        DFG JIT 32_64 - Switch to cdecl calling convention.
        https://bugs.webkit.org/show_bug.cgi?id=69863

        Reviewed by Oliver Hunt.

        This makes it easier to keep the stack correctly aligned, which is required on OS X.

        * assembler/MacroAssemblerCodeRef.h:
        (JSC::FunctionPtr::FunctionPtr):
            - Provide default FunctionPtr constructors for CDECL functions on STDCALL platforms.
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::callOperation):
            - Switch calls to poke arguments rather than pushing them.
        (JSC::DFG::resetCallArguments):
        (JSC::DFG::addCallArgument):
        (JSC::DFG::addCallArgumentBoxed):
            - Helper functions to stack up call arguments on X86.
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::emitCall):
            - Don't push, poke!
        * dfg/DFGJITCompiler32_64.cpp:
        (JSC::DFG::JITCompiler::compileBody):
            - Don't push, poke!
        * dfg/DFGOperations.cpp:
            - Switch ReturnAddress wrappers to push return address last, update asm trampolines.
        * dfg/DFGOperations.h:
            - switch DFG_OPERATION to assert CDECL on STDCALL platforms.
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::fmodWithCDecl):
        (JSC::DFG::SpeculativeJIT::compile):
            - On STDCALL platforms wrap fmod, since DFG_OPERATION wrappers are CDECL.

2011-10-11  Gavin Barraclough  <baraclough@apple.com>

        Switch RegisterSizedBoolean/dfgConvertJSValueToInt32 return type to size_t
        https://bugs.webkit.org/show_bug.cgi?id=69821

        Reviewed by Filip Pizlo.

        Operations returning types Z (int32_t) and B (RegisterSizedBoolean - implemented as an
        intptr_t) are indistinguishable on 32-bit Linux, preventing the DFG JIT from building.

        dfgConvertJSValueToInt32 would be better returning a value known to be register sized, for
        JSVALUE64 (we currently zero-extend in JIT code, potentially introducing an unnecessary
        move), so by switching all associated operations to return a size_t we can fix the type
        problem on Linux & make it a small tweak that removes an unnecessary instruction.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare):
            - comparisons now return a size_t.
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::callOperation):
            - Removed Z_DFGOperation_EJ form.
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
            - comparisons now return a size_t.
        * dfg/DFGJITCodeGenerator64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
            - comparisons now return a size_t.
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
            - Change return types for comparison operations & dfgConvertJSValueToInt32 to size_t,
              Both need to return values zero extended to fill a register.
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
            - comparisons now return a size_t.
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compare):
            - comparisons now return a size_t.
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compare):
            - comparisons now return a size_t.

2011-10-11  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        [Qt] Remove all references to QTDIR_build and standalone_package

        Qt is now modularized, which means we no longer import WebKit into
        the Qt source tree. Instead we use git submodules, and building
        QtWebKit as "part of Qt" is really building QtWebKit as from trunk.

        To decrease the number of buildsystem configurations we also remove
        the standalone_package code-path used when we were providing tarballs
        with the derived sources pre-generated.

        Reviewed by Simon Hausmann.

        * DerivedSources.pro:
        * JavaScriptCore.pri:
        * JavaScriptCore.pro:

2011-10-11  Yuqiang Xian  <yuqiang.xian@intel.com>

        Add missing copyright notice in DFG JIT files
        https://bugs.webkit.org/show_bug.cgi?id=69809

        Reviewed by Gavin Barraclough.

        * dfg/DFGJITCodeGenerator32_64.cpp:
        * dfg/DFGJITCompiler32_64.cpp:
        * dfg/DFGJITCompilerInlineMethods.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:

2011-10-10  Filip Pizlo  <fpizlo@apple.com>

        DFG JSVALUE64 spill/fill code should not box integers and doubles
        https://bugs.webkit.org/show_bug.cgi?id=69782

        Reviewed by Oliver Hunt.
        
        Added the notion of DataFormatInteger and DataFormatDouble to the spillFormat.
        This required changing all of the places that spill registers (both silently
        and not) and filling registers (both silently and on demand). It also required
        changing OSR exit to recognize that a spilled value (DisplacedInRegisterFile)
        may have the wrong format for the old JIT (unboxed int or double).
        
        This is a slight win on Kraken (0.25%) and neutral elsewhere.

        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::GenerationInfo::spill):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::silentFillFPR):
        (JSC::DFG::JITCodeGenerator::spill):
        * dfg/DFGJITCodeGenerator64.cpp:
        (JSC::DFG::JITCodeGenerator::fillInteger):
        (JSC::DFG::JITCodeGenerator::fillDouble):
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::ValueRecovery::displacedInRegisterFile):
        (JSC::DFG::ValueRecovery::virtualRegister):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):

2011-10-10  Gavin Barraclough  <baraclough@apple.com>

        DFG JIT switch dfgConvert methods to use callOperation
        https://bugs.webkit.org/show_bug.cgi?id=69806

        Reviewed by Filip Pizlo.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::callOperation):
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
        * dfg/DFGJITCodeGenerator64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
        * dfg/DFGOperations.h:

2011-10-10  Gavin Barraclough  <baraclough@apple.com>

        Remove some unused methods from the DFG JIT.

        Rubber stamped by Oliver Hunt

        Thee methods were only used by the non-speculative JIT, and can be removed.

        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGJITCodeGenerator32_64.cpp:
        * dfg/DFGJITCodeGenerator64.cpp:
            - removed:
                nonSpeculativeAdd
                nonSpeculativeArithSub
                nonSpeculativeArithMod
                nonSpeculativeCheckHasInstance
                nonSpeculativeInstanceOf
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
            - removed:
                operationArithMod
                operationInstanceOf
                operationThrowHasInstanceError

2011-10-10  Gavin Barraclough  <baraclough@apple.com>

        Switch most calls in DFGJITCodeGenerator to use callOperation.
        https://bugs.webkit.org/show_bug.cgi?id=69802

        Reviewed by Oliver Hunt.

        Compares, add, mod are the easy cases.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::callOperation):
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeArithMod):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq):
        * dfg/DFGJITCodeGenerator64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:

2011-10-10  Gavin Barraclough  <baraclough@apple.com>

        DFG: Switch GetById / PutById to use callOperation
        https://bugs.webkit.org/show_bug.cgi?id=69795

        Reviewed by Oliver Hunt.

        Also make the take base as a cell, so 32_64 doesn't have to set up the cell tag.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::callOperation):
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::cachedGetById):
        (JSC::DFG::JITCodeGenerator::cachedPutById):
        * dfg/DFGJITCodeGenerator64.cpp:
        (JSC::DFG::JITCodeGenerator::cachedGetById):
        (JSC::DFG::JITCodeGenerator::cachedPutById):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::appropriatePutByIdFunction):

2011-10-10  Filip Pizlo  <fpizlo@apple.com>

        REGRESSIoN (r95399): Web process hangs when opening documents on Google Docs
        https://bugs.webkit.org/show_bug.cgi?id=69412

        Reviewed by Oliver Hunt.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JIT.h:

2011-10-10  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove getCallDataVirtual methods
        https://bugs.webkit.org/show_bug.cgi?id=69186

        Reviewed by Geoffrey Garen.

        Removed all getCallDataVirtual methods and replaced their call sites 
        with an explicit lookup in the MethodTable.

        * API/JSCallbackFunction.cpp:
        * API/JSCallbackFunction.h:
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        * API/JSObjectRef.cpp:
        (JSObjectIsFunction):
        (JSObjectCallAsFunction):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/ArrayConstructor.cpp:
        * runtime/ArrayConstructor.h:
        * runtime/BooleanConstructor.cpp:
        * runtime/BooleanConstructor.h:
        * runtime/DateConstructor.cpp:
        * runtime/DateConstructor.h:

        Moved StrictModeTypeErrorFunction to Error.h in order to be able to include 
        the class definition in JSGlobalObject.cpp.
        * runtime/Error.cpp:
        (JSC::createTypeErrorFunction):
        * runtime/Error.h:
        (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction):
        (JSC::StrictModeTypeErrorFunction::create):
        (JSC::StrictModeTypeErrorFunction::constructThrowTypeError):
        (JSC::StrictModeTypeErrorFunction::getConstructData):
        (JSC::StrictModeTypeErrorFunction::callThrowTypeError):
        (JSC::StrictModeTypeErrorFunction::getCallData):
        (JSC::StrictModeTypeErrorFunction::createStructure):
        * runtime/ErrorConstructor.cpp:
        * runtime/ErrorConstructor.h:
        * runtime/FunctionConstructor.cpp:
        * runtime/FunctionConstructor.h:
        * runtime/FunctionPrototype.cpp:
        * runtime/FunctionPrototype.h:

        To allow subclasses of InternalFunction (e.g. QtRuntimeMethod) to not have 
        to declare their own ClassInfo if they don't override getCallData, provided 
        an implementation that calls ASSERT_NOT_REACHED if called, providing roughly the same 
        functionality as of the pure virtual method InternalFunction used to have.
        Also made this new implementation protected rather than private for the same reason.
        Also added an ASSERT in InternalFunction::finishCreation to make sure that whatever 
        object is being created provides their own implementation of getCallData.  This 
        just makes execution fail earlier in a place where the source of the error is 
        easy to trace.  These ASSERTs are better than putting a null in the MethodTable because
        they appear much more intentional to anybody who fails to provide their own 
        implementation or who tries to explicitly call InternalFunction::getCallData.
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::finishCreation):
        (JSC::InternalFunction::getCallData):
        * runtime/InternalFunction.h:
        * runtime/JSCell.cpp:
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        * runtime/JSFunction.h:

        Added a global structure to JSGlobalObject for StrictModeTypeErrorFunction to enable 
        it to be reused rather than creating a new Structure every time we instantiate it.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::strictModeTypeErrorFunctionStructure):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Stringifier):
        (JSC::Stringifier::toJSON):
        (JSC::Stringifier::appendStringifiedValue):
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
        * runtime/JSObject.h:
        (JSC::getCallData):
        * runtime/NativeErrorConstructor.cpp:
        * runtime/NativeErrorConstructor.h:
        * runtime/NumberConstructor.cpp:
        * runtime/NumberConstructor.h:
        * runtime/ObjectConstructor.cpp:
        * runtime/ObjectConstructor.h:
        * runtime/Operations.cpp:
        (JSC::jsTypeStringForValue):
        (JSC::jsIsObjectType):
        (JSC::jsIsFunctionType):
        * runtime/PropertySlot.cpp:
        (JSC::PropertySlot::functionGetter):
        * runtime/RegExpConstructor.cpp:
        * runtime/RegExpConstructor.h:
        * runtime/StringConstructor.cpp:
        * runtime/StringConstructor.h:
        * runtime/Structure.h:

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

        Switch last calls from DFGSpeculativeJIT to use callOperation.
        https://bugs.webkit.org/show_bug.cgi?id=69780

        Reviewed by Oliver Hunt.

        Also, rename type in operations for booleans from Z to B, since Z is the mathematical symbol for integers.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::callOperation):
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
        * dfg/DFGJITCodeGenerator64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::compile):
        * wtf/Platform.h:

2011-10-10  Yuqiang Xian  <yuqiang.xian@intel.com>

        JSVALUE32_64 DFG JIT - bug fix for V8 benchmark cases "crypto" and "raytrace"
        https://bugs.webkit.org/show_bug.cgi?id=69748

        Reviewed by Filip Pizlo.

        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::cachedGetMethod):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compileObjectEquality):

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

        Build fix

        * wtf/MainThread.h: Pull in Platform.h since this file uses PLATFORM() macros.

2011-10-10  Yuqiang Xian  <yuqiang.xian@intel.com>

        JSVALUE32_64 DFG JIT - Bug fix for BranchNull
        https://bugs.webkit.org/show_bug.cgi?id=69743

        Reviewed by Darin Adler.

        This fixes the error in access-binary-trees. All SunSpider cases passed.

        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull):

2011-10-07  Gavin Barraclough  <barraclough@apple.com>

        DFG JIT: callOperation should return the Call.
        https://bugs.webkit.org/show_bug.cgi?id=69682

        Reviewed by Oliver Hunt.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::callOperation):
        (JSC::DFG::appendCallWithExceptionCheckSetResult):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::appendCall):
        * wtf/Platform.h:

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

        Unreviewed, rolling out r97045.
        http://trac.webkit.org/changeset/97045
        https://bugs.webkit.org/show_bug.cgi?id=69746

        makes apple bots very crashy :( (Requested by kling on
        #webkit).

        * config.h:

2011-10-10  Andreas Kling  <kling@webkit.org>

        Shrink BorderValue.
        https://bugs.webkit.org/show_bug.cgi?id=69521

        Reviewed by Antti Koivisto.

        * config.h: Touch to force full rebuild.

2011-10-09  Yuqiang Xian  <yuqiang.xian@intel.com>

        Improve Null or Undefined test in 32_64 DFG
        https://bugs.webkit.org/show_bug.cgi?id=69734

        Reviewed by Darin Adler.

        Currently Null or Undefined value test in 32_64 DFG will check
        Null and Undefined tag separately and introduce one more branch.
        It can be improved in the way how the baseline JIT is doing - by
        relying on the fact that "UndefinedTag + 1 == NullTag and NullTag & 1".

        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompareNull):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):

2011-10-09  Yuqiang Xian  <yuqiang.xian@intel.com>

        JSVALUE32_64 DFG JIT - Bug fix for ConvertThis
        https://bugs.webkit.org/show_bug.cgi?id=69721

        Reviewed by Darin Adler.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-09  Yuqiang Xian  <yuqiang.xian@intel.com>

        Remove unused callOperation code of DFG JIT on X86
        https://bugs.webkit.org/show_bug.cgi?id=69722

        Reviewed by Filip Pizlo.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::callOperation):

2011-10-09  Yuqiang Xian  <yuqiang.xian@intel.com>

        JSVALUE32_64 DFG JIT - fillJSValue with a pair of GPRs should not set the registerFormat to be DataFormatJSDouble
        https://bugs.webkit.org/show_bug.cgi?id=69720

        Reviewed by Filip Pizlo.

        In JSVALUE32_64 DFG, DataFormatJSDouble is assumed to be represented by
        a FPR and will be used for further optimizations, though we currently
        don't fully utilize it. For now when filling a JS value which was
        spilled as a JSDouble with a pair of GPRs, we'll set the registerFormat
        to DataFormatJS to avoid compilation errors.

        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::fillJSValue):

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

        DFG should not always speculate that a ByVal access has an integer index
        https://bugs.webkit.org/show_bug.cgi?id=69716

        Reviewed by Oliver Hunt.
        
        1% win on SunSpider, neutral elsewhere.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::callOperation):
        * dfg/DFGNode.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::byValHasIntBase):
        (JSC::DFG::Propagator::clobbersWorld):
        (JSC::DFG::Propagator::getMethodLoadElimination):
        (JSC::DFG::Propagator::checkStructureLoadElimination):
        (JSC::DFG::Propagator::getByOffsetLoadElimination):
        (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-09  Yuqiang Xian  <yuqiang.xian@intel.com>

        Fix value profiling in 32_64 JIT
        https://bugs.webkit.org/show_bug.cgi?id=69717

        Reviewed by Filip Pizlo.

        Current value profiling for 32_64 JIT is broken and cannot record
        correct predicated types, which results in many speculation failures
        in the 32_64 DFG JIT, fallbacks to baseline JIT, and re-optimizations
        again and again. 
        With this fix 32_64 DFG JIT can demonstrate real performance gains.

        * bytecode/ValueProfile.cpp:
        (JSC::ValueProfile::computeStatistics):
        * bytecode/ValueProfile.h:
        (JSC::ValueProfile::classInfo):
        (JSC::ValueProfile::numberOfSamples):
        (JSC::ValueProfile::isLive):
        (JSC::ValueProfile::numberOfInt32s):
        (JSC::ValueProfile::numberOfDoubles):
        (JSC::ValueProfile::numberOfBooleans):
        (JSC::ValueProfile::dump):
            Empty value check should be performed on decoded JSValue,
            as for 32_64 empty value is not identical to encoded 0.
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitValueProfilingSite):
        * jit/JITStubCall.h:
        (JSC::JITStubCall::callWithValueProfiling):
            Record the right profiling result for 32_64.

2011-10-09  Yuqiang Xian  <yuqiang.xian@intel.com>

        Remove 32 bit restrictions in DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=69711

        Reviewed by Filip Pizlo.

        op_call/op_construct support was disabled for 32 bit DFG JIT because
        there was regression in javascriptcore tests. Now the bugs are fixed
        and there should be no regression. This makes 32 bit DFG have the same
        capability as 64 bit DFG, and improves the coverage.

        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):

2011-10-08  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add static version of JSCell::getConstructData
        https://bugs.webkit.org/show_bug.cgi?id=69673

        Reviewed by Geoffrey Garen.

        Added static version of getConstructData to all classes that 
        override it and changed the virtual versions to call the static 
        versions.  This is the first step in de-virtualizing JSCell::getConstructData.

        * API/JSCallbackConstructor.cpp:
        (JSC::JSCallbackConstructor::getConstructData):
        * API/JSCallbackConstructor.h:
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::getConstructData):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::getConstructData):
        * runtime/ArrayConstructor.h:
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::getConstructData):
        * runtime/BooleanConstructor.h:
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::getConstructData):
        * runtime/DateConstructor.h:
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::getConstructData):
        * runtime/ErrorConstructor.h:
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::getConstructData):
        * runtime/FunctionConstructor.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::getConstructData):
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getConstructData):
        * runtime/JSFunction.h:
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::getConstructData):
        * runtime/NativeErrorConstructor.h:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::getConstructData):
        * runtime/NumberConstructor.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::getConstructData):
        * runtime/ObjectConstructor.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::getConstructData):
        * runtime/RegExpConstructor.h:
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::getConstructData):
        * runtime/StringConstructor.h:

2011-10-08  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add static version of JSCell::getOwnPropertySlot
        https://bugs.webkit.org/show_bug.cgi?id=69593

        Reviewed by Geoffrey Garen.

        Added static version of getOwnPropertySlot to every class that overrides
        JSCell::getOwnPropertySlot.  The virtual versions now call the static versions.
        This is the first step in de-virtualizing JSCell::getOwnPropertySlot.

        * JavaScriptCore.exp:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::getOwnPropertySlot):
        * debugger/DebuggerActivation.h:
        * runtime/Arguments.cpp:
        (JSC::Arguments::getOwnPropertySlot):
        * runtime/Arguments.h:
        * runtime/ArrayConstructor.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::getOwnPropertySlot):
        * runtime/ArrayPrototype.h:
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::getOwnPropertySlot):
        * runtime/BooleanPrototype.h:
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::getOwnPropertySlot):
        * runtime/DateConstructor.h:
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::getOwnPropertySlot):
        * runtime/DatePrototype.h:
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::getOwnPropertySlot):
        * runtime/ErrorPrototype.h:
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::getOwnPropertySlot):
        * runtime/JSActivation.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::getOwnPropertySlot):
        * runtime/JSArray.h:
        * runtime/JSBoundFunction.cpp:
        (JSC::JSBoundFunction::getOwnPropertySlot):
        * runtime/JSBoundFunction.h:
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::getOwnPropertySlot):
        * runtime/JSByteArray.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::getOwnPropertySlot):
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertySlot):
        * runtime/JSFunction.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::getOwnPropertySlot):
        * runtime/JSGlobalObject.h:
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::getOwnPropertySlot):
        * runtime/JSNotAnObject.h:
        * runtime/JSONObject.cpp:
        (JSC::JSONObject::getOwnPropertySlot):
        * runtime/JSONObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::getOwnPropertySlot):
        * runtime/JSObject.h:
        (JSC::JSObject::getOwnPropertySlot):
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::getOwnPropertySlot):
        * runtime/JSStaticScopeObject.h:
        * runtime/JSString.cpp:
        (JSC::JSString::getOwnPropertySlot):
        * runtime/JSString.h:
        * runtime/MathObject.cpp:
        (JSC::MathObject::getOwnPropertySlot):
        * runtime/MathObject.h:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::getOwnPropertySlot):
        * runtime/NumberConstructor.h:
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::getOwnPropertySlot):
        * runtime/NumberPrototype.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::getOwnPropertySlot):
        * runtime/ObjectConstructor.h:
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::getOwnPropertySlot):
        * runtime/ObjectPrototype.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::getOwnPropertySlot):
        * runtime/RegExpConstructor.h:
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::getOwnPropertySlot):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::getOwnPropertySlot):
        * runtime/RegExpObject.h:
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::getOwnPropertySlot):
        * runtime/RegExpPrototype.h:
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::getOwnPropertySlot):
        * runtime/StringConstructor.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::getOwnPropertySlot):
        * runtime/StringObject.h:
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::getOwnPropertySlot):
        * runtime/StringPrototype.h:

2011-10-08  Yuqiang Xian  <yuqiang.xian@intel.com>

        JSVALUE32_64 DFG JIT - GetLocal should produce a cell result for Array predictions
        https://bugs.webkit.org/show_bug.cgi?id=69699

        Reviewed by Filip Pizlo.

        It should match SetLocal where only payload is stored for array predictions.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-08  Yuqiang Xian  <yuqiang.xian@intel.com>

        JSVALUE32_64 DFG JIT - Bug fixes for Branch and LogicalNot
        https://bugs.webkit.org/show_bug.cgi?id=69702

        Reviewed by Filip Pizlo.

        There are some errors in generating code for Branch and LogicalNot,
        when the operand is predicted as ObjectOrOther.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):

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

        Unreviewed, rolling out r96996.
        http://trac.webkit.org/changeset/96996
        https://bugs.webkit.org/show_bug.cgi?id=69697

        It broke all tests on the Qt bot (Requested by Ossy_night on
        #webkit).

        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::getCallDataVirtual):
        * API/JSCallbackFunction.h:
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::getCallDataVirtual):
        * API/JSObjectRef.cpp:
        (JSObjectIsFunction):
        (JSObjectCallAsFunction):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::getCallDataVirtual):
        * runtime/ArrayConstructor.h:
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::getCallDataVirtual):
        * runtime/BooleanConstructor.h:
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::getCallDataVirtual):
        * runtime/DateConstructor.h:
        * runtime/Error.cpp:
        (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction):
        (JSC::StrictModeTypeErrorFunction::create):
        (JSC::StrictModeTypeErrorFunction::constructThrowTypeError):
        (JSC::StrictModeTypeErrorFunction::getConstructData):
        (JSC::StrictModeTypeErrorFunction::callThrowTypeError):
        (JSC::StrictModeTypeErrorFunction::getCallDataVirtual):
        (JSC::StrictModeTypeErrorFunction::getCallData):
        (JSC::StrictModeTypeErrorFunction::createStructure):
        (JSC::createTypeErrorFunction):
        * runtime/Error.h:
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::getCallDataVirtual):
        * runtime/ErrorConstructor.h:
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::getCallDataVirtual):
        * runtime/FunctionConstructor.h:
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::getCallDataVirtual):
        * runtime/FunctionPrototype.h:
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::finishCreation):
        * runtime/InternalFunction.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::getCallDataVirtual):
        * runtime/JSCell.h:
        (JSC::getCallData):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getCallDataVirtual):
        * runtime/JSFunction.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Stringifier):
        (JSC::Stringifier::toJSON):
        (JSC::Stringifier::appendStringifiedValue):
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
        * runtime/JSObject.h:
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::getCallDataVirtual):
        * runtime/NativeErrorConstructor.h:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::getCallDataVirtual):
        * runtime/NumberConstructor.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::getCallDataVirtual):
        * runtime/ObjectConstructor.h:
        * runtime/Operations.cpp:
        (JSC::jsTypeStringForValue):
        (JSC::jsIsObjectType):
        (JSC::jsIsFunctionType):
        * runtime/PropertySlot.cpp:
        (JSC::PropertySlot::functionGetter):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::getCallDataVirtual):
        * runtime/RegExpConstructor.h:
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::getCallDataVirtual):
        * runtime/StringConstructor.h:
        * runtime/Structure.h:

2011-10-08  Yuqiang Xian  <yuqiang.xian@intel.com>

        DFG JIT - only Array predictions can result in unboxed cells in register file
        https://bugs.webkit.org/show_bug.cgi?id=69695

        Reviewed by Filip Pizlo.

        In current DFG JIT, only array predictions can result in unboxed cells
        in register file, not for the other cell predictions.

        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::ValueSource::forPrediction):

2011-10-07  Yuqiang Xian  <yuqiang.xian@intel.com>

        bug fixes for ArrayPush and ArrayPop in 32_64 DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=69696

        Reviewed by Filip Pizlo.

        On 32-bit, we should use TimesEight (8) instead of ScalePtr (4)
        to compute the address of a JS array element.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-07  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add static version of JSCell::deleteProperty
        https://bugs.webkit.org/show_bug.cgi?id=69659

        Reviewed by Geoffrey Garen.

        Added static version of both versions of put to all classes that 
        override them and changed the virtual versions to call the static 
        versions.  This is the first step in de-virtualizing JSCell::deleteProperty.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::deleteProperty):
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::deleteProperty):
        * debugger/DebuggerActivation.h:
        * runtime/Arguments.cpp:
        (JSC::Arguments::deleteProperty):
        * runtime/Arguments.h:
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::deleteProperty):
        * runtime/JSActivation.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::deleteProperty):
        * runtime/JSArray.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::deleteProperty):
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::deleteProperty):
        * runtime/JSFunction.h:
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::deleteProperty):
        * runtime/JSNotAnObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::deleteProperty):
        * runtime/JSObject.h:
        * runtime/JSVariableObject.cpp:
        (JSC::JSVariableObject::deleteProperty):
        * runtime/JSVariableObject.h:
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::deleteProperty):
        * runtime/StrictEvalActivation.cpp:
        (JSC::StrictEvalActivation::deleteProperty):
        * runtime/StrictEvalActivation.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::deleteProperty):
        * runtime/StringObject.h:

2011-10-07  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove getCallDataVirtual methods
        https://bugs.webkit.org/show_bug.cgi?id=69186

        Reviewed by Geoffrey Garen.

        Removed all getCallDataVirtual methods and replaced their call sites 
        with an explicit lookup in the MethodTable.

        * API/JSCallbackFunction.cpp:
        * API/JSCallbackFunction.h:
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        * API/JSObjectRef.cpp:
        (JSObjectIsFunction):
        (JSObjectCallAsFunction):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/ArrayConstructor.cpp:
        * runtime/ArrayConstructor.h:
        * runtime/BooleanConstructor.cpp:
        * runtime/BooleanConstructor.h:
        * runtime/DateConstructor.cpp:
        * runtime/DateConstructor.h:
        * runtime/Error.cpp:
        (JSC::createTypeErrorFunction):

        Moved StrictModeTypeErrorFunction to Error.h in order to be able to include 
        the class definition in JSGlobalObject.cpp.
        * runtime/Error.h:
        (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction):
        (JSC::StrictModeTypeErrorFunction::create):
        (JSC::StrictModeTypeErrorFunction::constructThrowTypeError):
        (JSC::StrictModeTypeErrorFunction::getConstructData):
        (JSC::StrictModeTypeErrorFunction::callThrowTypeError):
        (JSC::StrictModeTypeErrorFunction::getCallData):
        (JSC::StrictModeTypeErrorFunction::createStructure):
        * runtime/ErrorConstructor.cpp:
        * runtime/ErrorConstructor.h:
        * runtime/FunctionConstructor.cpp:
        * runtime/FunctionConstructor.h:
        * runtime/FunctionPrototype.cpp:
        * runtime/FunctionPrototype.h:

        To allow subclasses of InternalFunction (e.g. QtRuntimeMethod) to not have 
        to declare their own ClassInfo if they don't override getCallData, provided 
        an implementation that calls ASSERT_NOT_REACHED if called, providing roughly the same 
        functionality as of the pure virtual method InternalFunction used to have.
        Also made this new implementation protected rather than private for the same reason.
        Also added an ASSERT in InternalFunction::finishCreation to make sure that whatever 
        object is being created provides their own implementation of getCallData.  This 
        just makes execution fail earlier in a place where the source of the error is 
        easy to trace.  These ASSERTs are better than putting a null in the MethodTable because
        they appear much more intentional to anybody who fails to provide their own 
        implementation or who tries to explicitly call InternalFunction::getCallData.
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::finishCreation):
        (JSC::InternalFunction::getCallData):
        * runtime/InternalFunction.h:
        * runtime/JSCell.cpp:
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        * runtime/JSFunction.h:

        Added a global structure to JSGlobalObject for StrictModeTypeErrorFunction to enable 
        it to be reused rather than creating a new Structure every time we instantiate it.
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::strictModeTypeErrorFunctionStructure):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Stringifier):
        (JSC::Stringifier::toJSON):
        (JSC::Stringifier::appendStringifiedValue):
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
        * runtime/JSObject.h:
        (JSC::getCallData):
        * runtime/NativeErrorConstructor.cpp:
        * runtime/NativeErrorConstructor.h:
        * runtime/NumberConstructor.cpp:
        * runtime/NumberConstructor.h:
        * runtime/ObjectConstructor.cpp:
        * runtime/ObjectConstructor.h:
        * runtime/Operations.cpp:
        (JSC::jsTypeStringForValue):
        (JSC::jsIsObjectType):
        (JSC::jsIsFunctionType):
        * runtime/PropertySlot.cpp:
        (JSC::PropertySlot::functionGetter):
        * runtime/RegExpConstructor.cpp:
        * runtime/RegExpConstructor.h:
        * runtime/StringConstructor.cpp:
        * runtime/StringConstructor.h:
        * runtime/Structure.h:

2011-10-07  Oliver Hunt  <oliver@apple.com>

        Add missing break statement.

        Reviewed by Gavin Barraclough.

        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):

2011-10-07  Oliver Hunt  <oliver@apple.com>

        Support some string intrinsics in the DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=69678

        Reviewed by Gavin Barraclough.

        Add support for charAt and charCodeAt intrinsics in the DFG.

        * create_hash_table:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsic):
        * dfg/DFGIntrinsic.h:
        * dfg/DFGNode.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetCharCodeAt):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-07  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add static version of JSCell::put
        https://bugs.webkit.org/show_bug.cgi?id=69382

        Reviewed by Geoffrey Garen.

        Added static version of both versions of put to all classes that 
        override them and changed the virtual versions to call the static 
        versions.

        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::put):
        * JavaScriptCore.exp:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::put):
        * debugger/DebuggerActivation.h:
        * runtime/Arguments.cpp:
        (JSC::Arguments::put):
        * runtime/Arguments.h:
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::put):
        * runtime/JSActivation.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::put):
        * runtime/JSArray.h:
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::put):
        * runtime/JSByteArray.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::put):
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::put):
        * runtime/JSFunction.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::put):
        * runtime/JSGlobalObject.h:
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::put):
        * runtime/JSNotAnObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
        * runtime/JSObject.h:
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::put):
        * runtime/JSStaticScopeObject.h:
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::put):
        * runtime/ObjectPrototype.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::put):
        * runtime/RegExpConstructor.h:
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::put):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::put):
        * runtime/RegExpObject.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::put):
        * runtime/StringObject.h:

2011-10-07  Gavin Barraclough  <barraclough@apple.com>

        Refactor DFG to make for use of callOperation
        https://bugs.webkit.org/show_bug.cgi?id=69672

        Reviewed by Oliver Hunt.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::callOperation):
            - Added new callOperation calls, don't ASSERT flushed (use helpers for unexpected calls, too).
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
            - Switch operationNewObject/operationCreateThis to return Cells,
            - Added C_DFGOperation_E/C_DFGOperation_EC/J_DFGOperation_EA/J_DFGOperation_EJA call types.
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):
            - Replace code plating calls to operations to with calls to callOperation.
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):
            - Replace code plating calls to operations to with calls to callOperation.

2011-10-07  Oliver Hunt  <oliver@apple.com>

        Support string indexing in the DFG
        https://bugs.webkit.org/show_bug.cgi?id=69671

        Reviewed by Gavin Barraclough.

        Emit code to support inline indexing of strings 

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compileGetByValOnString):
            Shared code to perform string indexing.
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
            Use compileGetByValOnString if we predict that the base object
            is a string in GetByVal.
        * runtime/JSString.h:
        (JSC::JSString::offsetOfFiberCount):
        (JSC::JSString::offsetOfValue):

2011-10-07  Filip Pizlo  <fpizlo@apple.com>

        DFG ConvertThis speculation logic is wrong
        https://bugs.webkit.org/show_bug.cgi?id=69663

        Reviewed by Oliver Hunt.

        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::fixupNode):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-07  Oliver Hunt  <oliver@apple.com>

        Verify that our call speculation is valid.

        Reviewed by Filip Pizlo.

        Before specialising an intrinsic we need to verify that
        we our speculation is correct.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):

2011-10-07  Brent Fulgham  <bfulgham@webkit.org>

        [WinCairo] Unreviewed build correction for the build bot.

        * JavaScriptCore.vcproj/JavaScriptCore.sln: Add the missing
        Release_Cairo_CFLite and Debug_Cairo_CFLite targets so that
        build-jsc can find the target it needs to run the JSC tests.

2011-10-07  Oliver Hunt  <oliver@apple.com>

        Fix 32-bit build.

        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCall):

2011-10-07  Oliver Hunt  <oliver@apple.com>

        Support direct calls to intrinsic functions
        https://bugs.webkit.org/show_bug.cgi?id=69646

        Reviewed by Gavin Barraclough.

        Add support for optimising non-method_check calls
        to intrinsic functions (eg. when Math.abs, etc are
        cached in local variables). 

        * bytecode/CodeBlock.h:
        (JSC::getCallLinkInfoBytecodeIndex):
            Support searching CallLinkInfos by bytecode index
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
            Add support for linked calls in addition to method_check
            when searching for intrinsics
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasFunctionCheckData):
        (JSC::DFG::Node::function):
            Add ability to store a JSFunction* in a node - this is safe
            as the function will be marked by the codeblock we're compiling
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::checkFunctionElimination):
        (JSC::DFG::Propagator::performNodeCSE):
            Add support for new CheckFunction node, and implement CSE pass.
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
            Rather trivial implementation of CheckFunction
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCall):
            Need to propagate bytecode index for calls now.

2011-10-07  Dominic Cooney  <dominicc@chromium.org>

        [JSC] Disable ThreadRestrictionVerifier for JIT ExecutableMemoryHandles
        https://bugs.webkit.org/show_bug.cgi?id=69599

        Reviewed by Sam Weinig.

        DFG JIT manipulates MetaAllocatorHandles across threads, eg in
        allocating JITCode buffers on a background thread to execute a
        proxy autoconfiguration PAC file but garbage collecting it in
        response to allocation on the main thread. Disabling
        ThreadRestrictionVerification until there is a verification scheme
        that understands this handoff.

        * wtf/MetaAllocator.cpp:
        (WTF::MetaAllocator::allocate):

2011-10-06  Filip Pizlo  <fpizlo@apple.com>

        DFG should not always speculate that ConvertThis is operating on an object
        https://bugs.webkit.org/show_bug.cgi?id=69570

        Reviewed by Oliver Hunt.
        
        Mostly neutral, but with a slight regression in Kraken since it increases
        coverage in DFG and thus reveals some performance pathologies (which I
        prefer to think of as performance opportunities, in a good way).

        * bytecode/PredictedType.cpp:
        (JSC::predictionToString):
        * bytecode/PredictedType.h:
        (JSC::isOtherPrediction):
        (JSC::mergePredictions):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-06  Mark Hahnenberg  <mhahnenberg@apple.com>

        Windows build fix

        Unreviewed build fix.  Weird runtime failures on Windows due to 
        linking issues caused by the ClassInfo struct in JSByteArray not 
        being declared with JS_EXPORTDATA.

        * runtime/JSByteArray.h:

2011-10-06  Filip Pizlo  <fpizlo@apple.com>

        Structure does not reset m_previous when pinning the property map
        https://bugs.webkit.org/show_bug.cgi?id=69583

        Reviewed by Gavin Barraclough.
        
        This is an 0.6% performance improvement in V8, and 0.2% overall.

        * runtime/Structure.cpp:
        (JSC::Structure::changePrototypeTransition):
        (JSC::Structure::despecifyFunctionTransition):
        (JSC::Structure::getterSetterTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::preventExtensionsTransition):
        (JSC::Structure::addPropertyWithoutTransition):
        (JSC::Structure::removePropertyWithoutTransition):
        (JSC::Structure::pin):
        * runtime/Structure.h:

2011-10-06  Anders Carlsson  <andersca@apple.com>

        When building with clang, enable -Wglobal-constructors and -Wexit-time-destructors
        https://bugs.webkit.org/show_bug.cgi?id=69586

        Reviewed by Darin Adler.

        * Configurations/Base.xcconfig:
        Add -Wglobal-constructors and -Wexit-time-destructors when building with clang.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        When building with clang, we don't need to run the check-for-global-initializers and
        check-for-exit-time-destructors anymore.

        * jsc.cpp:
        (runInteractive):
        Move interpreterName into runInteractive.

        * wtf/StdLibExtras.h:
        When building with clang, disable the -Wglobal-constructors and -Wexit-time-destructors
        warnings around the variable declaration.

2011-10-06  Anders Carlsson  <andersca@apple.com>

        Add DEFINE_DEBUG_ONLY_GLOBAL for globals that should be defined in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=69584

        Reviewed by Darin Adler.

        Add DEFINE_DEBUG_ONLY_GLOBAL macro.

        * wtf/StdLibExtras.h:

2011-10-06  Oliver Hunt  <oliver@apple.com>

        Write barrier shouldn't allocate temporaries inside control flow
        https://bugs.webkit.org/show_bug.cgi?id=69582

        Reviewed by Gavin Barraclough.

        Reorder the code to avoid spill-related badness.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::writeBarrier):

2011-10-06  Filip Pizlo  <fpizlo@apple.com>

        DFG::shouldSpeculate methods are too complicated
        https://bugs.webkit.org/show_bug.cgi?id=69560

        Reviewed by Geoffrey Garen.
        
        Moved shouldSpeculate methods to DFG::Node, and cleaned them up to
        just use node predictions.
        
        By itself this would have meant that SpeculativeJIT code would have
        had to say things like m_jit.graph()[nodeIndex].shouldSpeculateXYZ().
        So this adds an at(NodeIndex) method to JITCodeGenerator. I replaced
        all uses of the m_jit.graph()[nodeIndex] idiom with at(nodeIndex).
        
        This is an 0.4% progression overall that shows up in all benchmarks,
        for reasons unknown.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::at):
        (JSC::DFG::JITCodeGenerator::canReuse):
        (JSC::DFG::JITCodeGenerator::isFilled):
        (JSC::DFG::JITCodeGenerator::isFilledDouble):
        (JSC::DFG::JITCodeGenerator::use):
        (JSC::DFG::JITCodeGenerator::silentSpillFPR):
        (JSC::DFG::JITCodeGenerator::silentFillGPR):
        (JSC::DFG::JITCodeGenerator::silentFillFPR):
        (JSC::DFG::detectPeepHoleBranch):
        (JSC::DFG::integerResult):
        (JSC::DFG::noResult):
        (JSC::DFG::cellResult):
        (JSC::DFG::jsValueResult):
        (JSC::DFG::storageResult):
        (JSC::DFG::doubleResult):
        (JSC::DFG::initConstantInfo):
        (JSC::DFG::appendCallWithExceptionCheck):
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::fillInteger):
        (JSC::DFG::JITCodeGenerator::fillDouble):
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeUInt32ToNumber):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::JITCodeGenerator::emitCall):
        * dfg/DFGJITCodeGenerator64.cpp:
        (JSC::DFG::JITCodeGenerator::fillInteger):
        (JSC::DFG::JITCodeGenerator::fillDouble):
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::JITCodeGenerator::emitCall):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::shouldSpeculateInteger):
        (JSC::DFG::Node::shouldSpeculateDouble):
        (JSC::DFG::Node::shouldSpeculateNumber):
        (JSC::DFG::Node::shouldNotSpeculateInteger):
        (JSC::DFG::Node::shouldSpeculateFinalObject):
        (JSC::DFG::Node::shouldSpeculateFinalObjectOrOther):
        (JSC::DFG::Node::shouldSpeculateArray):
        (JSC::DFG::Node::shouldSpeculateArrayOrOther):
        (JSC::DFG::Node::shouldSpeculateObject):
        (JSC::DFG::Node::shouldSpeculateCell):
        (JSC::DFG::Node::canSpeculateInteger):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::isInteger):
        (JSC::DFG::SpeculativeJIT::isKnownArray):
        (JSC::DFG::SpeculativeJIT::isKnownString):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::convertToDouble):
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitBranch):
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-06  Gavin Peters  <gavinp@chromium.org>

        REGRESSION (r96595): First frame in assertion backtraces is no longer labeled "1"
        https://bugs.webkit.org/show_bug.cgi?id=69556

        Reviewed by Adam Roben.

        * wtf/Assertions.cpp:

2011-10-06  Filip Pizlo  <fpizlo@apple.com>

        DFG implementation of UInt32ToNumber is missing a break statement
        https://bugs.webkit.org/show_bug.cgi?id=69552

        Reviewed by Oliver Hunt.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-06  Gavin Barraclough  <barraclough@apple.com>

        Unreviewed build fix for DFG JIT 32_64 release builds.

        * dfg/DFGJITCompiler.cpp:
        * dfg/DFGJITCompiler.h:
        * dfg/DFGJITCompiler32_64.cpp:
            - Remove three unused methods.

2011-10-06  Gavin Barraclough  <barraclough@apple.com>

        DFG JIT 32_64 should check type of values being filled by fillSpeculateInt
        https://bugs.webkit.org/show_bug.cgi?id=69549

        Reviewed by Oliver Hunt.

        This breaks sunspider/3d-cube.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
            - Speculation check on the tag. 

2011-10-06  Mark Hahnenberg  <mhahnenberg@apple.com>

        Snow Leopard build fix

        Unreviewed build fix

        * JavaScriptCore.exp:

2011-10-05  Gavin Barraclough  <barraclough@apple.com>

        Add explicit JSGlobalThis type.
        https://bugs.webkit.org/show_bug.cgi?id=69478

        Reviewed by Darin Adler.

        JSC supports a split global object, as used by WebCore for the Window. As a stage
        of making this visible to JSC, make it so that if the global this value is not the
        global object itself, it must be a subclass of JSGlobalThis.

        * API/JSCallbackObjectFunctions.h:
        (JSC::::finishCreation):
            - Don't pass the thisValue to JSGlobalObject::finishCreation.
        * JavaScriptCore.xcodeproj/project.pbxproj:
            - Added JSGlobalThis.h
        * jsc.cpp:
        (GlobalObject::finishCreation):
            - Don't pass the thisValue to JSGlobalObject::finishCreation.
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::create):
        (JSC::JSGlobalObject::finishCreation):
            - finishCreation takes a JSGlobalThis, or thisValue is implicit.
        * runtime/JSGlobalThis.h: Added.
        (JSC::JSGlobalThis::create):
        (JSC::JSGlobalThis::JSGlobalThis):
        (JSC::JSGlobalThis::finishCreation):
            - Thin wrapper on JSNonFinalObject to allow type checking.
        * testRegExp.cpp:
        (GlobalObject::finishCreation):
            - Don't pass the thisValue to JSGlobalObject::finishCreation.

2011-10-06  Mark Hahnenberg  <mhahnenberg@apple.com>

        JSC objects need to know their own cell size at runtime.
        https://bugs.webkit.org/show_bug.cgi?id=69390

        Reviewed by Geoffrey Garen.

        Added the cellSize field to ClassInfo and the static calculation of 
        size of each class to the CREATE_METHOD_TABLE macro, which will be 
        renamed in a followup patch to make its name match its broader use.

        Also added a few ClassInfo structs so that each object that is allocated has its 
        correct size.  

        * JavaScriptCore.exp:
        * runtime/ClassInfo.h:

        Changed JSByteArray s_defaultInfo to s_info so that the template will get the 
        correct ClassInfo struct from it when it's allocated.
        * runtime/JSByteArray.cpp:
        * runtime/JSByteArray.h:
        * runtime/JSCell.h:
        (JSC::allocateCell):
        * runtime/JSNotAnObject.cpp:
        * runtime/JSNotAnObject.h:
        * runtime/JSObject.cpp:
        * runtime/JSObject.h:
        (JSC::JSCell::cellSize):
        * runtime/JSStaticScopeObject.cpp:
        * runtime/JSStaticScopeObject.h:
        * runtime/StrictEvalActivation.cpp:
        * runtime/StrictEvalActivation.h:

2011-10-06  Gavin Peters  <gavinp@chromium.org>

        export new stack dumping method
        https://bugs.webkit.org/show_bug.cgi?id=69018

        The original landing of bug 69018 didn't export WTFGetBacktrace, so that when bug 69453 landed, the first use
        of this function, many builds broke.  So here we add the exports, so that the function is usable.

        Reviewed by Adam Roben.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-10-06  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r96347): Build is broken with MSVC compiler if !PLATFORM(WINDOWS)
        https://bugs.webkit.org/show_bug.cgi?id=69413

        Reviewed by Darin Adler.

        * assembler/MacroAssemblerCodeRef.h: Define STDCALL for MSVC in a proper way.

2011-10-05  Filip Pizlo  <fpizlo@apple.com>

        SpeculativeJIT::isKnownString() is wrong
        https://bugs.webkit.org/show_bug.cgi?id=69501

        Reviewed by Oliver Hunt.
        
        Removed the wrong case (GetLocal predicted String) and added a case that
        works (StrCat).

        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::isKnownString):

2011-10-05  Ryosuke Niwa  <rniwa@webkit.org>

        Windows build fix attempt after r96760.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-10-05  Chris Rogers  <crogers@google.com>

        Define a log2f() function for Windows in wtf/MathExtras.h
        https://bugs.webkit.org/show_bug.cgi?id=69491

        Reviewed by Darin Adler.

        * wtf/MathExtras.h:
        (log2f):

2011-10-05  Jer Noble  <jer.noble@apple.com>

        Enable WEB_AUDIO by default in the WebKit/mac port.
        https://bugs.webkit.org/show_bug.cgi?id=68587

        Reviewed by Simon Fraser.

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

2011-10-05  Filip Pizlo  <fpizlo@apple.com>

        Assertion hit in JSC::DFG::SpeculativeJIT::compile on SL bots
        https://bugs.webkit.org/show_bug.cgi?id=69346

        Reviewed by Oliver Hunt.
        
        Removed the assertion, since it was completely wrong for op_post_inc.
        Short of having specialized PostInc nodes in the DFG, there is no
        robust way of asserting what this assertion was trying to assert while
        also supporting op_post_inc.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        Added a simpler mechanism for registering one-off finalizers
        https://bugs.webkit.org/show_bug.cgi?id=69466

        Reviewed by Oliver Hunt.

        * heap/Heap.cpp:
        (JSC::Heap::addFinalizer):
        (JSC::Heap::FinalizerOwner::finalize):
        * heap/Heap.h: New function for adding an arbitrary finalizer for an
        arbitrary cell without declaring any special classes or Handles yourself.

        * JavaScriptCore.exp: Fix build.

        * runtime/Executable.cpp:
        (JSC::ExecutableBase::clearCode):
        (JSC::ExecutableBase::clearCodeVirtual):
        (JSC::EvalExecutable::clearCodeVirtual):
        (JSC::ProgramExecutable::clearCodeVirtual):
        (JSC::FunctionExecutable::discardCode):
        (JSC::FunctionExecutable::clearCodeVirtual):
        * runtime/Executable.h:
        (JSC::ExecutableBase::finishCreation): Use the new mechanism for eager
        finalization of executables.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::clearRareData):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::createRareDataIfNeeded):
        (JSC::JSGlobalObject::registerWeakMap): Use the new mechanism for eager
        finalization of weak maps.

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

        Ensure RetainPtr::hashTableDeletedValue returns a pointer, not a pointer to a pointer

        RetainPtr's behavior of allowing the template parameter to be either a pointer type or a
        pointed-to type confused us when we implemented hashTableDeletedValue.

        Fixes <http://webkit.org/b/69414> <rdar://problem/10236833> Using RetainPtr as the key type
        in HashMap/HashSet fails to compile

        Reviewed by John Sullivan.

        * wtf/RetainPtr.h:
        (WTF::RetainPtr::hashTableDeletedValue): Changed to use the PtrType typedef rather than T*,
        since T might itself be a pointer.

        (WTF::PtrHash<RetainPtr<P> >): Updated this to use PtrType everywhere, even though T* didn't
        seem to be causing a problem.

2011-10-05  Oliver Hunt  <oliver@apple.com>

        Remove last vestiges of anonymous storage.

        Reviewed by Gavin Barraclough.

        One anonymous storage function escaped my prior purge of
        this feature, this patch removes it.

        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::finishCreation):
        * runtime/JSObject.h:

2011-10-04  Filip Pizlo  <fpizlo@apple.com>

        DFG should be capable of a broader range of speculations on branch and not
        https://bugs.webkit.org/show_bug.cgi?id=69322

        Reviewed by Oliver Hunt.
        
        * bytecode/PredictedType.h:
        (JSC::isFinalObjectOrOtherPrediction):
        (JSC::isArrayOrOtherPrediction):
        * dfg/DFGJITCodeGenerator.cpp:
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::JITCodeGenerator):
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::fillDouble):
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        * dfg/DFGJITCodeGenerator64.cpp:
        (JSC::DFG::JITCodeGenerator::fillDouble):
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::shouldSpeculateFinalObjectOrOther):
        (JSC::DFG::SpeculativeJIT::shouldSpeculateArrayOrOther):
        (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitBranch):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compileObjectOrOtherLogicalNot):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::emitObjectOrOtherBranch):
        (JSC::DFG::SpeculativeJIT::emitBranch):

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

        Unreviewed, rolling out r96733.
        http://trac.webkit.org/changeset/96733
        https://bugs.webkit.org/show_bug.cgi?id=69454

        Broke GCC for some reason (Requested by andersca on #webkit).

        * wtf/ListHashSet.h:
        (WTF::ListHashSetReverseIterator::ListHashSetReverseIterator):
        (WTF::ListHashSetReverseIterator::get):
        (WTF::ListHashSetReverseIterator::operator*):
        (WTF::ListHashSetReverseIterator::operator->):
        (WTF::ListHashSetReverseIterator::operator++):
        (WTF::ListHashSetReverseIterator::operator--):
        (WTF::ListHashSetReverseIterator::operator==):
        (WTF::ListHashSetReverseIterator::operator!=):
        (WTF::ListHashSetReverseIterator::operator const_reverse_iterator):
        (WTF::ListHashSetReverseIterator::node):
        (WTF::ListHashSetConstReverseIterator::ListHashSetConstReverseIterator):
        (WTF::ListHashSetConstReverseIterator::get):
        (WTF::ListHashSetConstReverseIterator::operator*):
        (WTF::ListHashSetConstReverseIterator::operator->):
        (WTF::ListHashSetConstReverseIterator::operator++):
        (WTF::ListHashSetConstReverseIterator::operator--):
        (WTF::ListHashSetConstReverseIterator::operator==):
        (WTF::ListHashSetConstReverseIterator::operator!=):
        (WTF::ListHashSetConstReverseIterator::node):
        (WTF::::rbegin):
        (WTF::::rend):
        (WTF::::makeReverseIterator):
        (WTF::::makeConstReverseIterator):

2011-10-04  Oliver Hunt  <oliver@apple.com>

        Add rudimentary filtering to write barriers
        https://bugs.webkit.org/show_bug.cgi?id=69392

        Reviewed by Filip Pizlo.

        Add approximate filtering for write barriers based on the
        target's mark bit.  Also add some macros to support dumping
        GC phase timings.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::markCellCard):
        * heap/Heap.cpp:
        (JSC::GCTimer::GCTimerScope::GCTimerScope):
        (JSC::GCTimer::GCTimerScope::~GCTimerScope):
        (JSC::Heap::markRoots):
        (JSC::Heap::collect):
           Add phase timing information.
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::offsetOfMarks):
        (JSC::MarkedBlock::gatherDirtyCells):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitWriteBarrier):

2011-10-05  Anders Carlsson  <andersca@apple.com>

        Use std::reverse_iterator for ListHashSet reverse iterators
        https://bugs.webkit.org/show_bug.cgi?id=69446

        Reviewed by Darin Adler.

        * wtf/ListHashSet.h:
        Use the std::reverse_iterator iterator adaptor for the ListHashSet reverse iterators
        and get rid of the ListHashSetReverseIterator and ListHashSetConstReverseIterator classes.

2011-10-04  Gavin Barraclough  <barraclough@apple.com>

        Make Object.prototype getter/setter methods match ES5 behaviour
        https://bugs.webkit.org/show_bug.cgi?id=69393

        Reviewed by Sam Weinig.

        The rest of Object.prototype no longer substitute Null/Undefined with the global object,
        this is old ES3 behaviour. Remove it here too.

        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncDefineGetter):
        (JSC::objectProtoFuncDefineSetter):
        (JSC::objectProtoFuncLookupGetter):
        (JSC::objectProtoFuncLookupSetter):

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

        Get rid of posixThread in MachineStackMarker::Thread
        https://bugs.webkit.org/show_bug.cgi?id=54836

        Reviewed by Oliver Hunt.

        * heap/MachineStackMarker.cpp:
        (JSC::MachineThreads::Thread::Thread):
        (JSC::getCurrentPlatformThread):
        (JSC::equalThread):
        (JSC::MachineThreads::addCurrentThread):
        (JSC::MachineThreads::removeCurrentThread):
        (JSC::MachineThreads::gatherConservativeRoots):

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

        Removed JSValue::toJSNumber
        https://bugs.webkit.org/show_bug.cgi?id=69399

        No perf. change.

        toJSNumber() used to provide an implicit fast path for immediate numbers,
        but those fast paths are all explicit now, so it's just cruft.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSValue.h:
        * runtime/JSValueInlineMethods.h:

2011-10-05  Gavin Peters  <gavinp@chromium.org>

        REGRESSION (r96595): WTFReportBacktrace listed as the top frame in all assertion backtraces
        https://bugs.webkit.org/show_bug.cgi?id=69424

        Skip an extra frame in WTFReportBacktrace.  As well, I now don't count skipped frames in maxFrames,
        so I've updated maxFrames to 31, as with one skipped frame the previous value was effectively
        31 reported frames.

        Reviewed by Adam Roben.

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

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

        Unreviewed WinCE build fix for r96595.

        * wtf/Assertions.cpp:
        RtlCaptureStackBackTrace() isn't available on WinCE.

2011-10-04  Kent Tamura  <tkent@chromium.org>

        Introduce feature flags for incomplete input types
        https://bugs.webkit.org/show_bug.cgi?id=68971

        Reviewed by Hajime Morita.

        * Configurations/FeatureDefines.xcconfig:
        Add ENABLE_INPUT_TYPE_* flags. They are enabled only for iOS.

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

        Build fix.

        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION): Use an explicit cast when shortening.

2011-10-04  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add static ClassInfo structs to classes that override JSCell::getCallData
        https://bugs.webkit.org/show_bug.cgi?id=69311

        Reviewed by Darin Adler.

        Added ClassInfo structs to each class that defined its own getCallData 
        function but did not already have its own ClassInfo struct.  This is a 
        necessary addition for when we switch over to looking up getCallData from 
        the MethodTable in ClassInfo rather than doing the virtual call (which we 
        are removing).  These new ClassInfo structs are public because we often 
        use these structs in other areas of the code to uniquely identify JSC classes and 
        to enforce runtime invariants based on those class identities using ASSERTs.
        Also added new createStructure methods to those classes that didn't have 
        them so that the new ClassInfo structs would be used when creating the Structures 
        in these classes.

        * runtime/BooleanConstructor.cpp:
        * runtime/BooleanConstructor.h:
        (JSC::BooleanConstructor::createStructure):

        getCallData was not marked as static in StrictModeTypeErrorFunction.  
        * runtime/Error.cpp:
        (JSC::StrictModeTypeErrorFunction::getCallDataVirtual):
        (JSC::StrictModeTypeErrorFunction::getCallData):
        (JSC::StrictModeTypeErrorFunction::createStructure):
        * runtime/ErrorConstructor.cpp:
        * runtime/ErrorConstructor.h:
        (JSC::ErrorConstructor::createStructure):
        * runtime/FunctionConstructor.cpp:
        * runtime/FunctionConstructor.h:
        (JSC::FunctionConstructor::createStructure):
        * runtime/FunctionPrototype.cpp:
        * runtime/FunctionPrototype.h:

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

        Some JSValue cleanup
        https://bugs.webkit.org/show_bug.cgi?id=69320

        Reviewed by Darin Adler.
        
        No measurable performance change.

        Removed some JSValue::get* functions. get* used to be an optimization
        when every value operation was a virtual function call: get* would combine
        two virtual calls into one. Now, with non-virtual, inlined functions, get*
        isn't faster, and may be slightly slower.

        Merged getBoolean(bool&) and getBoolean() into asBoolean().

        Merged uncheckedGetNumber(), getJSNumber() and getNumber() into
        asNumber().

        * runtime/JSValue.h:
        * runtime/JSValueInlineMethods.h:
        (JSC::JSValue::asNumber):
        (JSC::JSValue::asBoolean): As promised!

        * runtime/NumberPrototype.cpp:
        (JSC::toThisNumber):
        (JSC::numberProtoFuncToExponential):
        (JSC::numberProtoFuncToFixed):
        (JSC::numberProtoFuncToPrecision):
        (JSC::numberProtoFuncToString):
        (JSC::numberProtoFuncToLocaleString):
        (JSC::numberProtoFuncValueOf): Removed a bunch of uses of getJSNumber()
        by switching to toThisNumber().

        * API/JSCallbackObjectFunctions.h:
        (JSC::::toNumber):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::valueOfNumberConstant):
        (JSC::DFG::Graph::valueOfBooleanConstant):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::putByVal):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/DateInstance.h:
        (JSC::DateInstance::internalNumber):
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncBind):
        * runtime/JSArray.cpp:
        (JSC::compareNumbersForQSort): Replaced getNumber() => isNumber() / asNumber().
        getBoolean() => isBoolean() / asBoolean(), uncheckedGetNumber() => asNumber().

        * runtime/JSCell.cpp:
        * runtime/JSCell.h: Nixed getJSNumber().

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncParseInt):
        * runtime/JSONObject.cpp:
        (JSC::gap):
        (JSC::Stringifier::Stringifier):
        (JSC::Stringifier::appendStringifiedValue):
        * runtime/NumberObject.cpp:
        * runtime/NumberObject.h:
        (JSC::NumberObject::createStructure):
        * runtime/Operations.h:
        (JSC::JSValue::equalSlowCaseInline):
        (JSC::JSValue::strictEqual):
        (JSC::jsLess):
        (JSC::jsLessEq):
        (JSC::jsAdd): Replaced getNumber() => isNumber() / asNumber().
        getBoolean() => isBoolean() / asBoolean(), uncheckedGetNumber() => asNumber().

2011-10-04  Scott Graham  <scottmg@chromium.org>

        Add GAMEPAD feature flag
        https://bugs.webkit.org/show_bug.cgi?id=66859

        Reviewed by Darin Fisher.

        * Configurations/FeatureDefines.xcconfig:

2011-10-03  Filip Pizlo  <fpizlo@apple.com>

        JITCodeGenerator should no longer have code that tries too hard
        to be both speculative and non-speculative
        https://bugs.webkit.org/show_bug.cgi?id=69321

        Reviewed by Gavin Barraclough.
        
        Removed m_isSpeculative and speculationCheck() from JITCodeGenerator.
        This required moving emitBranch() to SpeculativeJIT, since it was
        the main user of that field and method. Other than trvial clean-ups
        in emitBranch(), the code is unchanged (and still has some disparity
        between 64 and 32_64, and still lacks some obvious optimizations).

        * dfg/DFGJITCodeGenerator.cpp:
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::JITCodeGenerator):
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::fillDouble):
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        * dfg/DFGJITCodeGenerator64.cpp:
        (JSC::DFG::JITCodeGenerator::fillDouble):
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitBranch):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::emitBranch):

2011-10-04  David Hyatt  <hyatt@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=69372
        
        [CSS3 Regions] Make sure overflow:visible lets content spill out of regions.
        
        Add support for reverse iteration to ListHashSet to support being able to walk them
        backwards easily.

        Reviewed by Anders Carlsson.

        * wtf/ListHashSet.h:
        (WTF::ListHashSetReverseIterator::ListHashSetReverseIterator):
        (WTF::ListHashSetReverseIterator::get):
        (WTF::ListHashSetReverseIterator::operator*):
        (WTF::ListHashSetReverseIterator::operator->):
        (WTF::ListHashSetReverseIterator::operator++):
        (WTF::ListHashSetReverseIterator::operator--):
        (WTF::ListHashSetReverseIterator::operator==):
        (WTF::ListHashSetReverseIterator::operator!=):
        (WTF::ListHashSetReverseIterator::operator const_reverse_iterator):
        (WTF::ListHashSetReverseIterator::node):
        (WTF::ListHashSetConstReverseIterator::ListHashSetConstReverseIterator):
        (WTF::ListHashSetConstReverseIterator::get):
        (WTF::ListHashSetConstReverseIterator::operator*):
        (WTF::ListHashSetConstReverseIterator::operator->):
        (WTF::ListHashSetConstReverseIterator::operator++):
        (WTF::ListHashSetConstReverseIterator::operator--):
        (WTF::ListHashSetConstReverseIterator::operator==):
        (WTF::ListHashSetConstReverseIterator::operator!=):
        (WTF::ListHashSetConstReverseIterator::node):
        (WTF::::rbegin):
        (WTF::::rend):
        (WTF::::makeReverseIterator):
        (WTF::::makeConstReverseIterator):
        (WTF::::makeConstIterator):

2011-10-04  Gavin Peters  <gavinp@chromium.org>

        fix gtk breakage caused by changeset 96595
        https://bugs.webkit.org/show_bug.cgi?id=69371

        ews did not catch build breakage in the gtk WebKitPluginProcess target; this patch removes
        the pretty printer on gtk, which should fix the build on that platform.

        Reviewed by NOBODY, this is a build fix.

        * wtf/Assertions.cpp:

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

        Unreviewed, rolling out r96630.
        http://trac.webkit.org/changeset/96630
        https://bugs.webkit.org/show_bug.cgi?id=69368

        Caused assertion failures in validateCell (Requested by
        mhahnenberg on #webkit).

        * runtime/BooleanConstructor.cpp:
        * runtime/BooleanConstructor.h:
        * runtime/Error.cpp:
        (JSC::StrictModeTypeErrorFunction::getCallDataVirtual):
        (JSC::StrictModeTypeErrorFunction::getCallData):
        * runtime/ErrorConstructor.cpp:
        * runtime/ErrorConstructor.h:
        * runtime/FunctionConstructor.cpp:
        * runtime/FunctionConstructor.h:
        * runtime/FunctionPrototype.cpp:
        * runtime/FunctionPrototype.h:

2011-10-04  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add static ClassInfo structs to classes that override JSCell::getCallData
        https://bugs.webkit.org/show_bug.cgi?id=69311

        Reviewed by Darin Adler.

        Added ClassInfo structs to each class that defined its own getCallData 
        function but did not already have its own ClassInfo struct.  This is a 
        necessary addition for when we switch over to looking up getCallData from 
        the MethodTable in ClassInfo rather than doing the virtual call (which we 
        are removing).  These new ClassInfo structs are public because we often 
        use these structs in other areas of the code to uniquely identify JSC classes and 
        to enforce runtime invariants based on those class identities using ASSERTs.

        * runtime/BooleanConstructor.cpp:
        * runtime/BooleanConstructor.h:

        getCallData was not marked as static is StrictModeTypeErrorFunction.  
        * runtime/Error.cpp:
        (JSC::StrictModeTypeErrorFunction::getCallDataVirtual):
        (JSC::StrictModeTypeErrorFunction::getCallData):
        * runtime/ErrorConstructor.cpp:
        * runtime/ErrorConstructor.h:
        * runtime/FunctionConstructor.cpp:
        * runtime/FunctionConstructor.h:
        * runtime/FunctionPrototype.cpp:
        * runtime/FunctionPrototype.h:

2011-10-04  Ryosuke Niwa  <rniwa@webkit.org>

        Leopard build fix after r96613.

        * wtf/Platform.h:

2011-10-04  Mark Hahnenberg  <mhahnenberg@apple.com>

        Implicitly add toString and valueOf to prototype when convertToType callback is provided
        https://bugs.webkit.org/show_bug.cgi?id=69156

        Reviewed by Geoffrey Garen.

        Added callbacks for toString and valueOf which are implicitly added to a client object's
        prototype if they provide a convertToType callback when declaring their class through 
        the JSC API.

        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::toStringCallback):
        (JSC::JSCallbackFunction::valueOfCallback):
        * API/JSCallbackFunction.h:
        * API/JSClassRef.cpp:
        (OpaqueJSClass::prototype):
        * API/tests/testapi.js:

2011-10-03  Jon Lee  <jonlee@apple.com>

        Extend DOM WheelEvent to differentiate between physical and logical scroll directions
        https://bugs.webkit.org/show_bug.cgi?id=68959
        <rdar://problem/10036688>

        Reviewed by Sam Weinig.

        * wtf/Platform.h: Added HAVE_INVERTED_WHEEL_EVENTS for Lion and later.

2011-10-04  Csaba Osztrogonác  <ossy@webkit.org>

        MinGW warning fix after r96286.

        Avoid redefining STDCALL, because STDCALL is also defined in mingw32/include/windef.h:
        #define __stdcall __attribute__((stdcall))
        #define STDCALL __stdcall

        Reviewed by Tor Arne Vestbø.

        * assembler/MacroAssemblerCodeRef.h:

2011-10-04  Gavin Peters  <gavinp@chromium.org>

       add more stack dumping methods
       https://bugs.webkit.org/show_bug.cgi?id=69018

       In addition to WTFReportBacktrace, this adds the cross-platform WTFGetBacktrace, which lets
       WebKit programmatically retrieve the current stack.  This is useful if you need to add more
       reporting to field crash report uploads, if you're tracking down an irreproducable bug,
       for instance.

       Reviewed by Darin Adler.

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

2011-10-03  Filip Pizlo  <fpizlo@apple.com>

        DFG should inline Array.push and Array.pop
        https://bugs.webkit.org/show_bug.cgi?id=69314

        Reviewed by Geoff Garen.
        
        Fix 32-bit.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-03  Filip Pizlo  <fpizlo@apple.com>

        DFG should inline Array.push and Array.pop
        https://bugs.webkit.org/show_bug.cgi?id=69314

        Reviewed by Oliver Hunt.
        
        1% speed-up in V8 due to 6% speed-up in V8-deltablue.

        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::storePtr):
        * create_hash_table:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleIntrinsic):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGIntrinsic.h:
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasHeapPrediction):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::getByValLoadElimination):
        (JSC::DFG::Propagator::getMethodLoadElimination):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-03  Filip Pizlo  <fpizlo@apple.com>

        JSC ASSERT Opening the Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=69293

        Reviewed by Oliver Hunt.
        
        If a polymorphic access structure list has a duplicated structure, then
        don't crash.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):

2011-10-03  Gavin Barraclough  <barraclough@apple.com>

        On X86, switch bucketCount into a register, timeoutCheck into memory
        https://bugs.webkit.org/show_bug.cgi?id=69299

        Reviewed by Geoff Garen.

        We don't have sufficient registers to keep both in registers, and DFG JIT will trample esi;
        it doesn't matter if the bucketCount gets stomped on (in fact it may add to randomness!),
        but it if the timeoutCheck gets trashed we may make calls out to the timout_check stub
        function too frequently (regressing performance). This patch has no perf impact on sunspider.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::branchAdd32):
        (JSC::MacroAssemblerX86::branchSub32):
            - Added branchSub32 with AbsoluteAddress.
        * jit/JIT.cpp:
        (JSC::JIT::emitTimeoutCheck):
            - Keep timeout count in memory on X86.
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitValueProfilingSite):
            - remove X86 specific code, switch bucket count back into a register.
        * jit/JITStubs.cpp:
            - Stop initializing esi (it is no longer the timeoutCheck!)
        * jit/JSInterfaceJIT.h:
            - change definition of esi to be the bucketCountRegister.
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
            - Add timeoutCount as a property to global data (the counter should be per-thread).

2011-10-03  Filip Pizlo  <fpizlo@apple.com>

        DFG backends don't have access to per-node predictions from the propagator
        https://bugs.webkit.org/show_bug.cgi?id=69291

        Reviewed by Oliver Hunt.
        
        Nodes now have two notion of predictions: the heap prediction, which is
        what came directly from value profiling, and the propagator's predictions,
        which arise out of abstract interpretation. Every node has a propagator
        prediction, but not every node has a heap prediction; and there is no
        guarantee that a node that has both will keep them consistent as the
        propagator may have additional information available to it.
        
        This is performance neutral.

        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::getPrediction):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::Node):
        (JSC::DFG::Node::hasHeapPrediction):
        (JSC::DFG::Node::getHeapPrediction):
        (JSC::DFG::Node::predictHeap):
        (JSC::DFG::Node::prediction):
        (JSC::DFG::Node::predict):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::Propagator):
        (JSC::DFG::Propagator::setPrediction):
        (JSC::DFG::Propagator::mergePrediction):
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::isPredictedNumerical):
        (JSC::DFG::Propagator::logicalNotIsPure):
        (JSC::DFG::Propagator::setReplacement):

2011-10-03  Jer Noble  <jer.noble@apple.com>

        Unreviewed, rolling out r96526.
        http://trac.webkit.org/changeset/96526
        https://bugs.webkit.org/show_bug.cgi?id=68587

        WEB_AUDIO has numerous 64->32 bit casting warnings, causing
        build breakages where -Wall is enabled.

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

2011-10-03  Gavin Barraclough  <barraclough@apple.com>

        Unreviewed build fix for DFG JIT 32_64.

        * dfg/DFGJITCompiler32_64.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-10-02  Filip Pizlo  <fpizlo@apple.com>

        DFG should speculate more aggressively on obvious cases on
        polymorphic get_by_id
        https://bugs.webkit.org/show_bug.cgi?id=69235

        Reviewed by Oliver Hunt.
        
        This implements trivial polymorphic get_by_id. It also fixes
        problems in the CSE for CheckStructure in the put_by_id
        transition case.
        
        Doing this required knowing whether a polymorphic get_by_id stub
        was doing a direct access rather than a call of some kind.
        
        Slight speed-up on Kraken and SunSpider. 0.5% speed-up in the
        scaled mean of all benchmarks.

        * GNUmakefile.list.am:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/Instruction.h:
        (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
        (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::cellConstant):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::addStructureSet):
        (JSC::DFG::Graph::addStructureTransitionData):
        * dfg/DFGNode.h:
        (JSC::DFG::StructureTransitionData::StructureTransitionData):
        (JSC::DFG::Node::hasStructureTransitionData):
        (JSC::DFG::Node::structureTransitionData):
        (JSC::DFG::Node::hasStructureSet):
        (JSC::DFG::Node::structureSet):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::checkStructureLoadElimination):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::tryBuildGetByIDList):
        (JSC::DFG::tryBuildGetByIDProtoList):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGStructureSet.h: Added.
        (JSC::DFG::StructureSet::StructureSet):
        (JSC::DFG::StructureSet::add):
        (JSC::DFG::StructureSet::addAll):
        (JSC::DFG::StructureSet::remove):
        (JSC::DFG::StructureSet::contains):
        (JSC::DFG::StructureSet::isSubsetOf):
        (JSC::DFG::StructureSet::isSupersetOf):
        (JSC::DFG::StructureSet::size):
        (JSC::DFG::StructureSet::at):
        (JSC::DFG::StructureSet::operator[]):
        (JSC::DFG::StructureSet::last):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        (JSC::getPolymorphicAccessStructureListSlot):

2011-10-03  Jer Noble  <jer.noble@apple.com>

        Enable WEB_AUDIO by default in the WebKit/mac port.
        https://bugs.webkit.org/show_bug.cgi?id=68587

        Reviewed by Simon Fraser.

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

2011-10-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix make distcheck build
        https://bugs.webkit.org/show_bug.cgi?id=69243

        Reviewed by Martin Robinson.

        * GNUmakefile.list.am:

2011-10-03  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Build fix: Qt::escape is deprecated in Qt5
        https://bugs.webkit.org/show_bug.cgi?id=69162

        Use QString::toHtmlEscaped in the Qt5 case.

        Reviewed by Andreas Kling.

        * JavaScriptCore.pri:
        * wtf/qt/UtilsQt.h: Added.
        (escapeHtml):
        * wtf/wtf.pri:

2011-10-03  Balazs Kelemen  <kbalazs@webkit.org>

        libdispatch based ParallelJobs is not enough parallel
        https://bugs.webkit.org/show_bug.cgi?id=66378

        Reviewed by Zoltan Herczeg.

        Use the appropriate libdispatch API for our use case.
        Throw away the hard coded limit of parallel threads
        and use dispatch_apply with the default priority normal
        queue istead of using our own custom serial queue (which
        was a misuse of the API). Enabling PARALLEL_JOBS is now
        a 60% win (2.63x as fast) on the methanol benchmark
        (https://gitorious.org/methanol) with an SVG centric test set
        while the old implementation was almost identical (less than 5% win).

        * wtf/ParallelJobsLibdispatch.h:
        (WTF::ParallelEnvironment::ParallelEnvironment):
        (WTF::ParallelEnvironment::execute):

2011-10-02  Zoltan Herczeg  <zherczeg@webkit.org>

        [Qt]REGRESSION(r95912): It made sputnik tests flakey
        https://bugs.webkit.org/show_bug.cgi?id=68990

        Reviewed by Geoffrey Garen.

        Changing signed char to int in r96354 solved the
        problem. However transitionCount still returns
        with a signed char and should be changed to int.

        * runtime/Structure.h:
        (JSC::Structure::transitionCount):

2011-10-02  Filip Pizlo  <fpizlo@apple.com>

        DFG misses some obvious opportunities for common subexpression elimination
        https://bugs.webkit.org/show_bug.cgi?id=69233

        Reviewed by Oliver Hunt.
        
        0.7% speed-up on SunSpider.

        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::getByValLoadElimination):
        (JSC::DFG::Propagator::getMethodLoadElimination):
        (JSC::DFG::Propagator::checkStructureLoadElimination):
        (JSC::DFG::Propagator::getByOffsetLoadElimination):
        (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
        (JSC::DFG::Propagator::performNodeCSE):

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

        Bug 67455 - Different regular expression result

        Reviewed by Darin Adler.
        
        Fix a regression introduced in r72140. A return was added to the backtracking loop for
        backtrackParentheses with QuantifierNonGreedy, so it always returns after one iteration.
        This is incorrect. The additional return should only trigger to force an early return if
        an error has occured.

        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::matchParentheses):
            - Simplify some nested if else logic.
        (JSC::Yarr::Interpreter::backtrackParentheses):
            - Simplify some nested if else logic.
            - Only return early from backtrackParentheses on success/error, not on failure.

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

        Removed redundant helper functions for allocating Strong handles
        https://bugs.webkit.org/show_bug.cgi?id=69218

        Reviewed by Sam Weinig.

        * heap/Heap.h:
        (JSC::Heap::handleHeap):
        * runtime/JSGlobalData.h: Removed these helper functions, since they
        just created indirection.

        * heap/StrongInlines.h: Added. Broke out a header for inline functions
        to resolve circular dependencies created by inlining. I'm told this is
        the future for JavaScriptCore.

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj: Go forth and build.

        * API/JSCallbackObjectFunctions.h:
        (JSC::::init):
        * runtime/WeakGCMap.h:
        (JSC::WeakGCMap::add):
        (JSC::WeakGCMap::set):
        * runtime/StructureTransitionTable.h:
        (JSC::StructureTransitionTable::setSingleTransition):
        * heap/Local.h:
        (JSC::::Local):
        * heap/Strong.h:
        (JSC::::Strong):
        (JSC::::set):
        * heap/Weak.h:
        (JSC::Weak::Weak):
        (JSC::Weak::set): Allocate handles directly instead of going through a
        chain of forwarding functions.

        * bytecompiler/BytecodeGenerator.cpp:
        * runtime/JSGlobalData.cpp:
        * runtime/LiteralParser.cpp:
        * runtime/RegExpCache.cpp: Updated for header changes.

2011-09-30  Filip Pizlo  <fpizlo@apple.com>

        All of JSC's heuristics should be in one place for easier tuning
        https://bugs.webkit.org/show_bug.cgi?id=69201

        Reviewed by Oliver Hunt.
        
        This makes it possible to change tiered compilation heuristics in
        one place (Heuristics.cpp) without recompiling the whole project.
        
        It also makes it possible to enable setting heuristics using
        environment variables. This is off by default. When turned on, it
        makes tuning the system much easier.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::shouldOptimizeNow):
        * bytecode/CodeBlock.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * jit/JIT.cpp:
        (JSC::JIT::emitOptimizationCheck):
        * runtime/Heuristics.cpp: Added.
        (JSC::Heuristics::parse):
        (JSC::Heuristics::setHeuristic):
        (JSC::Heuristics::initializeHeuristics):
        * runtime/Heuristics.h: Added.
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreadingOnce):

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

        Support string length in the DFG
        https://bugs.webkit.org/show_bug.cgi?id=69215

        Reviewed by Geoff Garen.

        Adds a GetStringLength node to the DFG so that we can support
        string.length inline.

        * dfg/DFGNode.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::isKnownString):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * runtime/JSString.h:
        (JSC::JSString::offsetOfLength):

2011-10-01  Yuqiang Xian  <yuqiang.xian@intel.com>

        JSVALUE32_64 DFG JIT - unboxed integers and cells in register file must be reboxed before exiting from DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=69205

        Reviewed by Gavin Barraclough.

        If there are unboxed integers and cells in register file (e.g. by SetLocal), 
        they must be reboxed before exiting from the speculative DFG JIT execution.
        This patch also adds a new ValueSourceKind (CellInRegisterFile) and a new
        ValueRecoveryTechnique (AlreadyInRegisterFileAsCell).

        * dfg/DFGJITCompiler32_64.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::ValueSource::dump):
        (JSC::DFG::ValueRecovery::dump):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::ValueSource::forPrediction):
        (JSC::DFG::ValueRecovery::alreadyInRegisterFileAsUnboxedCell):

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

        Unreviewed, rolling out r96421.
        http://trac.webkit.org/changeset/96421
        https://bugs.webkit.org/show_bug.cgi?id=69206

        It broke Qt-WK2 build (Requested by ossy on #webkit).

        * JavaScriptCore.pri:
        * wtf/qt/UtilsQt.h: Removed.
        * wtf/wtf.pri:

2011-09-30  Daniel Bates  <dbates@webkit.org>

        Attempt to fix the Apple Windows and WinCairo Debug builds after
        <http://trac.webkit.org/changeset/96446> (https://bugs.webkit.org/show_bug.cgi?id=69203).

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove the symbol
        ?toStrictThisObject@JSObject@JSC@@UBE?AVJSValue@2@PAVExecState@2@@Z since the
        corresponding function, JSValue::toStrictThisObject(), was removed.

2011-09-30  Yuqiang Xian  <yuqiang.xian@intel.com>

        DFG operation results are not set correctly in JSVALUE32_64 DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=69126

        Reviewed by Gavin Barraclough.

        The setupResults routine has the bug of reversing the source and destination. 
        Also some other trivial (but stupid) bugs need to be fixed in JSVALUE32_64 DFG JIT.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::setupTwoStubArgs):
        (JSC::DFG::setupResults):
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):

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

        Remove toStrictThisObject, toThisString, toThisJSString
        https://bugs.webkit.org/show_bug.cgi?id=69203

        Rubber stamped by Sam Weinig

        These are no longer used.

        * JavaScriptCore.exp:
        * runtime/JSActivation.cpp:
        * runtime/JSActivation.h:
        * runtime/JSObject.cpp:
        * runtime/JSObject.h:
        * runtime/JSStaticScopeObject.cpp:
        * runtime/JSStaticScopeObject.h:
        * runtime/JSValue.h:
        * runtime/StrictEvalActivation.cpp:
        * runtime/StrictEvalActivation.h:

2011-09-30  Filip Pizlo  <fpizlo@apple.com>

        DFG does not speculate aggressively enough on put_by_id
        https://bugs.webkit.org/show_bug.cgi?id=69114

        Reviewed by Oliver Hunt.

        This adds new nodes along with optimizations for those nodes:
        
        GetPropertyStorage: CheckStructure used to do both the structure
        check and retrieve the storage pointer. Now CheckStructure just
        checks the structure, and GetPropertyStorage retrieves the
        storage pointer.
        
        PutStructure: Changes the structure, and has the expected store
        to load optimization with CheckStructure.
        
        PutByOffset: Directly sets the value. Has store to load
        optimization with GetByOffset.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::cellConstant):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::writeBarrier):
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasStructure):
        (JSC::DFG::Node::hasStorageAccessData):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::impureCSE):
        (JSC::DFG::Propagator::checkStructureLoadElimination):
        (JSC::DFG::Propagator::getByOffsetLoadElimination):
        (JSC::DFG::Propagator::getPropertyStorageLoadElimination):
        (JSC::DFG::Propagator::eliminate):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        StringRecursionChecker should not work in terms of EncodedJSValue
        https://bugs.webkit.org/show_bug.cgi?id=69188

        Reviewed by Oliver Hunt.

        0 is not the empty value on 32_64.
        Code that casts literals to EncodedJSValues may be unsafe if we change our internal representation.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        (JSC::arrayProtoFuncToLocaleString):
        (JSC::arrayProtoFuncJoin):
        * runtime/ErrorPrototype.cpp:
        (JSC::errorProtoFuncToString):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncToString):
        * runtime/StringRecursionChecker.cpp:
        (JSC::StringRecursionChecker::throwStackOverflowError):
        (JSC::StringRecursionChecker::emptyString):
        * runtime/StringRecursionChecker.h:
        (JSC::StringRecursionChecker::performCheck):
        (JSC::StringRecursionChecker::earlyReturnValue):

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

        DFG JIT, Branch on integer can always be a 32-bit compare.
        https://bugs.webkit.org/show_bug.cgi?id=69174

        Reviewed by Sam Weinig.

        if (shouldSpeculateInteger(node.child1()) && !isStrictInt32(node.child1())),
        the JSVALUE64 JIT will currently compare all 64bits in the register, but in
        these cases the DataFormat is always a JS boxed integer. In these cases we
        can just compare the low 32bits anyway - no need to check the tag.
        This allows the code to be unified with the JSVALUE32_64 JIT.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        Need a sensible GGC policy

        Reviewed by Geoff Garen.

        This replaces the existing random collection policy
        with a deterministic policy based on nursery size.

        * heap/AllocationSpace.cpp:
        (JSC::AllocationSpace::allocateSlowCase):
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::markRoots):
        (JSC::Heap::collect):
        * heap/Heap.h:
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::resetAllocator):
        * heap/MarkedSpace.h:
        (JSC::MarkedSpace::nurseryWaterMark):
        (JSC::MarkedSpace::allocate):

2011-09-30  Filip Pizlo  <fpizlo@apple.com>

        DFG 32-bit support for op_call and op_construct causes
        run-javascriptcore-tests to fail
        https://bugs.webkit.org/show_bug.cgi?id=69171

        Reviewed by Gavin Barraclough.
        
        This fixes one obvious bug that was causing test failures (no
        support for dummy slow case for op_add in 32_64), and disables
        op_call and op_construct by default.        

        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emitSlow_op_add):

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

        Crash due to out of bounds read/write in MarkedSpace
        https://bugs.webkit.org/show_bug.cgi?id=69148
        
        This was a case of being surprised by a poorly aritulcated cell size limit,
        plus an incorrect ASSERT guarding the cell size limit.

        Reviewed by Oliver Hunt.

        * heap/MarkedSpace.h:
        (JSC::MarkedSpace::sizeClassFor): Changed heap size ranges to be inclusive,
        since it makes the ranges easier to understand.
        
        Bumped up the max cell size to support the use case in this bug. Since the
        atomSize is much bigger than it used to be, there isn't much accounting
        cost to handling more size classes.
        
        Switched to FixedArray, to help catch SizeClass indexing bugs in the future.

        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::resetAllocator):
        (JSC::MarkedSpace::canonicalizeCellLivenessData): Updated for size ranges
        being inclusive.

2011-09-30  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] Build fix: Qt::escape is deprecated in Qt5
        https://bugs.webkit.org/show_bug.cgi?id=69162

        Use QString::toHtmlEscaped in the Qt5 case.

        Reviewed by Andreas Kling.

        * JavaScriptCore.pri:
        * wtf/qt/UtilsQt.h: Added.
        (escapeHtml):
        * wtf/wtf.pri:

2011-09-30  Yuqiang Xian  <yuqiang.xian@intel.com>

        Fix bug in getHostCallReturnValue of DFG JIT on X86
        https://bugs.webkit.org/show_bug.cgi?id=69133

        Reviewed by Gavin Barraclough.

        We need to insert the additional argument in the stack slot before
        return address instead of simply pushing it afterwards.
        Also getHostCallReturnValue* should be attributed as stdcall
        to make the stack cleaned up by the callee.

        * dfg/DFGOperations.cpp:

2011-09-30  Pierre Rossi  <pierre.rossi@gmail.com>

        [Qt] wtf header files are unknown to Qt Creator
        https://bugs.webkit.org/show_bug.cgi?id=69158

        Adding the HEADERS variable in wtf.pri so that
        the header files can be accessed easily.

        Reviewed by Andreas Kling.

        * wtf/wtf.pri:

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

        Merge some more of DFGSpeculativeJIT 32_64/64
        https://bugs.webkit.org/show_bug.cgi?id=69164

        Reviewed by Oliver Hunt.

        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGJITCodeGenerator32_64.cpp:
        * dfg/DFGJITCodeGenerator64.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
        * dfg/DFGSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::compileValueAdd):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::compileValueAdd):
        (JSC::DFG::SpeculativeJIT::compileLogicalNot):
        (JSC::DFG::SpeculativeJIT::compile):

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

        Add getCallData to MethodTable in ClassInfo
        https://bugs.webkit.org/show_bug.cgi?id=69024

        Reviewed by Sam Weinig.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

        Added the getCallData to the MethodTable in the ClassInfo struct.
        * runtime/ClassInfo.h:

2011-09-29  Yuqiang Xian  <yuqiang.xian@intel.com>

        Add op_call/op_constructor support to JSVALUE32_64 DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=69120

        Reviewed by Gavin Barraclough.

        Improve the coverage of JSVALUE32_64 DFG JIT.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::tagOfCallData):
        (JSC::DFG::payloadOfCallData):
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::emitCall):

2011-09-29  Yuqiang Xian  <yuqiang.xian@intel.com>

        DFG JIT - register not unlocked after usage in ArithDiv
        https://bugs.webkit.org/show_bug.cgi?id=69122

        Reviewed by Geoffrey Garen.

        Some allocated register is not unlocked after the usage in ArithDiv. 
        Also there's a typo in "ENBALE_DFG_CONSISTENTCY_CHECK".

        * dfg/DFGNode.h:
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-09-29  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSCell::toObject
        https://bugs.webkit.org/show_bug.cgi?id=68937

        Reviewed by Darin Adler.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

        De-virtualized JSCell::toObject and changed its implementation to manually check the 
        cases for JSString and JSObject rather than leaving it up to the virtual method call.
        * runtime/JSCell.cpp:
        (JSC::JSCell::toObject):
        * runtime/JSCell.h:

        Removed JSNotAnObject::toObject because the case for JSObject works for it.
        Also removed JSObject::toObject because it was essentially the identity function,
        which is not necessary since toObject is no longer virtual.
        * runtime/JSNotAnObject.cpp:
        * runtime/JSNotAnObject.h:
        * runtime/JSObject.cpp:
        * runtime/JSObject.h:

        De-virtualized JSObject::toObject and JSString::toObject.
        * runtime/JSString.h:

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

        Start refactoring DFGSpeculativeJIT
        https://bugs.webkit.org/show_bug.cgi?id=69112

        Reviewed by Oliver Hunt.

        Again, move JSVALUE64 code into a DFJSpeculativeJIT64.cpp

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::ValueSource::dump):
        (JSC::DFG::ValueRecovery::dump):
        (JSC::DFG::OSRExit::OSRExit):
        (JSC::DFG::OSRExit::dump):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compare):
        * dfg/DFGSpeculativeJIT64.cpp: Copied from Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp.
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::compile):

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

        Refactor out trivially duplicated code in DFGJITCodeGenerator.
        https://bugs.webkit.org/show_bug.cgi?id=69109

        Reviewed by Oliver Hunt.

        Some code is trivially redundant between DFGJITCodeGenerator.cpp & DFGJITCodeGenerator32_64.cpp

        Basically move a JSVALUE64 specific code into a new DFGJITCodeGenerator64.cpp, leave common code
        in DFGJITCodeGenerator.cpp, and remove copies from DFGJITCodeGenerator32_64.cpp.

        For some function differences are trivial & make more sense to ifdef individually, and some
        Operand methods make more sense left in DFGJITCodeGenerator.cpp alongside similar constructors.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::isKnownNotNumber):
        (JSC::DFG::JITCodeGenerator::isKnownBoolean):
        (JSC::DFG::JITCodeGenerator::writeBarrier):
        (JSC::DFG::JITCodeGenerator::dump):
        (JSC::DFG::JITCodeGenerator::checkConsistency):
        (JSC::DFG::GPRTemporary::GPRTemporary):
        (JSC::DFG::FPRTemporary::FPRTemporary):
        * dfg/DFGJITCodeGenerator32_64.cpp:
        * dfg/DFGJITCodeGenerator64.cpp: Copied from Source/JavaScriptCore/dfg/DFGJITCodeGenerator.cpp.
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::branchIfNotCell):
        * dfg/DFGJITCompilerInlineMethods.h:

2011-09-28  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT should infer which uses of a variable are not aliased
        https://bugs.webkit.org/show_bug.cgi?id=68593

        Reviewed by Oliver Hunt.
        
        This separates how a variable is stored (i.e. its virtual register)
        from how it's predicted. Each variable now takes a
        VariableAccessData as its operand, instead of the virtual register.
        The VariableAccessData stores the operand and the prediction. If
        multiple uses of a variable are aliased, their VariableAccessDatas
        are unified.
        
        This also adds tracking of which argument values are used. It
        correctly observes that an argument value is not used, if the
        argument is assigned to inside the function before being used.
        
        This also adds tracking of which variables are live at the head of
        a basic block, and separates that from a variable being live at the
        tail.
        
        Finally, this communicates to both OSR entry and OSR exit code how
        a variable is predicted at a particular point in the code, rather
        than just communicating how it was predicted in the entire code
        block (since with this patch there is no longer the notion of a
        variable having just one prediction for a code block).

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/ActionablePrediction.h: Added.
        (JSC::actionablePredictionFromPredictedType):
        (JSC::valueObeysPrediction):
        (JSC::actionablePredictionToString):
        (JSC::ActionablePredictions::ActionablePredictions):
        (JSC::ActionablePredictions::setArgument):
        (JSC::ActionablePredictions::argument):
        (JSC::ActionablePredictions::setVariable):
        (JSC::ActionablePredictions::variable):
        (JSC::ActionablePredictions::argumentUpperBound):
        (JSC::ActionablePredictions::variableUpperBound):
        (JSC::ActionablePredictions::pack):
        (JSC::ActionablePredictions::packVector):
        * bytecode/CodeBlock.h:
        * bytecode/PredictionTracker.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::newVariableAccessData):
        (JSC::DFG::ByteCodeParser::getLocal):
        (JSC::DFG::ByteCodeParser::setLocal):
        (JSC::DFG::ByteCodeParser::getArgument):
        (JSC::DFG::ByteCodeParser::setArgument):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::processPhiStack):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::nameOfVariableAccessData):
        (JSC::DFG::Graph::dump):
        (JSC::DFG::Graph::predictArgumentTypes):
        * dfg/DFGGraph.h:
        (JSC::DFG::operandIsArgument):
        (JSC::DFG::VariableRecord::setFirstTime):
        (JSC::DFG::BasicBlock::BasicBlock):
        (JSC::DFG::Graph::predict):
        (JSC::DFG::Graph::getPrediction):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::noticeOSREntry):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasVariableAccessData):
        (JSC::DFG::Node::hasLocal):
        (JSC::DFG::Node::variableAccessData):
        (JSC::DFG::Node::local):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGOSREntry.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::ValueSource::dump):
        (JSC::DFG::OSRExit::OSRExit):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::ValueSource::ValueSource):
        (JSC::DFG::ValueSource::forPrediction):
        (JSC::DFG::ValueSource::isSet):
        (JSC::DFG::ValueSource::kind):
        (JSC::DFG::ValueSource::nodeIndex):
        (JSC::DFG::ValueSource::nodeIndexFromKind):
        (JSC::DFG::ValueSource::kindFromNodeIndex):
        (JSC::DFG::SpeculativeJIT::isKnownArray):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::OSRExit::OSRExit):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        * wtf/PackedIntVector.h: Added.
        (WTF::PackedIntVector::PackedIntVector):
        (WTF::PackedIntVector::operator=):
        (WTF::PackedIntVector::size):
        (WTF::PackedIntVector::ensureSize):
        (WTF::PackedIntVector::resize):
        (WTF::PackedIntVector::clearAll):
        (WTF::PackedIntVector::get):
        (WTF::PackedIntVector::set):
        (WTF::PackedIntVector::mask):
        * wtf/Platform.h:
        * wtf/UnionFind.h: Added.
        (WTF::UnionFind::UnionFind):
        (WTF::UnionFind::find):
        (WTF::UnionFind::unify):

2011-09-29  Oliver Hunt  <oliver@apple.com>

        Build fix.

        * heap/AllocationSpace.h:

2011-09-29  Oliver Hunt  <oliver@apple.com>

        Add logic to collect dirty objects as roots
        https://bugs.webkit.org/show_bug.cgi?id=69100

        Reviewed by Geoff Garen.

        This gives us the ability to walk all the MarkedBlocks in an
        AllocationSpace and collect the dirty objects, and then use
        them as GC roots.
        
        I also rearranged the order of these instructions because it
        makes them smaller on some platforms with some card sizes.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::markCellCard):
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::markCellCard):
        * heap/AllocationSpace.cpp:
           Tidy up the write barrier logic a bit.
        (JSC::MarkedBlock::gatherDirtyObjects):
        (JSC::TakeIfDirty::returnValue):
        (JSC::TakeIfDirty::TakeIfDirty):
        (JSC::TakeIfDirty::operator()):
        (JSC::AllocationSpace::gatherDirtyObjects):
        * heap/AllocationSpace.h:
        * heap/CardSet.h:
        (JSC::::isCardMarked):
        (JSC::::clearCard):
        * heap/Heap.cpp:
        (JSC::Heap::markRoots):
        * heap/Heap.h:
        (JSC::Heap::writeBarrier):
        * heap/MarkStack.cpp:
        (JSC::SlotVisitor::visitChildren):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::setDirtyObject):
        (JSC::MarkedBlock::addressOfCardFor):
        * heap/SlotVisitor.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitWriteBarrier):
           Tidy the write barrier a bit.

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

        Unreviewed windows build fix.

        * assembler/MacroAssemblerCodeRef.h:
        * dfg/DFGOperations.h:

2011-09-29  Filip Pizlo  <fpizlo@apple.com>

        Structure transitions involving many (> 64) properties sometimes cause structure corruption
        https://bugs.webkit.org/show_bug.cgi?id=69102

        Reviewed by Darin Adler.
        
        Made m_offset an int instead of a signed char. Changed the code to ensure that transitions
        don't lead to the dictionary kind being forgotten.
        
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        * runtime/Structure.h:

2011-09-29  Yuqiang Xian  <yuqiang.xian@intel.com>

        DFG operation calls should be stdcall in Linux JSVALUE32_64 DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=69058

        Reviewed by Gavin Barraclough.

        Also Fixed the stdcall FunctionPtr constructors to make them compiled correctly on Linux

        * assembler/MacroAssemblerCodeRef.h:
        (JSC::FunctionPtr::FunctionPtr):

2011-09-29  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSCell::visitChildrenVirtual and remove all other visitChildrenVirtual methods
        https://bugs.webkit.org/show_bug.cgi?id=68839

        Reviewed by Geoffrey Garen.

        Removed the remaining visitChildrenVirtual methods.  This patch completes the process of 
        de-virtualizing visitChildren.

        * API/JSCallbackObject.h:
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        * debugger/DebuggerActivation.h:
        * runtime/Arguments.cpp:
        * runtime/Arguments.h:
        * runtime/Executable.cpp:
        * runtime/Executable.h:
        * runtime/GetterSetter.cpp:
        * runtime/GetterSetter.h:
        * runtime/JSActivation.cpp:
        * runtime/JSActivation.h:
        * runtime/JSArray.cpp:
        * runtime/JSArray.h:
        * runtime/JSFunction.cpp:
        * runtime/JSFunction.h:
        * runtime/JSGlobalObject.cpp:
        * runtime/JSGlobalObject.h:
        * runtime/JSObject.cpp:
        * runtime/JSPropertyNameIterator.cpp:
        * runtime/JSPropertyNameIterator.h:
        * runtime/JSStaticScopeObject.cpp:
        * runtime/JSStaticScopeObject.h:
        * runtime/JSValue.h:
        * runtime/NativeErrorConstructor.cpp:
        * runtime/NativeErrorConstructor.h:
        * runtime/RegExpObject.cpp:
        * runtime/RegExpObject.h:
        * runtime/Structure.cpp:
        * runtime/Structure.h:
        * runtime/StructureChain.cpp:
        * runtime/StructureChain.h:

        Inlined the method table access and call to the visitChildren function (the only call sites 
        to visitChildren are here).
        * heap/MarkStack.cpp:
        (JSC::SlotVisitor::visitChildren):

        Changed the field name for the visitChildren function pointer to visitChildren (from 
        visitChildrenFunctionPtr) to make call sites less verbose.
        * runtime/ClassInfo.h:

        Discovered JSBoundFunction doesn't have its own ClassInfo (it used JSFunction's ClassInfo) but 
        overrides visitChildren, so it needs to have its own ClassInfo.
        * runtime/JSBoundFunction.cpp:
        * runtime/JSBoundFunction.h:

        Had to move className up to make sure that the virtual destructor in JSObject wasn't 
        the first non-inline virtual method in JSObject (as per the comment in the file).
        Also moved JSCell::visitChildrenVirtual into JSObject.h in order for it be inline-able
        to mitigate the cost of an extra method call.

        Also added a convenience accessor function methodTable() to JSCell to return the MethodTable to make 
        call sites more concise.  Implementation is inline in JSObject.h.
        * runtime/JSObject.h:
        (JSC::JSCell::methodTable):
        * runtime/JSCell.h:

        Added an out of line virtual destructor to JSWrapperObject and ScopeChainNode to 
        appease the vtable gods.  It refused to compile if there were no virtual methods in 
        both of these classes due to the presence of a weak vtable pointer.
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::~JSWrapperObject):
        * runtime/JSWrapperObject.h:
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::~ScopeChainNode):
        * runtime/ScopeChain.h:

2011-09-29  Yuqiang Xian  <yuqiang.xian@intel.com>

        Bug fixes for CreateThis, NewObject and GetByOffset in JSVALUE32_64 DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=69075

        Reviewed by Gavin Barraclough.

        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-09-29  Yuqiang Xian  <yuqiang.xian@intel.com>

        JSVALUE32_64 DFG JIT failed to be built on 32-bit Linux due to incorrect overloaded OpInfo constructor
        https://bugs.webkit.org/show_bug.cgi?id=69054

        Reviewed by Gavin Barraclough.

        size_t is equal to uint32_t on most 32-bit platforms, except for Mac OS.

        * dfg/DFGNode.h:

2011-09-28  Filip Pizlo  <fpizlo@apple.com>

        DFG checkArgumentTypes fails to check boolean predictions
        https://bugs.webkit.org/show_bug.cgi?id=69059

        Reviewed by Gavin Barraclough.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):

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

        Build fix pt 2 for r96286.

        * assembler/MacroAssemblerCodeRef.h:

2011-09-28  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix attempt for r96286.

        * assembler/MacroAssemblerCodeRef.h:

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

        DFG JIT Operations on 32_64 should use stdcall calling convention.
        https://bugs.webkit.org/show_bug.cgi?id=69046

        Reviewed by Sam Weinig.

        All calls out are expecting stdcall conventions, but the default on OS X are cdecl.
        Leave D_DFGOperation_DD calls as the one exception, since we want to be able to link
        directly to std library functions like fmod - leave these calls obeying the default
        platform calling convention.

        * assembler/MacroAssemblerCodeRef.h:
        (JSC::FunctionPtr::FunctionPtr):
            - Add implicit constructors for std calls.
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::callOperation):
            - Make this work non-Mac platforms.
        * dfg/DFGOperations.cpp:
        (JSC::DFG::operationPutByValInternal):
        * dfg/DFGOperations.h:
            - Mark all operations as stdcalls.

2011-09-28  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT falls back on numerical comparisons when it does not
        recognize a prediction
        https://bugs.webkit.org/show_bug.cgi?id=68977

        Reviewed by Geoffrey Garen.
        
        This fixes both the way comparison implementations are selected. It
        also fixes a bug where comparisons other than equality (like < or >)
        on objects are compiled as if the comparison was equality.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compare):

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

        Implement callOperation(D_DFGOperation_DD) for DFG JIT 32_64
        https://bugs.webkit.org/show_bug.cgi?id=69026

        Reviewed by Sam Weinig.

        * assembler/X86Assembler.h:
        (JSC::X86Assembler::fstpl):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::callOperation):

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

        Merge bug#68580, bug#68932 for DFG JIT with JSVALUE32_64
        https://bugs.webkit.org/show_bug.cgi?id=69017

        Reviewed by Oliver Hunt.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::callOperation):
        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject):
        (JSC::DFG::SpeculativeJIT::compile):

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

        https://bugs.webkit.org/show_bug.cgi?id=64679
        Fix bugs in Array.prototype this handling.

        Reviewed by Oliver Hunt.

        * runtime/ArrayPrototype.cpp:
        (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):
            - These methods should throw if this value is undefined.

2011-09-27  Yuqiang Xian  <yuqiang.xian@intel.com>

        Value profiling in baseline JIT for JSVALUE32_64
        https://bugs.webkit.org/show_bug.cgi?id=68750

        Reviewed by Geoff Garen.

        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emit_op_div):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::emit_op_call_put_result):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_resolve):
        (JSC::JIT::emit_op_resolve_base):
        (JSC::JIT::emit_op_resolve_skip):
        (JSC::JIT::emit_op_resolve_global):
        (JSC::JIT::emitSlow_op_resolve_global):
        (JSC::JIT::emit_op_resolve_with_base):
        (JSC::JIT::emit_op_resolve_with_this):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emit_op_get_scoped_var):
        (JSC::JIT::emit_op_get_global_var):
        * jit/JITStubCall.h:
        (JSC::JITStubCall::callWithValueProfiling):

2011-09-28  Yuqiang Xian  <yuqiang.xian@intel.com>

        Wrong integer checks in JSVALUE32_64 DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=68985

        Reviewed by Geoffrey Garen.

        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::fillDouble):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):

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

        Remove empty directories.

        * wtf/brew: Removed.
        * wtf/unicode/brew: Removed.

2011-09-27  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT cannot compile op_new_object, op_new_array,
        op_new_array_buffer, or op_new_regexp
        https://bugs.webkit.org/show_bug.cgi?id=68580

        Reviewed by Oliver Hunt.
        
        This implements all four opcodes, but has op_new_regexp turns off
        by default because it unveils some bad speculation logic when
        compiling string-validate-input.
        
        With op_new_regexp turned off, this is a 5% win on Kraken and a
        0.7% speed-up on V8. Neutral on SunSpider.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::callOperation):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasConstantBuffer):
        (JSC::DFG::Node::startConstant):
        (JSC::DFG::Node::numConstants):
        (JSC::DFG::Node::hasRegexpIndex):
        (JSC::DFG::Node::regexpIndex):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::emitAllocateJSFinalObject):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::isKnownArray):

2011-09-27  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT should speculate more aggressively on reads of array.length
        https://bugs.webkit.org/show_bug.cgi?id=68932

        Reviewed by Oliver Hunt.
        
        This is a 2% speed-up on Kraken, neutral elsewhere.

        * dfg/DFGNode.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        DFG JIT - merge changes between 95905 - 96175
        https://bugs.webkit.org/show_bug.cgi?id=68963

        Reviewed by Sam Weinig.

        Merge missing changes from bug#68677, bug#68784, bug#68785.

        * dfg/DFGJITCompiler32_64.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        (JSC::DFG::JITCompiler::compileEntry):
        (JSC::DFG::JITCompiler::compileBody):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        Get JSVALUE32_64 DFG JIT building on OS X.
        https://bugs.webkit.org/show_bug.cgi?id=68961

        Reviewed by Geoff Garen.

        * Merge bug #68763 (DFG JIT should not eagerly initialize integer tags in the register file).
        * Forward-declare functions in DFGOperations.cpp
        * UNUSED_PARAM for unused arguments
        * NO_RETURN for unimplemented function that ASSERT_NOT_REACHED
        * Fix argument types handled by OpInfo constructor.
        * Use SYMBOL_STRING instead of STRINGIZE for asm symbols.
        * Add files to Xcode project.

2011-09-27  Yuqiang Xian  <yuqiang.xian@intel.com>

        Bug fixes for GetById, PutById, and GetByOffset in JSVALUE32_64 DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=68755

        Reviewed by Gavin Barraclough.

        We need to load/store and repatch both tag and payload of a property
        for GetById/PutById. Also reorder the loads of tag and payload for
        GetByOffset as the result tag GPR could reuse the storage GPR.

        * bytecode/StructureStubInfo.h:
        * dfg/DFGJITCodeGenerator32_64.cpp:
        (JSC::DFG::JITCodeGenerator::cachedGetById):
        (JSC::DFG::JITCodeGenerator::cachedPutById):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addPropertyAccess):
        (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord):
        * dfg/DFGJITCompiler32_64.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::dfgRepatchByIdSelfAccess):
        * dfg/DFGSpeculativeJIT32_64.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        Macro assembler branch8 & 16 methods vary in treatment of upper bits
        https://bugs.webkit.org/show_bug.cgi?id=68301

        Reviewed by Sam Weinig.

        Fix for branch16 - remove it!
        No performance impact.

        * assembler/MacroAssembler.h:
        * assembler/MacroAssemblerARM.h:
        * assembler/MacroAssemblerARMv7.h:
        * assembler/MacroAssemblerMIPS.h:
        * assembler/MacroAssemblerSH4.h:
        * assembler/MacroAssemblerX86Common.h:
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::jumpIfCharNotEquals):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy):
        (JSC::Yarr::YarrGenerator::backtrackPatternCharacterNonGreedy):

2011-09-27  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add static version of JSCell::getCallData
        https://bugs.webkit.org/show_bug.cgi?id=68741

        Reviewed by Darin Adler.

        In this patch we just extract the bodies of the virtual getCallData methods
        throughout the JSCell inheritance hierarchy out into static methods, which are 
        now called from the virtual methods.  This is an intermediate step in trying to 
        move the virtual-ness of getCallData into our own method table stored in 
        ClassInfo.  We need to convert the methods to static methods because static methods 
        can be represented as function pointers rather than pointers to member functions, and
        function pointers are smaller and faster to call than pointers to member functions.

        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::getCallDataVirtual):
        (JSC::JSCallbackFunction::getCallData):
        * API/JSCallbackFunction.h:
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::getCallDataVirtual):
        (JSC::::getCallData):
        * API/JSObjectRef.cpp:
        (JSObjectIsFunction):
        (JSObjectCallAsFunction):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::getCallDataVirtual):
        (JSC::ArrayConstructor::getCallData):
        * runtime/ArrayConstructor.h:
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::getCallDataVirtual):
        (JSC::BooleanConstructor::getCallData):
        * runtime/BooleanConstructor.h:
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::getCallDataVirtual):
        (JSC::DateConstructor::getCallData):
        * runtime/DateConstructor.h:
        * runtime/Error.cpp:
        (JSC::StrictModeTypeErrorFunction::getCallDataVirtual):
        (JSC::StrictModeTypeErrorFunction::getCallData):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::getCallDataVirtual):
        (JSC::ErrorConstructor::getCallData):
        * runtime/ErrorConstructor.h:
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::getCallDataVirtual):
        (JSC::FunctionConstructor::getCallData):
        * runtime/FunctionConstructor.h:
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::getCallDataVirtual):
        (JSC::FunctionPrototype::getCallData):
        * runtime/FunctionPrototype.h:
        * runtime/InternalFunction.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::getCallDataVirtual):
        (JSC::JSCell::getCallData):
        * runtime/JSCell.h:
        (JSC::getCallData):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getCallDataVirtual):
        (JSC::JSFunction::getCallData):
        * runtime/JSFunction.h:
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Stringifier):
        (JSC::Stringifier::toJSON):
        (JSC::Stringifier::appendStringifiedValue):
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::getCallDataVirtual):
        (JSC::NativeErrorConstructor::getCallData):
        * runtime/NativeErrorConstructor.h:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::getCallDataVirtual):
        (JSC::NumberConstructor::getCallData):
        * runtime/NumberConstructor.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::getCallDataVirtual):
        (JSC::ObjectConstructor::getCallData):
        * runtime/ObjectConstructor.h:
        * runtime/Operations.cpp:
        (JSC::jsTypeStringForValue):
        (JSC::jsIsObjectType):
        (JSC::jsIsFunctionType):
        * runtime/PropertySlot.cpp:
        (JSC::PropertySlot::functionGetter):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::getCallDataVirtual):
        (JSC::RegExpConstructor::getCallData):
        * runtime/RegExpConstructor.h:
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::getCallDataVirtual):
        (JSC::StringConstructor::getCallData):
        * runtime/StringConstructor.h:

2011-09-27  Tim Horton  <timothy_horton@apple.com>

        Rapidly refreshing a feMorphology[erode] with r=0 can sometimes cause display corruption
        https://bugs.webkit.org/show_bug.cgi?id=68816
        <rdar://problem/10186468>

        Reviewed by Simon Fraser.
        
        Add ByteArray::clear, which zeros the memory in the ByteArray.

        * wtf/ByteArray.h:
        (WTF::ByteArray::clear): Added.

2011-09-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r96131.
        http://trac.webkit.org/changeset/96131
        https://bugs.webkit.org/show_bug.cgi?id=68927

        It made 18+ tests crash on all platform (Requested by
        Ossy_night on #webkit).

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException):
        * interpreter/Interpreter.h:
        * jsc.cpp:
        (GlobalObject::finishCreation):
        * parser/Parser.h:
        (JSC::Parser::parse):
        * runtime/CommonIdentifiers.h:
        * runtime/Error.cpp:
        (JSC::addErrorInfo):
        * runtime/Error.h:

2011-09-27  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSCell::getPrimitiveNumber
        https://bugs.webkit.org/show_bug.cgi?id=68851

        Reviewed by Darin Adler.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

        Changed JSCell::getPrimitiveNumber to manually handle the dispatch for 
        JSCells (JSObject and JSString in this case).
        * runtime/JSCell.cpp:
        (JSC::JSCell::getPrimitiveNumber):
        * runtime/JSCell.h:

        Removed JSNotAnObject::getPrimitiveNumber since its return value doesn't 
        matter and it already implements defaultValue, so JSObject::getPrimitiveNumber
        can cover the case for JSNotAnObject.
        * runtime/JSNotAnObject.cpp:
        * runtime/JSNotAnObject.h:

        De-virtualized JSObject::getPrimitiveNumber and JSString::getPrimitiveNumber 
        and changed them to be const.  Also made JSString::getPrimitiveNumber public 
        because it needs to be called from JSCell::getPrimitiveNumber and also since it's 
        no longer virtual, we want people who have a more specific pointer (JSString* 
        instead of JSCell*) to not have to pay the cost of a virtual method call.
        * runtime/JSObject.cpp:
        (JSC::JSObject::getPrimitiveNumber):
        * runtime/JSObject.h:
        * runtime/JSString.cpp:
        (JSC::JSString::getPrimitiveNumber):
        * runtime/JSString.h:

2011-09-27  Juan Carlos Montemayor Elosua  <j.mont@me.com>

        Implement Error.stack
        https://bugs.webkit.org/show_bug.cgi?id=66994

        Reviewed by Oliver Hunt.

        This patch utilizes topCallFrame to create a stack trace when
        an error is thrown. Users will also be able to use the stack()
        command in jsc to get arrays with stack trace information.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * interpreter/Interpreter.cpp:
        (JSC::getCallerLine):
        (JSC::getSourceURLFromCallFrame):
        (JSC::getStackFrameCodeType):
        (JSC::Interpreter::getStackTrace):
        (JSC::Interpreter::throwException):
        * interpreter/Interpreter.h:
        (JSC::StackFrame::toString):
        * jsc.cpp:
        (GlobalObject::finishCreation):
        (functionJSCStack):
        * parser/Parser.h:
        (JSC::Parser::parse):
        * runtime/CommonIdentifiers.h:
        * runtime/Error.cpp:
        (JSC::addErrorInfo):
        * runtime/Error.h:

2011-09-27  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Reorganize header files
        https://bugs.webkit.org/show_bug.cgi?id=65616

        Reviewed by Martin Robinson.

        Install header files under $libwebkitgtkincludedir/JavaScriptCore.

        * GNUmakefile.am: Use $libwebkitgtkincludedir.
        * javascriptcoregtk.pc.in: Use webkitgtk-<api-version> as include dir.

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

        REGRESSION (r95912): Conservative marking doesn't filter out pointers to
        MarkedBlock metadata
        https://bugs.webkit.org/show_bug.cgi?id=68860

        Reviewed by Oliver Hunt.
        
        Bencher says no performance change, maybe a 7% speedup on kraken-imaging-darkroom.

        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::isAtomAligned): Renamed atomMask to atomAlignment mask
        because the mask doesn't produce the actual atom number.

        (JSC::MarkedBlock::isLiveCell): Testing just for alignment isn't good
        enough; we also need to test that a pointer is beyond the metadata section
        of a MarkedBlock, to avoid treating random metadata as a JSCell.

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

        Make JSCell::toBoolean non-virtual
        https://bugs.webkit.org/show_bug.cgi?id=67727

        Reviewed by Geoffrey Garen.

        JSCell::toBoolean now manually performs the toBoolean check for objects and strings (where 
        before it was simply virtual and would crash if its implementation was called). 
        Its descendants in JSObject and JSString have also been made non-virtual.  JSCell now
        explicitly covers all cases of toBoolean, so having a virtual implementation of 
        JSCell::toBoolean is no longer necessary.  This is part of a larger process of un-virtualizing JSCell.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/JSCell.cpp:
        * runtime/JSCell.h:
        * runtime/JSNotAnObject.cpp:
        * runtime/JSNotAnObject.h:
        * runtime/JSObject.h:
        * runtime/JSString.h:
        (JSC::JSCell::toBoolean):
        (JSC::JSValue::toBoolean):

2011-09-26  Chris Marrin  <cmarrin@apple.com>

        Enable requestAnimationFrame on Windows
        https://bugs.webkit.org/show_bug.cgi?id=68397

        Reviewed by Simon Fraser.

        Enabled REQUEST_ANIMATION_FRAME_TIMER for Windows

        * wtf/Platform.h:

2011-09-26  Noel Gordon  <noel.gordon@gmail.com>

        [Chromium] Remove DFGAliasTracker.h references from gyp project files
        https://bugs.webkit.org/show_bug.cgi?id=68787

        Reviewed by Geoffrey Garen.

        DFG/DFGAliasTracker.h was removed in r95389.  Cleanup (remove) references
        to that file from the gyp project files.

        * JavaScriptCore.gypi:

2011-09-26  Zoltan Herczeg  <zherczeg@webkit.org>

        [Qt]REGRESSION(r95865): It made 4 tests crash
        https://bugs.webkit.org/show_bug.cgi?id=68780
        
        Reviewed by Oliver Hunt.

        emitJumpSlowCaseIfNotJSCell(...) cannot be moved
        away since the next load depends on it.

        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_by_val):

2011-09-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add custom vtable struct to ClassInfo struct
        https://bugs.webkit.org/show_bug.cgi?id=68567

        Reviewed by Oliver Hunt.

        Declared/defined the MethodTable struct and added it to the ClassInfo struct.
        Also defined the CREATE_METHOD_TABLE macro to generate these method tables 
        succinctly where they need to be defined.

        Also added to it the first function to use this macro, visitChildren. 

        This is part of the process of getting rid of all C++ virtual methods in JSCell.  
        Eventually all virtual functions in JSCell that can't easily be converted to 
        non-virtual functions will be put into this custom vtable structure.
        * runtime/ClassInfo.h:

        Added the CREATE_METHOD_TABLE macro call as the last argument to each of the 
        ClassInfo structs declared in these classes.  This saves us from having to visit 
        each s_info definition in the future when we add more methods to the MethodTable.
        * API/JSCallbackConstructor.cpp:
        * API/JSCallbackFunction.cpp:
        * API/JSCallbackObject.cpp:
        * JavaScriptCore.exp:
        * runtime/Arguments.cpp:
        * runtime/ArrayConstructor.cpp:
        * runtime/ArrayPrototype.cpp:
        * runtime/BooleanObject.cpp:
        * runtime/BooleanPrototype.cpp:
        * runtime/DateConstructor.cpp:
        * runtime/DateInstance.cpp:
        * runtime/DatePrototype.cpp:
        * runtime/ErrorInstance.cpp:
        * runtime/ErrorPrototype.cpp:
        * runtime/ExceptionHelpers.cpp:
        * runtime/Executable.cpp:
        * runtime/GetterSetter.cpp:
        * runtime/InternalFunction.cpp:
        * runtime/JSAPIValueWrapper.cpp:
        * runtime/JSActivation.cpp:
        * runtime/JSArray.cpp:
        * runtime/JSByteArray.cpp:
        * runtime/JSFunction.cpp:
        * runtime/JSGlobalObject.cpp:
        * runtime/JSONObject.cpp:
        * runtime/JSObject.cpp:
        * runtime/JSPropertyNameIterator.cpp:
        * runtime/JSString.cpp:
        * runtime/MathObject.cpp:
        * runtime/NativeErrorConstructor.cpp:
        * runtime/NumberConstructor.cpp:
        * runtime/NumberObject.cpp:
        * runtime/NumberPrototype.cpp:
        * runtime/ObjectConstructor.cpp:
        * runtime/ObjectPrototype.cpp:
        * runtime/RegExp.cpp:
        * runtime/RegExpConstructor.cpp:
        * runtime/RegExpObject.cpp:
        * runtime/RegExpPrototype.cpp:
        * runtime/ScopeChain.cpp:
        * runtime/StringConstructor.cpp:
        * runtime/StringObject.cpp:
        * runtime/StringPrototype.cpp:
        * runtime/Structure.cpp:
        * runtime/StructureChain.cpp:

        Had to make visitChildren and visitChildrenVirtual protected instead of private
        because some of the subclasses of JSWrapperObject need access to JSWrapperObject's
        visitChildren function pointer in their vtable since they don't provide their own
        implementation. Same for RegExpObject.
        * runtime/JSWrapperObject.h:
        * runtime/RegExpObject.h:

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

        Finish removing PLATFORM(BREWMP) by removing associated code
        https://bugs.webkit.org/show_bug.cgi?id=68779

        Reviewed by Sam Weinig.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:
        * JavaScriptCore.gypi:
        * gyp/JavaScriptCore.gyp:
        * wscript:
        * wtf/FastMalloc.cpp:
        (WTF::fastMallocSize):
        * wtf/Vector.h:
        * wtf/brew: Removed.
        * wtf/brew/MainThreadBrew.cpp: Removed.
        * wtf/brew/OwnPtrBrew.cpp: Removed.
        * wtf/brew/RefPtrBrew.h: Removed.
        * wtf/brew/ShellBrew.h: Removed.
        * wtf/brew/StringBrew.cpp: Removed.
        * wtf/brew/SystemMallocBrew.h: Removed.
        * wtf/unicode/brew: Removed.
        * wtf/unicode/brew/UnicodeBrew.cpp: Removed.
        * wtf/unicode/brew/UnicodeBrew.h: Removed.

2011-09-25  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not count speculation successes correctly
        https://bugs.webkit.org/show_bug.cgi?id=68785

        Reviewed by Geoffrey Garen.

        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileEntry):
        (JSC::DFG::JITCompiler::compileBody):
        * dfg/DFGOperations.cpp:

2011-09-25  Filip Pizlo  <fpizlo@apple.com>

        DFG support for op_resolve_global is not enabled
        https://bugs.webkit.org/show_bug.cgi?id=68786

        Reviewed by Geoffrey Garen.

        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):

2011-09-25  Filip Pizlo  <fpizlo@apple.com>

        DFG static prediction code is no longer needed and should be removed
        https://bugs.webkit.org/show_bug.cgi?id=68784

        Reviewed by Oliver Hunt.
        
        This gets rid of static prediction code, and ensures that we do not
        try to compile code where dynamic predictions are not available.
        This is accomplished by immediately performing an OSR exit wherever
        a value is retrieved for which no predictions exist.
        
        This also adds value profiling for this on functions used for calls.
        
        The heuristics for deciding when to optimize code are also tweaked,
        since it is now profitable to optimize sooner. This may need to be
        tweaked further, but this patch only makes minimal changes.
        
        This results in a 16% speed-up on Kraken/ai-astar, leading to a 3%
        overall win on Kraken.  It's neutral elsewhere.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::shouldOptimizeNow):
        (JSC::CodeBlock::dumpValueProfiles):
        * bytecode/CodeBlock.h:
        * bytecode/PredictedType.cpp:
        (JSC::predictionToString):
        * bytecode/PredictedType.h:
        (JSC::isCellPrediction):
        (JSC::isObjectPrediction):
        (JSC::isFinalObjectPrediction):
        (JSC::isStringPrediction):
        (JSC::isArrayPrediction):
        (JSC::isInt32Prediction):
        (JSC::isDoublePrediction):
        (JSC::isNumberPrediction):
        (JSC::isBooleanPrediction):
        (JSC::mergePredictions):
        * bytecode/PredictionTracker.h:
        (JSC::PredictionTracker::predictArgument):
        (JSC::PredictionTracker::predict):
        (JSC::PredictionTracker::predictGlobalVar):
        * bytecode/ValueProfile.cpp:
        (JSC::ValueProfile::computeUpdatedPrediction):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::set):
        (JSC::DFG::ByteCodeParser::addCall):
        (JSC::DFG::ByteCodeParser::getPrediction):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::predictArgumentTypes):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::predict):
        (JSC::DFG::Graph::predictGlobalVar):
        (JSC::DFG::Graph::getMethodCheckPrediction):
        (JSC::DFG::Graph::getJSConstantPrediction):
        (JSC::DFG::Graph::getPrediction):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::writeBarrier):
        (JSC::DFG::JITCodeGenerator::emitBranch):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::getPrediction):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::valueOfJSConstantNode):
        (JSC::DFG::Node::isInt32Constant):
        (JSC::DFG::Node::isDoubleConstant):
        (JSC::DFG::Node::isNumberConstant):
        (JSC::DFG::Node::isBooleanConstant):
        (JSC::DFG::Node::predict):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::Propagator):
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::isPredictedNumerical):
        (JSC::DFG::Propagator::logicalNotIsPure):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::shouldSpeculateInteger):
        (JSC::DFG::SpeculativeJIT::shouldSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::shouldSpeculateNumber):
        (JSC::DFG::SpeculativeJIT::shouldNotSpeculateInteger):
        (JSC::DFG::SpeculativeJIT::shouldSpeculateFinalObject):
        (JSC::DFG::SpeculativeJIT::shouldSpeculateArray):
        (JSC::DFG::SpeculativeJIT::shouldSpeculateObject):
        (JSC::DFG::SpeculativeJIT::shouldSpeculateCell):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):

2011-09-25  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT Construct opcode takes a this argument even though it's
        not passed
        https://bugs.webkit.org/show_bug.cgi?id=68782

        Reviewed by Oliver Hunt.
        
        This is performance-neutral, mostly. It's a slight speed-up on
        v8-splay.
        
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addCall):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::emitCall):

2011-09-25  Filip Pizlo  <fpizlo@apple.com>

        DFG tracking of the value in cachedResultRegister does not handle
        op_mov correctly
        https://bugs.webkit.org/show_bug.cgi?id=68781

        Reviewed by Oliver Hunt.
        
        This takes the simplest approach: it makes the old JIT dumber rather
        than making the DFG JIT smarter. This is performance-neutral.

        * jit/JIT.h:
        (JSC::JIT::canBeOptimized):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_mov):

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

        Remove PLATFORM(HAIKU) and associated code
        https://bugs.webkit.org/show_bug.cgi?id=68774

        Reviewed by Sam Weinig.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:
        * JavaScriptCore.gypi:
        * gyp/JavaScriptCore.gyp:
        * heap/MachineStackMarker.cpp:
        * wtf/PageAllocation.h:
        * wtf/Platform.h:
        * wtf/StackBounds.cpp:
        * wtf/haiku: Removed.
        * wtf/haiku/MainThreadHaiku.cpp: Removed.
        * wtf/haiku/StringHaiku.cpp: Removed.
        * wtf/text/WTFString.h:

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

        Always enable ENABLE(OFFLINE_WEB_APPLICATIONS)
        https://bugs.webkit.org/show_bug.cgi?id=68767

        Reviewed by Eric Seidel.

        * Configurations/FeatureDefines.xcconfig:

2011-09-24  Filip Pizlo  <fpizlo@apple.com>

        JIT implementation of put_by_val increments m_length instead of setting
        it to index+1
        https://bugs.webkit.org/show_bug.cgi?id=68766

        Reviewed by Geoffrey Garen.

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

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

        More build fixage.

        * heap/ConservativeRoots.cpp: Our system of #includes, it is chaos.

2011-09-24  Filip Pizlo  <fpizlo@apple.com>

        The DFG should not attempt to guess types in the absence of value
        profiles
        https://bugs.webkit.org/show_bug.cgi?id=68677

        Reviewed by Oliver Hunt.
        
        This adds the ForceOSRExit node, which is ignored by the propagator
        and virtual register allocator (and hence ensuring that liveness analysis
        works correctly), but forces terminateSpeculativeExecution() in the
        back-end. This appears to be a slight speed-up on benchmark averages,
        with ~5% swings on individual benchmarks, in both directions. But it's
        never a regression on any average, and appears to be a ~1% progression
        in the SunSpider average.
        
        This also adds a bit better debugging support in the old JIT and in DFG,
        as this was necessary to debug the much more frequent OSR transitions
        that occur with this change.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addCall):
        (JSC::DFG::ByteCodeParser::getStrongPrediction):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGNode.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):
        * jit/JIT.h:

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

        Some Windows build fixage.

        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::sweep):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::isLive): Show the compiler that all control paths
        return a value. There, there, compiler. Everything's going to be OK.

        * runtime/JSCell.h:
        (JSC::JSCell::setVPtr): Oops! Unrename this function.

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

        Allocate new objects unmarked
        https://bugs.webkit.org/show_bug.cgi?id=68764

        Reviewed by Oliver Hunt.
        
        This is a pre-requisite to using the mark bit to determine object age.

        ~2% v8 speedup, mostly due to a 12% v8-splay speedup.

        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::isLive):
        (JSC::MarkedBlock::isLiveCell): These two functions are the reason for
        this patch. They can now determine object liveness without relying on
        newly allocated objects having their mark bits set. Each MarkedBlock
        now has a state variable that tells us how to determine whether its
        cells are live. (This new state variable supercedes the old one about
        destructor state. The rest of this patch is just refactoring to support
        the invariants of this new state variable without introducing a
        performance regression.)

        (JSC::MarkedBlock::didConsumeFreeList): New function for updating interal
        state when a block becomes fully allocated.

        (JSC::MarkedBlock::clearMarks): Folded a state change to 'Marked' into
        this function because, logically, clearing all mark bits is the first
        step in saying "mark bits now exactly reflect object liveness".

        (JSC::MarkedBlock::markCountIsZero): Renamed from isEmpty() to clarify
        that this function only tells you about the mark bits, so it's only
        meaningful if you've put the mark bits into a meaningful state before
        calling it.

        (JSC::MarkedBlock::forEachCell): Changed to use isLive() helper function
        instead of testing mark bits, since mark bits are not always the right
        way to find out if an object is live anymore. (New objects are live, but
        not marked.)

        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::recycle):
        (JSC::MarkedBlock::MarkedBlock): Folded all initialization -- even
        initialization when recycling an old block -- into the MarkedBlock
        constructor, for simplicity.

        (JSC::MarkedBlock::callDestructor): Inlined for speed. Always check for
        a zapped cell before running a destructor, and always zap after
        running a destructor. This does not seem to be expensive, and the
        alternative just creates a too-confusing matrix of possible cell states
        ((zombie undestructed cell + zombie destructed cell + zapped destructed
        cell) * 5! permutations for progressing through block states = "Oh my!").

        (JSC::MarkedBlock::specializedSweep):
        (JSC::MarkedBlock::sweep): Maintained and expanded a pre-existing
        optimization to use template specialization to constant fold lots of
        branches and elide certain operations entirely during a sweep. Merged
        four or five functions that were logically about sweeping into this one
        function pair, so there's only one way to do things now, it's
        automatically correct, and it's always fast.

        (JSC::MarkedBlock::zapFreeList): Renamed this function to be more explicit
        about exactly what it does, and to honor the new block state system.

        * heap/AllocationSpace.cpp:
        (JSC::AllocationSpace::allocateBlock): Updated for rename.

        (JSC::AllocationSpace::freeBlocks): Updated for changed interface.

        (JSC::TakeIfUnmarked::TakeIfUnmarked):
        (JSC::TakeIfUnmarked::operator()):
        (JSC::TakeIfUnmarked::returnValue): Just like isEmpty() above, renamed
        to clarify that this functor only tests the mark bits, so it's only
        valid if you've put the mark bits into a meaningful state before
        calling it.
        
        (JSC::AllocationSpace::shrink): Updated for rename.

        * heap/AllocationSpace.h:
        (JSC::AllocationSpace::canonicalizeCellLivenessData): Renamed to be a
        little more specific about what we're making canonical.

        (JSC::AllocationSpace::forEachCell): Updated for rename.

        (JSC::AllocationSpace::forEachBlock): No need to canonicalize cell
        liveness data before iterating blocks -- clients that want iterated
        blocks to have valid cell lieveness data should make this call for
        themselves. (And not all clients want it.)

        * heap/ConservativeRoots.cpp:
        (JSC::ConservativeRoots::genericAddPointer): Updated for rename. Removed
        obsolete comment.

        * heap/Heap.cpp:
        (JSC::CountFunctor::ClearMarks::operator()): Removed call to notify...()
        because clearMarks() now does that implicitly.

        (JSC::Heap::destroy): Make sure to canonicalize before tear-down, since
        tear-down tests cell liveness when running destructors.

        (JSC::Heap::markRoots):
        (JSC::Heap::collect): Moved weak reference harvesting out of markRoots()
        and into collect, since it strictly depends on root marking, and does
        not contribute to root marking.

        (JSC::Heap::canonicalizeCellLivenessData): Renamed to be a little more
        specific about what we're making canonical.

        * heap/Heap.h:
        (JSC::Heap::forEachProtectedCell): No need to canonicalize cell liveness
        data before iterating protected cells, since we know they're all live,
        and don't need to test for it.

        * heap/Local.h:
        (JSC::::set): Can't make the same ASSERT we used to because we just don't
        have the mark bits for it anymore. Perhaps we can bring this ASSERT back
        in a weaker form in the future.

        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::addBlock):
        (JSC::MarkedSpace::removeBlock): Updated for interface change.
        (JSC::MarkedSpace::canonicalizeCellLivenessData): Renamed to be a little more
        specific about what we're making canonical.

        * heap/MarkedSpace.h:
        (JSC::MarkedSpace::allocate):
        (JSC::MarkedSpace::SizeClass::SizeClass):
        (JSC::MarkedSpace::SizeClass::resetAllocator):
        (JSC::MarkedSpace::SizeClass::zapFreeList): Simplified this allocator
        functionality a bit. We now track only one block -- "currentBlock" --
        and rely on its internal state to know whether it has more cells to
        allocate.

        * heap/Weak.h:
        (JSC::Weak::set): Can't make the same ASSERT we used to because we just don't
        have the mark bits for it anymore. Perhaps we can bring this ASSERT back
        in a weaker form in the future.

        * runtime/JSCell.h:
        (JSC::JSCell::vptr):
        (JSC::JSCell::zap):
        (JSC::JSCell::isZapped):
        (JSC::isZapped): Made zapping a property of JSCell, for a little abstraction.
        In the future, exactly how a JSCell zaps itself will change, as the
        internal representation of JSCell changes.

2011-09-24  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT should not eagerly initialize integer tags in the register file
        https://bugs.webkit.org/show_bug.cgi?id=68763

        Reviewed by Oliver Hunt.

        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::ValueRecovery::dump):
        (JSC::DFG::OSRExit::OSRExit):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::ValueRecovery::alreadyInRegisterFileAsUnboxedInt32):
        (JSC::DFG::OSRExit::operandForArgument):
        (JSC::DFG::OSRExit::operandForIndex):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):

2011-09-23  Yuqiang Xian  <yuqiang.xian@intel.com>

        Add JSVALUE32_64 support to DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=67460

        Reviewed by Gavin Barraclough.

        This is the initial attempt to add JSVALUE32_64 support to DFG JIT.
        It's tested on IA32 Linux EFL port currently. It still cannot run
        all the test cases and benchmarks so should be turned off now.
        
        The major work includes:
        1) dealing with JSVALUE32_64 data format in DFG JIT;
        2) bindings between 64-bit JS Value and 32-bit registers;
        3) handling of function calls. Currently for DFG operation function
        calls we follow the X86 cdecl calling convention on Linux, and the
        implementation is in a naive way by pushing the arguments into stack
        one by one.
        
        The known issues include:
        1) some code duplicates unnecessarily, especially in Speculative JIT
        code generation, where most of the operations on SpeculataInteger /
        SpeculateDouble should be identical to the JSVALUE64 code. Refactoring
        is needed in the future;
        2) lack of op_call and op_construct support, comparing to current
        JSVALUE64 DFG;
        3) currently integer speculations assume to be StrictInt32;
        4) lack of JSBoolean speculations;
        5) boxing and unboxing doubles could be improved;
        6) DFG X86 register description is different with the baseline JIT,
        the timeoutCheckRegister is used for general purpose usage;
        7) calls to runtime functions with primitive double parameters (e.g.
        fmod) don't work. Support needs to be added to the assembler to
        implement the mechanism of passing double parameters for X86 cdecl
        convention.
        
        And there should be many other hidden bugs which should be exposed and
        resolved in later debugging process.

        * CMakeListsEfl.txt:
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::loadDouble):
        (JSC::MacroAssemblerX86::storeDouble):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::movsd_rm):
        * bytecode/StructureStubInfo.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
        * dfg/DFGFPRInfo.h:
        (JSC::DFG::FPRInfo::debugName):
        * dfg/DFGGPRInfo.h:
        (JSC::DFG::GPRInfo::toRegister):
        (JSC::DFG::GPRInfo::toIndex):
        (JSC::DFG::GPRInfo::debugName):
        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::needDataFormatConversion):
        (JSC::DFG::GenerationInfo::initJSValue):
        (JSC::DFG::GenerationInfo::initDouble):
        (JSC::DFG::GenerationInfo::gpr):
        (JSC::DFG::GenerationInfo::tagGPR):
        (JSC::DFG::GenerationInfo::payloadGPR):
        (JSC::DFG::GenerationInfo::fpr):
        (JSC::DFG::GenerationInfo::fillJSValue):
        (JSC::DFG::GenerationInfo::fillCell):
        (JSC::DFG::GenerationInfo::fillDouble):
        * dfg/DFGJITCodeGenerator.cpp:
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::allocate):
        (JSC::DFG::JITCodeGenerator::use):
        (JSC::DFG::JITCodeGenerator::registersMatched):
        (JSC::DFG::JITCodeGenerator::silentSpillGPR):
        (JSC::DFG::JITCodeGenerator::silentFillGPR):
        (JSC::DFG::JITCodeGenerator::silentFillFPR):
        (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters):
        (JSC::DFG::JITCodeGenerator::silentFillAllRegisters):
        (JSC::DFG::JITCodeGenerator::boxDouble):
        (JSC::DFG::JITCodeGenerator::unboxDouble):
        (JSC::DFG::JITCodeGenerator::spill):
        (JSC::DFG::addressOfDoubleConstant):
        (JSC::DFG::integerResult):
        (JSC::DFG::jsValueResult):
        (JSC::DFG::setupResults):
        (JSC::DFG::callOperation):
        (JSC::JSValueOperand::JSValueOperand):
        (JSC::JSValueOperand::~JSValueOperand):
        (JSC::JSValueOperand::isDouble):
        (JSC::JSValueOperand::fill):
        (JSC::JSValueOperand::tagGPR):
        (JSC::JSValueOperand::payloadGPR):
        (JSC::JSValueOperand::fpr):
        (JSC::GPRTemporary::~GPRTemporary):
        (JSC::GPRTemporary::gpr):
        (JSC::GPRResult2::GPRResult2):
        * dfg/DFGJITCodeGenerator32_64.cpp: Added.
        (JSC::DFG::JITCodeGenerator::clearGenerationInfo):
        (JSC::DFG::JITCodeGenerator::fillInteger):
        (JSC::DFG::JITCodeGenerator::fillDouble):
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        (JSC::DFG::JITCodeGenerator::fillStorage):
        (JSC::DFG::JITCodeGenerator::useChildren):
        (JSC::DFG::JITCodeGenerator::isStrictInt32):
        (JSC::DFG::JITCodeGenerator::isKnownInteger):
        (JSC::DFG::JITCodeGenerator::isKnownNumeric):
        (JSC::DFG::JITCodeGenerator::isKnownCell):
        (JSC::DFG::JITCodeGenerator::isKnownNotInteger):
        (JSC::DFG::JITCodeGenerator::isKnownNotNumber):
        (JSC::DFG::JITCodeGenerator::isKnownBoolean):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeUInt32ToNumber):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeArithMod):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeCheckHasInstance):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeInstanceOf):
        (JSC::DFG::JITCodeGenerator::cachedGetById):
        (JSC::DFG::JITCodeGenerator::writeBarrier):
        (JSC::DFG::JITCodeGenerator::cachedPutById):
        (JSC::DFG::JITCodeGenerator::cachedGetMethod):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompareNull):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeCompareNull):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeStrictEq):
        (JSC::DFG::JITCodeGenerator::emitBranch):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeLogicalNot):
        (JSC::DFG::JITCodeGenerator::emitCall):
        (JSC::DFG::JITCodeGenerator::speculationCheck):
        (JSC::DFG::dataFormatString):
        (JSC::DFG::JITCodeGenerator::dump):
        (JSC::DFG::JITCodeGenerator::checkConsistency):
        (JSC::DFG::GPRTemporary::GPRTemporary):
        (JSC::DFG::FPRTemporary::FPRTemporary):
        * dfg/DFGJITCompiler.cpp:
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::tagForGlobalVar):
        (JSC::DFG::JITCompiler::payloadForGlobalVar):
        (JSC::DFG::JITCompiler::appendCallWithExceptionCheck):
        (JSC::DFG::JITCompiler::addressOfDoubleConstant):
        (JSC::DFG::JITCompiler::boxDouble):
        (JSC::DFG::JITCompiler::unboxDouble):
        (JSC::DFG::JITCompiler::addPropertyAccess):
        (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord):
        * dfg/DFGJITCompiler32_64.cpp: Added.
        (JSC::DFG::JITCompiler::fillNumericToDouble):
        (JSC::DFG::JITCompiler::fillInt32ToInteger):
        (JSC::DFG::JITCompiler::fillToJS):
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        (JSC::DFG::JITCompiler::linkOSRExits):
        (JSC::DFG::JITCompiler::compileEntry):
        (JSC::DFG::JITCompiler::compileBody):
        (JSC::DFG::JITCompiler::link):
        (JSC::DFG::JITCompiler::compile):
        (JSC::DFG::JITCompiler::compileFunction):
        (JSC::DFG::JITCompiler::jitAssertIsInt32):
        (JSC::DFG::JITCompiler::jitAssertIsJSInt32):
        (JSC::DFG::JITCompiler::jitAssertIsJSNumber):
        (JSC::DFG::JITCompiler::jitAssertIsJSDouble):
        (JSC::DFG::JITCompiler::jitAssertIsCell):
        (JSC::DFG::JITCompiler::emitCount):
        (JSC::DFG::JITCompiler::setSamplingFlag):
        (JSC::DFG::JITCompiler::clearSamplingFlag):
        * dfg/DFGJITCompilerInlineMethods.h: Added.
        (JSC::DFG::JITCompiler::emitLoadTag):
        (JSC::DFG::JITCompiler::emitLoadPayload):
        (JSC::DFG::JITCompiler::emitLoad):
        (JSC::DFG::JITCompiler::emitLoad2):
        (JSC::DFG::JITCompiler::emitLoadDouble):
        (JSC::DFG::JITCompiler::emitLoadInt32ToDouble):
        (JSC::DFG::JITCompiler::emitStore):
        (JSC::DFG::JITCompiler::emitStoreInt32):
        (JSC::DFG::JITCompiler::emitStoreCell):
        (JSC::DFG::JITCompiler::emitStoreBool):
        (JSC::DFG::JITCompiler::emitStoreDouble):
        * dfg/DFGNode.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::generateProtoChainAccessStub):
        (JSC::DFG::tryCacheGetByID):
        (JSC::DFG::tryBuildGetByIDList):
        (JSC::DFG::tryCachePutByID):
        * dfg/DFGSpeculativeJIT.cpp:
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::ValueRecovery::inGPR):
        (JSC::DFG::ValueRecovery::inPair):
        (JSC::DFG::ValueRecovery::tagGPR):
        (JSC::DFG::ValueRecovery::payloadGPR):
        * dfg/DFGSpeculativeJIT32_64.cpp: Added.
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::ValueSource::dump):
        (JSC::DFG::ValueRecovery::dump):
        (JSC::DFG::OSRExit::OSRExit):
        (JSC::DFG::OSRExit::dump):
        (JSC::DFG::SpeculativeJIT::fillSpeculateInt):
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntStrict):
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
        (JSC::DFG::SpeculativeJIT::convertToDouble):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
        (JSC::DFG::SpeculativeJIT::compileObjectEquality):
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::compileMovHint):
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::SpeculativeJIT::initializeVariableTypes):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        * runtime/JSValue.h:

2011-09-23  Filip Pizlo  <fpizlo@apple.com>

        wtf/BitVector.h has a variety of bugs which manifest when the
        vector grows beyond 63 bits
        https://bugs.webkit.org/show_bug.cgi?id=68746

        Reviewed by Oliver Hunt.
        
        Out-of-lined slow path code in BitVector so that not every user
        of CodeBlock ends up having to compile it. Fixed a variety of
        index computation and size computation bugs.
        
        I have not seen these issues manifest themselves, but they are
        blocking a patch that uses BitVector more aggressively.

        * GNUmakefile.list.am:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/BitVector.cpp: Added.
        (BitVector::BitVector):
        (BitVector::operator=):
        (BitVector::resize):
        (BitVector::clearAll):
        (BitVector::OutOfLineBits::create):
        (BitVector::OutOfLineBits::destroy):
        (BitVector::resizeOutOfLine):
        * wtf/BitVector.h:
        (WTF::BitVector::ensureSize):
        (WTF::BitVector::get):
        (WTF::BitVector::set):
        (WTF::BitVector::clear):
        (WTF::BitVector::byteCount):
        (WTF::BitVector::OutOfLineBits::numWords):
        (WTF::BitVector::OutOfLineBits::bits):
        (WTF::BitVector::outOfLineBits):
        * wtf/CMakeLists.txt:
        * wtf/wtf.pri:

2011-09-23  Adam Klein  <adamk@chromium.org>

        Add ENABLE_MUTATION_OBSERVERS feature flag
        https://bugs.webkit.org/show_bug.cgi?id=68732

        Reviewed by Ojan Vafai.

        This flag will guard an implementation of the "Mutation Observers" proposed in
        http://lists.w3.org/Archives/Public/public-webapps/2011JulSep/1622.html

        * Configurations/FeatureDefines.xcconfig:

2011-09-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        De-virtualize JSCell::getJSNumber
        https://bugs.webkit.org/show_bug.cgi?id=68651

        Reviewed by Oliver Hunt.

        Added a new JSType to check whether or not something is a 
        NumberObject (which includes NumberPrototype) in TypeInfo::isNumberObject because there's not 
        currently a better way to determine whether something is indeed a NumberObject.
        Also de-virtualized JSCell::getJSNumber, having it check the TypeInfo 
        for whether the object is a NumberObject or not.  This patch is part of 
        the larger process of de-virtualizing JSCell.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/JSCell.cpp:
        (JSC::JSCell::getJSNumber):
        * runtime/JSCell.h:
        (JSC::JSValue::getJSNumber):
        * runtime/JSType.h:
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::isNumberObject):
        * runtime/JSValue.h:
        * runtime/NumberObject.cpp:
        (JSC::NumberObject::getJSNumber):
        * runtime/NumberObject.h:
        (JSC::NumberObject::createStructure):
        * runtime/NumberPrototype.h:
        (JSC::NumberPrototype::createStructure):

2011-09-23  Filip Pizlo  <fpizlo@apple.com>

        Resolve opcodes should have value profiling.
        https://bugs.webkit.org/show_bug.cgi?id=68723

        Reviewed by Oliver Hunt.
        
        This adds value profiling to all forms of op_resolve in the
        old JIT, and patches that information into the DFG along with
        performing the appropriate type propagation.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::predict):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasIdentifier):
        (JSC::DFG::Node::resolveGlobalDataIndex):
        (JSC::DFG::Node::hasPrediction):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_resolve):
        (JSC::JIT::emit_op_resolve_base):
        (JSC::JIT::emit_op_resolve_skip):
        (JSC::JIT::emit_op_resolve_global):
        (JSC::JIT::emitSlow_op_resolve_global):
        (JSC::JIT::emit_op_resolve_with_base):
        (JSC::JIT::emit_op_resolve_with_this):
        (JSC::JIT::emitSlow_op_resolve_global_dynamic):
        * jit/JITStubCall.h:
        (JSC::JITStubCall::callWithValueProfiling):

2011-09-23  Oliver Hunt  <oliver@apple.com>

        Fix windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Strict mode does not work in non-trivial nested functions.
        https://bugs.webkit.org/show_bug.cgi?id=68740

        Reviewed by Oliver Hunt.

        Function-info caching does not preserve all state that it should.

        * parser/JSParser.cpp:
        (JSC::JSParser::Scope::saveFunctionInfo):
        (JSC::JSParser::Scope::restoreFunctionInfo):
        (JSC::JSParser::parseFunctionInfo):
        * parser/SourceProviderCacheItem.h:

2011-09-23  Filip Pizlo  <fpizlo@apple.com>

        ValueToDouble handling in prediction propagation should be ASSERT_NOT_REACHED
        https://bugs.webkit.org/show_bug.cgi?id=68724

        Reviewed by Oliver Hunt.

        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):

2011-09-23  Oliver Hunt  <oliver@apple.com>

        Build fix.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-09-23  Filip Pizlo  <fpizlo@apple.com>

        DFG implementation of PutScopedVar corrupts register allocation
        https://bugs.webkit.org/show_bug.cgi?id=68735

        Reviewed by Oliver Hunt.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-09-23  Oliver Hunt  <oliver@apple.com>

        Make write barriers actually do something when enabled
        https://bugs.webkit.org/show_bug.cgi?id=68717

        Reviewed by Geoffrey Garen.

        Add a basic card marking style write barrier to JSC (currently
        turned off).  This requires two scratch registers in the JIT
        so there was some register re-arranging to satisfy that requirement.
        Happily this produced a minor perf bump in sunspider (~0.5%).

        Turning the barriers on causes an overall regression of around 1.5%

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::store8):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::movb_i8m):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::isKnownNotCell):
        (JSC::DFG::JITCodeGenerator::writeBarrier):
        (JSC::DFG::JITCodeGenerator::markCellCard):
        (JSC::DFG::JITCodeGenerator::cachedPutById):
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::tryCachePutByID):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * heap/CardSet.h: Added.
        (JSC::CardSet::CardSet):
        (JSC::::cardForAtom):
        (JSC::::cardMarkedForAtom):
        (JSC::::markCardForAtom):
        * heap/Heap.cpp:
        * heap/Heap.h:
        (JSC::Heap::addressOfCardFor):
        (JSC::Heap::writeBarrierFastCase):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::setDirtyObject):
        (JSC::MarkedBlock::addressOfCardFor):
        (JSC::MarkedBlock::offsetOfCards):
        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::emit_op_put_scoped_var):
        (JSC::JIT::emit_op_put_global_var):
        (JSC::JIT::emitWriteBarrier):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::emit_op_put_scoped_var):
        (JSC::JIT::emit_op_put_global_var):

2011-09-23  Thouraya ANDOLSI  <thouraya.andolsi@st.com>

        https://bugs.webkit.org/show_bug.cgi?id=68077
        SH4 assemblers doesn't refer to executable memory handle.

        Reviewed by Gavin Barraclough.

        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::branch8):
        * assembler/SH4Assembler.h:
        (JSC::SH4Assembler::executableCopy):

2011-09-23  Oliver Hunt  <oliver@apple.com>

        PutScopedVar nodes should report that it has a var number
        https://bugs.webkit.org/show_bug.cgi?id=68721

        Reviewed by Anders Carlsson.

        Another assertion fix.

        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasVarNumber):

2011-09-23  Oliver Hunt  <oliver@apple.com>

        Add a bunch of unhandled node types to the propagator
        https://bugs.webkit.org/show_bug.cgi?id=68716

        Reviewed by Darin Adler.

        Remove the ASSERT_NOT_REACHED() default for debug builds in the
        prediction propagator, this way unhandled nodes will just cause
        compile time failures rather than failing at some point in the
        future.

        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):

2011-09-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add static version of JSCell::visitChildren
        https://bugs.webkit.org/show_bug.cgi?id=68404

        Reviewed by Darin Adler.

        In this patch we just extract the bodies of the virtual visitChildren methods
        throughout the JSCell inheritance hierarchy out into static methods, which are 
        now called from the virtual methods.  This is an intermediate step in trying to 
        move the virtual-ness of visitChildren into our own custom vtable stored in 
        ClassInfo.  We need to convert the methods to static methods in order to be 
        able to more easily store and refer to them in our custom vtable since normal 
        member methods store some implicit information in their types, making it 
        impossible to store them generically in ClassInfo.

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::visitChildrenVirtual):
        (JSC::JSCallbackObject::visitChildren):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::visitChildrenVirtual):
        (JSC::DebuggerActivation::visitChildren):
        * debugger/DebuggerActivation.h:
        * heap/MarkStack.cpp:
        (JSC::SlotVisitor::visitChildren):
        (JSC::SlotVisitor::drain):
        * runtime/Arguments.cpp:
        (JSC::Arguments::visitChildrenVirtual):
        (JSC::Arguments::visitChildren):
        * runtime/Arguments.h:
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::visitChildrenVirtual):
        (JSC::EvalExecutable::visitChildren):
        (JSC::ProgramExecutable::visitChildrenVirtual):
        (JSC::ProgramExecutable::visitChildren):
        (JSC::FunctionExecutable::visitChildrenVirtual):
        (JSC::FunctionExecutable::visitChildren):
        * runtime/Executable.h:
        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::visitChildrenVirtual):
        (JSC::GetterSetter::visitChildren):
        * runtime/GetterSetter.h:
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::visitChildrenVirtual):
        (JSC::JSActivation::visitChildren):
        * runtime/JSActivation.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::visitChildrenVirtual):
        (JSC::JSArray::visitChildren):
        * runtime/JSArray.h:
        * runtime/JSBoundFunction.cpp:
        (JSC::JSBoundFunction::visitChildrenVirtual):
        (JSC::JSBoundFunction::visitChildren):
        * runtime/JSBoundFunction.h:
        * runtime/JSCell.h:
        (JSC::JSCell::visitChildrenVirtual):
        (JSC::JSCell::visitChildren):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::visitChildrenVirtual):
        (JSC::JSFunction::visitChildren):
        * runtime/JSFunction.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::visitChildrenVirtual):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::visitChildrenVirtual):
        (JSC::JSObject::visitChildren):
        * runtime/JSObject.h:
        (JSC::JSObject::visitChildrenDirect):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::visitChildrenVirtual):
        (JSC::JSPropertyNameIterator::visitChildren):
        * runtime/JSPropertyNameIterator.h:
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::visitChildrenVirtual):
        (JSC::JSStaticScopeObject::visitChildren):
        * runtime/JSStaticScopeObject.h:
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::visitChildrenVirtual):
        (JSC::JSWrapperObject::visitChildren):
        * runtime/JSWrapperObject.h:
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::visitChildrenVirtual):
        (JSC::NativeErrorConstructor::visitChildren):
        * runtime/NativeErrorConstructor.h:
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::visitChildrenVirtual):
        (JSC::RegExpObject::visitChildren):
        * runtime/RegExpObject.h:
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::visitChildrenVirtual):
        (JSC::ScopeChainNode::visitChildren):
        * runtime/ScopeChain.h:
        * runtime/Structure.cpp:
        (JSC::Structure::visitChildrenVirtual):
        (JSC::Structure::visitChildren):
        * runtime/Structure.h:
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::visitChildrenVirtual):
        (JSC::StructureChain::visitChildren):
        * runtime/StructureChain.h:

2011-09-23  Oliver Hunt  <oliver@apple.com>

        Node propagation doesn't handle PutScopedVar
        https://bugs.webkit.org/show_bug.cgi?id=68713

        Reviewed by Sam Weinig.

        This was causing assertion failures.

        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):

2011-09-23  Anders Carlsson  <andersca@apple.com>

        Make sure to define OVERRIDE and FINAL for older builds of clang.

        * wtf/Compiler.h:

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

        Implement op_resolve_global in the DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=68704

        Reviewed by Oliver Hunt.

        This is performance neutral, but increases coverage.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasIdentifier):
        (JSC::DFG::Node::resolveInfoIndex):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        Define BUILDING_ON_LION / TARGETING_LION when appropriate in Platform.h.

        * wtf/Platform.h:

2011-09-22  Anders Carlsson  <andersca@apple.com>

        We should add support for OVERRIDE and FINAL annotations
        https://bugs.webkit.org/show_bug.cgi?id=68654

        Reviewed by David Hyatt.

        Add OVERRIDE and FINAL macros for compilers that support them.

        * wtf/Compiler.h:

2011-09-22  Filip Pizlo  <fpizlo@apple.com>

        GetScopedVar should have value profiling
        https://bugs.webkit.org/show_bug.cgi?id=68676

        Reviewed by Oliver Hunt.
        
        Added GetScopedVar value profiling and predictin propagation.
        Added GetScopeChain to CSE.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::predict):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasPrediction):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::getScopeChainLoadElimination):
        (JSC::DFG::Propagator::performNodeCSE):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_scoped_var):

2011-09-22  Filip Pizlo  <fpizlo@apple.com>

        PPC build fix, part 3.

        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::compileForConstructInternal):

2011-09-22  Filip Pizlo  <fpizlo@apple.com>

        Another PPC build fix.

        * runtime/Executable.cpp:
        * runtime/Executable.h:

2011-09-22  Dean Jackson  <dino@apple.com>

        Add ENABLE_CSS_FILTERS
        https://bugs.webkit.org/show_bug.cgi?id=68652

        Reviewed by Simon Fraser.

        * Configurations/FeatureDefines.xcconfig:

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

        Incorrect this value passed to callbacks.
        https://bugs.webkit.org/show_bug.cgi?id=68668

        Reviewed by Oliver Hunt.

        From Array/String prototype function.  Should be undefined, but
        global object is passed instead (this is visible for strict callbacks).

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSort):
        (JSC::arrayProtoFuncFilter):
        (JSC::arrayProtoFuncMap):
        (JSC::arrayProtoFuncEvery):
        (JSC::arrayProtoFuncForEach):
        (JSC::arrayProtoFuncSome):
        * runtime/JSArray.cpp:
        (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key):
        (JSC::JSArray::sort):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace):

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

        Function.prototype.bind.length shoudl be 1.

        Rubber stamped by Olier Hunt.

        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::addFunctionProperties):

2011-09-22  Filip Pizlo  <fpizlo@apple.com>

        PPC build fix.

        * bytecode/CodeBlock.h:

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

        Windows build fix pt. 2

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Windows build fix pt. 1

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-09-21  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not support to_primitive or strcat
        https://bugs.webkit.org/show_bug.cgi?id=68582

        Reviewed by Darin Adler.
        
        This adds functional support for to_primitive and strcat. It focuses
        on minimizing the amount of code emitted on to_primitive (if we know
        that it is a primitive or can speculate cheaply, then we omit the
        slow path) and on keeping the implementation of strcat simple while
        leveraging whatever optimizations we have already. In particular,
        unlike the Call and Construct nodes which require extending the size
        of the DFG's callee registers, StrCat takes advantage of the fact
        that no JS code can run while StrCat is in progress and uses a
        scratch buffer, rather than the register file, to store the list of
        values to concatenate. This was done mainly to keep the code simple,
        but there are probably other benefits to keeping call frame sizes
        down. Essentially, this patch ensures that the presence of an
        op_strcat does not mess up any other optimizations we might do while
        ensuring that if you do execute it, it'll work about as well as you'd
        expect.
        
        When combined with the previous patch for integer division, this is a
        14% speed-up on Kraken. Without it, it would have been a 2% loss.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::TrustedImmPtr::TrustedImmPtr):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::callOperation):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        * dfg/DFGNode.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::~JSGlobalData):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::scratchBufferForSize):

2011-09-22  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT should support integer division
        https://bugs.webkit.org/show_bug.cgi?id=68597

        Reviewed by Darin Adler.
        
        This adds support for ArithDiv speculating integer, and speculating
        that the result is integer (i.e. remainder = 0).
        
        This is a 4% win on Kraken and a 1% loss on V8.

        * bytecode/CodeBlock.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::makeDivSafe):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasArithNodeFlags):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateArithNodeFlags):
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::fixupNode):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_div):

2011-09-22  Oliver Hunt  <oliver@apple.com>

        Implement put_scoped_var in the DFG jit
        https://bugs.webkit.org/show_bug.cgi?id=68653

        Reviewed by Gavin Barraclough.

        Naive implementation of put_scoped_var.  Same story as the
        get_scoped_var implementation, although I've hoisted scope
        object acquisition into a separate dfg node.  Ideally in the
        future we would reuse the resolved scope chain object, but
        for now we don't.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasScopeChainDepth):
        (JSC::DFG::Node::scopeChainDepth):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        Implement Function.prototype.bind
        https://bugs.webkit.org/show_bug.cgi?id=26382

        Reviewed by Sam Weinig.

        This patch provides a basic functional implementation
        for Function.bind. It should (hopefully!) be fully
        functionally correct, and the bound functions can be
        called to quickly (since they are a subclass of
        JSFunction, not InternalFunction), but we'll probably
        want to follow up with some optimization work to keep
        bound calls in JIT code.

        * JavaScriptCore.JSVALUE32_64only.exp:
        * JavaScriptCore.JSVALUE64only.exp:
        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jit/JITStubs.cpp:
        (JSC::JITThunks::hostFunctionStub):
        * jit/JITStubs.h:
        * jsc.cpp:
        (GlobalObject::addFunction):
        * runtime/CommonIdentifiers.h:
        * runtime/ConstructData.h:
        * runtime/Executable.h:
        (JSC::NativeExecutable::NativeExecutable):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::addFunctionProperties):
        (JSC::functionProtoFuncBind):
        * runtime/FunctionPrototype.h:
        * runtime/JSBoundFunction.cpp: Added.
        (JSC::boundFunctionCall):
        (JSC::boundFunctionConstruct):
        (JSC::JSBoundFunction::create):
        (JSC::JSBoundFunction::hasInstance):
        (JSC::JSBoundFunction::getOwnPropertySlot):
        (JSC::JSBoundFunction::getOwnPropertyDescriptor):
        (JSC::JSBoundFunction::JSBoundFunction):
        (JSC::JSBoundFunction::finishCreation):
        * runtime/JSBoundFunction.h: Added.
        (JSC::JSBoundFunction::targetFunction):
        (JSC::JSBoundFunction::boundThis):
        (JSC::JSBoundFunction::boundArgs):
        (JSC::JSBoundFunction::createStructure):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::create):
        (JSC::JSFunction::finishCreation):
        (JSC::createDescriptorForThrowingProperty):
        (JSC::JSFunction::getOwnPropertySlot):
        * runtime/JSFunction.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::getHostFunction):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::boundFunctionStructure):
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):

2011-09-22  Oliver Hunt  <oliver@apple.com>

        Implement get_scoped_var in the DFG
        https://bugs.webkit.org/show_bug.cgi?id=68640

        Reviewed by Gavin Barraclough.

        Naive implementation of get_scoped_var in the DFG.  Essentially this
        is the bare minimum required to get correct behaviour, so there's no
        load/store coalescing or type profiling involved, even though these
        would be wins.  No impact on SunSpider or V8.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasVarNumber):
        (JSC::DFG::Node::hasScopeChainDepth):
        (JSC::DFG::Node::scopeChainDepth):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-09-22  Adam Roben  <aroben@apple.com>

        Remove FindSafari from all our .sln files

        It isn't used anymore, so there's no point in building it.

        Part of <http://webkit.org/b/68628> Remove FindSafari

        Reviewed by Steve Falkenburg.

        * JavaScriptCore.vcproj/JavaScriptCore.sln:

2011-09-22  Filip Pizlo  <fpizlo@apple.com>

        32-bit call code clobbers the function cell tag
        https://bugs.webkit.org/show_bug.cgi?id=68606

        Reviewed by Csaba Osztrogonác.
        
        This is a minimalistic fix: it simply emits code to restore the
        cell tag on the slow path, if we know that we failed due to
        emitCallIfNotType.

        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCallVarargsSlowCase):
        (JSC::JIT::compileOpCallSlowCase):

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

        Add missing addPtr->add32 mapping for X86.

        Rubber stamped by Sam Weinig.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::addPtr):

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

        Add missing addDouble for AbsoluteAddress to X86

        Rubber stamped by Geoff Garen.

        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::addDouble):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::addsd_mr):
        (JSC::X86Assembler::cvtsi2sd_rr):
        (JSC::X86Assembler::cvtsi2sd_mr):

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

        Build fix following fix for bug #68586.

        * jit/JIT.cpp:
        * jit/JITInlineMethods.h:

2011-09-21  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT should be able to compile op_throw
        https://bugs.webkit.org/show_bug.cgi?id=68571

        Reviewed by Geoffrey Garen.
        
        This compiles op_throw in the simplest way possible: it's an OSR
        point back to the old JIT. This is a good step towards increasing
        coverage, particularly on Kraken, but it's neutral because the
        same functions that do throw also use some other unsupported
        opcodes.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
        * dfg/DFGNode.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-09-21  Filip Pizlo  <fpizlo@apple.com>

        DFG should support continuous optimization
        https://bugs.webkit.org/show_bug.cgi?id=68329

        Reviewed by Geoffrey Garen.
        
        This adds the ability to reoptimize a code block if speculation
        failures happen frequently. 6% speed-up on Kraken, 1% slow-down
        on V8, neutral on SunSpider.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        (JSC::ProgramCodeBlock::jettison):
        (JSC::EvalCodeBlock::jettison):
        (JSC::FunctionCodeBlock::jettison):
        (JSC::CodeBlock::shouldOptimizeNow):
        (JSC::CodeBlock::dumpValueProfiles):
        * bytecode/CodeBlock.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getStrongPrediction):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        (JSC::DFG::JITCompiler::compileEntry):
        (JSC::DFG::JITCompiler::compileBody):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::noticeOSREntry):
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGOSREntry.h:
        (JSC::DFG::getOSREntryDataBytecodeIndex):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * heap/ConservativeRoots.cpp:
        (JSC::ConservativeRoots::ConservativeRoots):
        (JSC::ConservativeRoots::~ConservativeRoots):
        (JSC::DummyMarkHook::mark):
        (JSC::ConservativeRoots::genericAddPointer):
        (JSC::ConservativeRoots::genericAddSpan):
        (JSC::ConservativeRoots::add):
        * heap/ConservativeRoots.h:
        * heap/Heap.cpp:
        (JSC::Heap::addJettisonCodeBlock):
        (JSC::Heap::markRoots):
        * heap/Heap.h:
        * heap/JettisonedCodeBlocks.cpp: Added.
        (JSC::JettisonedCodeBlocks::JettisonedCodeBlocks):
        (JSC::JettisonedCodeBlocks::~JettisonedCodeBlocks):
        (JSC::JettisonedCodeBlocks::addCodeBlock):
        (JSC::JettisonedCodeBlocks::clearMarks):
        (JSC::JettisonedCodeBlocks::deleteUnmarkedCodeBlocks):
        (JSC::JettisonedCodeBlocks::traceCodeBlocks):
        * heap/JettisonedCodeBlocks.h: Added.
        (JSC::JettisonedCodeBlocks::mark):
        * interpreter/RegisterFile.cpp:
        (JSC::RegisterFile::gatherConservativeRoots):
        * interpreter/RegisterFile.h:
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Executable.cpp:
        (JSC::jettisonCodeBlock):
        (JSC::EvalExecutable::jettisonOptimizedCode):
        (JSC::ProgramExecutable::jettisonOptimizedCode):
        (JSC::FunctionExecutable::jettisonOptimizedCodeForCall):
        (JSC::FunctionExecutable::jettisonOptimizedCodeForConstruct):
        * runtime/Executable.h:
        (JSC::FunctionExecutable::jettisonOptimizedCodeFor):
        * wtf/BitVector.h: Added.
        (WTF::BitVector::BitVector):
        (WTF::BitVector::~BitVector):
        (WTF::BitVector::operator=):
        (WTF::BitVector::size):
        (WTF::BitVector::ensureSize):
        (WTF::BitVector::resize):
        (WTF::BitVector::clearAll):
        (WTF::BitVector::get):
        (WTF::BitVector::set):
        (WTF::BitVector::clear):
        (WTF::BitVector::bitsInPointer):
        (WTF::BitVector::maxInlineBits):
        (WTF::BitVector::byteCount):
        (WTF::BitVector::makeInlineBits):
        (WTF::BitVector::OutOfLineBits::numBits):
        (WTF::BitVector::OutOfLineBits::numWords):
        (WTF::BitVector::OutOfLineBits::bits):
        (WTF::BitVector::OutOfLineBits::create):
        (WTF::BitVector::OutOfLineBits::destroy):
        (WTF::BitVector::OutOfLineBits::OutOfLineBits):
        (WTF::BitVector::isInline):
        (WTF::BitVector::outOfLineBits):
        (WTF::BitVector::resizeOutOfLine):
        (WTF::BitVector::bits):

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

        Add X86 GPRInfo for DFG JIT.
        https://bugs.webkit.org/show_bug.cgi?id=68586

        Reviewed by Geoff Garen.

        * dfg/DFGGPRInfo.h:
        (JSC::DFG::GPRInfo::toRegister):
        (JSC::DFG::GPRInfo::toIndex):
        (JSC::DFG::GPRInfo::debugName):

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

        Should support value profiling on CPU(X86)
        https://bugs.webkit.org/show_bug.cgi?id=68575

        Reviewed by Sam Weinig.

        Fix verbose profiling in ToT (SlowCaseProfile had been
        partially renamed to RareCaseProfile), add in-memory
        bucket counter for CPU(X86), move JIT::m_canBeOptimized
        out of the DFG_JIT ifdef.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::resetRareCaseProfiles):
        (JSC::CodeBlock::dumpValueProfiles):
        * bytecode/CodeBlock.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::makeSafe):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitValueProfilingSite):

2011-09-21  Filip Pizlo  <fpizlo@apple.com>

        DFG does not support compiling functions as constructors
        https://bugs.webkit.org/show_bug.cgi?id=68500

        Reviewed by Oliver Hunt.
        
        This adds support for compiling constructors to the DFG. It's a
        1% speed-up on V8, mostly due to a 6% speed-up on early-boyer.
        It's also a 13% win on access-binary-trees, but it's neutral in
        the SunSpider and Kraken averages.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::mightCompileFunctionForConstruct):
        (JSC::DFG::canCompileOpcode):
        * dfg/DFGNode.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::compileOptimizedForConstruct):
        (JSC::FunctionExecutable::compileForConstructInternal):
        * runtime/Executable.h:
        (JSC::FunctionExecutable::compileForConstruct):
        (JSC::FunctionExecutable::compileFor):
        (JSC::FunctionExecutable::compileOptimizedFor):

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

        Replace jsFunctionVPtr compares with a type check on the Structure.
        https://bugs.webkit.org/show_bug.cgi?id=68557

        Reviewed by Oliver Hunt.

        This will permit calls to still optimize to subclasses of JSFunction
        that have the correct type (but a different C++ vptr).

        This patch stops passing the globalData into numerous functions.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::isFunctionConstant):
        (JSC::DFG::Graph::valueOfFunctionConstant):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::isFunctionConstant):
        (JSC::DFG::JITCompiler::valueOfFunctionConstant):
        * dfg/DFGOperations.cpp:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitJumpIfNotType):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Executable.h:
        (JSC::isHostFunction):
        * runtime/JSFunction.h:
        (JSC::JSFunction::createStructure):
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
        (JSC::JSObject::putWithAttributes):
        * runtime/JSObject.h:
        (JSC::getJSFunction):
        (JSC::JSObject::putDirect):
        (JSC::JSObject::putDirectWithoutTransition):
        * runtime/JSType.h:

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

        Removed WTFTHREADDATA_MULTITHREADED, making it always true
        https://bugs.webkit.org/show_bug.cgi?id=68549

        Reviewed by Darin Adler.
        
        Another part of making threads exist in WebKit.

        * wtf/WTFThreadData.cpp:
        * wtf/WTFThreadData.h:
        (WTF::wtfThreadData):

2011-09-21  Dan Bernstein  <mitz@apple.com>

        JavaScriptCore Part of: Prevent the WebKit frameworks from defining inappropriately-named Objective-C classes
        https://bugs.webkit.org/show_bug.cgi?id=68451

        Reviewed by Darin Adler.

        * JavaScriptCore.xcodeproj/project.pbxproj: Added a script build phase that invokes
        check-for-inappropriate-objc-class-names, allowing only class names prefixed with "JS".

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

        MacroAssembler fixes.
        https://bugs.webkit.org/show_bug.cgi?id=68494

        Reviewed by Sam Weinig.

        Add X86-64's 3 operand or32 to other MacroAssembler, fix load32's [const] void* mismatch

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::orPtr):
        (JSC::MacroAssembler::loadPtr):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::or32):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::or32):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::or32):
        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::or32):
        (JSC::MacroAssemblerSH4::load32):
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::load32):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::load32):

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

        Some Heap cleanup.

        Reviewed by Beth Dakin.

        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::blessNewBlock): Removed blessNewBlockForSlowPath()
        because it was unused; renamed blessNewBlockForFastPath() to blessNewBlock()
        since there is only one now.

        * heap/MarkedBlock.h: Removed ownerSet-related stuff since it was unused.
        Updated mark bit overhead calculation. Deployed atomsPerBlock in one
        place where we were recalculating it.

        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::addBlock): Updated for rename.

2011-09-20  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT always speculates integer on modulo
        https://bugs.webkit.org/show_bug.cgi?id=68485

        Reviewed by Oliver Hunt.
        
        Added support for double modulo, which is a call to fmod().
        Also added support for recording the old JIT's statistics
        on op_mod and propagating them along the graph. Finally,
        fixed a goof in the ArithNodeFlags propagation logic that
        was made obvious when I started testing ArithMod.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::makeSafe):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasArithNodeFlags):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateArithNodeFlags):
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::fixupNode):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-09-20  ChangSeok Oh  <shivamidow@gmail.com>

        [GTK] requestAnimationFrame support for gtk port
        https://bugs.webkit.org/show_bug.cgi?id=66280

        Reviewed by Martin Robinson.

        Let GTK port use REQUEST_ANIMATION_FRAME_TIMER.

        * wtf/Platform.h:

2011-09-20  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT performs too many negative zero checks, and too many
        overflow checks
        https://bugs.webkit.org/show_bug.cgi?id=68430

        Reviewed by Oliver Hunt.
        
        This adds comprehensive support for deciding how to perform an
        arithmetic operations based on a combination of overflow profiling,
        negative zero profiling, value profiling, and a static analysis of
        how the results of these operations get used.
        
        This is a 72% speed-up on stanford-crypto-sha256-iterative, and a
        2.5% speed-up on the Kraken average, a 1.4% speed-up on the V8
        geomean, and neutral on SunSpider. It's also an 8.5% speed-up on
        V8-crypto, because apparenty everything we do speeds up crypto.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::toInt32):
        (JSC::DFG::ByteCodeParser::toNumber):
        (JSC::DFG::ByteCodeParser::isSmallInt32Constant):
        (JSC::DFG::ByteCodeParser::valueOfInt32Constant):
        (JSC::DFG::ByteCodeParser::weaklyPredictInt32):
        (JSC::DFG::ByteCodeParser::makeSafe):
        (JSC::DFG::ByteCodeParser::handleMinMax):
        (JSC::DFG::ByteCodeParser::handleIntrinsic):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::processPhiStack):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp):
        * dfg/DFGNode.h:
        (JSC::DFG::nodeUsedAsNumber):
        (JSC::DFG::nodeCanTruncateInteger):
        (JSC::DFG::nodeCanIgnoreNegativeZero):
        (JSC::DFG::nodeCanSpeculateInteger):
        (JSC::DFG::arithNodeFlagsAsString):
        (JSC::DFG::Node::Node):
        (JSC::DFG::Node::hasArithNodeFlags):
        (JSC::DFG::Node::rawArithNodeFlags):
        (JSC::DFG::Node::arithNodeFlags):
        (JSC::DFG::Node::arithNodeFlagsForCompare):
        (JSC::DFG::Node::setArithNodeFlag):
        (JSC::DFG::Node::mergeArithNodeFlags):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::fixpoint):
        (JSC::DFG::Propagator::isNotNegZero):
        (JSC::DFG::Propagator::isNotZero):
        (JSC::DFG::Propagator::propagateArithNodeFlags):
        (JSC::DFG::Propagator::propagateArithNodeFlagsForward):
        (JSC::DFG::Propagator::propagateArithNodeFlagsBackward):
        (JSC::DFG::Propagator::propagateNodePredictions):
        (JSC::DFG::Propagator::propagatePredictionsForward):
        (JSC::DFG::Propagator::propagatePredictionsBackward):
        (JSC::DFG::Propagator::toDouble):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::fixup):
        (JSC::DFG::Propagator::startIndexForChildren):
        (JSC::DFG::Propagator::endIndexForPureCSE):
        (JSC::DFG::Propagator::pureCSE):
        (JSC::DFG::Propagator::clobbersWorld):
        (JSC::DFG::Propagator::setReplacement):
        (JSC::DFG::Propagator::performNodeCSE):
        (JSC::DFG::Propagator::localCSE):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):

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

        Refactor Heap allocation logic into separate AllocationSpace class
        https://bugs.webkit.org/show_bug.cgi?id=68409

        Reviewed by Gavin Barraclough.

        This patch hoists direct manipulation of the MarkedSpace and related
        data out of Heap and into a separate class.  This will allow us to
        have multiple allocation spaces in future, so easing the way towards
        having GC'd backing stores for objects.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * debugger/Debugger.cpp:
        (JSC::Debugger::recompileAllJSFunctions):
        * heap/AllocationSpace.cpp: Added.
        (JSC::AllocationSpace::tryAllocate):
        (JSC::AllocationSpace::allocateSlowCase):
        (JSC::AllocationSpace::allocateBlock):
        (JSC::AllocationSpace::freeBlocks):
        (JSC::TakeIfEmpty::TakeIfEmpty):
        (JSC::TakeIfEmpty::operator()):
        (JSC::TakeIfEmpty::returnValue):
        (JSC::AllocationSpace::shrink):
        * heap/AllocationSpace.h: Added.
        (JSC::AllocationSpace::AllocationSpace):
        (JSC::AllocationSpace::blocks):
        (JSC::AllocationSpace::sizeClassFor):
        (JSC::AllocationSpace::setHighWaterMark):
        (JSC::AllocationSpace::highWaterMark):
        (JSC::AllocationSpace::canonicalizeBlocks):
        (JSC::AllocationSpace::resetAllocator):
        (JSC::AllocationSpace::forEachCell):
        (JSC::AllocationSpace::forEachBlock):
        (JSC::AllocationSpace::allocate):
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::reportExtraMemoryCostSlowCase):
        (JSC::Heap::getConservativeRegisterRoots):
        (JSC::Heap::markRoots):
        (JSC::Heap::clearMarks):
        (JSC::Heap::sweep):
        (JSC::Heap::objectCount):
        (JSC::Heap::size):
        (JSC::Heap::capacity):
        (JSC::Heap::globalObjectCount):
        (JSC::Heap::objectTypeCounts):
        (JSC::Heap::collect):
        (JSC::Heap::canonicalizeBlocks):
        (JSC::Heap::resetAllocator):
        (JSC::Heap::freeBlocks):
        (JSC::Heap::shrink):
        * heap/Heap.h:
        (JSC::Heap::objectSpace):
        (JSC::Heap::sizeClassForObject):
        (JSC::Heap::allocate):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitAllocateBasicJSObject):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::recompileAllJSFunctions):
        (JSC::JSGlobalData::releaseExecutableMemory):

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

        Removed BREWMP* platform #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=68425
        
        BREWMP* has no maintainer, and this is dead code.

        Reviewed by Darin Adler.

        * heap/MarkStack.h:
        (JSC::::shrinkAllocation):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::cacheFlush):
        * runtime/TimeoutChecker.cpp:
        (JSC::getCPUTime):
        * wtf/Assertions.cpp:
        * wtf/Assertions.h:
        * wtf/CurrentTime.cpp:
        * wtf/DateMath.cpp:
        (WTF::calculateUTCOffset):
        * wtf/FastMalloc.cpp:
        (WTF::fastMalloc):
        (WTF::fastCalloc):
        (WTF::fastMallocSize):
        * wtf/FastMalloc.h:
        * wtf/MainThread.cpp:
        * wtf/MathExtras.h:
        * wtf/OwnPtrCommon.h:
        * wtf/Platform.h:
        * wtf/RandomNumber.cpp:
        (WTF::randomNumber):
        * wtf/RandomNumberSeed.h:
        (WTF::initializeRandomNumberGenerator):
        * wtf/text/WTFString.h:
        * wtf/unicode/Unicode.h:

2011-09-20  Adam Roben  <aroben@apple.com>

        Windows build fix after r95523

        * wtf/CheckedArithmetic.h: Added stdint.h so we can have int64_t defined.

2011-09-18  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not speculate aggressively enough on GetById
        https://bugs.webkit.org/show_bug.cgi?id=68320

        Reviewed by Oliver Hunt.
        
        This adds the ability to access properties directly, by offset.
        This optimization kicks in when at the time of DFG compilation,
        it appears that the given get_by_id is self-cached by the old JIT.
        Two new opcodes get introduced: CheckStructure and GetByOffset.
        CheckStructure performs a speculation check on the object's
        structure, and returns the storage pointer. GetByOffset performs
        a direct read of the field from the storage pointer. Both
        CheckStructure and GetByOffset can be CSE'd, so that we can
        eliminate redundant structure checks, and redundant reads of the
        same field.
        
        This is a 4% speed-up on V8, a 2% slow-down on Kraken, and
        neutral on SunSpider.

        * bytecode/PredictedType.cpp:
        (JSC::predictionFromClassInfo):
        (JSC::predictionFromStructure):
        (JSC::predictionFromCell):
        * bytecode/PredictedType.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::dataFormatToString):
        (JSC::DFG::needDataFormatConversion):
        (JSC::DFG::GenerationInfo::initStorage):
        (JSC::DFG::GenerationInfo::spill):
        (JSC::DFG::GenerationInfo::fillStorage):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::predict):
        (JSC::DFG::Graph::getPrediction):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::fillInteger):
        (JSC::DFG::JITCodeGenerator::fillDouble):
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        (JSC::DFG::JITCodeGenerator::fillStorage):
        (JSC::DFG::GPRTemporary::GPRTemporary):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::silentSpillGPR):
        (JSC::DFG::JITCodeGenerator::silentFillGPR):
        (JSC::DFG::JITCodeGenerator::spill):
        (JSC::DFG::JITCodeGenerator::storageResult):
        (JSC::DFG::StorageOperand::StorageOperand):
        (JSC::DFG::StorageOperand::~StorageOperand):
        (JSC::DFG::StorageOperand::index):
        (JSC::DFG::StorageOperand::gpr):
        (JSC::DFG::StorageOperand::use):
        * dfg/DFGNode.h:
        (JSC::DFG::OpInfo::OpInfo):
        (JSC::DFG::Node::Node):
        (JSC::DFG::Node::hasPrediction):
        (JSC::DFG::Node::hasStructure):
        (JSC::DFG::Node::structure):
        (JSC::DFG::Node::hasStorageAccessData):
        (JSC::DFG::Node::storageAccessDataIndex):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNode):
        (JSC::DFG::Propagator::globalVarLoadElimination):
        (JSC::DFG::Propagator::getMethodLoadElimination):
        (JSC::DFG::Propagator::checkStructureLoadElimination):
        (JSC::DFG::Propagator::getByOffsetLoadElimination):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
        (JSC::DFG::SpeculativeJIT::compile):
        * wtf/StdLibExtras.h:
        (WTF::safeCast):

2011-09-19  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove toPrimitive from JSCell
        https://bugs.webkit.org/show_bug.cgi?id=67875

        Reviewed by Darin Adler.

        Part of the refactoring process to un-virtualize JSCell.  We move 
        all of the implicit functionality provided by the virtual toPrimitive method 
        in JSCell to be explicit in JSValue::toPrimitive and JSCell:toPrimitive while 
        also de-virtualizing JSCell::toPrimitive.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/JSCell.cpp:
        (JSC::JSCell::toPrimitive):
        * runtime/JSCell.h:

        We replace JSNotAnObject::toPrimitive with defaultValue, which it overrides from 
        JSObject.  This pushes the virtual method further down, enabling us to get rid 
        of the virtual call in JSCell.  Eventually we'll probably have to deal with this
        again, but we'll cross that bridge when we come to it.
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::defaultValue):
        * runtime/JSNotAnObject.h:
        * runtime/JSObject.h:
        * runtime/JSString.h:

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

        Removed ENABLE_LAZY_BLOCK_FREEING and related #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=68424

        As discussed on webkit-dev. All ports build with threads enabled in JSC now.
        
        This may break WinCE and other ports that have not built and tested with
        this configuration. I've filed bugs for port maintainers. It's time for
        WebKit to move forward.

        Reviewed by Mark Rowe.

        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::~Heap):
        (JSC::Heap::destroy):
        (JSC::Heap::blockFreeingThreadMain):
        (JSC::Heap::allocateBlock):
        (JSC::Heap::freeBlocks):
        (JSC::Heap::releaseFreeBlocks):
        * heap/Heap.h:
        * wtf/Platform.h:

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

        Removed ENABLE_WTF_MULTIPLE_THREADS and related #ifdefs
        https://bugs.webkit.org/show_bug.cgi?id=68423

        As discussed on webkit-dev. All ports build with threads enabled in WTF now.
        
        This may break WinCE and other ports that have not built and tested with
        this configuration. I've filed bugs for port maintainers. It's time for
        WebKit to move forward.

        Reviewed by Mark Rowe.

        * wtf/CryptographicallyRandomNumber.cpp:
        (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomNumber):
        (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomValues):
        * wtf/FastMalloc.cpp:
        * wtf/Platform.h:
        * wtf/RandomNumber.cpp:
        (WTF::randomNumber):
        * wtf/RefCountedLeakCounter.cpp:
        (WTF::RefCountedLeakCounter::increment):
        (WTF::RefCountedLeakCounter::decrement):
        * wtf/ThreadingPthreads.cpp:
        (WTF::initializeThreading):
        * wtf/ThreadingWin.cpp:
        (WTF::initializeThreading):
        * wtf/dtoa.cpp:
        (WTF::pow5mult):
        * wtf/gtk/ThreadingGtk.cpp:
        (WTF::initializeThreading):
        * wtf/qt/ThreadingQt.cpp:
        (WTF::initializeThreading):

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

        Removed ENABLE_JSC_MULTIPLE_THREADS and related #ifdefs.
        https://bugs.webkit.org/show_bug.cgi?id=68422
        
        As discussed on webkit-dev. All ports build with threads enabled in JSC now.
        
        This may break WinCE and other ports that have not built and tested with
        this configuration. I've filed bugs for port maintainers. It's time for
        WebKit to move forward.

        Reviewed by Sam Weinig.

        * API/APIShims.h:
        (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
        * API/JSContextRef.cpp:
        * heap/MachineStackMarker.cpp:
        (JSC::MachineThreads::MachineThreads):
        (JSC::MachineThreads::~MachineThreads):
        (JSC::MachineThreads::gatherConservativeRoots):
        * heap/MachineStackMarker.h:
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreadingOnce):
        (JSC::initializeThreading):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::sharedInstance):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::makeUsableFromMultipleThreads):
        * runtime/JSLock.cpp:
        * runtime/Structure.cpp:
        * wtf/Platform.h:

2011-09-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r95493 and r95496.
        http://trac.webkit.org/changeset/95493
        http://trac.webkit.org/changeset/95496
        https://bugs.webkit.org/show_bug.cgi?id=68418

        Broke Windows build (Requested by rniwa on #webkit).

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * debugger/Debugger.cpp:
        (JSC::Debugger::recompileAllJSFunctions):
        * heap/AllocationSpace.cpp: Removed.
        * heap/AllocationSpace.h: Removed.
        * heap/Heap.cpp:
        (JSC::CountFunctor::TakeIfEmpty::TakeIfEmpty):
        (JSC::CountFunctor::TakeIfEmpty::operator()):
        (JSC::CountFunctor::TakeIfEmpty::returnValue):
        (JSC::Heap::Heap):
        (JSC::Heap::reportExtraMemoryCostSlowCase):
        (JSC::Heap::tryAllocate):
        (JSC::Heap::allocateSlowCase):
        (JSC::Heap::getConservativeRegisterRoots):
        (JSC::Heap::markRoots):
        (JSC::Heap::clearMarks):
        (JSC::Heap::sweep):
        (JSC::Heap::objectCount):
        (JSC::Heap::size):
        (JSC::Heap::capacity):
        (JSC::Heap::globalObjectCount):
        (JSC::Heap::objectTypeCounts):
        (JSC::Heap::collect):
        (JSC::Heap::canonicalizeBlocks):
        (JSC::Heap::resetAllocator):
        (JSC::Heap::allocateBlock):
        (JSC::Heap::freeBlocks):
        (JSC::Heap::shrink):
        * heap/Heap.h:
        (JSC::Heap::markedSpace):
        (JSC::Heap::forEachCell):
        (JSC::Heap::forEachBlock):
        (JSC::Heap::sizeClassFor):
        (JSC::Heap::allocate):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitAllocateBasicJSObject):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::recompileAllJSFunctions):
        (JSC::JSGlobalData::releaseExecutableMemory):

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

        Errrk, missed stylebot comments in last commit.

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncSplit):

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

        String#split is buggy
        https://bugs.webkit.org/show_bug.cgi?id=68348

        Reviewed by Sam Weinig.

        * runtime/StringPrototype.cpp:
        (JSC::jsStringWithReuse):
            - added helper function to reuse original JSString value.
        (JSC::stringProtoFuncSplit):
            - Rewritten from the spec.
        * tests/mozilla/ecma/String/15.5.4.8-2.js:
        (getTestCases):
            - This test is not ES5 compliant.

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

        Removed lots of friend declarations from JSCell, so we can more
        effectively make use of private and protected.

        Reviewed by Sam Weinig.

        * runtime/JSCell.h: Removed MSVCBugWorkaround because it was a lot of
        confusion for not much safety.
        (JSC::JSCell::operator new): Made this public because it is used by a
        few clients, and not really dangerous.

        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
        (JSC::JSObject::deleteProperty):
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::defineSetter):
        (JSC::JSObject::getPropertySpecificValue):
        (JSC::JSObject::getOwnPropertyNames):
        (JSC::JSObject::seal):
        (JSC::JSObject::freeze):
        (JSC::JSObject::preventExtensions):
        (JSC::JSObject::removeDirect):
        (JSC::JSObject::createInheritorID):
        (JSC::JSObject::allocatePropertyStorage):
        (JSC::JSObject::getOwnPropertyDescriptor):
        * runtime/JSObject.h:
        (JSC::JSObject::getDirect):
        (JSC::JSObject::getDirectLocation):
        (JSC::JSObject::hasCustomProperties):
        (JSC::JSObject::hasGetterSetterProperties):
        (JSC::JSObject::isSealed):
        (JSC::JSObject::isFrozen):
        (JSC::JSObject::isExtensible):
        (JSC::JSObject::flattenDictionaryObject):
        (JSC::JSObject::finishCreation):
        (JSC::JSObject::prototype):
        (JSC::JSObject::setPrototype):
        (JSC::JSObject::inlineGetOwnPropertySlot):
        (JSC::JSCell::fastGetOwnProperty):
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::putDirectWithoutTransition):
        (JSC::JSObject::transitionTo):
        (JSC::JSObject::visitChildrenDirect): Changed all use of m_structure to
        structure() / setStructure(), so we don't have to be a friend of JSCell.

        * runtime/Structure.h:
        (JSC::JSCell::setStructure): Added, to avoid direct access by JSObject
        to JSCell::m_structure.

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

        Always enable ENABLE(EVENTSOURCE)
        https://bugs.webkit.org/show_bug.cgi?id=68414

        Reviewed by Eric Seidel.

        * Configurations/FeatureDefines.xcconfig:

2011-09-19  Eli Fidler  <efidler@rim.com>

        Enable JSC_MULTIPLE_THREADS for OS(QNX).
        https://bugs.webkit.org/show_bug.cgi?id=68047

        Reviewed by Daniel Bates.

        SA_RESTART was required for SIGUSR2-based debugging, but is not
        present on QNX. This debugging doesn't seem critical to
        JSC_MULTIPLE_THREADS, so allow it to proceed.

        * heap/MachineStackMarker.cpp:
        (JSC::MachineThreads::Thread::Thread):
        (JSC::getPlatformThreadRegisters):
        (JSC::otherThreadStackPointer):
        (JSC::freePlatformThreadRegisters):
        * wtf/Platform.h: enable PTHREADS for OS(QNX)

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

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Refactor Heap allocation logic into separate AllocationSpace class
        https://bugs.webkit.org/show_bug.cgi?id=68409

        Reviewed by Gavin Barraclough.

        This patch hoists direct manipulation of the MarkedSpace and related
        data out of Heap and into a separate class.  This will allow us to
        have multiple allocation spaces in future, so easing the way towards
        having GC'd backing stores for objects.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * debugger/Debugger.cpp:
        (JSC::Debugger::recompileAllJSFunctions):
        * heap/AllocationSpace.cpp: Added.
        (JSC::AllocationSpace::tryAllocate):
        (JSC::AllocationSpace::allocateSlowCase):
        (JSC::AllocationSpace::allocateBlock):
        (JSC::AllocationSpace::freeBlocks):
        (JSC::TakeIfEmpty::TakeIfEmpty):
        (JSC::TakeIfEmpty::operator()):
        (JSC::TakeIfEmpty::returnValue):
        (JSC::AllocationSpace::shrink):
        * heap/AllocationSpace.h: Added.
        (JSC::AllocationSpace::AllocationSpace):
        (JSC::AllocationSpace::blocks):
        (JSC::AllocationSpace::sizeClassFor):
        (JSC::AllocationSpace::setHighWaterMark):
        (JSC::AllocationSpace::highWaterMark):
        (JSC::AllocationSpace::canonicalizeBlocks):
        (JSC::AllocationSpace::resetAllocator):
        (JSC::AllocationSpace::forEachCell):
        (JSC::AllocationSpace::forEachBlock):
        (JSC::AllocationSpace::allocate):
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::reportExtraMemoryCostSlowCase):
        (JSC::Heap::getConservativeRegisterRoots):
        (JSC::Heap::markRoots):
        (JSC::Heap::clearMarks):
        (JSC::Heap::sweep):
        (JSC::Heap::objectCount):
        (JSC::Heap::size):
        (JSC::Heap::capacity):
        (JSC::Heap::globalObjectCount):
        (JSC::Heap::objectTypeCounts):
        (JSC::Heap::collect):
        (JSC::Heap::canonicalizeBlocks):
        (JSC::Heap::resetAllocator):
        (JSC::Heap::freeBlocks):
        (JSC::Heap::shrink):
        * heap/Heap.h:
        (JSC::Heap::objectSpace):
        (JSC::Heap::sizeClassForObject):
        (JSC::Heap::allocate):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitAllocateBasicJSObject):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::recompileAllJSFunctions):
        (JSC::JSGlobalData::releaseExecutableMemory):

2011-09-19  Adam Roben  <aroben@apple.com>

        Windows build fix after r95310

        * JavaScriptCore.vcproj/testRegExp/testRegExpCommon.vsprops: Added
        include\private\JavaScriptCore to the include path so DFGIntrinsic.h can be found.

2011-09-19  Filip Pizlo  <fpizlo@apple.com>

        DFG speculation failures should act as additional value profiles
        https://bugs.webkit.org/show_bug.cgi?id=68335

        Reviewed by Oliver Hunt.
        
        This adds slow-case counters to the old JIT. It also ensures that
        negative zero in multiply is handled carefully. The old JIT
        previously took slow path if the result of a multiply was zero,
        which, without any changes, would cause the DFG to think that
        every such multiply produced a double result.
        
        This also fixes a bug in the old JIT's handling of decrements. It
        would take the slow path if the result was zero, but not if it
        underflowed.
        
        By itself, this would be a 1% slow-down on V8 and Kraken. But then
        I wrote optimizations in the DFG that take advantage of this new
        information. It's no longer the case that every multiply needs to
        do a check for negative zero; it only happens if the negative
        zero is ignored.
        
        This results in a 12% speed-up on v8-crypto, for a 1.4% geomean
        speed-up in V8. It's mostly neutral on Kraken. I can see an
        0.5% slow-down and it appears to be significant.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::resetRareCaseProfiles):
        (JSC::CodeBlock::dumpValueProfiles):
        * bytecode/CodeBlock.h:
        * bytecode/ValueProfile.h:
        (JSC::RareCaseProfile::RareCaseProfile):
        (JSC::getRareCaseProfileBytecodeOffset):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::toInt32):
        (JSC::DFG::ByteCodeParser::makeSafe):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::GPRTemporary::GPRTemporary):
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGNode.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNode):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::clobbersWorld):
        (JSC::DFG::Propagator::performNodeCSE):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        (JSC::JIT::linkDummySlowCase):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_post_dec):
        (JSC::JIT::emit_op_pre_dec):
        (JSC::JIT::compileBinaryArithOp):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emitSlow_op_add):
        * jit/JITInlineMethods.h:
        (JSC::JIT::addSlowCase):

2011-09-19  Adam Roben  <aroben@apple.com>

        Windows build fix after r94575

        * JavaScriptCore.vcproj/JavaScriptCore.sln: Relinearized project dependencies. testRegExp
        now builds just before FindSafari.

2011-09-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r95466.
        http://trac.webkit.org/changeset/95466
        https://bugs.webkit.org/show_bug.cgi?id=68389

        Incorrect version of the patch. (Requested by mhahnenberg on
        #webkit).

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/JSCell.cpp:
        (JSC::JSCell::toPrimitive):
        * runtime/JSCell.h:
        (JSC::JSCell::JSValue::toPrimitive):
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::toPrimitive):
        * runtime/JSNotAnObject.h:
        * runtime/JSObject.h:
        * runtime/JSString.h:

2011-09-19  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove toPrimitive from JSCell
        https://bugs.webkit.org/show_bug.cgi?id=67875

        Reviewed by Geoffrey Garen.

        Part of the refactoring process to un-virtualize JSCell.  We move 
        all of the implicit functionality provided by the virtual toPrimitive method 
        in JSCell to be explicit in JSValue::toPrimitive and JSCell:toPrimitive while 
        also de-virtualizing JSCell::toPrimitive.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/JSCell.cpp:
        (JSC::JSCell::toPrimitive):
        * runtime/JSCell.h:

        We replace JSNotAnObject::toPrimitive with defaultValue, which it overrides from 
        JSObject.  This pushes the virtual method further down, enabling us to get rid 
        of the virtual call in JSCell.  Eventually we'll probably have to deal with this
        again, but we'll cross that bridge when we come to it.
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::defaultValue):
        * runtime/JSNotAnObject.h:
        * runtime/JSObject.h:
        * runtime/JSString.h:
        (JSC::JSValue::toPrimitive):

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

        Build fix.

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

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

        Rename NewSpace.{h,cpp} to MarkedSpace.{h,cpp}
        https://bugs.webkit.org/show_bug.cgi?id=68376

        Reviewed by Gavin Barraclough.

        Renamed the the MarkedSpace files to match new name, and
        updated the relevant references.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/Heap.h:
        * heap/MarkedSpace.cpp: Renamed from Source/JavaScriptCore/heap/NewSpace.cpp.
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::addBlock):
        (JSC::MarkedSpace::removeBlock):
        (JSC::MarkedSpace::resetAllocator):
        (JSC::MarkedSpace::canonicalizeBlocks):
        * heap/MarkedSpace.h: Renamed from Source/JavaScriptCore/heap/NewSpace.h.
        (JSC::MarkedSpace::waterMark):
        (JSC::MarkedSpace::highWaterMark):
        (JSC::MarkedSpace::setHighWaterMark):
        (JSC::MarkedSpace::sizeClassFor):
        (JSC::MarkedSpace::allocate):
        (JSC::MarkedSpace::forEachBlock):
        (JSC::MarkedSpace::SizeClass::SizeClass):
        (JSC::MarkedSpace::SizeClass::resetAllocator):
        (JSC::MarkedSpace::SizeClass::canonicalizeBlock):
        * runtime/JSCell.h:

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

        Rename NewSpace to MarkedSpace
        https://bugs.webkit.org/show_bug.cgi?id=68375

        Reviewed by Gavin Barraclough.

        Rename NewSpace to a more accurate name, and update all uses.
        This patch doesn't rename the files themselves as that will
        just make the patch appear bigger than it is.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * heap/Heap.cpp:
        (JSC::CountFunctor::TakeIfEmpty::TakeIfEmpty):
        (JSC::CountFunctor::TakeIfEmpty::operator()):
        (JSC::Heap::Heap):
        (JSC::Heap::reportExtraMemoryCostSlowCase):
        (JSC::Heap::tryAllocate):
        (JSC::Heap::allocateSlowCase):
        (JSC::Heap::collect):
        (JSC::Heap::canonicalizeBlocks):
        (JSC::Heap::resetAllocator):
        (JSC::Heap::isValidAllocation):
        (JSC::Heap::shrink):
        * heap/Heap.h:
        (JSC::Heap::markedSpace):
        (JSC::Heap::sizeClassFor):
        (JSC::Heap::allocate):
        * heap/NewSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::addBlock):
        (JSC::MarkedSpace::removeBlock):
        (JSC::MarkedSpace::resetAllocator):
        (JSC::MarkedSpace::canonicalizeBlocks):
        * heap/NewSpace.h:
        (JSC::MarkedSpace::waterMark):
        (JSC::MarkedSpace::highWaterMark):
        (JSC::MarkedSpace::setHighWaterMark):
        (JSC::MarkedSpace::sizeClassFor):
        (JSC::MarkedSpace::allocate):
        (JSC::MarkedSpace::forEachBlock):
        (JSC::MarkedSpace::SizeClass::SizeClass):
        (JSC::MarkedSpace::SizeClass::resetAllocator):
        (JSC::MarkedSpace::SizeClass::canonicalizeBlock):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitAllocateBasicJSObject):

2011-09-19  Peter Rybin  <peter.rybin@gmail.com>

        TextPosition refactoring: Merge ZeroBasedNumber and OneBasedNumber classes
        https://bugs.webkit.org/show_bug.cgi?id=63541

        Reviewed by Adam Barth.

        * parser/SourceProvider.h:
        (JSC::SourceProvider::startPosition):
        * wtf/text/TextPosition.h:
        (WTF::OrdinalNumber::fromZeroBasedInt):
        (WTF::OrdinalNumber::fromOneBasedInt):
        (WTF::OrdinalNumber::OrdinalNumber):
        (WTF::OrdinalNumber::zeroBasedInt):
        (WTF::OrdinalNumber::oneBasedInt):
        (WTF::OrdinalNumber::operator==):
        (WTF::OrdinalNumber::operator!=):
        (WTF::OrdinalNumber::first):
        (WTF::OrdinalNumber::beforeFirst):
        (WTF::TextPosition::TextPosition):
        (WTF::TextPosition::minimumPosition):
        (WTF::TextPosition::belowRangePosition):

2011-09-19  Dan Bernstein  <mitz@apple.com>

        JavaScriptCore part of [mac] WebKit contains Objective-C classes that are not prefixed with its standard prefixes
        https://bugs.webkit.org/show_bug.cgi?id=68323

        Reviewed by Sam Weinig.

        Renamed WTFMainThreadCaller to JSWTFMainThreadCaller.

        * wtf/mac/MainThreadMac.mm:
        (WTF::initializeMainThreadPlatform):
        (WTF::initializeMainThreadToProcessMainThreadPlatform):

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

        Remove direct property slot pointers from the instruction stream
        https://bugs.webkit.org/show_bug.cgi?id=68373

        Reviewed by Gavin Barraclough.

        Use an indirect load to access prototype properties rather than directly
        storing the property address in the instruction stream.  This should allow
        further optimisations in future, and also provides a 0.5% win to sunspider.

        * dfg/DFGRepatch.cpp:
        (JSC::DFG::generateProtoChainAccessStub):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetDirectOffset):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::compileGetDirectOffset):
        * runtime/JSObject.h:
        (JSC::JSObject::addressOfPropertyStorage):

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

        Remove bump allocator
        https://bugs.webkit.org/show_bug.cgi?id=68370

        Reviewed by Sam Weinig.

        Can't do anything with this allocator currently, and it's
        increasing the complexity of the GC code.  Slight progression
        on SunSpider, slight regression (undoing the original progression)
        in V8.

        * heap/Heap.cpp:
        (JSC::Heap::collect):
        * heap/Heap.h:
        * heap/NewSpace.cpp:
        (JSC::NewSpace::NewSpace):
        * heap/NewSpace.h:
        (JSC::NewSpace::allocate):
        * runtime/JSObject.cpp:
        (JSC::JSObject::allocatePropertyStorage):
        * runtime/JSObject.h:
        (JSC::JSObject::~JSObject):
        (JSC::JSObject::visitChildrenDirect):
        * runtime/StorageBarrier.h:
        (JSC::StorageBarrier::set):

2011-09-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix distcheck build
        https://bugs.webkit.org/show_bug.cgi?id=68346

        Reviewed by Philippe Normand.

        * GNUmakefile.list.am:

2011-09-19  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Fix distcheck build
        https://bugs.webkit.org/show_bug.cgi?id=68241

        Reviewed by Martin Robinson.

        * GNUmakefile.list.am:

2011-09-18  Dan Bernstein  <mitz@apple.com>

        Removed ProfilerServer.

        Reviewed by Mark Rowe.

        * JavaScriptCore.gypi:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * profiler/ProfilerServer.h: Removed.
        * profiler/ProfilerServer.mm: Removed.
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * wscript:

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

        DFG JIT should inline Math.min, Math.max, and Math.sqrt
        https://bugs.webkit.org/show_bug.cgi?id=68318

        Reviewed by Gavin Barraclough.
        
        Adds Math.min, Math.max, and Math.sqrt intrinsics. Adds support for
        a function to have an intrinsic but not a thunk generator. This is
        a 7% speed-up on access-nbody, and neutral elsewhere, mainly because
        we're still not DFG compiling the bulk of the hot code in Kraken audio
        benchmarks.

        * create_hash_table:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::handleMinMax):
        (JSC::DFG::ByteCodeParser::handleIntrinsic):
        * dfg/DFGIntrinsic.h:
        * dfg/DFGNode.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNode):
        (JSC::DFG::Propagator::fixupNode):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::hostFunctionStub):
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):

2011-09-18  Nico Weber  <thakis@chromium.org>

        Remove two files from JavaScriptCore.gypi that were removed in r95240
        https://bugs.webkit.org/show_bug.cgi?id=68327

        Unreviewed, build warning fix.

        * JavaScriptCore.gypi:

2011-09-17  Oliver Hunt  <oliver@apple.com>

        Remove special case handling of inline storage from the JIT
        https://bugs.webkit.org/show_bug.cgi?id=68319

        Reviewed by Gavin Barraclough.

        Simplify logic used for reading and writing to property storage
        by removing the special cases for inline storage.  This has no
        perf impact.

        * dfg/DFGRepatch.cpp:
        (JSC::DFG::generateProtoChainAccessStub):
        (JSC::DFG::tryBuildGetByIDList):
        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compilePutDirectOffset):
        (JSC::JIT::compileGetDirectOffset):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompileGetByIdSelfList):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::compilePutDirectOffset):
        (JSC::JIT::compileGetDirectOffset):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompileGetByIdSelfList):

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

        DFG JIT does not have full block-local CSE
        https://bugs.webkit.org/show_bug.cgi?id=68316

        Reviewed by Oliver Hunt.
        
        This adds block-local CSE to the DFG. CSE runs in the propagator just after
        type propagation. It is part of the propagator itself because it needs to
        use the propagator's internal data structures to determine which operations
        may have side effects. Because it changes the live-ranges of nodes, the
        virtual register allocator had to be moved into the propagator so that it
        runs after CSE. To ensure that the back-end knows to keep the inputs to
        any eliminated node alive for OSR, a new node type, Phantom, was introduced.
        It is a no-op but prolonges the live-range of its inputs.
        
        This is an 80% speed-up on imaging-gaussian-blur, and a 10% speed-up on
        Kraken.
        
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGAliasTracker.h: Removed.
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        (JSC::DFG::MethodCheckData::operator==):
        (JSC::DFG::MethodCheckData::operator!=):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasVirtualRegister):
        (JSC::DFG::Node::setRefCount):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::Propagator):
        (JSC::DFG::Propagator::fixpoint):
        (JSC::DFG::Propagator::propagateNode):
        (JSC::DFG::Propagator::canonicalize):
        (JSC::DFG::Propagator::computeStartIndex):
        (JSC::DFG::Propagator::startIndex):
        (JSC::DFG::Propagator::pureCSE):
        (JSC::DFG::Propagator::globalVarLoadElimination):
        (JSC::DFG::Propagator::getByValLoadElimination):
        (JSC::DFG::Propagator::getMethodLoadElimination):
        (JSC::DFG::Propagator::performSubstitution):
        (JSC::DFG::Propagator::setReplacement):
        (JSC::DFG::Propagator::performNodeCSE):
        (JSC::DFG::Propagator::performBlockCSE):
        (JSC::DFG::Propagator::localCSE):
        (JSC::DFG::Propagator::allocateVirtualRegisters):
        (JSC::DFG::propagate):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-09-16  Filip Pizlo  <fpizlo@apple.com>

        method_check should repatch itself if it finds that the new structure(s)
        are the result of transitions from the old structure(s)
        https://bugs.webkit.org/show_bug.cgi?id=68294

        Reviewed by Gavin Barraclough.
        
        Previously a patched method_check would slow-path to get_by_id. Now it
        slow-paths to method_check_update, which attempts to correct the
        method_check due to structure transitions before bailing to get_by_id.
        
        This is a 1-2% speed-up on some benchmarks and is not a slow-down
        anywhere, leading to a 0.6% speed-up on the Kraken geomean.

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::patchMethodCallProto):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        * runtime/Structure.h:
        (JSC::Structure::transitivelyTransitionedFrom):

2011-09-16  Ryosuke Niwa  <rniwa@webkit.org>

        Touch Platform.h in the hope to fix SnowLeopard Intel Release (WebKit2 Tests).

        * wtf/Platform.h:

2011-09-16  Sam Weinig  <sam@webkit.org>

        Rename APIValueWrapper type to APIValueWrapperType for consistency
        https://bugs.webkit.org/show_bug.cgi?id=68306

        Reviewed by Anders Carlsson.

        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::createStructure):
        Update name.

        * runtime/JSType.h:
        Update name and un-indent.

        * runtime/Structure.h:
        (JSC::JSCell::isAPIValueWrapper):
        Update name.

2011-09-16  Sam Weinig  <sam@webkit.org>

        Remove unused isStrictModeFunction function
        https://bugs.webkit.org/show_bug.cgi?id=68305

        Reviewed by Anders Carlsson.

        * runtime/JSObject.h:
        (JSC::JSObject::isStrictModeFunction):

2011-09-16  Sam Weinig  <sam@webkit.org>

        Cleanup JSTypeInfo a bit
        https://bugs.webkit.org/show_bug.cgi?id=68289

        Reviewed by Anders Carlsson.

        * dfg/DFGOperations.cpp:
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        Replace direct access to flags() with predicate.

        * runtime/JSObject.h:
        (JSC::JSFinalObject::createStructure):
        Pass FinalObjectType instead of using special IsJSFinalObject.

        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::TypeInfo):
        Add additional assert that you should no object should OverridesHasInstance but not have ImplementsHasInstance set.

        (JSC::TypeInfo::isFinalObject):
        Added.

        (JSC::TypeInfo::masqueradesAsUndefined):
        (JSC::TypeInfo::implementsHasInstance):
        (JSC::TypeInfo::isEnvironmentRecord):
        (JSC::TypeInfo::overridesHasInstance):
        (JSC::TypeInfo::implementsDefaultHasInstance):
        (JSC::TypeInfo::overridesGetOwnPropertySlot):
        (JSC::TypeInfo::overridesVisitChildren):
        (JSC::TypeInfo::overridesGetPropertyNames):
        (JSC::TypeInfo::prohibitsPropertyCaching):
        (JSC::TypeInfo::isSetOnFlags1):
        (JSC::TypeInfo::isSetOnFlags2):
        Replace direct bit twiddling with helper functions.

        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        Use new isFinalObject() predicate.

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

        Unsigned bit shift fails under certain conditions in 32 bit builds
        https://bugs.webkit.org/show_bug.cgi?id=68166

        Reviewed by Geoff Garen.

        The major bug here is that the slow case (which handles shifts of
        doubles) doesn't check for negative results from an unsigned shift
        (which should be unsigned, and as such can't be represented by a
        signed integer immediate).  The implementation is also flawed for
        shifts by negative shift amounts (treats as shift by zero).

        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emitRightShift):
        (JSC::JIT::emitRightShiftSlowCase):

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

        Removed undetectable style.filter.

        Reviewed by Sam Weinig.
        
        This feature was added in http://trac.webkit.org/changeset/15557 to
        support housingmaps.com. But housingmaps.com no longer needs this hack,
        we don't know of other websites that need it, and we don't know of
        any other browsers that have implemented this feature.

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSTypeInfo.h:
        * runtime/StringObjectThatMasqueradesAsUndefined.h: Removed.

2011-09-15  Sam Weinig  <sam@webkit.org>

        Prepare JSTypes for more Object subtypes
        https://bugs.webkit.org/show_bug.cgi?id=68200

        Reviewed by Gavin Barraclough.

        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::branchIfNotObject):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitJumpIfNotObject):
        * runtime/JSGlobalObject.h:
        (JSC::Structure::prototypeForLookup):
        * runtime/JSObject.h:
        (JSC::JSObject::finishCreation):
        * runtime/JSType.h:
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::type):
        (JSC::TypeInfo::isObject):
        (JSC::TypeInfo::isFinal):
        (JSC::TypeInfo::prohibitsPropertyCaching):
        * runtime/NativeErrorConstructor.h:
        (JSC::NativeErrorConstructor::finishCreation):
        * runtime/Operations.cpp:
        (JSC::jsIsObjectType):
        * runtime/Structure.cpp:
        (JSC::Structure::addPropertyTransitionToExistingStructure):
        (JSC::Structure::addPropertyTransition):
        * runtime/Structure.h:
        (JSC::Structure::isObject):
        (JSC::JSCell::isObject):

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

        Rolled back in r95201 with test failure fixed.
        
        I missed two cases of jumpSlowToHot in rshift -- these cases need to be
        sure to initialize regT1 to the int tag, since it will otherwise hold
        the top 32 bits of a double.

        * jit/JIT.h:
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_op_lshift):
        (JSC::JIT::emitRightShift):
        (JSC::JIT::emitRightShiftSlowCase):
        (JSC::JIT::emit_op_bitand):
        (JSC::JIT::emit_op_bitor):
        (JSC::JIT::emit_op_bitxor):
        (JSC::JIT::emit_op_bitnot):
        (JSC::JIT::emit_op_post_inc):
        (JSC::JIT::emit_op_post_dec):
        (JSC::JIT::emit_op_pre_inc):
        (JSC::JIT::emit_op_pre_dec):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitStoreAndMapInt32):

2011-09-16  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed Windows build fix after 95318.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-09-16  Adam Roben  <aroben@apple.com>

        Windows build fix after r95310

        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Added include\private\JavaScriptCore to the
        include path so DFGIntrinsic.h can be found.

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

        Rationalize JSObject::putDirect* methods
        https://bugs.webkit.org/show_bug.cgi?id=68274

        Reviewed by Sam Weinig.
        
        Delete the *Function variants. These are overall inefficient,
        in the way they get the name back from the function rather
        than just passing it in.

        * JavaScriptCore.exp:
        * jsc.cpp:
        (GlobalObject::finishCreation):
        (GlobalObject::addFunction):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::addFunctionProperties):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
        (JSC::JSObject::putWithAttributes):
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::defineSetter):
        * runtime/JSObject.h:
        (JSC::JSObject::putDirect):
        (JSC::JSObject::putDirectWithoutTransition):
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
        * runtime/Lookup.h:
        (JSC::lookupPut):

2011-09-16  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed build fix for Windows.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:

2011-09-16  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed build fix for non-DFG builds.

        * runtime/Executable.h:
        (JSC::NativeExecutable::finishCreation):

2011-09-16  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT should inline Math.abs
        https://bugs.webkit.org/show_bug.cgi?id=68227

        Reviewed by Oliver Hunt.
        
        This adds the ability to track intrinsic functions throughout the
        host function infrastructure, so that the DFG can easily query
        whether or not a call's target is intrinsic, and if so, which
        intrinsic it is.
        
        On top of this, it adds Math.abs intrinsics to DFG. Call(Math.abs)
        is transformed into ValueToNumber<-ArithAbs nodes. These nodes
        then get optimized using the usual tricks.
        
        Also had to make a completely unrelated change to
        DateInstanceCache.h in order to fix a preexisting alphabetical
        sorting problem in JSGlobalData.h
        
        This results in a big win in imaging-gaussian-blur: 61% faster
        than before. The net win on Kraken is around 13%.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * create_hash_table:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::isFunctionConstant):
        (JSC::DFG::Graph::valueOfFunctionConstant):
        * dfg/DFGIntrinsic.h: Added.
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::isFunctionConstant):
        (JSC::DFG::JITCodeGenerator::valueOfFunctionConstant):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::isFunctionConstant):
        (JSC::DFG::JITCompiler::valueOfFunctionConstant):
        * dfg/DFGNode.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNode):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::hostFunctionStub):
        * jit/JITStubs.h:
        * runtime/DateInstanceCache.h:
        * runtime/Executable.cpp:
        (JSC::ExecutableBase::intrinsic):
        (JSC::NativeExecutable::intrinsic):
        * runtime/Executable.h:
        (JSC::NativeExecutable::create):
        (JSC::NativeExecutable::finishCreation):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::getHostFunction):
        * runtime/JSGlobalData.h:
        * runtime/Lookup.cpp:
        (JSC::HashTable::createTable):
        (JSC::setUpStaticFunctionSlot):
        * runtime/Lookup.h:
        (JSC::HashEntry::initialize):
        (JSC::HashEntry::intrinsic):

2011-09-16  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION: Reproducible crash below SlotVisitor::harvestWeakReferences
        using Domino's online ordering
        https://bugs.webkit.org/show_bug.cgi?id=68220

        Reviewed by Oliver Hunt.
        
        Weak handle processing can result in new objects being marked, which
        results in new WeakReferencesHarvesters being added. But weak
        reference harvesters are only processed before weak handle processing,
        so there's the risk that a weak reference harvester will persist
        until the next collection, by which time it may have been deleted.

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

2011-09-16  Csaba Osztrogonác  <ossy@webkit.org>

        REGRESSION(r95201): It made two tests fail
        https://bugs.webkit.org/show_bug.cgi?id=68230

        Unreviewed rolling out r95201.

        * jit/JIT.h:
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_op_lshift):
        (JSC::JIT::emitRightShift):
        (JSC::JIT::emit_op_bitand):
        (JSC::JIT::emit_op_bitor):
        (JSC::JIT::emit_op_bitxor):
        (JSC::JIT::emit_op_bitnot):
        (JSC::JIT::emit_op_post_inc):
        (JSC::JIT::emit_op_post_dec):
        (JSC::JIT::emit_op_pre_inc):
        (JSC::JIT::emit_op_pre_dec):
        * jit/JITInlineMethods.h:

2011-09-15  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not optimize method_check
        https://bugs.webkit.org/show_bug.cgi?id=68215

        Reviewed by Oliver Hunt.
        
        MethodCallLinkInfo and StructureStubInfo are now searchable by
        bytecodeIndex, so that DFG::ByteCodeParser can use that information
        to determine how to optimize GetMethod.
        
        A new node op has been added to DFG: CheckMethod. This is a variant
        of GetMethod that has been optimized for the case that GetMethod
        always takes the fast path. CheckMethod results in only a very
        small amount of code (two loads and two branches in the worst case,
        one load and one branch in the best case). CheckMethod behaves as
        if it were a constant.  
        
        Introduced the notion that a DFG node that is not JSConstant
        behaves as a constant. CheckMethod uses this functionality.
        
        This is a 3% speed-up on Kraken, and a small speed-up on V8.
        Appears to be neutral on SunSpider.

        * bytecode/CodeBlock.h:
        (JSC::getStructureStubInfoBytecodeIndex):
        (JSC::getMethodCallLinkInfoBytecodeIndex):
        * bytecode/PredictedType.cpp:
        (JSC::predictionFromCell):
        (JSC::predictionFromValue):
        * bytecode/PredictedType.h:
        * bytecode/StructureStubInfo.h:
        * dfg/DFGAliasTracker.h:
        (JSC::DFG::AliasTracker::recordGetMethod):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::getMethodCheckPrediction):
        (JSC::DFG::Graph::getPrediction):
        (JSC::DFG::Graph::isConstant):
        (JSC::DFG::Graph::isJSConstant):
        (JSC::DFG::Graph::valueOfJSConstant):
        (JSC::DFG::Graph::valueOfInt32Constant):
        (JSC::DFG::Graph::valueOfNumberConstant):
        (JSC::DFG::Graph::valueOfBooleanConstant):
        (JSC::DFG::Graph::valueOfJSConstantNode):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::fillInteger):
        (JSC::DFG::JITCodeGenerator::fillDouble):
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        (JSC::DFG::JITCodeGenerator::isKnownNotInteger):
        (JSC::DFG::JITCodeGenerator::isKnownNotNumber):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::silentSpillFPR):
        (JSC::DFG::JITCodeGenerator::silentFillGPR):
        (JSC::DFG::JITCodeGenerator::silentFillFPR):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::fillNumericToDouble):
        (JSC::DFG::JITCompiler::fillInt32ToInteger):
        (JSC::DFG::JITCompiler::fillToJS):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasConstant):
        (JSC::DFG::Node::hasIdentifier):
        (JSC::DFG::Node::hasMethodCheckData):
        (JSC::DFG::Node::methodCheckDataIndex):
        (JSC::DFG::Node::valueOfJSConstant):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNode):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        (JSC::PropertyStubCompilationInfo::PropertyStubCompilationInfo):
        (JSC::MethodCallCompilationInfo::MethodCallCompilationInfo):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::emit_op_put_by_id):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::emit_op_put_by_id):
        * runtime/JSCell.h:
        (JSC::JSCell::JSCell::structureAddress):

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

        Rename ENABLE(DATABASE) to ENABLE(SQL_DATABASE)
        https://bugs.webkit.org/show_bug.cgi?id=68205

        Reviewed by Eric Seidel.

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

2011-09-15  Mark Hahnenberg  <mhahnenberg@apple.com>

        Unzip initialization lists and constructors in JSCell hierarchy (7/7)
        https://bugs.webkit.org/show_bug.cgi?id=68122

        Reviewed by Geoffrey Garen.

        Completed the seventh and final level of the refactoring to add finishCreation() 
        methods to all classes within the JSCell hierarchy with non-trivial 
        constructor bodies.

        JSCallbackObject was missed in previous patches due to the fact that 
        it's non-obvious (at least to my script) that it is in the JSCell hierarchy, so 
        this is just a bit of retroactive cleanup.

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::create):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::JSCallbackObject):

2011-09-15  Filip Pizlo  <fpizlo@apple.com>

        The DFG non-speculative JIT is no longer used and should be removed.
        https://bugs.webkit.org/show_bug.cgi?id=68177

        Reviewed by Geoffrey Garen.
        
        This removes the non-speculative JIT and everything that relied on it,
        including the ability to turn on DFG but not tiered compilation the,
        ability to perform speculation failure into non-speculative JIT code,
        and the ability to statically terminate speculation.

        * GNUmakefile.list.am:
        * JavaScriptCore.pro:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitLoopHint):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::getStrongPrediction):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * dfg/DFGGenerationInfo.h:
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::predictArgumentTypes):
        * dfg/DFGJITCodeGenerator.cpp:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::linkOSRExits):
        (JSC::DFG::JITCompiler::compileBody):
        * dfg/DFGJITCompiler.h:
        * dfg/DFGNode.h:
        * dfg/DFGNonSpeculativeJIT.cpp: Removed.
        * dfg/DFGNonSpeculativeJIT.h: Removed.
        * dfg/DFGOSREntry.cpp:
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGPropagator.cpp:
        * dfg/DFGPropagator.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::osrExits):
        (JSC::DFG::SpeculativeJIT::speculationRecovery):
        (JSC::DFG::SpeculativeJIT::speculationCheck):
        (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        * jit/JITCode.h:
        (JSC::JITCode::bottomTierJIT):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::~JSGlobalData):
        * runtime/JSGlobalData.h:
        * wtf/Platform.h:

2011-09-15  Eric Seidel  <eric@webkit.org>

        Remove ENABLE(SVG_AS_IMAGE) since all major ports have it on by default
        https://bugs.webkit.org/show_bug.cgi?id=68182

        Reviewed by Adam Barth.

        * Configurations/FeatureDefines.xcconfig:

2011-09-15  Filip Pizlo  <fpizlo@apple.com>

        DFG speculative JIT sometimes asserts that a value is not a number
        even when it doesn't know anything about the number
        https://bugs.webkit.org/show_bug.cgi?id=68189

        Reviewed by Oliver Hunt.

        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::GenerationInfo::isUnknownJS):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::isKnownNotNumber):

2011-09-15  Filip Pizlo  <fpizlo@apple.com>

        All of the functionality in the non-speculative JIT should be
        available to the speculative JIT via helper methods
        https://bugs.webkit.org/show_bug.cgi?id=68186

        Reviewed by Oliver Hunt.
        
        Stole all of the goodness from NonSpeculativeJIT and placed it
        in JITCodeGenerator.  Left all of the badness (i.e. subtle code
        duplication with SpeculativeJIT, etc).  This is in preparation
        for removing the NonSpeculativeJIT entirely, but having its
        goodness available for reuse in the SpeculativeJIT if necessary.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToNumber):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeValueToInt32):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeUInt32ToNumber):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeKnownConstantArithOp):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeBasicArithOp):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeArithMod):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeCheckHasInstance):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeInstanceOf):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::nonSpeculativeAdd):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeArithSub):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGNonSpeculativeJIT.h:

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

        Unreviewed, rolling out r95167.
        http://trac.webkit.org/changeset/95167
        https://bugs.webkit.org/show_bug.cgi?id=68191

        Patch needs further work. (Requested by mhahnenberg on
        #webkit).

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/JSCell.cpp:
        (JSC::JSCell::toBoolean):
        * runtime/JSCell.h:
        (JSC::JSCell::JSValue::toBoolean):
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::toBoolean):
        * runtime/JSNotAnObject.h:
        * runtime/JSObject.h:
        * runtime/JSString.h:
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::toBoolean):

2011-09-15  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed build fix for platforms that expect a linkable symbol
        for primitive static const's.

        * bytecode/CodeBlock.h:
        * jit/JIT.cpp:
        (JSC::JIT::emitOptimizationCheck):

2011-09-15  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed build fix for assertion on existence of alternative
        CodeBlock.

        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::predictArgumentTypes):

2011-09-14  Filip Pizlo  <fpizlo@apple.com>

        Value profiles collect no information for global variables
        https://bugs.webkit.org/show_bug.cgi?id=68143

        Reviewed by Geoffrey Garen.
        
        17% speed-up on string-fasta.  Neutral elsewhere.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getStrongPrediction):
        (JSC::DFG::ByteCodeParser::stronglyPredict):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_global_var):

2011-09-15  Eric Seidel  <eric@webkit.org>

        Remove ENABLE_SVG_ANIMATION as all major ports have it on by default
        https://bugs.webkit.org/show_bug.cgi?id=68022

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

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

        Ooops, revert accidentally commited unreviewed changes.

        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jtrue):
        * jit/JSInterfaceJIT.h:
        * runtime/JSValue.h:

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

        Unreviewed, rolling out r95163.
        http://trac.webkit.org/changeset/95163
        https://bugs.webkit.org/show_bug.cgi?id=68180

        [Qt] The QT_GCC_X variables were removed in Qt5 by accident.
        (Requested by darktears on #webkit).

        * JavaScriptCore.pro:

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

        Windows build fix p1.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jtrue):
        * jit/JSInterfaceJIT.h:
        * runtime/JSValue.h:

2011-09-14  Filip Pizlo  <fpizlo@apple.com>

        Tiered compilation should be enabled by default on platforms
        that support the DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=68136

        Reviewed by Sam Weinig.
        
        Neutral on SunSpider, 4% speed-up on V8, and 19% speed-up on
        Kraken.  Large progressions on some benchmarks, including
        3x on imaging-desaturate.

        * wtf/Platform.h:

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

        devirtualize preventExtensions
        https://bugs.webkit.org/show_bug.cgi?id=68176

        Reviewed by Oliver Hunt.

        This is virtual due to problems in JSFunction putting the prototype
        property, but we can fix this problem a different way, just setting
        the checkReadOnly flag to false in the put.

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertySlot):
        * runtime/JSFunction.h:
        * runtime/JSObject.h:

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

        Value chaining for JSValue32_64 bitops.

        Reviewed by Sam Weinig.
        
        SunSpider says 2.3% faster, v8 ~1% faster (mostly due to crypto).

        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitStoreAndMapInt32): New int32 helper function for stores
        that can chain their results, which is the common case.

        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_op_lshift):
        (JSC::JIT::emitRightShift):
        (JSC::JIT::emit_op_bitand):
        (JSC::JIT::emit_op_bitor):
        (JSC::JIT::emit_op_bitxor):
        (JSC::JIT::emit_op_bitnot):
        (JSC::JIT::emit_op_pre_inc):
        (JSC::JIT::emit_op_pre_dec): Deployed new function.
        (JSC::JIT::emit_op_post_inc):
        (JSC::JIT::emit_op_post_dec): Had to reorder these functions so they
        computed their result values last, to make them elligible for chaining.

2011-09-15  Adam Roben  <aroben@apple.com>

        Clang build fix after r95172

        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::shouldSpeculateFinalObject):
        (JSC::DFG::SpeculativeJIT::shouldSpeculateArray):
        Added parentheses to make precendence clear.

2011-09-14  Filip Pizlo  <fpizlo@apple.com>

        DFG does not speculate aggressively enough on comparisons
        https://bugs.webkit.org/show_bug.cgi?id=68138

        Reviewed by Oliver Hunt.
        
        This is a 75% speed-up on Kraken/ai-astar.  It's a 1% win on
        V8 and an 8.5% win on Kraken.  Neutral on SunSpider.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleObjectEquality):
        (JSC::DFG::SpeculativeJIT::compileObjectEquality):
        (JSC::DFG::SpeculativeJIT::compare):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::shouldSpeculateFinalObject):
        (JSC::DFG::SpeculativeJIT::shouldSpeculateArray):
        (JSC::DFG::SpeculativeJIT::shouldSpeculateObject):
        (JSC::DFG::SpeculativeJIT::shouldSpeculateCell):

2011-09-14  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not leverage integer speculations on branches
        https://bugs.webkit.org/show_bug.cgi?id=68140

        Reviewed by Oliver Hunt.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::isStrictInt32):
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        [n]stricteq code is bogus in JSValue32_64 JIT
        https://bugs.webkit.org/show_bug.cgi?id=68141

        Reviewed by Sam Weinig.

        The code tries to check for both ints or cells, but this check also
        catches cases where values that are undefined, null, etc (probably
        was incorrectly assuming cell was the 2nd highest tag?).

        Also, there is no need not to handle int on the fast path.
        stricteq is just a case of comparing the payloads, if we:
            * handle cases of differing tags on a slow path
            * handle doubles a slow path
            * handle both-are-string on a slow path

        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::emitSlow_op_stricteq):
        (JSC::JIT::emitSlow_op_nstricteq):

2011-09-14  Mark Hahnenberg  <mhahnenberg@apple.com>

        Make JSCell::toBoolean non-virtual
        https://bugs.webkit.org/show_bug.cgi?id=67727

        Reviewed by Sam Weinig.

        JSCell::toBoolean now manually performs the toBoolean check for objects and strings (where 
        before it was simply virtual and would crash if its implementation was called). 
        Its descendants in JSObject and JSString have also been made non-virtual.  JSCell now
        explicitly covers all cases of toBoolean, so having a virtual implementation of 
        JSCell::toBoolean is no longer necessary.  This is part of a larger process of un-virtualizing JSCell.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/JSCell.cpp:
        * runtime/JSCell.h:
        * runtime/JSNotAnObject.cpp:
        * runtime/JSNotAnObject.h:
        * runtime/JSObject.h:
        * runtime/JSString.h:
        (JSC::JSCell::toBoolean):
        (JSC::JSValue::toBoolean):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:

2011-09-14  Alexis Menard  <alexis.menard@openbossa.org>

        [Qt] Replace QT_GCC_X as they don't exist in Qt5 anymore.
        https://bugs.webkit.org/show_bug.cgi?id=68114

        Reviewed by Kenneth Rohde Christiansen.

        Use the new GCC_X variables defined in WebKit.pri to replace
        the usage of QT_GCC_X.

        * JavaScriptCore.pro:

2011-09-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r95145.
        http://trac.webkit.org/changeset/95145
        https://bugs.webkit.org/show_bug.cgi?id=68139

        The GTK+ build is working now, so revert this trial build fix.
        (Requested by mrobinson on #webkit).

        * GNUmakefile.list.am:

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

        Port MachineStackMarker to Windows ARM and MIPS
        https://bugs.webkit.org/show_bug.cgi?id=68068

        Reviewed by Geoffrey Garen.

        Use the correct memeber of the CONTEXT struct for the stackpointer for CPU(ARM) and CPU(MIPS).
        Only query CONTEXT_INTEGER and CONTEXT_CONTROL, since CONTEXT_SEGMENTS isn't defined for
        CPU(ARM) and CPU(MIPS) and the stackpointer is defined in the CONTEXT_CONTROL section for
        CPU(ARM), CPU(X86) and CPU(X86_64) and in the CONTEXT_INTEGER section for CPU(MIPS).

        * heap/MachineStackMarker.cpp:
        (JSC::getPlatformThreadRegisters):
        (JSC::otherThreadStackPointer):

2011-09-12  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT always speculates that ValueAdd is a numeric addition
        https://bugs.webkit.org/show_bug.cgi?id=67956

        Reviewed by Geoffrey Garen.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::isKnownNotNumber):
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
        (JSC::DFG::NonSpeculativeJIT::basicArithOp):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::shouldSpeculateNumber):

2011-09-14  Anders Carlsson  <andersca@apple.com>

        Stop building BinarySemaphore to see if that's what's breaking the GTK+ build.

        * GNUmakefile.list.am:

2011-09-14  Anders Carlsson  <andersca@apple.com>

        This is getting old. Yet another build fix attempt.

        * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:

2011-09-14  Anders Carlsson  <andersca@apple.com>

        Yet another build fix attempt.

        * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:

2011-09-14  Anders Carlsson  <andersca@apple.com>

        How I &quot;love&quot; Visual Studio...

        Try to fix build again.

        * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:

2011-09-14  Anders Carlsson  <andersca@apple.com>

        Try to fix Windows build.

        * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops:

2011-09-14  Anders Carlsson  <andersca@apple.com>

        Add BinarySemaphore class from WebKit2 to WTF
        https://bugs.webkit.org/show_bug.cgi?id=68132

        Reviewed by Sam Weinig.

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        Update build systems.

        * wtf/threads: Added.
        * wtf/threads/BinarySemaphore.cpp: Copied from Source/WebKit2/Platform/CoreIPC/BinarySemaphore.cpp.
        * wtf/threads/BinarySemaphore.h: Copied from Source/WebKit2/Platform/CoreIPC/BinarySemaphore.h.
        * wtf/threads/win: Added.
        * wtf/threads/win/BinarySemaphoreWin.cpp: Copied from Source/WebKit2/Platform/CoreIPC/win/BinarySemaphoreWin.cpp.

2011-09-14  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed build fix for Interpreter.

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

2011-09-14  Anders Carlsson  <andersca@apple.com>

        Add wtf/threads and wtf/threads/win, so we can be sure that the EWS
        bots can correctly build the patch in https://bugs.webkit.org/show_bug.cgi?id=68132

        Rubber-stamped by Sam Weinig.

        * wtf/threads: Added.
        * wtf/threads/win: Added.

2011-09-14  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT should not speculate integer if the value is always going to be
        used as a double anyway
        https://bugs.webkit.org/show_bug.cgi?id=68127

        Reviewed by Oliver Hunt.
        
        Added a ValueToDouble node, which is a variant of ValueToNumber that
        hints that it will only be used as a double and never as an integer.
        Thus, it turns off integer speculation even if the value profiler
        told us that the value source is an int. The logic for converting a
        ValueToNumber into a ValueToDouble is found in Propagator.
        
        This appears to be a 22% speed-up in imaging-darkroom.

        * dfg/DFGNode.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::fixpoint):
        (JSC::DFG::Propagator::toDouble):
        (JSC::DFG::Propagator::fixupNode):
        (JSC::DFG::Propagator::fixup):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):

2011-09-14  Filip Pizlo  <fpizlo@apple.com>

        Tiered compilation heuristics do not account for value profile fullness
        https://bugs.webkit.org/show_bug.cgi?id=68116

        Reviewed by Oliver Hunt.
        
        Tiered compilation avoids invoking the DFG JIT if it finds that value
        profiles contain insufficient information. Instead, it produces a
        prediction from the current value profile, and then clears the value
        profile. This allows the value profile to heat up from scratch for
        some number of additional executions. The new profiles will then be
        merged with the previous prediction. Once the amount of information
        in predictions is enough according to heuristics in CodeBlock.cpp,
        DFG optimization is allowed to proceed.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::visitAggregate):
        (JSC::CodeBlock::visitWeakReferences):
        (JSC::CodeBlock::shouldOptimizeNow):
        (JSC::CodeBlock::dumpValueProfiles):
        * bytecode/CodeBlock.h:
        * bytecode/PredictedType.cpp:
        (JSC::predictionToString):
        * bytecode/PredictedType.h:
        * bytecode/ValueProfile.cpp: Added.
        (JSC::ValueProfile::computeStatistics):
        (JSC::ValueProfile::computeUpdatedPrediction):
        * bytecode/ValueProfile.h:
        (JSC::ValueProfile::ValueProfile):
        (JSC::ValueProfile::classInfo):
        (JSC::ValueProfile::numberOfSamples):
        (JSC::ValueProfile::totalNumberOfSamples):
        (JSC::ValueProfile::isLive):
        (JSC::ValueProfile::numberOfInt32s):
        (JSC::ValueProfile::numberOfDoubles):
        (JSC::ValueProfile::numberOfBooleans):
        (JSC::ValueProfile::dump):
        (JSC::getValueProfileBytecodeOffset):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::stronglyPredict):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::predictArgumentTypes):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
        * jit/JIT.cpp:
        (JSC::JIT::emitOptimizationCheck):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitValueProfilingSite):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):

2011-09-14  Filip Pizlo  <fpizlo@apple.com>

        DFG should not speculate that the child of LogicalNot is a boolean if
        predictions tell us otherwise
        https://bugs.webkit.org/show_bug.cgi?id=68118

        Reviewed by Geoffrey Garen.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativeLogicalNot):
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-09-14  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed build fix.  Turn off tiered compilation.

        * wtf/Platform.h:

2011-09-13  Filip Pizlo  <fpizlo@apple.com>

        Prediction tracking is not precise enough
        https://bugs.webkit.org/show_bug.cgi?id=67993

        Reviewed by Oliver Hunt.
        
        Added a richer set of type predictions, including JSFinalObject, JSString,
        object that is not a JSFinalObject or JSArray (ObjectOther), some object
        but we don't or care know what kind (SomeObject), definitely an object,
        cell that is not an object or JSString, an value that is none of the above
        (so either Undefined or Null). Made the propagator and value profiler work
        with the new types.
        
        Performance is neutral, because the DFG JIT does not take advantage of this
        new knowledge yet.
        
        In the process of writing predictionToString() (which is now considerably
        more complex) I decided to finally add a BoundsCheckedPointer, which
        should come in handy in other places, like at least the OSR scratch buffer
        and the CompactJITCodeMap. It's great for cases where you want to
        do pointer arithmetic, you want to have assertions about the
        pointer not going out of bounds, but you don't want to write those
        assertions yourself.
        
        This also required refactoring inherits(), since the ValueProfiler may
        want to do the equivalent of inherits() but given two ClassInfo's.

        * GNUmakefile.list.am:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/PredictedType.cpp: Added.
        (JSC::predictionToString):
        (JSC::makePrediction):
        (JSC::predictionFromValue):
        * bytecode/PredictedType.h:
        (JSC::isCellPrediction):
        (JSC::isObjectPrediction):
        (JSC::isFinalObjectPrediction):
        (JSC::isStringPrediction):
        (JSC::mergePredictions):
        * bytecode/ValueProfile.h:
        (JSC::ValueProfile::numberOfObjects):
        (JSC::ValueProfile::numberOfFinalObjects):
        (JSC::ValueProfile::numberOfStrings):
        (JSC::ValueProfile::probabilityOfObject):
        (JSC::ValueProfile::probabilityOfFinalObject):
        (JSC::ValueProfile::probabilityOfString):
        (JSC::ValueProfile::dump):
        (JSC::ValueProfile::Statistics::Statistics):
        (JSC::ValueProfile::computeStatistics):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::stronglyPredict):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        (JSC::DFG::Graph::predictArgumentTypes):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::predict):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::propagateNode):
        * runtime/ClassInfo.h:
        (JSC::ClassInfo::isSubClassOf):
        * runtime/JSObject.h:
        (JSC::JSCell::inherits):
        * wtf/BoundsCheckedPointer.h: Added.
        (WTF::BoundsCheckedPointer::BoundsCheckedPointer):
        (WTF::BoundsCheckedPointer::operator=):
        (WTF::BoundsCheckedPointer::operator+=):
        (WTF::BoundsCheckedPointer::operator-=):
        (WTF::BoundsCheckedPointer::operator+):
        (WTF::BoundsCheckedPointer::operator-):
        (WTF::BoundsCheckedPointer::operator++):
        (WTF::BoundsCheckedPointer::operator--):
        (WTF::BoundsCheckedPointer::operator<):
        (WTF::BoundsCheckedPointer::operator<=):
        (WTF::BoundsCheckedPointer::operator>):
        (WTF::BoundsCheckedPointer::operator>=):
        (WTF::BoundsCheckedPointer::operator==):
        (WTF::BoundsCheckedPointer::operator!=):
        (WTF::BoundsCheckedPointer::operator!):
        (WTF::BoundsCheckedPointer::get):
        (WTF::BoundsCheckedPointer::operator*):
        (WTF::BoundsCheckedPointer::operator[]):
        (WTF::BoundsCheckedPointer::strcat):
        (WTF::BoundsCheckedPointer::validate):
        * wtf/CMakeLists.txt:

2011-09-14  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Win32 builds with threads turned off
        https://bugs.webkit.org/show_bug.cgi?id=67864

        Reviewed by Geoffrey Garen.

        * JavaScriptCore.pri: Link pthread library on Windows platform.
        * wtf/Platform.h: Enable multiple threads.

2011-09-14  Mark Hahnenberg  <mhahnenberg@apple.com>

        Unzip initialization lists and constructors in JSCell hierarchy (6/7)
        https://bugs.webkit.org/show_bug.cgi?id=67692

        Reviewed by Geoffrey Garen.

        Completed the sixth level of the refactoring to add finishCreation() 
        methods to all classes within the JSCell hierarchy with non-trivial 
        constructor bodies.

        This primarily consists of pushing the calls to finishCreation() down 
        into the constructors of the subclasses of the fifth level of the hierarchy 
        as well as pulling the finishCreation() calls out into the class's corresponding
        create() method if it has one.  Doing both simultaneously allows us to 
        maintain the invariant that the finishCreation() method chain is called exactly 
        once during the creation of an object, since calling it any other number of 
        times (0, 2, or more) will cause an assertion failure.

        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::JSCallbackFunction):
        * API/JSCallbackFunction.h:
        (JSC::JSCallbackFunction::create):
        * jsc.cpp:
        (GlobalObject::create):
        (GlobalObject::GlobalObject):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        * runtime/ArrayConstructor.h:
        (JSC::ArrayConstructor::create):
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::BooleanConstructor):
        * runtime/BooleanConstructor.h:
        (JSC::BooleanConstructor::create):
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        * runtime/BooleanPrototype.h:
        (JSC::BooleanPrototype::create):
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        * runtime/DateConstructor.h:
        (JSC::DateConstructor::create):
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::DatePrototype):
        * runtime/DatePrototype.h:
        (JSC::DatePrototype::create):
        * runtime/Error.cpp:
        (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction):
        (JSC::StrictModeTypeErrorFunction::create):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        * runtime/ErrorConstructor.h:
        (JSC::ErrorConstructor::create):
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::FunctionConstructor):
        * runtime/FunctionConstructor.h:
        (JSC::FunctionConstructor::create):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::FunctionPrototype):
        * runtime/FunctionPrototype.h:
        (JSC::FunctionPrototype::create):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * runtime/NativeErrorConstructor.h:
        (JSC::NativeErrorConstructor::create):
        * runtime/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::NativeErrorPrototype):
        (JSC::NativeErrorPrototype::finishCreation):
        * runtime/NativeErrorPrototype.h:
        (JSC::NativeErrorPrototype::create):
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::NumberConstructor):
        * runtime/NumberConstructor.h:
        (JSC::NumberConstructor::create):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        * runtime/NumberPrototype.h:
        (JSC::NumberPrototype::create):
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        * runtime/ObjectConstructor.h:
        (JSC::ObjectConstructor::create):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::create):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::RegExpPrototype):
        * runtime/RegExpPrototype.h:
        (JSC::RegExpPrototype::create):
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        * runtime/StringConstructor.h:
        (JSC::StringConstructor::create):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::create):
        (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        * runtime/StringPrototype.h:
        (JSC::StringPrototype::create):

2011-09-13  Eric Seidel  <eric@webkit.org>

        Remove ENABLE_SVG_USE as <use> is required by HTML5
        https://bugs.webkit.org/show_bug.cgi?id=68019

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2011-09-14  Iain Merrick  <husky@google.com>

        HashTraits.h should include template specialization for WTF::String
        https://bugs.webkit.org/show_bug.cgi?id=67851

        Ensure that the template specialization for HashTraits<String> is always
        picked up. (Previously it was possible to include HashSet and String but
        not the correct HashTraits, so you would get an inefficient template
        instantiation.)

        Reviewed by Darin Adler.

        * wtf/HashTraits.h:
        * wtf/text/StringHash.h:

2011-09-13  Filip Pizlo  <fpizlo@apple.com>

        SpeculativeJIT::shouldSpeculateInteger(NodeIndex, NodeIndex) should
        return false if either node can be double
        https://bugs.webkit.org/show_bug.cgi?id=67985

        Reviewed by Geoffrey Garen.
        
        This is a 17% speed-up on 3d-cube.
        
        This required allowing us to check if a constant is double but not
        integer, and making the shouldSpeculateInteger() check test for
        any hints of doubly-ness in its operands. This also required
        changing some terminology: previously "isDouble" often meant
        "isDouble or isInt32".  Now "isDouble" means exactly what the name
        suggests, and "isNumber" means "isDouble or isInt32".

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::toNumber):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::isJSFormat):
        (JSC::DFG::isJSInteger):
        (JSC::DFG::isJSDouble):
        (JSC::DFG::isJSCell):
        (JSC::DFG::isJSBoolean):
        (JSC::DFG::GenerationInfo::isJSFormat):
        (JSC::DFG::GenerationInfo::isJSInteger):
        (JSC::DFG::GenerationInfo::isJSDouble):
        (JSC::DFG::GenerationInfo::isJSCell):
        (JSC::DFG::GenerationInfo::isJSBoolean):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::isNumberConstant):
        (JSC::DFG::Graph::valueOfNumberConstant):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::fillInteger):
        (JSC::DFG::JITCodeGenerator::fillDouble):
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        (JSC::DFG::JITCodeGenerator::isKnownInteger):
        (JSC::DFG::JITCodeGenerator::isKnownNumeric):
        (JSC::DFG::JITCodeGenerator::isKnownCell):
        (JSC::DFG::JITCodeGenerator::isKnownNotInteger):
        (JSC::DFG::JITCodeGenerator::isKnownBoolean):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::silentFillFPR):
        (JSC::DFG::JITCodeGenerator::isNumberConstant):
        (JSC::DFG::JITCodeGenerator::valueOfNumberConstant):
        (JSC::DFG::JITCodeGenerator::initConstantInfo):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::fillNumericToDouble):
        (JSC::DFG::JITCompiler::fillToJS):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::isNumberConstant):
        (JSC::DFG::JITCompiler::valueOfNumberConstant):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::isDoubleConstant):
        (JSC::DFG::Node::isNumberConstant):
        (JSC::DFG::Node::valueOfNumberConstant):
        (JSC::DFG::Node::hasNumberResult):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::isInteger):
        (JSC::DFG::SpeculativeJIT::shouldSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::shouldNotSpeculateInteger):
        (JSC::DFG::SpeculativeJIT::shouldSpeculateInteger):

2011-09-13  Anders Carlsson  <andersca@apple.com>

        Disable C++ exceptions when building with clang
        https://bugs.webkit.org/show_bug.cgi?id=68031
        <rdar://problem/9556880>

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig:

2011-09-13  Eric Seidel  <eric@webkit.org>

        Remove ENABLE_SVG_FOREIGN_OBJECT as it is a required part of HTML5
        https://bugs.webkit.org/show_bug.cgi?id=68018

        Reviewed by Ryosuke Niwa.

        * Configurations/FeatureDefines.xcconfig:

2011-09-13  Sam Weinig  <sam@webkit.org>

        Object.getPrototypeOf should use JSValue::get()
        https://bugs.webkit.org/show_bug.cgi?id=67973

        Reviewed by Darin Adler.

        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorGetPrototypeOf):
        Pipe through JSValue::get() to allow overrides.

2011-09-12  Filip Pizlo  <fpizlo@apple.com>

        JavaScriptCore does not have baseline->speculative OSR
        https://bugs.webkit.org/show_bug.cgi?id=67920

        Reviewed by Oliver Hunt.
        
        This adds the ability to on-stack-replace (OSR) from code that is
        running hot in the old JIT to code compiled by the new JIT.  This
        ensures that long-running loops benefit from DFG optimization.
        It also ensures that if code experiences a speculation failure
        in DFG code, it has an opportunity to reenter the DFG once every
        1,000 loop iterations or so.
        
        This results in a 2.88x speed-up on Kraken/imaging-desaturate,
        and is a pure win on the main three benchmark suites (SunSpider,
        V8, Kraken), when tiered compilation is enabled.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::CodeBlock):
        (JSC::ProgramCodeBlock::compileOptimized):
        (JSC::EvalCodeBlock::compileOptimized):
        (JSC::FunctionCodeBlock::compileOptimized):
        * bytecode/CodeBlock.h:
        * bytecode/Opcode.h:
        * bytecode/PredictedType.h: Added.
        (JSC::isCellPrediction):
        (JSC::isArrayPrediction):
        (JSC::isInt32Prediction):
        (JSC::isDoublePrediction):
        (JSC::isNumberPrediction):
        (JSC::isBooleanPrediction):
        (JSC::isStrongPrediction):
        (JSC::predictionToString):
        (JSC::mergePredictions):
        (JSC::mergePrediction):
        (JSC::makePrediction):
        * bytecode/PredictionTracker.h: Added.
        (JSC::operandIsArgument):
        (JSC::PredictionSlot::PredictionSlot):
        (JSC::PredictionTracker::PredictionTracker):
        (JSC::PredictionTracker::initializeSimilarTo):
        (JSC::PredictionTracker::copyLocalsFrom):
        (JSC::PredictionTracker::numberOfArguments):
        (JSC::PredictionTracker::numberOfVariables):
        (JSC::PredictionTracker::argumentOffsetForOperand):
        (JSC::PredictionTracker::predictArgument):
        (JSC::PredictionTracker::predict):
        (JSC::PredictionTracker::predictGlobalVar):
        (JSC::PredictionTracker::getArgumentPrediction):
        (JSC::PredictionTracker::getPrediction):
        (JSC::PredictionTracker::getGlobalVarPrediction):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitLoopHint):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::DoWhileNode::emitBytecode):
        (JSC::WhileNode::emitBytecode):
        (JSC::ForNode::emitBytecode):
        (JSC::ForInNode::emitBytecode):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGCapabilities.h:
        (JSC::DFG::canCompileOpcode):
        * dfg/DFGDriver.cpp:
        (JSC::DFG::compile):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        (JSC::DFG::BasicBlock::BasicBlock):
        (JSC::DFG::Graph::predict):
        (JSC::DFG::Graph::getPrediction):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        (JSC::DFG::JITCompiler::compileEntry):
        (JSC::DFG::JITCompiler::compileBody):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::noticeOSREntry):
        * dfg/DFGNode.h:
        * dfg/DFGOSREntry.cpp: Added.
        (JSC::DFG::predictionIsValid):
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGOSREntry.h: Added.
        (JSC::DFG::prepareOSREntry):
        * dfg/DFGPredictionTracker.h: Removed.
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::mergeUse):
        (JSC::DFG::Propagator::mergePrediction):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/CompactJITCodeMap.h:
        (JSC::CompactJITCodeMap::numberOfEntries):
        (JSC::CompactJITCodeMap::decode):
        (JSC::CompactJITCodeMap::Decoder::Decoder):
        (JSC::CompactJITCodeMap::Decoder::numberOfEntriesRemaining):
        (JSC::CompactJITCodeMap::Decoder::read):
        * jit/JIT.cpp:
        (JSC::JIT::emitOptimizationCheck):
        (JSC::JIT::emitTimeoutCheck):
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        (JSC::JIT::emit_op_loop_hint):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):

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

        Don't allow setting __proto__ to be a getter or setter
        https://bugs.webkit.org/show_bug.cgi?id=67982

        Reviewed by Gavin Barraclough.

        * runtime/JSObject.cpp:
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::defineSetter):
        Disallow setting a getter or setter on __proto__.

2011-09-12  James Robinson  <jamesr@chromium.org>

        Unreviewed build fix for chromium.

        Guard access to UString::latin1() with USE(JSC) since it is defined in JavaScriptCore/runtime/UString.cpp, which
        is currently only compiled in by ports that use JavaScriptCore.  This code is currently unreachable in builds so
        no change in functionality.

        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::CharAccess::CharAccess):

2011-09-09  Filip Pizlo  <fpizlo@apple.com>

        JavaScriptCore does not have speculative->baseline OSR
        https://bugs.webkit.org/show_bug.cgi?id=67826

        Reviewed by Oliver Hunt.
        
        This adds the ability to bail out of DFG speculative JIT execution by
        performing an on-stack replacement (OSR) that results in the control
        flow going to the equivalent code generated by the old JIT.
        
        This required a number of new features, as well as taking advantage of
        some features that happened to already be present:
        
        We already had a policy of storing the bytecode index for which a DFG
        node was generated inside the DFG::Node class. This was previously
        called exceptionInfo. It's now renamed to codeOrigin to reflect that
        it's used for more than just excpetions. OSR uses this to figure out
        which bytecode index to use to look up the machine code location in
        the code generated by the old JIT that we should be jumping to.
        
        CodeBlock now stores a mapping between bytecode indices and machine
        code offsets for code generated by the old JIT. This is implemented
        by CompactJITCodeMap, which tries to compress this data a bit.  The
        OSR compiler decodes this and uses it to find the machine code
        locations it should be jumping to.
        
        We already had a mechanism that emitted SetLocal nodes in the DFG graph
        that told us the time at which the old JIT would have stored something
        into its register file, and the DFG::Node that corresponds to the value
        that it would have stored. These SetLocal's were mostly dead-code-
        eliminated, but our DCE leaves the nodes intact except for making them
        have 0 as the ref count. This allows the OSR compiler to construct a
        mapping between the state as it would have been seen by the old JIT
        and the state as the DFG JIT sees it. The OSR compiler uses this to
        generate code that reshapes the call frame so that it is like what the
        old JIT would expect.
        
        Finally, when DFG_OSR is enabled (the default for TIERED_COMPILATION)
        we no longer emit the non-speculative path.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::currentCodeOrigin):
        (JSC::DFG::ByteCodeParser::addToGraph):
        * dfg/DFGGPRInfo.h:
        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::GenerationInfo::alive):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::emitCall):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::appendCallWithExceptionCheck):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::exitSpeculativeWithOSR):
        (JSC::DFG::JITCompiler::linkOSRExits):
        (JSC::DFG::JITCompiler::compileBody):
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::CallRecord::CallRecord):
        (JSC::DFG::JITCompiler::notifyCall):
        (JSC::DFG::JITCompiler::appendCallWithExceptionCheck):
        (JSC::DFG::JITCompiler::appendCallWithFastExceptionCheck):
        (JSC::DFG::JITCompiler::addJSCall):
        (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord):
        * dfg/DFGNode.h:
        (JSC::DFG::CodeOrigin::CodeOrigin):
        (JSC::DFG::CodeOrigin::isSet):
        (JSC::DFG::CodeOrigin::bytecodeIndex):
        (JSC::DFG::Node::Node):
        (JSC::DFG::Node::child1Unchecked):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::ValueSource::dump):
        (JSC::DFG::ValueRecovery::dump):
        (JSC::DFG::OSRExit::OSRExit):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::compileMovHint):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::ValueSource::ValueSource):
        (JSC::DFG::ValueSource::isSet):
        (JSC::DFG::ValueSource::nodeIndex):
        (JSC::DFG::ValueRecovery::ValueRecovery):
        (JSC::DFG::ValueRecovery::alreadyInRegisterFile):
        (JSC::DFG::ValueRecovery::inGPR):
        (JSC::DFG::ValueRecovery::inFPR):
        (JSC::DFG::ValueRecovery::displacedInRegisterFile):
        (JSC::DFG::ValueRecovery::constant):
        (JSC::DFG::ValueRecovery::technique):
        (JSC::DFG::ValueRecovery::gpr):
        (JSC::DFG::ValueRecovery::fpr):
        (JSC::DFG::ValueRecovery::virtualRegister):
        (JSC::DFG::OSRExit::numberOfRecoveries):
        (JSC::DFG::OSRExit::valueRecovery):
        (JSC::DFG::OSRExit::isArgument):
        (JSC::DFG::OSRExit::argumentForIndex):
        (JSC::DFG::OSRExit::variableForIndex):
        (JSC::DFG::OSRExit::operandForIndex):
        (JSC::DFG::SpeculativeJIT::osrExits):
        (JSC::DFG::SpeculativeJIT::speculationCheck):
        (JSC::DFG::SpeculativeJIT::valueSourceForOperand):
        (JSC::DFG::SpeculativeJIT::setNodeIndexForOperand):
        (JSC::DFG::SpeculativeJIT::valueSourceReferenceForOperand):
        (JSC::DFG::SpeculativeJIT::computeValueRecoveryFor):
        (JSC::DFG::SpeculationCheckIndexIterator::SpeculationCheckIndexIterator):
        (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
        * jit/CompactJITCodeMap.h: Added.
        (JSC::BytecodeAndMachineOffset::BytecodeAndMachineOffset):
        (JSC::BytecodeAndMachineOffset::getBytecodeIndex):
        (JSC::BytecodeAndMachineOffset::getMachineCodeOffset):
        (JSC::CompactJITCodeMap::~CompactJITCodeMap):
        (JSC::CompactJITCodeMap::decode):
        (JSC::CompactJITCodeMap::CompactJITCodeMap):
        (JSC::CompactJITCodeMap::at):
        (JSC::CompactJITCodeMap::decodeNumber):
        (JSC::CompactJITCodeMap::Encoder::Encoder):
        (JSC::CompactJITCodeMap::Encoder::~Encoder):
        (JSC::CompactJITCodeMap::Encoder::append):
        (JSC::CompactJITCodeMap::Encoder::finish):
        (JSC::CompactJITCodeMap::Encoder::appendByte):
        (JSC::CompactJITCodeMap::Encoder::encodeNumber):
        (JSC::CompactJITCodeMap::Encoder::ensureCapacityFor):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::~JSGlobalData):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::osrScratchBufferForSize):
        * runtime/JSValue.cpp:
        (JSC::JSValue::description):

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

        Re-enabled ENABLE(LAZY_BLOCK_FREEING).
        
        Reviewed by Stephanie Lewis.

        I accidentally disabled this in r94890, causing a big performance regression.

        * wtf/Platform.h:

2011-09-12  Michael Saboff  <msaboff@apple.com>

        Broken Build for ARM - lshift32() needs TrustedImm32 arg
        https://bugs.webkit.org/show_bug.cgi?id=67965

        Change lshift32(16, ARMRegisters::S1); to lshift32(TrustedImm32(16), ARMRegisters::S1);

        Reviewed by Anders Carlsson.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::branch16):

2011-09-12  Michael Saboff  <msaboff@apple.com>

        Broken ARM build - missing semicolon in JavaScriptCore/assembler/MacroAssemblerARM.h
        https://bugs.webkit.org/show_bug.cgi?id=67961

        Added missing semicolon.

        Reviewed by Ryosuke Niwa.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::branch16):

2011-09-12  Michael Saboff  <msaboff@apple.com>

        Update RegExp and related classes to use 8 bit strings when available
        https://bugs.webkit.org/show_bug.cgi?id=67337

        Modified both the Yarr interpreter and JIT to handle 8 bit subject strings.
        The code paths are triggered by the UString::is8bit() method which currently
        returns false.  Implemented JIT changes for all current architectures.
        Tested X86_64 and ARM v7.

        This includes some code that will likely change as we complete the
        8 bit string changes.  This includes the way the raw buffer pointers
        are accessed as well as replacing the CharAccess class with a
        string interator returned from UString.

        Fixed build breakage in testRegExp.cpp due to globalObject construction
        changes.

        Reviewed by Gavin Barraclough.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * testRegExp.cpp:
        (GlobalObject::finishCreation):
        (GlobalObject::GlobalObject):
        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::baseIndexTransfer32):
        * assembler/ARMAssembler.h:
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::ubfx):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp12Reg40Imm3Reg4Imm20Imm5):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::load8):
        (JSC::MacroAssemblerARM::branch8):
        (JSC::MacroAssemblerARM::branch16):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::load8):
        (JSC::MacroAssemblerARMv7::branch16):
        (JSC::MacroAssemblerARMv7::branch8):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::load8):
        (JSC::MacroAssemblerMIPS::branch8):
        (JSC::MacroAssemblerMIPS::branch16):
        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::load8):
        (JSC::MacroAssemblerSH4::branch8):
        (JSC::MacroAssemblerSH4::branch16):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::load8):
        (JSC::MacroAssemblerX86Common::branch16):
        (JSC::MacroAssemblerX86Common::branch8):
        * assembler/SH4Assembler.h:
        (JSC::SH4Assembler::extub):
        (JSC::SH4Assembler::printInstr):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::cmpw_ir):
        (JSC::X86Assembler::movzbl_mr):
        * runtime/RegExp.cpp:
        (JSC::RegExp::compile):
        (JSC::RegExp::compileIfNecessary):
        (JSC::RegExp::match):
        (JSC::RegExp::matchCompareWithInterpreter):
        * runtime/RegExp.h:
        * runtime/UString.h:
        (JSC::UString::is8Bit):
        * yarr/Yarr.h:
        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::CharAccess::CharAccess):
        (JSC::Yarr::Interpreter::CharAccess::~CharAccess):
        (JSC::Yarr::Interpreter::CharAccess::operator[]):
        (JSC::Yarr::Interpreter::InputStream::InputStream):
        (JSC::Yarr::Interpreter::Interpreter):
        (JSC::Yarr::interpret):
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::jumpIfCharNotEquals):
        (JSC::Yarr::YarrGenerator::readCharacter):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy):
        (JSC::Yarr::YarrGenerator::backtrackPatternCharacterNonGreedy):
        (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
        (JSC::Yarr::YarrGenerator::generateDotStarEnclosure):
        (JSC::Yarr::YarrGenerator::YarrGenerator):
        (JSC::Yarr::YarrGenerator::compile):
        (JSC::Yarr::jitCompile):
        (JSC::Yarr::execute):
        * yarr/YarrJIT.h:
        (JSC::Yarr::YarrCodeBlock::has8BitCode):
        (JSC::Yarr::YarrCodeBlock::has16BitCode):
        (JSC::Yarr::YarrCodeBlock::set8BitCode):
        (JSC::Yarr::YarrCodeBlock::set16BitCode):
        (JSC::Yarr::YarrCodeBlock::execute):
        * yarr/YarrParser.h:
        (JSC::Yarr::Parser::Parser):

2011-09-12  Andras Becsi  <andras.becsi@nokia.com>

        [Qt] Build fails after r94920 with strict compiler
        https://bugs.webkit.org/show_bug.cgi?id=67928

        Reviewed by Csaba Osztrogonác.

        * wtf/RedBlackTree.h:
        (WTF::RedBlackTree::insert): Remove dead variables updateStart and newSubTreeRoot.

2011-09-12  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix after r94871.

        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreadingOnce):
        * wtf/FastMalloc.cpp:
        * wtf/RefCountedLeakCounter.h:

2011-09-11  Filip Pizlo  <fpizlo@apple.com>

        DFGNode.h has macros that indicate the enabling of a feature, but
        they do not use the ENABLE() idiom.
        https://bugs.webkit.org/show_bug.cgi?id=67907

        Reviewed by Oliver Hunt.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::stronglyPredict):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::predictArgumentTypes):
        * dfg/DFGJITCodeGenerator.cpp:
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::fillInt32ToInteger):
        (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
        (JSC::DFG::JITCompiler::compileBody):
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        * dfg/DFGNode.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::fixpoint):
        (JSC::DFG::Propagator::propagateNode):
        (JSC::DFG::Propagator::propagateForward):
        (JSC::DFG::Propagator::propagateBackward):
        (JSC::DFG::propagate):
        * dfg/DFGScoreBoard.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):

2011-09-11  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed build fix for chromium/mac & clang.

        Fix the macro redefinition error by r94927, because chromium set
        ENABLE_JSC_MULTIPLE_THREADS=0 in WebKit/chromium/features.gypi and
        it is not PLATFORM(QT).
         ../../JavaScriptCore/wtf/Platform.h:512:9: error: 'ENABLE_JSC_MULTIPLE_THREADS' macro redefined [-Werror]
         #define ENABLE_JSC_MULTIPLE_THREADS 1
         <command line>:43:9: note: previous definition is here
         #define ENABLE_JSC_MULTIPLE_THREADS 0
         1 error generated.

        * wtf/Platform.h:

2011-09-11  Sam Weinig  <sam@webkit.org>

        Remove JSCell::isPropertyNameIterator(), it is unused
        https://bugs.webkit.org/show_bug.cgi?id=67911

        Reviewed by Oliver Hunt.

        * runtime/JSCell.h:
        * runtime/JSPropertyNameIterator.h:

2011-09-11  Sam Weinig  <sam@webkit.org>

        De-virtualize JSCell::isAPIValueWrapper
        https://bugs.webkit.org/show_bug.cgi?id=67909

        Reviewed by Oliver Hunt.

        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::createStructure):
        Set the correct type on structure creation.

        * runtime/JSCell.h:
        Remove virtual keyword and default implementation.

        * runtime/JSType.h:
        Add type for APIValueWrapper. It must come after CompoundType since
        the APIValueWrapper has children in need of marking.

        * runtime/Structure.h:
        (JSC::JSCell::isAPIValueWrapper):
        Implement predicate using type info.

2011-09-10  Sam Weinig  <sam@webkit.org>

        De-virtualize JSCell::isGetterSetter, type information is available for it
        https://bugs.webkit.org/show_bug.cgi?id=67902

        Reviewed by Dan Bernstein.

        * runtime/GetterSetter.cpp:
        * runtime/GetterSetter.h:
        Remove override of isGetterSetter.

        * runtime/JSCell.cpp:
        * runtime/JSCell.h:
        De-virtualize and remove silly base implementation.

        * runtime/Structure.h:
        (JSC::JSCell::isGetterSetter):
        Use type info to determine getter-setter-hood.

2011-09-09  Oliver Hunt  <oliver@apple.com>

        Remove support for anonymous storage from jsobjects
        https://bugs.webkit.org/show_bug.cgi?id=67881

        Reviewed by Sam Weinig.

        Remove all use of anonymous slots, essentially a mechanical change
        in JavaScriptCore

        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::createStructure):
        * API/JSCallbackFunction.h:
        (JSC::JSCallbackFunction::createStructure):
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::createStructure):
        * JavaScriptCore.exp:
        * debugger/DebuggerActivation.h:
        (JSC::DebuggerActivation::createStructure):
        * heap/MarkStack.cpp:
        (JSC::MarkStack::validateValue):
        * heap/MarkStack.h:
        * runtime/Arguments.h:
        (JSC::Arguments::createStructure):
        * runtime/ArrayConstructor.h:
        (JSC::ArrayConstructor::createStructure):
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::finishCreation):
        * runtime/ArrayPrototype.h:
        (JSC::ArrayPrototype::createStructure):
        * runtime/BooleanObject.h:
        (JSC::BooleanObject::createStructure):
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        * runtime/BooleanPrototype.h:
        (JSC::BooleanPrototype::createStructure):
        * runtime/DateConstructor.h:
        (JSC::DateConstructor::createStructure):
        * runtime/DateInstance.h:
        (JSC::DateInstance::createStructure):
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::DatePrototype):
        * runtime/DatePrototype.h:
        (JSC::DatePrototype::createStructure):
        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::createStructure):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::finishCreation):
        * runtime/ErrorPrototype.h:
        (JSC::ErrorPrototype::createStructure):
        * runtime/ExceptionHelpers.h:
        (JSC::InterruptedExecutionError::createStructure):
        (JSC::TerminatedExecutionError::createStructure):
        * runtime/Executable.h:
        (JSC::ExecutableBase::createStructure):
        (JSC::NativeExecutable::createStructure):
        (JSC::EvalExecutable::createStructure):
        (JSC::ProgramExecutable::createStructure):
        (JSC::FunctionExecutable::createStructure):
        * runtime/FunctionPrototype.h:
        (JSC::FunctionPrototype::createStructure):
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::createStructure):
        * runtime/InternalFunction.h:
        (JSC::InternalFunction::createStructure):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::createStructure):
        * runtime/JSActivation.h:
        (JSC::JSActivation::createStructure):
        * runtime/JSArray.h:
        (JSC::JSArray::createStructure):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::createStructure):
        * runtime/JSCell.h:
        * runtime/JSFunction.h:
        (JSC::JSFunction::createStructure):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::finishCreation):
        (JSC::JSGlobalObject::createStructure):
        * runtime/JSNotAnObject.h:
        (JSC::JSNotAnObject::createStructure):
        * runtime/JSONObject.h:
        (JSC::JSONObject::createStructure):
        * runtime/JSObject.h:
        (JSC::JSObject::createStructure):
        (JSC::JSNonFinalObject::createStructure):
        (JSC::JSFinalObject::createStructure):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::create):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::createStructure):
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::createStructure):
        * runtime/JSString.h:
        (JSC::RopeBuilder::createStructure):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::createStructure):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::createStructure):
        * runtime/MathObject.h:
        (JSC::MathObject::createStructure):
        * runtime/NativeErrorConstructor.h:
        (JSC::NativeErrorConstructor::createStructure):
        * runtime/NumberConstructor.h:
        (JSC::NumberConstructor::createStructure):
        * runtime/NumberObject.h:
        (JSC::NumberObject::createStructure):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        * runtime/NumberPrototype.h:
        (JSC::NumberPrototype::createStructure):
        * runtime/ObjectConstructor.h:
        (JSC::ObjectConstructor::createStructure):
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::finishCreation):
        * runtime/ObjectPrototype.h:
        (JSC::ObjectPrototype::createStructure):
        * runtime/RegExp.h:
        (JSC::RegExp::createStructure):
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::createStructure):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::createStructure):
        * runtime/RegExpPrototype.h:
        (JSC::RegExpPrototype::createStructure):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::createStructure):
        * runtime/StrictEvalActivation.h:
        (JSC::StrictEvalActivation::createStructure):
        * runtime/StringConstructor.h:
        (JSC::StringConstructor::createStructure):
        * runtime/StringObject.h:
        (JSC::StringObject::createStructure):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        * runtime/StringPrototype.h:
        (JSC::StringPrototype::createStructure):
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::materializePropertyMap):
        (JSC::Structure::addPropertyTransitionToExistingStructure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::removePropertyTransition):
        (JSC::Structure::changePrototypeTransition):
        (JSC::Structure::despecifyFunctionTransition):
        (JSC::Structure::getterSetterTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::preventExtensionsTransition):
        (JSC::Structure::flattenDictionaryStructure):
        (JSC::Structure::addPropertyWithoutTransition):
        (JSC::Structure::removePropertyWithoutTransition):
        (JSC::Structure::get):
        (JSC::Structure::putSpecificValue):
        (JSC::Structure::remove):
        (JSC::Structure::checkConsistency):
        * runtime/Structure.h:
        (JSC::Structure::create):
        (JSC::Structure::propertyStorageSize):
        (JSC::Structure::get):
        * runtime/StructureChain.h:
        (JSC::StructureChain::createStructure):

2011-09-11  Jarred Nicholls  <jarred@sencha.com>

        [Qt] Win32 build broken due to MachineStackMarker.cpp/.o failing to link against pthreads library
        https://bugs.webkit.org/show_bug.cgi?id=67864
        
        Qt Win32 is not pthread compatible and cannot participate in multithreaded JSC or it fails to build.

        Reviewed by Csaba Osztrogonác.

        * wtf/Platform.h:

2011-09-11  Filip Pizlo  <fpizlo@apple.com>

        ARM and MIPS assemblers still refer to executable pools.
        https://bugs.webkit.org/show_bug.cgi?id=67903

        Reviewed by Csaba Osztrogonác.

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::executableCopy):
        * assembler/ARMAssembler.h:
        * assembler/AssemblerBufferWithConstantPool.h:
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::executableCopy):

2011-09-08  Filip Pizlo  <fpizlo@apple.com>

        The executable allocator makes it difficult to free individual
        chunks of executable memory
        https://bugs.webkit.org/show_bug.cgi?id=66363

        Reviewed by Oliver Hunt.
        
        Introduced a best-fit, balanced-tree based allocator. The allocator
        required a balanced tree that does not allocate memory and that
        permits the removal of individual nodes directly (as opposed to by
        key); neither AVLTree nor WebCore's PODRedBlackTree supported this.
        Changed all references to executable code to use a reference counted
        handle.

        * GNUmakefile.list.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::executableCopy):
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::LinkBuffer):
        (JSC::LinkBuffer::finalizeCode):
        (JSC::LinkBuffer::linkCode):
        * assembler/MacroAssemblerCodeRef.h:
        (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef):
        (JSC::MacroAssemblerCodeRef::createSelfManagedCodeRef):
        (JSC::MacroAssemblerCodeRef::executableMemory):
        (JSC::MacroAssemblerCodeRef::code):
        (JSC::MacroAssemblerCodeRef::size):
        (JSC::MacroAssemblerCodeRef::operator!):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::executableCopy):
        (JSC::X86Assembler::X86InstructionFormatter::executableCopy):
        * bytecode/CodeBlock.h:
        * bytecode/Instruction.h:
        * bytecode/StructureStubInfo.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compile):
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::generateProtoChainAccessStub):
        (JSC::DFG::tryCacheGetByID):
        (JSC::DFG::tryBuildGetByIDList):
        (JSC::DFG::tryBuildGetByIDProtoList):
        (JSC::DFG::tryCachePutByID):
        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::initializeAllocator):
        (JSC::ExecutableAllocator::ExecutableAllocator):
        (JSC::ExecutableAllocator::allocate):
        (JSC::ExecutableAllocator::committedByteCount):
        (JSC::ExecutableAllocator::dumpProfile):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::dumpProfile):
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::ExecutableAllocator::initializeAllocator):
        (JSC::ExecutableAllocator::ExecutableAllocator):
        (JSC::ExecutableAllocator::isValid):
        (JSC::ExecutableAllocator::underMemoryPressure):
        (JSC::ExecutableAllocator::allocate):
        (JSC::ExecutableAllocator::committedByteCount):
        (JSC::ExecutableAllocator::dumpProfile):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        (JSC::JIT::compileCTIMachineTrampolines):
        (JSC::JIT::compileCTINativeCall):
        * jit/JITCode.h:
        (JSC::JITCode::operator !):
        (JSC::JITCode::addressForCall):
        (JSC::JITCode::offsetOf):
        (JSC::JITCode::execute):
        (JSC::JITCode::start):
        (JSC::JITCode::size):
        (JSC::JITCode::getExecutableMemory):
        (JSC::JITCode::HostFunction):
        (JSC::JITCode::JITCode):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::privateCompileCTINativeCall):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::privateCompileCTINativeCall):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::stringGetByValStubGenerator):
        (JSC::JIT::emitSlow_op_get_by_val):
        (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::emitSlow_op_get_by_val):
        (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::JITThunks):
        (JSC::DEFINE_STUB_FUNCTION):
        (JSC::getPolymorphicAccessStructureListSlot):
        (JSC::JITThunks::ctiStub):
        (JSC::JITThunks::hostFunctionStub):
        * jit/JITStubs.h:
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::SpecializedThunkJIT):
        (JSC::SpecializedThunkJIT::finalize):
        * jit/ThunkGenerators.cpp:
        (JSC::charCodeAtThunkGenerator):
        (JSC::charAtThunkGenerator):
        (JSC::fromCharCodeThunkGenerator):
        (JSC::sqrtThunkGenerator):
        (JSC::floorThunkGenerator):
        (JSC::ceilThunkGenerator):
        (JSC::roundThunkGenerator):
        (JSC::expThunkGenerator):
        (JSC::logThunkGenerator):
        (JSC::absThunkGenerator):
        (JSC::powThunkGenerator):
        * jit/ThunkGenerators.h:
        * runtime/Executable.h:
        (JSC::NativeExecutable::create):
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreadingOnce):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::dumpSampleData):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::getCTIStub):
        * wtf/CMakeLists.txt:
        * wtf/MetaAllocator.cpp: Added.
        (WTF::MetaAllocatorHandle::MetaAllocatorHandle):
        (WTF::MetaAllocatorHandle::~MetaAllocatorHandle):
        (WTF::MetaAllocatorHandle::shrink):
        (WTF::MetaAllocator::MetaAllocator):
        (WTF::MetaAllocator::allocate):
        (WTF::MetaAllocator::currentStatistics):
        (WTF::MetaAllocator::findAndRemoveFreeSpace):
        (WTF::MetaAllocator::addFreeSpaceFromReleasedHandle):
        (WTF::MetaAllocator::addFreshFreeSpace):
        (WTF::MetaAllocator::debugFreeSpaceSize):
        (WTF::MetaAllocator::addFreeSpace):
        (WTF::MetaAllocator::incrementPageOccupancy):
        (WTF::MetaAllocator::decrementPageOccupancy):
        (WTF::MetaAllocator::roundUp):
        (WTF::MetaAllocator::allocFreeSpaceNode):
        (WTF::MetaAllocator::freeFreeSpaceNode):
        (WTF::MetaAllocator::dumpProfile):
        * wtf/MetaAllocator.h: Added.
        (WTF::MetaAllocator::bytesAllocated):
        (WTF::MetaAllocator::bytesReserved):
        (WTF::MetaAllocator::bytesCommitted):
        (WTF::MetaAllocator::dumpProfile):
        (WTF::MetaAllocator::~MetaAllocator):
        * wtf/MetaAllocatorHandle.h: Added.
        * wtf/RedBlackTree.h: Added.
        (WTF::RedBlackTree::Node::Node):
        (WTF::RedBlackTree::Node::successor):
        (WTF::RedBlackTree::Node::predecessor):
        (WTF::RedBlackTree::Node::reset):
        (WTF::RedBlackTree::Node::parent):
        (WTF::RedBlackTree::Node::setParent):
        (WTF::RedBlackTree::Node::left):
        (WTF::RedBlackTree::Node::setLeft):
        (WTF::RedBlackTree::Node::right):
        (WTF::RedBlackTree::Node::setRight):
        (WTF::RedBlackTree::Node::color):
        (WTF::RedBlackTree::Node::setColor):
        (WTF::RedBlackTree::RedBlackTree):
        (WTF::RedBlackTree::insert):
        (WTF::RedBlackTree::remove):
        (WTF::RedBlackTree::findExact):
        (WTF::RedBlackTree::findLeastGreaterThanOrEqual):
        (WTF::RedBlackTree::findGreatestLessThanOrEqual):
        (WTF::RedBlackTree::first):
        (WTF::RedBlackTree::last):
        (WTF::RedBlackTree::size):
        (WTF::RedBlackTree::isEmpty):
        (WTF::RedBlackTree::treeMinimum):
        (WTF::RedBlackTree::treeMaximum):
        (WTF::RedBlackTree::treeInsert):
        (WTF::RedBlackTree::leftRotate):
        (WTF::RedBlackTree::rightRotate):
        (WTF::RedBlackTree::removeFixup):
        * wtf/wtf.pri:
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::compile):
        * yarr/YarrJIT.h:
        (JSC::Yarr::YarrCodeBlock::execute):
        (JSC::Yarr::YarrCodeBlock::getAddr):

2011-09-10  Sam Weinig  <sam@webkit.org>

        Remove JSC::isZombie() function, it did nothing and was called by no-one.
        https://bugs.webkit.org/show_bug.cgi?id=67901

        Reviewed by Andy Estes.

        * JavaScriptCore.exp:
        * runtime/JSCell.cpp:
        * runtime/JSValue.h:

2011-09-10  Sam Weinig  <sam@webkit.org>

        Add isInterruptedExecutionException and isTerminatedExecutionException predicates
        https://bugs.webkit.org/show_bug.cgi?id=67892

        Reviewed by Andy "First Time Reviewer" Estes.

        * JavaScriptCore.exp:
        Add symbols.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException):
        Use new predicates.

        * runtime/ExceptionHelpers.cpp:
        (JSC::createInterruptedExecutionException):
        (JSC::isInterruptedExecutionException):
        (JSC::createTerminatedExecutionException):
        (JSC::isTerminatedExecutionException):
        * runtime/ExceptionHelpers.h:
        (JSC::InterruptedExecutionError::InterruptedExecutionError):
        Add predicates.

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

        DFG JIT completely undoes speculative compilation even in the case of
        a partial static speculation failure
        https://bugs.webkit.org/show_bug.cgi?id=67798

        Reviewed by Geoffrey Garen.
        
        This is a regression with static speculation, so it is turned off by
        default.  But it is a necessary prerequisite for further work on
        dynamic speculation.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::clearGenerationInfo):
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):

2011-09-09  Chris Marrin  <cmarrin@apple.com>

        requestAnimationFrame doesn't throttle on Mac
        https://bugs.webkit.org/show_bug.cgi?id=67171

        Reviewed by Simon Fraser.

        Added WTF_USE_REQUEST_ANIMATION_FRAME_TIMER to allow any platform to run
        requestAnimationFrame callbacks on a Timer defined in ScriptedAnimationController.
        Currently only enabled for PLATFORM(MAC)

        * wtf/Platform.h:

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

        Reviewed by Dan Bernstein.

        Removed ENABLE(SINGLE_THREADED) support, since it is always false
        https://bugs.webkit.org/show_bug.cgi?id=67862

        Next step toward making the baseline platform assumption that threads exist.

        * wtf/wtf.pri:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Removed references to
        ThreadingNone.cpp, which was only compiled in single-threaded mode.

        * wtf/Platform.h:
        * wtf/ThreadSpecific.h:
        (WTF::::destroy):
        * wtf/qt/ThreadingQt.cpp: Removed now-dead code.

        * wtf/ThreadingNone.cpp: Removed.

2011-09-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        Unzip initialization lists and constructors in JSCell hierarchy (5/7)
        https://bugs.webkit.org/show_bug.cgi?id=67420

        Reviewed by Geoffrey Garen.

        Completed the fifth level of the refactoring to add finishCreation() 
        methods to all classes within the JSCell hierarchy with non-trivial 
        constructor bodies.

        This primarily consists of pushing the calls to finishCreation() down 
        into the constructors of the subclasses of the second level of the hierarchy 
        as well as pulling the finishCreation() calls out into the class's corresponding
        create() method if it has one.  Doing both simultaneously allows us to 
        maintain the invariant that the finishCreation() method chain is called exactly 
        once during the creation of an object, since calling it any other number of 
        times (0, 2, or more) will cause an assertion failure.

        * API/JSCallbackConstructor.cpp:
        (JSC::JSCallbackConstructor::JSCallbackConstructor):
        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::create):
        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::JSCallbackFunction):
        (JSC::JSCallbackFunction::finishCreation):
        * API/JSCallbackFunction.h:
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::JSCallbackObject):
        (JSC::::finishCreation):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        * debugger/DebuggerActivation.h:
        (JSC::DebuggerActivation::create):
        * jsc.cpp:
        (GlobalObject::finishCreation):
        (GlobalObject::GlobalObject):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        (JSC::ArrayConstructor::finishCreation):
        * runtime/ArrayConstructor.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::ArrayPrototype):
        * runtime/ArrayPrototype.h:
        (JSC::ArrayPrototype::create):
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::BooleanConstructor):
        (JSC::BooleanConstructor::finishCreation):
        * runtime/BooleanConstructor.h:
        * runtime/BooleanObject.cpp:
        (JSC::BooleanObject::BooleanObject):
        * runtime/BooleanObject.h:
        (JSC::BooleanObject::create):
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        (JSC::BooleanPrototype::finishCreation):
        * runtime/BooleanPrototype.h:
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        (JSC::DateConstructor::finishCreation):
        * runtime/DateConstructor.h:
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        * runtime/DateInstance.h:
        (JSC::DateInstance::create):
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::DatePrototype):
        (JSC::DatePrototype::finishCreation):
        * runtime/DatePrototype.h:
        * runtime/Error.cpp:
        (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        (JSC::ErrorConstructor::finishCreation):
        * runtime/ErrorConstructor.h:
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        * runtime/ErrorPrototype.h:
        (JSC::ErrorPrototype::create):
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::FunctionConstructor):
        (JSC::FunctionConstructor::finishCreation):
        * runtime/FunctionConstructor.h:
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::FunctionPrototype):
        (JSC::FunctionPrototype::finishCreation):
        * runtime/FunctionPrototype.h:
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction):
        * runtime/InternalFunction.h:
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::JSActivation):
        * runtime/JSActivation.h:
        (JSC::JSActivation::create):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::create):
        (JSC::JSGlobalObject::JSGlobalObject):
        * runtime/JSONObject.cpp:
        (JSC::JSONObject::JSONObject):
        * runtime/JSONObject.h:
        (JSC::JSONObject::create):
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::create):
        (JSC::JSStaticScopeObject::JSStaticScopeObject):
        * runtime/JSString.cpp:
        (JSC::StringObject::create):
        * runtime/MathObject.cpp:
        (JSC::MathObject::MathObject):
        * runtime/MathObject.h:
        (JSC::MathObject::create):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * runtime/NativeErrorConstructor.h:
        (JSC::NativeErrorConstructor::finishCreation):
        * runtime/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::NativeErrorPrototype):
        (JSC::NativeErrorPrototype::finishCreation):
        * runtime/NativeErrorPrototype.h:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::NumberConstructor):
        (JSC::NumberConstructor::finishCreation):
        * runtime/NumberConstructor.h:
        * runtime/NumberObject.cpp:
        (JSC::NumberObject::NumberObject):
        * runtime/NumberObject.h:
        (JSC::NumberObject::create):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        (JSC::NumberPrototype::finishCreation):
        * runtime/NumberPrototype.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        (JSC::ObjectConstructor::finishCreation):
        * runtime/ObjectConstructor.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        (JSC::RegExpConstructor::finishCreation):
        (JSC::RegExpMatchesArray::RegExpMatchesArray):
        * runtime/RegExpConstructor.h:
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::create):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::RegExpObject):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::create):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::RegExpPrototype):
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        (JSC::StringConstructor::finishCreation):
        * runtime/StringConstructor.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::StringObject):
        * runtime/StringObject.h:
        (JSC::StringObject::create):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        (JSC::StringPrototype::finishCreation):
        * runtime/StringPrototype.h:

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

        Build fix: Guard against double-#define for something already #defined
        by the build system.

        * wtf/Platform.h:

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

        Reviewed by Dan Bernstein.

        Never #define ENABLE_SINGLE_THREADED, !ENABLE_JSC_MULTIPLE_THREADS, or
        !ENABLE_WTF_MULTIPLE_THREADS
        https://bugs.webkit.org/show_bug.cgi?id=67860

        First step toward making the baseline platform assumption that threads
        exist: Never #define ENABLE_SINGLE_THREADED, !ENABLE_JSC_MULTIPLE_THREADS,
        or !ENABLE_WTF_MULTIPLE_THREADS.

        * wtf/Platform.h:

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

        [Qt] Remove common.pri
        https://bugs.webkit.org/show_bug.cgi?id=67814

        Reviewed by Andreas Kling.

        * JavaScriptCore.pri:

2011-09-08  Mark Hahnenberg  <mhahnenberg@apple.com>

        REGRESSION(r94811): Assertion failure in 2 worker tests
        https://bugs.webkit.org/show_bug.cgi?id=67829

        Reviewed by Sam Weinig.

        Fixing a couple tests that were broken due to the wrong values being 
        set in the parent class pointers in the ClassInfo structs for 
        TerminatedExecutionError and InterruptedExecutionError.

        * runtime/ExceptionHelpers.cpp:

2011-09-08  Oliver Hunt  <oliver@apple.com>

        Use bump allocator for initial property storage
        https://bugs.webkit.org/show_bug.cgi?id=67494

        Reviewed by Geoffrey Garen.

        Use a bump allocator for initial allocation of property storage,
        and promote to fastMalloc memory only if it survives a GC pass.

        Comes out as a 1% win on v8, and is a useful step on the way to
        GC allocation of all property storage.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/Heap.cpp:
        (JSC::Heap::collect):
        * heap/Heap.h:
        (JSC::Heap::allocatePropertyStorage):
        (JSC::Heap::inPropertyStorageNursery):
        * heap/MarkedBlock.h:
        * heap/NewSpace.cpp:
        (JSC::NewSpace::NewSpace):
        * heap/NewSpace.h:
        (JSC::NewSpace::resetPropertyStorageNursery):
        (JSC::NewSpace::allocatePropertyStorage):
        (JSC::NewSpace::inPropertyStorageNursery):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSObject.cpp:
        (JSC::JSObject::allocatePropertyStorage):
        * runtime/JSObject.h:
        (JSC::JSObject::isUsingInlineStorage):
        (JSC::JSObject::JSObject):
        (JSC::JSObject::propertyStorage):
        (JSC::JSObject::~JSObject):
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::putDirectWithoutTransition):
        (JSC::JSObject::putDirectFunctionWithoutTransition):
        (JSC::JSObject::transitionTo):
        (JSC::JSObject::visitChildrenDirect):
        * runtime/StorageBarrier.h: Added.
        (JSC::StorageBarrier::StorageBarrier):
        (JSC::StorageBarrier::set):
        (JSC::StorageBarrier::operator->):
        (JSC::StorageBarrier::operator*):
        (JSC::StorageBarrier::operator[]):
        (JSC::StorageBarrier::get):

2011-09-08  Sam Weinig  <sam@webkit.org>

        Remove the Completion object from JSC, I have never liked it
        https://bugs.webkit.org/show_bug.cgi?id=67755

        Reviewed by Gavin Barraclough.

        - Removes the Completion object and replaces its use with out parameter exceptions.
        - Remove ComplType and virtual exceptionType() function on JSObject. Replace with
          ClassInfo for InterruptedExecutionError and TerminatedExecutionError.

        * API/JSBase.cpp:
        (JSEvaluateScript):
        (JSCheckScriptSyntax):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::throwException):
        * jsc.cpp:
        (functionLoad):
        (functionCheckSyntax):
        (runWithScripts):
        (runInteractive):
        * runtime/Completion.cpp:
        (JSC::checkSyntax):
        (JSC::evaluate):
        * runtime/Completion.h:
        * runtime/ExceptionHelpers.cpp:
        (JSC::InterruptedExecutionError::toString):
        (JSC::TerminatedExecutionError::toString):
        (JSC::createInterruptedExecutionException):
        * runtime/ExceptionHelpers.h:
        (JSC::InterruptedExecutionError::InterruptedExecutionError):
        (JSC::InterruptedExecutionError::create):
        (JSC::InterruptedExecutionError::createStructure):
        (JSC::TerminatedExecutionError::TerminatedExecutionError):
        (JSC::TerminatedExecutionError::create):
        (JSC::TerminatedExecutionError::createStructure):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSObject.h:

2011-09-08  Ryosuke Niwa  <rniwa@webkit.org>

        Build fix.

        * dfg/DFGCapabilities.cpp:

2011-09-08  Filip Pizlo  <fpizlo@apple.com>

        Value profling and execution count profiling is performed even for
        code that cannot be optimized
        https://bugs.webkit.org/show_bug.cgi?id=67694

        Reviewed by Gavin Barraclough.
        
        This is a 2% speed-up on V8 when tiered compilation is enabled.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::ProgramCodeBlock::canCompileWithDFG):
        (JSC::EvalCodeBlock::canCompileWithDFG):
        (JSC::FunctionCodeBlock::canCompileWithDFG):
        * bytecode/CodeBlock.h:
        * dfg/DFGCapabilities.cpp: Added.
        (JSC::DFG::canCompileOpcodes):
        * dfg/DFGCapabilities.h: Added.
        (JSC::DFG::mightCompileEval):
        (JSC::DFG::mightCompileProgram):
        (JSC::DFG::mightCompileFunctionForCall):
        (JSC::DFG::mightCompileFunctionForConstruct):
        (JSC::DFG::canCompileOpcode):
        (JSC::DFG::canCompileEval):
        (JSC::DFG::canCompileProgram):
        (JSC::DFG::canCompileFunctionForCall):
        (JSC::DFG::canCompileFunctionForConstruct):
        * jit/JIT.cpp:
        (JSC::JIT::emitOptimizationCheck):
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        (JSC::JIT::shouldEmitProfiling):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitValueProfilingSite):

2011-09-08  Filip Pizlo  <fpizlo@apple.com>

        DFG speculative JIT does not initialize integer tags for PredictInt32 temporaries
        https://bugs.webkit.org/show_bug.cgi?id=67840

        Reviewed by Gavin Barraclough.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::initializeVariableTypes):

2011-09-08  Thouraya ANDOLSI  <thouraya.andolsi@st.com>

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

        Fix sequenceGetByIdSlowCaseInstructionSpace, sequenceGetByIdSlowCaseConstantSpace
        and patchOffsetGetByIdSlowCaseCall
        and enables DOUBLE_CONVERSION_CORRECT_DOUBLE_OPERATIONS flag for SH4 platforms.

        Reviewed by Gavin Barraclough.

        * jit/JIT.h:
        * wtf/dtoa/utils.h:

2011-09-08  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove getUInt32 from JSCell
        https://bugs.webkit.org/show_bug.cgi?id=67691

        Reviewed by Oliver Hunt.

         We don't use JSCell::getUInt32 anymore, so it has been removed.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/JSCell.cpp:
        * runtime/JSCell.h:

2011-09-07  Filip Pizlo  <fpizlo@apple.com>

        PPC build fix.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):

2011-09-07  Oliver Hunt  <oliver@apple.com>

        Release mode build fix.

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::create):

2011-09-06  Oliver Hunt  <oliver@apple.com>

        Remove JSObjectWithGlobalObject
        https://bugs.webkit.org/show_bug.cgi?id=67689

        Reviewed by Geoff Garen.

        Remove JSObjectWithGlobalObject, and update code to stop using anonymous
        storage to access the global object that a JSObject comes from.  Largely
        mechanical change to remove the use of anonymous storage and JSObjectWithGlobalObject.

        * API/JSCallbackConstructor.cpp:
        (JSC::JSCallbackConstructor::JSCallbackConstructor):
        (JSC::JSCallbackConstructor::finishCreation):
        * API/JSCallbackConstructor.h:
        * API/JSCallbackObject.cpp:
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::create):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::JSCallbackObject):
        (JSC::::finishCreation):
        (JSC::::staticFunctionGetter):
        * API/JSClassRef.cpp:
        (OpaqueJSClass::prototype):
        * API/JSObjectRef.cpp:
        (JSObjectMake):
        (JSObjectGetPrivate):
        (JSObjectSetPrivate):
        (JSObjectGetPrivateProperty):
        (JSObjectSetPrivateProperty):
        (JSObjectDeletePrivateProperty):
        * API/JSValueRef.cpp:
        (JSValueIsObjectOfClass):
        * API/JSWeakObjectMapRefPrivate.cpp:
        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.h:
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::dfgRepatchGetMethodFast):
        (JSC::DFG::tryCacheGetMethod):
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitAllocateJSFunction):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::patchMethodCallProto):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/DatePrototype.cpp:
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction):
        (JSC::InternalFunction::finishCreation):
        * runtime/InternalFunction.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::finishCreation):
        * runtime/JSFunction.h:
        (JSC::JSFunction::create):
        (JSC::JSFunction::createStructure):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        * runtime/JSONObject.cpp:
        (JSC::JSONObject::JSONObject):
        (JSC::JSONObject::finishCreation):
        * runtime/JSONObject.h:
        * runtime/JSObject.h:
        (JSC::JSObject::globalObject):
        * runtime/JSObjectWithGlobalObject.cpp: Removed.
        * runtime/JSObjectWithGlobalObject.h: Removed.
        * runtime/JSValue.cpp:
        (JSC::JSValue::isValidCallee):
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
        * runtime/Lookup.h:
        * runtime/MathObject.cpp:
        (JSC::MathObject::MathObject):
        (JSC::MathObject::finishCreation):
        * runtime/MathObject.h:
        * runtime/NumberPrototype.cpp:
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::RegExpObject):
        (JSC::RegExpObject::finishCreation):
        * runtime/RegExpObject.h:
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        * runtime/Structure.h:
        (JSC::Structure::create):
        (JSC::Structure::globalObject):

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

        Refactor JIT checks for ObjectType into helper functions.

        Rubber stamped by Sam Weinig.

        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::branchIfNotObject):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JIT.h:
        * jit/JITCall32_64.cpp:
        (JSC::JIT::emit_op_ret_object_or_this):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitJumpIfNotObject):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emit_op_ret_object_or_this):
        (JSC::JIT::emit_op_get_pnames):
        (JSC::JIT::emit_op_create_this):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emit_op_get_pnames):
        (JSC::JIT::emit_op_create_this):

2011-09-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94627 and r94632.
        http://trac.webkit.org/changeset/94627
        http://trac.webkit.org/changeset/94632
        https://bugs.webkit.org/show_bug.cgi?id=67698

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

        * API/JSCallbackConstructor.cpp:
        (JSC::JSCallbackConstructor::JSCallbackConstructor):
        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::create):
        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::JSCallbackFunction):
        * API/JSCallbackFunction.h:
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::create):
        * debugger/DebuggerActivation.h:
        * jsc.cpp:
        (GlobalObject::constructorBody):
        (GlobalObject::GlobalObject):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        * runtime/ArrayConstructor.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::ArrayPrototype):
        * runtime/ArrayPrototype.h:
        (JSC::ArrayPrototype::create):
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::BooleanConstructor):
        * runtime/BooleanConstructor.h:
        * runtime/BooleanObject.cpp:
        (JSC::BooleanObject::BooleanObject):
        * runtime/BooleanObject.h:
        (JSC::BooleanObject::create):
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        * runtime/BooleanPrototype.h:
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        * runtime/DateConstructor.h:
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        * runtime/DateInstance.h:
        (JSC::DateInstance::create):
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::DatePrototype):
        * runtime/DatePrototype.h:
        * runtime/Error.cpp:
        (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        * runtime/ErrorConstructor.h:
        (JSC::ErrorConstructor::create):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        * runtime/ErrorPrototype.h:
        (JSC::ErrorPrototype::create):
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::FunctionConstructor):
        * runtime/FunctionConstructor.h:
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::FunctionPrototype):
        * runtime/FunctionPrototype.h:
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction):
        * runtime/InternalFunction.h:
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::JSActivation):
        * runtime/JSActivation.h:
        (JSC::JSActivation::create):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::create):
        (JSC::JSGlobalObject::JSGlobalObject):
        * runtime/JSONObject.cpp:
        (JSC::JSONObject::JSONObject):
        * runtime/JSONObject.h:
        (JSC::JSONObject::create):
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::create):
        (JSC::JSStaticScopeObject::JSStaticScopeObject):
        * runtime/JSString.cpp:
        (JSC::StringObject::create):
        * runtime/MathObject.cpp:
        (JSC::MathObject::MathObject):
        * runtime/MathObject.h:
        (JSC::MathObject::create):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * runtime/NativeErrorConstructor.h:
        (JSC::NativeErrorConstructor::constructorBody):
        * runtime/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::NativeErrorPrototype):
        (JSC::NativeErrorPrototype::constructorBody):
        * runtime/NativeErrorPrototype.h:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::NumberConstructor):
        * runtime/NumberConstructor.h:
        * runtime/NumberObject.cpp:
        (JSC::NumberObject::NumberObject):
        * runtime/NumberObject.h:
        (JSC::NumberObject::create):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        * runtime/NumberPrototype.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        * runtime/ObjectConstructor.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        (JSC::RegExpMatchesArray::RegExpMatchesArray):
        * runtime/RegExpConstructor.h:
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::create):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::RegExpObject):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::create):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::RegExpPrototype):
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        * runtime/StringConstructor.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::StringObject):
        * runtime/StringObject.h:
        (JSC::StringObject::create):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        * runtime/StringPrototype.h:

2011-09-06  Xianzhu Wang  <wangxianzhu@chromium.org>

        Replace usages of Vector<UChar> with existing StringBuilder
        https://bugs.webkit.org/show_bug.cgi?id=67079

        Reviewed by Gavin Barraclough.

        This is part of work to support 8-bit string buffers.
        Adds StringBuilder::characters() because the original Vector<UChar>::data()
        is widely used.
        Sets the minimum size of buffer to 16 to prevent possible performance
        regression. Further performance investigation should be done in
        https://bugs.webkit.org/show_bug.cgi?id=67084.

        * wtf/Forward.h:
        * wtf/text/StringBuilder.cpp:
        (WTF::StringBuilder::appendUninitialized): Sets minimum buffer size to 16 bytes.
        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::operator[]):
        (WTF::StringBuilder::characters): Added.

2011-09-06  Mark Hahnenberg  <mhahnenberg@apple.com>

        Fix broken snow leopard build
        https://bugs.webkit.org/show_bug.cgi?id=67693

        Reviewed by Daniel Bates.

        Removed unnecessary symbol export.

        * JavaScriptCore.exp:

2011-09-06  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not optimize booleans
        https://bugs.webkit.org/show_bug.cgi?id=67670

        Reviewed by Gavin Barraclough.
        
        This adds boolean value profiling, boolean prediction in the DFG,
        boolean forward flow propagation in the DFGPropagator, boolean
        data format in DFG generation info, and comprehensive optimizations
        based on both boolean prediction and boolean generation info.
        This is brings the speed-up on v8-richards to 12%, and gives slight
        speed-ups elsewhere as well.
        
        Making this work right required navigating some subtleties in
        value profiling.  Some functions get compiled with insufficient
        information because some important path of the function never
        executed.  In these cases, we wish to fall back on static
        speculation.  But to do so, we need to ensure that predictions that
        are inherent in the code (like that GetById almost certainly takes
        a cell operand) are reflected in predictions that we make in
        DFGPropagator.  Thus, DFGPropagator now does both backward and
        forward flow, using a both forward and backward fixpoint.
        
        The backward flow in DFGPropagator is a separate static analysis,
        and needs to keep a set of backward flow abstract values for
        variables, arguments, and globals.  To make this easy, this patch
        factors out DFGGraph's prediction tracking capability into
        DFGPredictionTracker, which now gets used by both DFGGraph (for
        forward flow predictions) and DFGPropagator (for backward flow
        predictions).  Backward flow predictions eventually get merged
        into forward flow ones, but the two are not equivalent: a forward
        flow prediction is a superset of the backward flow prediction.
        
        Debugging these prediction issues required a better understanding
        of where we fail speculation, and what our value predictions look
        like.  This patch also adds optional verbose speculation failure
        (so an informative printf fires whenever speculation failure occurs)
        and slight improvements to the verbosity in other places.

        * bytecode/ValueProfile.h:
        (JSC::ValueProfile::numberOfBooleans):
        (JSC::ValueProfile::probabilityOfBoolean):
        (JSC::ValueProfile::dump):
        (JSC::ValueProfile::computeStatistics):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::stronglyPredict):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::dataFormatToString):
        (JSC::DFG::needDataFormatConversion):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        (JSC::DFG::Graph::predictArgumentTypes):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::Graph):
        (JSC::DFG::Graph::predictions):
        (JSC::DFG::Graph::predict):
        (JSC::DFG::Graph::predictGlobalVar):
        (JSC::DFG::Graph::getPrediction):
        (JSC::DFG::Graph::getGlobalVarPrediction):
        (JSC::DFG::Graph::isBooleanConstant):
        (JSC::DFG::Graph::valueOfBooleanConstant):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::fillInteger):
        (JSC::DFG::JITCodeGenerator::fillDouble):
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        (JSC::DFG::JITCodeGenerator::isKnownNotInteger):
        (JSC::DFG::JITCodeGenerator::isKnownBoolean):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompareNull):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq):
        (JSC::DFG::JITCodeGenerator::emitBranch):
        (JSC::DFG::JITCodeGenerator::speculationCheck):
        (JSC::DFG::GPRTemporary::GPRTemporary):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::isBooleanConstant):
        (JSC::DFG::JITCodeGenerator::valueOfBooleanConstant):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::debugCall):
        (JSC::DFG::JITCompiler::isBooleanConstant):
        (JSC::DFG::JITCompiler::valueOfBooleanConstant):
        * dfg/DFGNode.h:
        (JSC::DFG::isBooleanPrediction):
        (JSC::DFG::predictionToString):
        (JSC::DFG::mergePredictions):
        (JSC::DFG::makePrediction):
        (JSC::DFG::Node::isBooleanConstant):
        (JSC::DFG::Node::valueOfBooleanConstant):
        (JSC::DFG::Node::hasBooleanResult):
        (JSC::DFG::Node::hasNumericResult):
        (JSC::DFG::Node::predict):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGPredictionTracker.h: Added.
        (JSC::DFG::operandIsArgument):
        (JSC::DFG::PredictionSlot::PredictionSlot):
        (JSC::DFG::PredictionTracker::PredictionTracker):
        (JSC::DFG::PredictionTracker::initializeSimilarTo):
        (JSC::DFG::PredictionTracker::numberOfArguments):
        (JSC::DFG::PredictionTracker::numberOfVariables):
        (JSC::DFG::PredictionTracker::argumentOffsetForOperand):
        (JSC::DFG::PredictionTracker::predictArgument):
        (JSC::DFG::PredictionTracker::predict):
        (JSC::DFG::PredictionTracker::predictGlobalVar):
        (JSC::DFG::PredictionTracker::getArgumentPrediction):
        (JSC::DFG::PredictionTracker::getPrediction):
        (JSC::DFG::PredictionTracker::getGlobalVarPrediction):
        * dfg/DFGPropagator.cpp:
        (JSC::DFG::Propagator::Propagator):
        (JSC::DFG::Propagator::fixpoint):
        (JSC::DFG::Propagator::setPrediction):
        (JSC::DFG::Propagator::mergeUse):
        (JSC::DFG::Propagator::mergePrediction):
        (JSC::DFG::Propagator::propagateNode):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::fillSpeculateBoolean):
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculateBooleanOperand::SpeculateBooleanOperand):
        (JSC::DFG::SpeculateBooleanOperand::~SpeculateBooleanOperand):
        (JSC::DFG::SpeculateBooleanOperand::index):
        (JSC::DFG::SpeculateBooleanOperand::gpr):
        (JSC::DFG::SpeculateBooleanOperand::use):
        * runtime/JSGlobalData.h:
        * runtime/JSValue.cpp:
        (JSC::JSValue::description):

2011-09-06  Mark Hahnenberg  <mhahnenberg@apple.com>

        Unzip initialization lists and constructors in JSCell hierarchy (5/7)
        https://bugs.webkit.org/show_bug.cgi?id=67420

        Reviewed by Geoffrey Garen.

        Completed the fifth level of the refactoring to add finishCreation() 
        methods to all classes within the JSCell hierarchy with non-trivial 
        constructor bodies.

        This primarily consists of pushing the calls to finishCreation() down 
        into the constructors of the subclasses of the second level of the hierarchy 
        as well as pulling the finishCreation() calls out into the class's corresponding
        create() method if it has one.  Doing both simultaneously allows us to 
        maintain the invariant that the finishCreation() method chain is called exactly 
        once during the creation of an object, since calling it any other number of 
        times (0, 2, or more) will cause an assertion failure.

        * API/JSCallbackConstructor.cpp:
        (JSC::JSCallbackConstructor::JSCallbackConstructor):
        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::create):
        * API/JSCallbackFunction.cpp:
        (JSC::JSCallbackFunction::JSCallbackFunction):
        (JSC::JSCallbackFunction::finishCreation):
        * API/JSCallbackFunction.h:
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        * debugger/DebuggerActivation.h:
        (JSC::DebuggerActivation::create):
        * jsc.cpp:
        (GlobalObject::finishCreation):
        (GlobalObject::GlobalObject):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        (JSC::ArrayConstructor::finishCreation):
        * runtime/ArrayConstructor.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::ArrayPrototype):
        * runtime/ArrayPrototype.h:
        (JSC::ArrayPrototype::create):
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::BooleanConstructor):
        (JSC::BooleanConstructor::finishCreation):
        * runtime/BooleanConstructor.h:
        * runtime/BooleanObject.cpp:
        (JSC::BooleanObject::BooleanObject):
        * runtime/BooleanObject.h:
        (JSC::BooleanObject::create):
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        (JSC::BooleanPrototype::finishCreation):
        * runtime/BooleanPrototype.h:
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        (JSC::DateConstructor::finishCreation):
        * runtime/DateConstructor.h:
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        * runtime/DateInstance.h:
        (JSC::DateInstance::create):
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::DatePrototype):
        (JSC::DatePrototype::finishCreation):
        * runtime/DatePrototype.h:
        * runtime/Error.cpp:
        (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        (JSC::ErrorConstructor::finishCreation):
        * runtime/ErrorConstructor.h:
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        * runtime/ErrorPrototype.h:
        (JSC::ErrorPrototype::create):
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::FunctionConstructor):
        (JSC::FunctionConstructor::finishCreation):
        * runtime/FunctionConstructor.h:
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::FunctionPrototype):
        (JSC::FunctionPrototype::finishCreation):
        * runtime/FunctionPrototype.h:
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction):
        * runtime/InternalFunction.h:
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::JSActivation):
        * runtime/JSActivation.h:
        (JSC::JSActivation::create):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::create):
        (JSC::JSGlobalObject::JSGlobalObject):
        * runtime/JSONObject.cpp:
        (JSC::JSONObject::JSONObject):
        * runtime/JSONObject.h:
        (JSC::JSONObject::create):
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::create):
        (JSC::JSStaticScopeObject::JSStaticScopeObject):
        * runtime/JSString.cpp:
        (JSC::StringObject::create):
        * runtime/MathObject.cpp:
        (JSC::MathObject::MathObject):
        * runtime/MathObject.h:
        (JSC::MathObject::create):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * runtime/NativeErrorConstructor.h:
        (JSC::NativeErrorConstructor::finishCreation):
        * runtime/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::NativeErrorPrototype):
        (JSC::NativeErrorPrototype::finishCreation):
        * runtime/NativeErrorPrototype.h:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::NumberConstructor):
        (JSC::NumberConstructor::finishCreation):
        * runtime/NumberConstructor.h:
        * runtime/NumberObject.cpp:
        (JSC::NumberObject::NumberObject):
        * runtime/NumberObject.h:
        (JSC::NumberObject::create):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        (JSC::NumberPrototype::finishCreation):
        * runtime/NumberPrototype.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        (JSC::ObjectConstructor::finishCreation):
        * runtime/ObjectConstructor.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        (JSC::RegExpConstructor::finishCreation):
        (JSC::RegExpMatchesArray::RegExpMatchesArray):
        * runtime/RegExpConstructor.h:
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::create):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::RegExpObject):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::create):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::RegExpPrototype):
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        (JSC::StringConstructor::finishCreation):
        * runtime/StringConstructor.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::StringObject):
        * runtime/StringObject.h:
        (JSC::StringObject::create):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        (JSC::StringPrototype::finishCreation):
        * runtime/StringPrototype.h:

2011-09-06  Filip Pizlo  <fpizlo@apple.com>

        Accessibility tests crashing in BasicRawSentinelNode code
        https://bugs.webkit.org/show_bug.cgi?id=67682

        Reviewed by Geoffrey Garen.
        
        A CodeBlock should ensure that no other CodeBlocks have references to it after
        it is destroyed.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):

2011-09-06  Yong Li  <yoli@rim.com>

        https://bugs.webkit.org/show_bug.cgi?id=67486
        This reverts r65993 which gives wrong results for rshift
        in some corner cases (see the test).

        Reviewed by Gavin Barraclough.

        New test: fast/js/floating-point-truncate-rshift.html

        * assembler/ARMAssembler.h:
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::supportsFloatingPointTruncate):
        (JSC::MacroAssemblerARM::branchTruncateDoubleToInt32):

2011-09-06  Filip Pizlo  <fpizlo@apple.com>

        Unreviewed build fix for r94559.
        
        Marked the relevant parameters as unused if !ENABLE(JIT), and surrounded
        new out-of-line JIT-specific method definitions with !ENABLE(JIT).

        * bytecode/CodeBlock.cpp:
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):

2011-09-06  Mark Hahnenberg  <mhahnenberg@apple.com>

        Fix broken PPC build due to new dtoa library
        https://bugs.webkit.org/show_bug.cgi?id=67654

        Reviewed by Dan Bernstein.

        Added condition for PPC in the new dtoa compatibility check so that
        building won't fail.

        * wtf/dtoa/utils.h:

2011-09-05  Oliver Hunt  <oliver@apple.com>

        An object's structure should reference the global object responsible for its creation
        https://bugs.webkit.org/show_bug.cgi?id=67624

        Reviewed by Gavin Barraclough.

        Add a reference to a GlobalObject to Structure, and update all calls to
        Structure::create() to pass the global object that is the origin for that
        structure.  For objects where the appropriate global object isn't available
        at construction time (global object prototypes, etc), or objects that
        logically don't have a global object (strings, etc) we just pass null.

        This change is largely mechanical (passing a new globalObject parameter
        around).

        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::createStructure):
        * API/JSCallbackFunction.h:
        (JSC::JSCallbackFunction::createStructure):
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::createStructure):
        * API/JSContextRef.cpp:
        * JavaScriptCore.exp:
        * debugger/DebuggerActivation.h:
        (JSC::DebuggerActivation::createStructure):
        * runtime/Arguments.h:
        (JSC::Arguments::createStructure):
        * runtime/ArrayConstructor.h:
        (JSC::ArrayConstructor::createStructure):
        * runtime/ArrayPrototype.h:
        (JSC::ArrayPrototype::createStructure):
        * runtime/BooleanObject.h:
        (JSC::BooleanObject::createStructure):
        * runtime/BooleanPrototype.h:
        (JSC::BooleanPrototype::createStructure):
        * runtime/DateConstructor.h:
        (JSC::DateConstructor::createStructure):
        * runtime/DateInstance.h:
        (JSC::DateInstance::createStructure):
        * runtime/DatePrototype.h:
        (JSC::DatePrototype::createStructure):
        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::createStructure):
        * runtime/ErrorPrototype.h:
        (JSC::ErrorPrototype::createStructure):
        * runtime/Executable.h:
        (JSC::ExecutableBase::createStructure):
        (JSC::NativeExecutable::createStructure):
        (JSC::EvalExecutable::createStructure):
        (JSC::ProgramExecutable::createStructure):
        (JSC::FunctionExecutable::createStructure):
        * runtime/FunctionPrototype.h:
        (JSC::FunctionPrototype::createStructure):
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::createStructure):
        * runtime/InternalFunction.h:
        (JSC::InternalFunction::createStructure):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::createStructure):
        * runtime/JSActivation.h:
        (JSC::JSActivation::createStructure):
        * runtime/JSArray.h:
        (JSC::JSArray::createStructure):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::createStructure):
        * runtime/JSByteArray.h:
        * runtime/JSFunction.h:
        (JSC::JSFunction::createStructure):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::finishCreation):
        (JSC::JSGlobalObject::createStructure):
        * runtime/JSNotAnObject.h:
        (JSC::JSNotAnObject::createStructure):
        * runtime/JSONObject.h:
        (JSC::JSONObject::createStructure):
        * runtime/JSObject.cpp:
        (JSC::JSObject::createInheritorID):
        * runtime/JSObject.h:
        (JSC::JSObject::createStructure):
        (JSC::JSNonFinalObject::createStructure):
        (JSC::JSFinalObject::createStructure):
        (JSC::createEmptyObjectStructure):
        * runtime/JSObjectWithGlobalObject.h:
        (JSC::JSObjectWithGlobalObject::createStructure):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::createStructure):
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::createStructure):
        * runtime/JSString.h:
        (JSC::RopeBuilder::createStructure):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::createStructure):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::createStructure):
        * runtime/MathObject.h:
        (JSC::MathObject::createStructure):
        * runtime/NativeErrorConstructor.h:
        (JSC::NativeErrorConstructor::createStructure):
        (JSC::NativeErrorConstructor::constructorBody):
        * runtime/NumberConstructor.h:
        (JSC::NumberConstructor::createStructure):
        * runtime/NumberObject.h:
        (JSC::NumberObject::createStructure):
        * runtime/NumberPrototype.h:
        (JSC::NumberPrototype::createStructure):
        * runtime/ObjectConstructor.h:
        (JSC::ObjectConstructor::createStructure):
        * runtime/ObjectPrototype.h:
        (JSC::ObjectPrototype::createStructure):
        * runtime/RegExp.h:
        (JSC::RegExp::createStructure):
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::createStructure):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::createStructure):
        * runtime/RegExpPrototype.h:
        (JSC::RegExpPrototype::createStructure):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::createStructure):
        * runtime/StrictEvalActivation.h:
        (JSC::StrictEvalActivation::createStructure):
        * runtime/StringConstructor.h:
        (JSC::StringConstructor::createStructure):
        * runtime/StringObject.h:
        (JSC::StringObject::createStructure):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::create):
        (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
        * runtime/StringPrototype.h:
        (JSC::StringPrototype::createStructure):
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::visitChildren):
        * runtime/Structure.h:
        (JSC::Structure::create):
        (JSC::Structure::globalObject):
        (JSC::Structure::setGlobalObject):
        * runtime/StructureChain.h:
        (JSC::StructureChain::createStructure):

2011-09-06  Michael Saboff  <msaboff@apple.com>

        Add windows changes for JSC:RegExp functional tests
        https://bugs.webkit.org/show_bug.cgi?id=67521

        Windows build changes for regular expression functional test.

        Rubber-stamped by Gavin Barraclough.

        * JavaScriptCore.vcproj/JavaScriptCore.sln:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/testRegExp: Added.
        * JavaScriptCore.vcproj/testRegExp/testRegExp.vcproj: Added.
        * JavaScriptCore.vcproj/testRegExp/testRegExpCommon.vsprops: Added.
        * JavaScriptCore.vcproj/testRegExp/testRegExpDebug.vsprops: Added.
        * JavaScriptCore.vcproj/testRegExp/testRegExpDebugAll.vsprops: Added.
        * JavaScriptCore.vcproj/testRegExp/testRegExpDebugCairoCFLite.vsprops: Added.
        * JavaScriptCore.vcproj/testRegExp/testRegExpPostBuild.cmd: Added.
        * JavaScriptCore.vcproj/testRegExp/testRegExpPreBuild.cmd: Added.
        * JavaScriptCore.vcproj/testRegExp/testRegExpPreLink.cmd: Added.
        * JavaScriptCore.vcproj/testRegExp/testRegExpProduction.vsprops: Added.
        * JavaScriptCore.vcproj/testRegExp/testRegExpRelease.vsprops: Added.
        * JavaScriptCore.vcproj/testRegExp/testRegExpReleaseCairoCFLite.vsprops: Added.
        * JavaScriptCore.vcproj/testRegExp/testRegExpReleasePGO.vsprops: Added.

2011-09-06  Filip Pizlo  <fpizlo@apple.com>

        JavaScriptCore does not have tiered compilation
        https://bugs.webkit.org/show_bug.cgi?id=67176

        Reviewed by Gavin Barraclough.
        
        This adds the ability to have multiple CodeBlocks associated with
        a particular role in an Executable.  These are stored in
        descending order of compiler tier.  CodeBlocks are optimized when
        a counter (m_executeCounter) that is incremented in loops and
        epilogues becomes positive.  Optimizing means that all calls to
        the old CodeBlock are unlinked.
        
        The DFG can now pull in predictions from ValueProfiles, and
        propagate them along the graph.  To support the new phase while
        maintaing some level of abstraction, a DFGDriver was introduced
        that encapsulates how to run the DFG compiler.
        
        This is turned off by default because it's not yet a performance
        win on all benchmarks.  It speeds up crypto and richards by
        10% and 6% respectively, but still does not do as good of a job
        as it could.  Notably, the DFG backend has not changed, and
        is largely oblivious to the new information being made available
        to it.
        
        When turned off (the default), this patch is performance neutral.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::branchAdd32):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::branchAdd32):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::CodeBlock):
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::visitAggregate):
        (JSC::CallLinkInfo::unlink):
        (JSC::CodeBlock::unlinkCalls):
        (JSC::CodeBlock::unlinkIncomingCalls):
        (JSC::CodeBlock::clearEvalCache):
        (JSC::replaceExistingEntries):
        (JSC::CodeBlock::copyDataFromAlternative):
        (JSC::ProgramCodeBlock::replacement):
        (JSC::EvalCodeBlock::replacement):
        (JSC::FunctionCodeBlock::replacement):
        (JSC::ProgramCodeBlock::compileOptimized):
        (JSC::EvalCodeBlock::compileOptimized):
        (JSC::FunctionCodeBlock::compileOptimized):
        * bytecode/CodeBlock.h:
        (JSC::GlobalCodeBlock::GlobalCodeBlock):
        (JSC::ProgramCodeBlock::ProgramCodeBlock):
        (JSC::EvalCodeBlock::EvalCodeBlock):
        (JSC::FunctionCodeBlock::FunctionCodeBlock):
        * bytecode/ValueProfile.h:
        (JSC::ValueProfile::dump):
        (JSC::ValueProfile::computeStatistics):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * bytecompiler/BytecodeGenerator.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::addCall):
        (JSC::DFG::ByteCodeParser::dynamicallyPredict):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::parse):
        * dfg/DFGDriver.cpp: Added.
        (JSC::DFG::compile):
        (JSC::DFG::tryCompile):
        (JSC::DFG::tryCompileFunction):
        * dfg/DFGDriver.h: Added.
        (JSC::DFG::tryCompile):
        (JSC::DFG::tryCompileFunction):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        (JSC::DFG::Graph::predictArgumentTypes):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::predict):
        (JSC::DFG::Graph::predictGlobalVar):
        (JSC::DFG::Graph::isConstant):
        (JSC::DFG::Graph::isJSConstant):
        (JSC::DFG::Graph::isInt32Constant):
        (JSC::DFG::Graph::isDoubleConstant):
        (JSC::DFG::Graph::valueOfJSConstant):
        (JSC::DFG::Graph::valueOfInt32Constant):
        (JSC::DFG::Graph::valueOfDoubleConstant):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::isConstant):
        (JSC::DFG::JITCompiler::isJSConstant):
        (JSC::DFG::JITCompiler::isInt32Constant):
        (JSC::DFG::JITCompiler::isDoubleConstant):
        (JSC::DFG::JITCompiler::valueOfJSConstant):
        (JSC::DFG::JITCompiler::valueOfInt32Constant):
        (JSC::DFG::JITCompiler::valueOfDoubleConstant):
        * dfg/DFGNode.h:
        (JSC::DFG::isCellPrediction):
        (JSC::DFG::isNumberPrediction):
        (JSC::DFG::predictionToString):
        (JSC::DFG::mergePrediction):
        (JSC::DFG::makePrediction):
        (JSC::DFG::Node::valueOfJSConstant):
        (JSC::DFG::Node::isInt32Constant):
        (JSC::DFG::Node::isDoubleConstant):
        (JSC::DFG::Node::valueOfInt32Constant):
        (JSC::DFG::Node::valueOfDoubleConstant):
        (JSC::DFG::Node::predict):
        * dfg/DFGPropagation.cpp: Added.
        (JSC::DFG::Propagator::Propagator):
        (JSC::DFG::Propagator::fixpoint):
        (JSC::DFG::Propagator::setPrediction):
        (JSC::DFG::Propagator::mergePrediction):
        (JSC::DFG::Propagator::propagateNode):
        (JSC::DFG::Propagator::propagateForward):
        (JSC::DFG::Propagator::propagateBackward):
        (JSC::DFG::propagate):
        * dfg/DFGPropagation.h: Added.
        (JSC::DFG::propagate):
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::dfgLinkFor):
        * heap/HandleHeap.h:
        (JSC::HandleHeap::Node::Node):
        * jit/JIT.cpp:
        (JSC::JIT::emitOptimizationCheck):
        (JSC::JIT::emitTimeoutCheck):
        (JSC::JIT::privateCompile):
        (JSC::JIT::linkFor):
        * jit/JIT.h:
        (JSC::JIT::emitOptimizationCheck):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::emit_op_ret):
        (JSC::JIT::emit_op_ret_object_or_this):
        * jit/JITCode.h:
        (JSC::JITCode::JITCode):
        (JSC::JITCode::bottomTierJIT):
        (JSC::JITCode::topTierJIT):
        (JSC::JITCode::nextTierJIT):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_ret):
        (JSC::JIT::emit_op_ret_object_or_this):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileOptimized):
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileOptimized):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileOptimizedForCall):
        (JSC::FunctionExecutable::compileOptimizedForConstruct):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        * runtime/Executable.h:
        (JSC::EvalExecutable::compile):
        (JSC::ProgramExecutable::compile):
        (JSC::FunctionExecutable::compileForCall):
        (JSC::FunctionExecutable::compileForConstruct):
        (JSC::FunctionExecutable::compileOptimizedFor):
        * wtf/Platform.h:
        * wtf/SentinelLinkedList.h:
        (WTF::BasicRawSentinelNode::BasicRawSentinelNode):
        (WTF::BasicRawSentinelNode::setPrev):
        (WTF::BasicRawSentinelNode::setNext):
        (WTF::BasicRawSentinelNode::prev):
        (WTF::BasicRawSentinelNode::next):
        (WTF::BasicRawSentinelNode::isOnList):
        (WTF::::remove):
        (WTF::::SentinelLinkedList):
        (WTF::::begin):
        (WTF::::end):
        (WTF::::push):

2011-09-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r94445 and r94448.
        http://trac.webkit.org/changeset/94445
        http://trac.webkit.org/changeset/94448
        https://bugs.webkit.org/show_bug.cgi?id=67595

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

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * heap/Heap.cpp:
        (JSC::Heap::collect):
        * heap/Heap.h:
        * heap/NewSpace.cpp:
        (JSC::NewSpace::NewSpace):
        * heap/NewSpace.h:
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSObject.cpp:
        (JSC::JSObject::allocatePropertyStorage):
        * runtime/JSObject.h:
        (JSC::JSObject::~JSObject):
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::putDirectWithoutTransition):
        (JSC::JSObject::putDirectFunctionWithoutTransition):
        (JSC::JSObject::transitionTo):
        (JSC::JSObject::visitChildrenDirect):

2011-09-05  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix for r94452.

        Add config.h as the first header to the cc files as required by the coding style.
        Reuse macros from Assertions.h instead of adding addional #ifdefs.

        * wtf/dtoa/bignum-dtoa.cc:
        * wtf/dtoa/bignum.cc:
        * wtf/dtoa/cached-powers.cc:
        * wtf/dtoa/diy-fp.cc:
        * wtf/dtoa/double-conversion.cc:
        * wtf/dtoa/fast-dtoa.cc:
        * wtf/dtoa/fixed-dtoa.cc:
        * wtf/dtoa/strtod.cc:
        * wtf/dtoa/utils.h:

2011-09-05  Andras Becsi  <andras.becsi@nokia.com>

        [Qt][WK2] Fix the build

        Rubber-stamped by Csaba Osztrogonác.

        * wtf/dtoa/double-conversion.cc: Remove dead variable in file added in r94452.
        The variable fractional_part is only set but never used.

2011-09-04  Mark Hahnenberg  <mhahnenberg@apple.com>

        REGRESSION (r94452): 20 http/tests tests failing on Qt Linux Release
        https://bugs.webkit.org/show_bug.cgi?id=67562

        Reviewed by Darin Adler.

        Fixing the build (again which was broken by the dtoa patch.  Needed 
        to make sure WTF::double_conversion::initialize() is called for Qt
        as well as adding a check for WinCE in dtoa/utils.h

        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreadingOnce):
        * wtf/dtoa/cached-powers.cc:
        * wtf/dtoa/utils.h:

2011-09-03  Filip Pizlo  <fpizlo@apple.com>

        ThunkGenerators does not convert positive double zero into integer zero
        https://bugs.webkit.org/show_bug.cgi?id=67553

        Reviewed by Gavin Barraclough.
        
        This is an 0.5% speed-up on V8 and neutral elsewhere.

        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::returnDouble):

2011-09-03  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Add wtf/dtoa directory to build.

        * wscript:

2011-09-03  Filip Pizlo  <fpizlo@apple.com>

        DFG variable predictions only work for local variables, not temporaries
        https://bugs.webkit.org/show_bug.cgi?id=67554

        Reviewed by Gavin Barraclough.
        
        This appears to be a slight speed-up in Kraken (0.3% but significant)
        and neutral elsewhere.

        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::predict):

2011-09-02  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT speculation failure does recovery of additions in reverse and
        doesn't rebox
        https://bugs.webkit.org/show_bug.cgi?id=67551

        Reviewed by Sam Weinig.

        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):

2011-09-02  Filip Pizlo  <fpizlo@apple.com>

        ValueProfile does not make it safe to introspect cell values
        after garbage collection
        https://bugs.webkit.org/show_bug.cgi?id=67354

        Reviewed by Gavin Barraclough.
        
        ValueProfile buckets are now weak references, implemented using a
        light-weight weak reference mechanism that this patch also adds (the
        WeakReferenceHarvester).  If a cell stored in a ValueProfile bucket
        is not marked, then the bucket is transformed into a Structure
        pointer.  If the Structure is not marked either, then it is turned
        into a ClassInfo pointer.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::visitAggregate):
        (JSC::CodeBlock::visitWeakReferences):
        * bytecode/CodeBlock.h:
        * bytecode/ValueProfile.h:
        (JSC::ValueProfile::ValueProfile):
        (JSC::ValueProfile::classInfo):
        (JSC::ValueProfile::numberOfInt32s):
        (JSC::ValueProfile::numberOfDoubles):
        (JSC::ValueProfile::numberOfCells):
        (JSC::ValueProfile::numberOfArrays):
        (JSC::ValueProfile::probabilityOfArray):
        (JSC::ValueProfile::WeakBucket::WeakBucket):
        (JSC::ValueProfile::WeakBucket::operator!):
        (JSC::ValueProfile::WeakBucket::isEmpty):
        (JSC::ValueProfile::WeakBucket::isClassInfo):
        (JSC::ValueProfile::WeakBucket::isStructure):
        (JSC::ValueProfile::WeakBucket::asStructure):
        (JSC::ValueProfile::WeakBucket::asClassInfo):
        (JSC::ValueProfile::WeakBucket::getClassInfo):
        * heap/Heap.cpp:
        (JSC::Heap::harvestWeakReferences):
        (JSC::Heap::markRoots):
        * heap/Heap.h:
        * heap/MarkStack.cpp:
        (JSC::SlotVisitor::drain):
        (JSC::SlotVisitor::harvestWeakReferences):
        * heap/MarkStack.h:
        (JSC::MarkStack::addWeakReferenceHarvester):
        (JSC::MarkStack::MarkStack):
        (JSC::MarkStack::appendUnbarrieredPointer):
        * heap/SlotVisitor.h:
        * heap/WeakReferenceHarvester.h: Added.
        (JSC::WeakReferenceHarvester::WeakReferenceHarvester):
        (JSC::WeakReferenceHarvester::~WeakReferenceHarvester):

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

        Replace local implementation of string equals() methods with UString versions
        https://bugs.webkit.org/show_bug.cgi?id=67342

        In preparation to allowing StringImpl to be backed by 8 bit 
        characters when appropriate, we need to eliminate or change the
        usage of StringImpl::characters(). Change the uses of characters()
        that are used to implement redundant equals() methods.

        Reviewed by Gavin Barraclough.

        * runtime/Identifier.cpp:
        (JSC::Identifier::equal):
        * runtime/Identifier.h:
        (JSC::Identifier::equal):
        * wtf/text/AtomicString.cpp:
        (WTF::CStringTranslator::equal): Moved an optimized method to here.
        (WTF::operator==):
        * wtf/text/StringImpl.cpp:
        (WTF::equal):
        * wtf/text/StringImpl.h:

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

        Add JSC:RegExp functional tests
        https://bugs.webkit.org/show_bug.cgi?id=67339

        Added new test driver program (testRegExp) and corresponding data file
        along with build scripts changes.

        Reviewed by Gavin Barraclough.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * testRegExp.cpp: Added.
        (Options::Options):
        (StopWatch::start):
        (StopWatch::stop):
        (StopWatch::getElapsedMS):
        (RegExpTest::RegExpTest):
        (GlobalObject::create):
        (GlobalObject::className):
        (GlobalObject::GlobalObject):
        (main):
        (cleanupGlobalData):
        (testOneRegExp):
        (scanString):
        (parseRegExpLine):
        (parseTestLine):
        (runFromFiles):
        (printUsageStatement):
        (parseArguments):
        (realMain):
        * tests/regexp: Added.
        * tests/regexp/RegExpTest.data: Added.

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

        Add JSC:RegExp functional test data generator
        https://bugs.webkit.org/show_bug.cgi?id=67519

        Add a data generator for regular expressions.  To enable, change the
        #undef REGEXP_FUNC_TEST_DATA_GEN to #define.  Then compile and use
        regular expressions.  The resulting data will be in /tmp/RegExpTestsData.

        Reviewed by Gavin Barraclough.

        * runtime/RegExp.cpp:
        (JSC::regExpFlags):
        (JSC::RegExpFunctionalTestCollector::clearRegExp):
        (JSC::RegExpFunctionalTestCollector::get):
        (JSC::RegExpFunctionalTestCollector::outputOneTest):
        (JSC::RegExpFunctionalTestCollector::RegExpFunctionalTestCollector):
        (JSC::RegExpFunctionalTestCollector::~RegExpFunctionalTestCollector):
        (JSC::RegExpFunctionalTestCollector::outputEscapedUString):
        (JSC::RegExp::~RegExp):
        (JSC::RegExp::compile):
        (JSC::RegExp::match):
        (JSC::RegExp::matchCompareWithInterpreter):

2011-09-02  Mark Hahnenberg  <mhahnenberg@apple.com>

        Fix the broken build due to dtoa patch
        https://bugs.webkit.org/show_bug.cgi?id=67534

        Reviewed by Oliver Hunt.

        Fixing the build.

        * GNUmakefile.list.am:
        * wtf/dtoa/bignum.cc:
        * wtf/dtoa/fast-dtoa.cc:
        * wtf/dtoa/utils.h:

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

        Remove OldSpace classes
        https://bugs.webkit.org/show_bug.cgi?id=67533

        Reviewed by Gavin Barraclough.

        Remove the unused OldSpace classes

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/Heap.cpp:
        (JSC::Heap::writeBarrierSlowCase):
        * heap/MarkedBlock.h:
        * heap/OldSpace.cpp: Removed.
        * heap/OldSpace.h: Removed.

2011-09-02  James Robinson  <jamesr@chromium.org>

        Compile fix for mac build.

        * wtf/CheckedArithmetic.h:
        (WTF::operator+):
        (WTF::operator-):
        (WTF::operator*):

2011-08-30  Matthew Delaney  <mdelaney@apple.com>

        Read out of bounds in sUnpremultiplyData_RGBA8888 / ImageBufferData::getData
        https://bugs.webkit.org/show_bug.cgi?id=65352

        Reviewed by Simon Fraser.

        New test: fast/canvas/canvas-getImageData-large-crash.html

        This patch prevents overflows from happening in getImageData, createImageData, and canvas creation
        calls that specify widths and heights that end up overflowing the ints that we store those values in
        as well as derived values such as area and maxX / maxY of the bounding rects involved. Overflow of integer
        arithmetic is detected via the use of the new Checked type that was introduced in r94207. The change to JSC
        is just to add a new helper method described below.

        * wtf/MathExtras.h:
        (isWithinIntRange): Reports if a float's value is within the range expressible by an int.

2011-09-02  Mark Hahnenberg  <mhahnenberg@apple.com>

        Incorporate newer, faster dtoa library
        https://bugs.webkit.org/show_bug.cgi?id=66346

        Reviewed by Oliver Hunt.

        Added new dtoa library at http://code.google.com/p/double-conversion/.
        Replaced old call to dtoa.  The new library is much faster than the old one.
        We still use the old dtoa for some stuff in WebCore as well as the old strtod, 
        but we can phase these out eventually as well.

        * GNUmakefile.list.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/InitializeThreading.cpp:
        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToExponential):
        (JSC::numberProtoFuncToFixed):
        (JSC::numberProtoFuncToPrecision):
        * runtime/UString.cpp:
        (JSC::UString::number):
        * wtf/CMakeLists.txt:
        * wtf/ThreadingPthreads.cpp:
        (WTF::initializeThreading):
        * wtf/ThreadingWin.cpp:
        (WTF::initializeThreading):
        * wtf/dtoa.cpp:
        (WTF::dtoa):
        * wtf/dtoa.h:
        * wtf/dtoa/COPYING: Added.
        * wtf/dtoa/LICENSE: Added.
        * wtf/dtoa/README: Added.
        * wtf/dtoa/bignum-dtoa.cc: Added.
        * wtf/dtoa/bignum-dtoa.h: Added.
        * wtf/dtoa/bignum.cc: Added.
        * wtf/dtoa/bignum.h: Added.
        (WTF::double_conversion::Bignum::Times10):
        (WTF::double_conversion::Bignum::Equal):
        (WTF::double_conversion::Bignum::LessEqual):
        (WTF::double_conversion::Bignum::Less):
        (WTF::double_conversion::Bignum::PlusEqual):
        (WTF::double_conversion::Bignum::PlusLessEqual):
        (WTF::double_conversion::Bignum::PlusLess):
        (WTF::double_conversion::Bignum::EnsureCapacity):
        (WTF::double_conversion::Bignum::BigitLength):
        * wtf/dtoa/cached-powers.cc: Added.
        * wtf/dtoa/cached-powers.h: Added.
        * wtf/dtoa/diy-fp.cc: Added.
        * wtf/dtoa/diy-fp.h: Added.
        (WTF::double_conversion::DiyFp::DiyFp):
        (WTF::double_conversion::DiyFp::Subtract):
        (WTF::double_conversion::DiyFp::Minus):
        (WTF::double_conversion::DiyFp::Times):
        (WTF::double_conversion::DiyFp::Normalize):
        (WTF::double_conversion::DiyFp::f):
        (WTF::double_conversion::DiyFp::e):
        (WTF::double_conversion::DiyFp::set_f):
        (WTF::double_conversion::DiyFp::set_e):
        * wtf/dtoa/double-conversion.cc: Added.
        * wtf/dtoa/double-conversion.h: Added.
        (WTF::double_conversion::DoubleToStringConverter::DoubleToStringConverter):
        (WTF::double_conversion::StringToDoubleConverter::StringToDoubleConverter):
        * wtf/dtoa/double.h: Added.
        (WTF::double_conversion::double_to_uint64):
        (WTF::double_conversion::uint64_to_double):
        (WTF::double_conversion::Double::Double):
        (WTF::double_conversion::Double::AsDiyFp):
        (WTF::double_conversion::Double::AsNormalizedDiyFp):
        (WTF::double_conversion::Double::AsUint64):
        (WTF::double_conversion::Double::NextDouble):
        (WTF::double_conversion::Double::Exponent):
        (WTF::double_conversion::Double::Significand):
        (WTF::double_conversion::Double::IsDenormal):
        (WTF::double_conversion::Double::IsSpecial):
        (WTF::double_conversion::Double::IsNan):
        (WTF::double_conversion::Double::IsInfinite):
        (WTF::double_conversion::Double::Sign):
        (WTF::double_conversion::Double::UpperBoundary):
        (WTF::double_conversion::Double::NormalizedBoundaries):
        (WTF::double_conversion::Double::value):
        (WTF::double_conversion::Double::SignificandSizeForOrderOfMagnitude):
        (WTF::double_conversion::Double::Infinity):
        (WTF::double_conversion::Double::NaN):
        (WTF::double_conversion::Double::DiyFpToUint64):
        * wtf/dtoa/fast-dtoa.cc: Added.
        * wtf/dtoa/fast-dtoa.h: Added.
        * wtf/dtoa/fixed-dtoa.cc: Added.
        * wtf/dtoa/fixed-dtoa.h: Added.
        * wtf/dtoa/strtod.cc: Added.
        * wtf/dtoa/strtod.h: Added.
        * wtf/dtoa/utils.h: Added.
        (WTF::double_conversion::Max):
        (WTF::double_conversion::Min):
        (WTF::double_conversion::StrLength):
        (WTF::double_conversion::Vector::Vector):
        (WTF::double_conversion::Vector::SubVector):
        (WTF::double_conversion::Vector::length):
        (WTF::double_conversion::Vector::is_empty):
        (WTF::double_conversion::Vector::start):
        (WTF::double_conversion::Vector::operator[]):
        (WTF::double_conversion::Vector::first):
        (WTF::double_conversion::Vector::last):
        (WTF::double_conversion::StringBuilder::StringBuilder):
        (WTF::double_conversion::StringBuilder::~StringBuilder):
        (WTF::double_conversion::StringBuilder::size):
        (WTF::double_conversion::StringBuilder::position):
        (WTF::double_conversion::StringBuilder::Reset):
        (WTF::double_conversion::StringBuilder::AddCharacter):
        (WTF::double_conversion::StringBuilder::AddString):
        (WTF::double_conversion::StringBuilder::AddSubstring):
        (WTF::double_conversion::StringBuilder::AddPadding):
        (WTF::double_conversion::StringBuilder::Finalize):
        (WTF::double_conversion::StringBuilder::is_finalized):
        (WTF::double_conversion::BitCast):
        * wtf/wtf.pri:

2011-09-02  Filip Pizlo  <fpizlo@apple.com>

        DFG graph has no way of distinguishing or reconciling between static
        and dynamic predictions
        https://bugs.webkit.org/show_bug.cgi?id=67343

        Reviewed by Gavin Barraclough.
        
        PredictedType now stores the source of the prediction.  Merging predictions,
        which was previously done with a bitwise or, is now done via the
        mergePredictions (equivalent to |) and mergePrediction (equivalent to |=)
        functions, which correctly handle combinations of static and dynamic.
        
        This is performance-neutral, since all predictions are currently static and
        so the code has no visible effects.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::set):
        (JSC::DFG::ByteCodeParser::staticallyPredictArray):
        (JSC::DFG::ByteCodeParser::staticallyPredictInt32):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::predict):
        (JSC::DFG::Graph::predictGlobalVar):
        * dfg/DFGNode.h:
        (JSC::DFG::isArrayPrediction):
        (JSC::DFG::isInt32Prediction):
        (JSC::DFG::isDoublePrediction):
        (JSC::DFG::isDynamicPrediction):
        (JSC::DFG::mergePredictions):
        (JSC::DFG::mergePrediction):
        (JSC::DFG::makePrediction):
        (JSC::DFG::Node::predict):

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

        Fix 32bit build.

        * heap/NewSpace.h:
        (JSC::NewSpace::allocatePropertyStorage):
        (JSC::NewSpace::inPropertyStorageNursery):

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

        Use bump allocator for initial property storage
        https://bugs.webkit.org/show_bug.cgi?id=67494

        Reviewed by Gavin Barraclough.

        Switch to a bump allocator for the initial out of line
        property storage.  This gives us slightly faster allocation
        for short lived objects that need out of line storage at
        the cost of an additional memcpy when the object survives
        a GC pass.

        No performance impact.

        * JavaScriptCore.exp:
        * heap/Heap.cpp:
        (JSC::Heap::collect):
        * heap/Heap.h:
        (JSC::Heap::allocatePropertyStorage):
        (JSC::Heap::inPropertyStorageNursary):
        * heap/NewSpace.cpp:
        (JSC::NewSpace::NewSpace):
        * heap/NewSpace.h:
        (JSC::NewSpace::resetPropertyStorageNursary):
        (JSC::NewSpace::allocatePropertyStorage):
        (JSC::NewSpace::inPropertyStorageNursary):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSObject.cpp:
        (JSC::JSObject::allocatePropertyStorage):
        * runtime/JSObject.h:
        (JSC::JSObject::~JSObject):
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::putDirectWithoutTransition):
        (JSC::JSObject::putDirectFunctionWithoutTransition):
        (JSC::JSObject::transitionTo):
        (JSC::JSObject::visitChildrenDirect):

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

        Fix the build.

        * JavaScriptCore.JSVALUE32_64only.exp:
        * JavaScriptCore.JSVALUE64only.exp:
        * JavaScriptCore.exp:

2011-09-01  Mark Hahnenberg  <mhahnenberg@apple.com>

        Unzip initialization lists and constructors in JSCell hierarchy (4/7)
        https://bugs.webkit.org/show_bug.cgi?id=67174

        Reviewed by Oliver Hunt.

        Completed the fourth level of the refactoring to add finishCreation() 
        methods to all classes within the JSCell hierarchy with non-trivial 
        constructor bodies.

        This primarily consists of pushing the calls to finishCreation() down 
        into the constructors of the subclasses of the second level of the hierarchy 
        as well as pulling the finishCreation() calls out into the class's corresponding
        create() method if it has one.  Doing both simultaneously allows us to 
        maintain the invariant that the finishCreation() method chain is called exactly 
        once during the creation of an object, since calling it any other number of 
        times (0, 2, or more) will cause an assertion failure.

        * API/JSCallbackConstructor.cpp:
        (JSC::JSCallbackConstructor::JSCallbackConstructor):
        (JSC::JSCallbackConstructor::finishCreation):
        * API/JSCallbackConstructor.h:
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::create):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::JSCallbackObject):
        (JSC::::finishCreation):
        * JavaScriptCore.JSVALUE64only.exp:
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::DebuggerActivation):
        (JSC::DebuggerActivation::create):
        * debugger/DebuggerActivation.h:
        * runtime/Arguments.h:
        (JSC::Arguments::create):
        (JSC::Arguments::createNoParameters):
        (JSC::Arguments::Arguments):
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::ArrayPrototype):
        (JSC::ArrayPrototype::finishCreation):
        * runtime/ArrayPrototype.h:
        * runtime/BooleanObject.cpp:
        (JSC::BooleanObject::BooleanObject):
        (JSC::BooleanObject::finishCreation):
        * runtime/BooleanObject.h:
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        (JSC::DateInstance::finishCreation):
        * runtime/DateInstance.h:
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::create):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        (JSC::ErrorPrototype::finishCreation):
        * runtime/ErrorPrototype.h:
        * runtime/ExceptionHelpers.cpp:
        (JSC::InterruptedExecutionError::InterruptedExecutionError):
        (JSC::InterruptedExecutionError::create):
        (JSC::TerminatedExecutionError::TerminatedExecutionError):
        (JSC::TerminatedExecutionError::create):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::EvalExecutable):
        (JSC::ProgramExecutable::ProgramExecutable):
        (JSC::FunctionExecutable::FunctionExecutable):
        * runtime/Executable.h:
        (JSC::NativeExecutable::create):
        (JSC::NativeExecutable::NativeExecutable):
        (JSC::EvalExecutable::create):
        (JSC::ProgramExecutable::create):
        (JSC::FunctionExecutable::create):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction):
        (JSC::InternalFunction::finishCreation):
        * runtime/InternalFunction.h:
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::JSActivation):
        (JSC::JSActivation::finishCreation):
        * runtime/JSActivation.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        * runtime/JSArray.h:
        (JSC::JSArray::create):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::JSByteArray):
        * runtime/JSByteArray.h:
        (JSC::JSByteArray::create):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::finishCreation):
        * runtime/JSFunction.h:
        (JSC::JSFunction::create):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObject):
        (JSC::JSGlobalObject::finishCreation):
        * runtime/JSNotAnObject.h:
        (JSC::JSNotAnObject::JSNotAnObject):
        (JSC::JSNotAnObject::create):
        * runtime/JSONObject.cpp:
        (JSC::JSONObject::JSONObject):
        (JSC::JSONObject::finishCreation):
        * runtime/JSONObject.h:
        * runtime/JSObjectWithGlobalObject.cpp:
        (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
        * runtime/JSObjectWithGlobalObject.h:
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::create):
        (JSC::JSStaticScopeObject::finishCreation):
        (JSC::JSStaticScopeObject::JSStaticScopeObject):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::JSVariableObject):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::JSWrapperObject):
        * runtime/MathObject.cpp:
        (JSC::MathObject::MathObject):
        (JSC::MathObject::finishCreation):
        * runtime/MathObject.h:
        * runtime/NumberObject.cpp:
        (JSC::NumberObject::NumberObject):
        (JSC::NumberObject::finishCreation):
        * runtime/NumberObject.h:
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::ObjectPrototype):
        * runtime/ObjectPrototype.h:
        (JSC::ObjectPrototype::create):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpMatchesArray::RegExpMatchesArray):
        (JSC::RegExpMatchesArray::finishCreation):
        * runtime/RegExpMatchesArray.h:
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::RegExpObject):
        (JSC::RegExpObject::finishCreation):
        * runtime/RegExpObject.h:
        * runtime/StrictEvalActivation.cpp:
        (JSC::StrictEvalActivation::StrictEvalActivation):
        * runtime/StrictEvalActivation.h:
        (JSC::StrictEvalActivation::create):
        * runtime/StringObject.cpp:
        (JSC::StringObject::StringObject):
        (JSC::StringObject::finishCreation):
        * runtime/StringObject.h:

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

        QNX GCC distribution doesn't support vasprintf()
        https://bugs.webkit.org/show_bug.cgi?id=67423

        Reviewed by Antonio Gomes.

        * wtf/Platform.h: Don't enable HAVE_VASPRINTF when building with GCC on QNX.

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

        Remove simple usage of UString::characters() from JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=67340

        In preparation to allowing StringImpl to be backed by 8 bit 
        characters when appropriate, we need to eliminate or change the
        usage of StringImpl::characters().  Most of the changes below
        change s->characters()[0] to s[0].

        Reviewed by Geoffrey Garen.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::keyForCharacterSwitch):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::processClauseList):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Identifier.cpp:
        (JSC::Identifier::addSlowCase):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::jsToNumber):
        (JSC::parseFloat):
        * runtime/JSString.cpp:
        (JSC::JSString::substringFromRope):
        * runtime/JSString.h:
        (JSC::jsSingleCharacterSubstring):
        (JSC::jsString):
        (JSC::jsSubstring):
        (JSC::jsOwnedString):
        * runtime/RegExp.cpp:
        (JSC::regExpFlags):
        * wtf/text/StringBuilder.h:
        (WTF::StringBuilder::operator[]):

2011-09-01  Ada Chan  <adachan@apple.com>

        Export fastMallocStatistics and Heap::objectTypeCounts for https://bugs.webkit.org/show_bug.cgi?id=67160.

        Reviewed by Darin Adler.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-09-01  Hao Zheng  <zhenghao@chromium.org>

        Define PTHREAD_KEYS_MAX to fix Android port build.
        https://bugs.webkit.org/show_bug.cgi?id=67362

        Reviewed by Adam Barth.

        PTHREAD_KEYS_MAX is not defined in bionic, so explicitly define it.

        * wtf/ThreadIdentifierDataPthreads.cpp:

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

        Fix build.

        * wtf/CheckedArithmetic.h:
        (WTF::Checked::Checked):
        (WTF::Checked::operator=):

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

        fast/regex/overflow.html asserts in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=67326

        Reviewed by Gavin Barraclough.

        The deliberate overflows in these expressions don't interact nicely
        with Checked<32bit-type> so we just bump up to Checked<int64_t> for the
        intermediate calculations.

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
        (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):

2011-08-31  Jeff Miller  <jeffm@apple.com>

        REGRESSION(92210): AVFoundation media engine is disabled on OS X
        https://bugs.webkit.org/show_bug.cgi?id=67316

        Move the definition of WTF_USE_AVFOUNDATION on the Mac back to JavaScriptCore/wtf/Platform.h,
        since WebKit2 doesn't have access to WebCore/config.h on this platform. This reverts the
        changes that were made in r92210.

        Reviewed by Darin Adler.

        * wtf/Platform.h: Added definition of WTF_USE_AVFOUNDATION on the Mac.

2011-08-31  Peter Beverloo  <peter@chromium.org>

        Add Android's platform specification and the right atomic functions.
        https://bugs.webkit.org/show_bug.cgi?id=66687

        Reviewed by Adam Barth.

        * wtf/Atomics.h:
        (WTF::atomicIncrement):
        (WTF::atomicDecrement):
        * wtf/Platform.h:

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

        Add support for checked arithmetic
        https://bugs.webkit.org/show_bug.cgi?id=67095

        Reviewed by Sam Weinig.

        Add a checked arithmetic class Checked<T> that provides overflow-safe
        arithmetic over all integral types.  Checked<T> supports addition, subtraction
        and multiplication, along with "bool" conversions and equality operators.

        Checked<> can be used in either CRASH() on overflow or delayed failure modes,
        although the default is to CRASH().

        To ensure the code is actually in use (rather than checking in dead code) I've
        made a couple of properties in YARR use Checked<int> and Checked<unsigned>
        instead of raw value arithmetic.  This has resulted in a moderate set of changes,
        to YARR - mostly adding .get() calls, but a couple of casts from unsigned long
        to unsigned for some uses of sizeof, as Checked<> currently does not support
        mixed signed-ness of types wider that 32 bits.

        Happily the increased type safety of Checked<> means that it's not possible to
        accidentally assign away precision, nor accidentally call integer overload of
        a function instead of the bool version.

        No measurable regression in performance, and SunSpider claims this patch to be
        a progression of 0.3%.

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/CheckedArithmetic.h: Added.
        (WTF::CrashOnOverflow::overflowed):
        (WTF::CrashOnOverflow::clearOverflow):
        (WTF::CrashOnOverflow::hasOverflowed):
        (WTF::RecordOverflow::RecordOverflow):
        (WTF::RecordOverflow::overflowed):
        (WTF::RecordOverflow::clearOverflow):
        (WTF::RecordOverflow::hasOverflowed):
        (WTF::isInBounds):
        (WTF::safeAdd):
        (WTF::safeSub):
        (WTF::safeMultiply):
        (WTF::safeEquals):
        (WTF::workAroundClangBug):
        (WTF::Checked::Checked):
        (WTF::Checked::operator=):
        (WTF::Checked::operator++):
        (WTF::Checked::operator--):
        (WTF::Checked::operator!):
        (WTF::Checked::operator UnspecifiedBoolType*):
        (WTF::Checked::get):
        (WTF::Checked::operator+=):
        (WTF::Checked::operator-=):
        (WTF::Checked::operator*=):
        (WTF::Checked::operator==):
        (WTF::Checked::operator!=):
        (WTF::operator+):
        (WTF::operator-):
        (WTF::operator*):
        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::ByteCompiler::atomPatternCharacter):
        (JSC::Yarr::ByteCompiler::atomCharacterClass):
        (JSC::Yarr::ByteCompiler::atomBackReference):
        (JSC::Yarr::ByteCompiler::atomParentheticalAssertionEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesOnceEnd):
        (JSC::Yarr::ByteCompiler::atomParenthesesTerminalEnd):
        * yarr/YarrInterpreter.h:
        (JSC::Yarr::ByteTerm::ByteTerm):
        (JSC::Yarr::ByteTerm::CheckInput):
        (JSC::Yarr::ByteTerm::UncheckInput):
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::generateAssertionEOL):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy):
        (JSC::Yarr::YarrGenerator::backtrackPatternCharacterNonGreedy):
        (JSC::Yarr::YarrGenerator::generateCharacterClassOnce):
        (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
        (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy):
        (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
        * yarr/YarrPattern.cpp:
        (JSC::Yarr::YarrPatternConstructor::setupAlternativeOffsets):
        * yarr/YarrPattern.h:

2011-08-31  Andrei Popescu  <andreip@google.com>

        Investigate current uses of OS(ANDROID)
        https://bugs.webkit.org/show_bug.cgi?id=66761

        Unreviewed, build fix for ARM platforms.

        * wtf/Platform.h:

2011-08-31  Andrei Popescu  <andreip@google.com>

        Investigate current uses of OS(ANDROID)
        https://bugs.webkit.org/show_bug.cgi?id=66761

        Reviewed by Darin Adler.

        Remove the last legacy Android code.

        No new tests needed as the code wasn't tested in the first place.

        * wtf/Atomics.h:
        * wtf/Platform.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::createThreadInternal):

2011-08-30  Aaron Colwell  <acolwell@chromium.org>

        Add MediaSource API to HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=64731

        Reviewed by Eric Carlson.

        * Configurations/FeatureDefines.xcconfig:

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

        TypedArrays don't ensure that denormalised values are normalised
        https://bugs.webkit.org/show_bug.cgi?id=67178

        Reviewed by Gavin Barraclough.

        Add a couple of assertions to jsNumber() to ensure that
        we block signaling NaNs

        * runtime/JSValue.h:
        (JSC::jsDoubleNumber):
        (JSC::jsNumber):

2011-08-30  Ademar de Souza Reis Jr.  <ademar.reis@openbossa.org>

        [Qt] Do not unconditionally use pkg-config in .pro files
        https://bugs.webkit.org/show_bug.cgi?id=67055

        Reviewed by Andreas Kling.

        Original patch from Rohan McGovern <rohan.mcgovern@nokia.com>

        Using the first pkg-config in PATH is prone to errors when cross
        compiling inside the Qt repository (using Qt's build-system).

        This patch protect calls for pkg-config with
        !contains(QT_CONFIG, no-pkg-config). no-pkg-config is added to
        QT_CONFIG by Qt's 'configure' when cross-compiling on systems
        without pkg-config.

        The respective change in Qt's configure has been submited already.

        No new tests as this is just a build change.

        * wtf/wtf.pri: protect pkg-config calls

2011-08-29  Daniel Bates  <dbates@webkit.org>

        Add HAVE(VASPRINTF) macro to test for vasprintf() support
        https://bugs.webkit.org/show_bug.cgi?id=67156

        Reviewed by Darin Adler.

        Encapsulate testing of vasprintf() support in a HAVE macro
        instead of hardcoding the list of supported/unsupported
        compilers at the call site.

        * wtf/Platform.h:

2011-08-29  Mark Hahnenberg  <mhahnenberg@apple.com>

        Unzip initialization lists and constructors in JSCell hierarchy (3/7)
        https://bugs.webkit.org/show_bug.cgi?id=67064

        Reviewed by Darin Adler.

        Completed the third level of the refactoring to add finishCreation() 
        methods to all classes within the JSCell hierarchy with non-trivial 
        constructor bodies.

        This primarily consists of pushing the calls to finishCreation() down 
        into the constructors of the subclasses of the second level of the hierarchy 
        as well as pulling the finishCreation() calls out into the class's corresponding
        create() method if it has one.  Doing both simultaneously allows us to 
        maintain the invariant that the finishCreation() method chain is called exactly 
        once during the creation of an object, since calling it any other number of 
        times (0, 2, or more) will cause an assertion failure.

        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::DebuggerActivation):
        (JSC::DebuggerActivation::finishCreation):
        * debugger/DebuggerActivation.h:
        (JSC::DebuggerActivation::create):
        * runtime/Arguments.h:
        (JSC::Arguments::create):
        (JSC::Arguments::createNoParameters):
        (JSC::Arguments::Arguments):
        (JSC::Arguments::finishCreation):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::finishCreation):
        * runtime/ExceptionHelpers.cpp:
        (JSC::InterruptedExecutionError::InterruptedExecutionError):
        (JSC::TerminatedExecutionError::TerminatedExecutionError):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::EvalExecutable):
        (JSC::ProgramExecutable::ProgramExecutable):
        (JSC::FunctionExecutable::FunctionExecutable):
        Moved the assignment of m_firstLine and m_lastLine into the 
        FunctionExecutable::finishCreation() method in Executable.h
        * runtime/Executable.h:
        (JSC::ScriptExecutable::ScriptExecutable):
        (JSC::EvalExecutable::create):
        (JSC::ProgramExecutable::create):
        (JSC::FunctionExecutable::create):
        (JSC::FunctionExecutable::finishCreation):
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        (JSC::JSArray::finishCreation):
        * runtime/JSArray.h:
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::JSByteArray):
        * runtime/JSByteArray.h:
        (JSC::JSByteArray::finishCreation):
        * runtime/JSNotAnObject.h:
        (JSC::JSNotAnObject::JSNotAnObject):
        * runtime/JSObject.h:
        (JSC::JSNonFinalObject::JSNonFinalObject):
        * runtime/JSObjectWithGlobalObject.cpp:
        (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
        (JSC::JSObjectWithGlobalObject::finishCreation):
        * runtime/JSObjectWithGlobalObject.h:
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::JSVariableObject):
        (JSC::JSVariableObject::finishCreation):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::JSWrapperObject):
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::ObjectPrototype):
        (JSC::ObjectPrototype::finishCreation):
        * runtime/ObjectPrototype.h:
        * runtime/StrictEvalActivation.cpp:
        (JSC::StrictEvalActivation::StrictEvalActivation):

2011-08-29  Andreas Kling  <kling@webkit.org>

        Unreviewed build fix after r93990.

        * wtf/HashTable.h:

2011-08-29  Andreas Kling  <kling@webkit.org>

        Viewing a post on reddit.com wastes a lot of memory on event listeners.
        https://bugs.webkit.org/show_bug.cgi?id=67133

        Reviewed by Darin Adler.

        Add a minimum table size to the HashTraits, instead of having it hard coded.
        The default value remains at 64, but can now be specialized.

        * runtime/StructureTransitionTable.h:
        * wtf/HashTable.h:
        (WTF::HashTable::shouldShrink):
        (WTF::::expand):
        (WTF::::checkTableConsistencyExceptSize):
        * wtf/HashTraits.h:

2011-08-28  Jonathan Liu  <net147@gmail.com>

        Fix build error when compiling with MinGW-w64 by disabling JIT
        on Windows 64-bit
        https://bugs.webkit.org/show_bug.cgi?id=61235

        Reviewed by Gavin Barraclough.

        The fixed mmap executable allocator for JIT on x86_64 requires
        sys/mman.h which is not available on Windows.

        * wtf/Platform.h:

2011-08-27  Filip Pizlo  <fpizlo@apple.com>

        JSC::Executable is inconsistent about using weak handle finalizers
        and destructors for releasing memory
        https://bugs.webkit.org/show_bug.cgi?id=67072

        Reviewed by Darin Adler.
        
        Moved more of the destruction of Executable state into the finalizer,
        which also resulted in an opportunity to mostly combine this with
        discardCode().  This also means that the finalizer is now enabled even
        when the JIT is turned off.  This is performance neutral on SunSpider,
        V8, and Kraken.

        * runtime/Executable.cpp:
        (JSC::ExecutableBase::clearCode):
        (JSC::ExecutableFinalizer::finalize):
        (JSC::EvalExecutable::clearCode):
        (JSC::ProgramExecutable::clearCode):
        (JSC::FunctionExecutable::discardCode):
        (JSC::FunctionExecutable::clearCode):
        * runtime/Executable.h:
        (JSC::ExecutableBase::finishCreation):

2011-08-26  Gavin Barraclough  <barraclough@apple.com>

        DFG JIT - ArithMod may clobber operands.
        https://bugs.webkit.org/show_bug.cgi?id=67085

        Reviewed by Sam Weinig.

        unboxDouble must be called on a temporary.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::fillDouble):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::boxDouble):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):

2011-08-26  Mark Hahnenberg  <mhahnenberg@apple.com>

        Unzip initialization lists and constructors in JSCell hierarchy (2/7)
        https://bugs.webkit.org/show_bug.cgi?id=66957

        Reviewed by Darin Adler.

        Completed the second level of the refactoring to add finishCreation()
        methods to all classes within the JSCell hierarchy with non-trivial 
        constructor bodies.

        * runtime/Executable.h:
        (JSC::ExecutableBase::ExecutableBase):
        (JSC::ExecutableBase::create):
        (JSC::NativeExecutable::create):
        (JSC::NativeExecutable::finishCreation):
        (JSC::NativeExecutable::NativeExecutable):
        (JSC::ScriptExecutable::ScriptExecutable):
        (JSC::ScriptExecutable::finishCreation):
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::GetterSetter):
        (JSC::GetterSetter::create):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::create):
        (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
        * runtime/JSObject.h:
        (JSC::JSNonFinalObject::JSNonFinalObject):
        (JSC::JSNonFinalObject::finishCreation):
        (JSC::JSFinalObject::create):
        (JSC::JSFinalObject::finishCreation):
        (JSC::JSFinalObject::JSFinalObject):
        (JSC::JSObject::JSObject):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
        (JSC::JSPropertyNameIterator::create):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::create):
        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::createWithoutCaching):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::ScopeChainNode):
        (JSC::ScopeChainNode::create):
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        * runtime/Structure.h:
        (JSC::Structure::create):
        (JSC::Structure::finishCreation):
        (JSC::Structure::createStructure):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::StructureChain):
        * runtime/StructureChain.h:
        (JSC::StructureChain::create):

2011-08-26  Filip Pizlo  <fpizlo@apple.com>

        The GC does not have a facility for profiling the kinds of objects
        that occupy the heap
        https://bugs.webkit.org/show_bug.cgi?id=66849

        Reviewed by Geoffrey Garen.
        
        Destructor calls and object scans are now optionally counted, per
        vtable. When the heap is destroyed and profiling is enabled, the
        counts are dumped, with care taken to print the names of classes
        (modulo C++ mangling) sorted in descending commonality.

        * GNUmakefile.list.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/Heap.cpp:
        (JSC::Heap::destroy):
        * heap/Heap.h:
        * heap/MarkStack.cpp:
        (JSC::SlotVisitor::visitChildren):
        (JSC::SlotVisitor::drain):
        * heap/MarkStack.h:
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::callDestructor):
        * heap/MarkedBlock.h:
        * heap/VTableSpectrum.cpp: Added.
        (JSC::VTableSpectrum::VTableSpectrum):
        (JSC::VTableSpectrum::~VTableSpectrum):
        (JSC::VTableSpectrum::countVPtr):
        (JSC::VTableSpectrum::count):
        (JSC::VTableAndCount::VTableAndCount):
        (JSC::VTableAndCount::operator<):
        (JSC::VTableSpectrum::dump):
        * heap/VTableSpectrum.h: Added.
        * wtf/Platform.h:

2011-08-26  Juan C. Montemayor  <jmont@apple.com>

        Update topCallFrame when calling host functions in the JIT
        https://bugs.webkit.org/show_bug.cgi?id=67010

        Reviewed by Oliver Hunt.
        
        The topCallFrame is not being updated when a host function is
        called by the JIT. This causes problems when trying to create a
        stack trace (https://bugs.webkit.org/show_bug.cgi?id=66994).

        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::privateCompileCTINativeCall):

2011-08-26  Alexey Proskuryakov  <ap@apple.com>

        Get rid of frame life support timer
        https://bugs.webkit.org/show_bug.cgi?id=66874

        Reviewed by Geoff Garen.

        * runtime/JSGlobalObject.h:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        globalExec() no longer needs to be virtual, its only override was in JSDOMWindowBase.

2011-08-26  Chao-ying Fu  <fu@mips.com>

        Fix MIPS patchOffsetGetByIdSlowCaseCall
        https://bugs.webkit.org/show_bug.cgi?id=67046

        Reviewed by Gavin Barraclough.

        * jit/JIT.h:

2011-08-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Fixing broken build due to unused variables in release mode
        https://bugs.webkit.org/show_bug.cgi?id=67004

        Unreviewed, release build fix.

        Fixing broken build due to unused variables in ASSERTs in release build.

        * runtime/JSObject.h:
        (JSC::JSObject::finishCreation):
        * runtime/JSString.h:
        (JSC::RopeBuilder::finishCreation):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::finishCreation):

2011-08-25  Mark Hahnenberg  <mhahnenberg@apple.com>

        Unzip initialization lists and constructors in JSCell hierarchy (1/7)
        https://bugs.webkit.org/show_bug.cgi?id=66827

        Reviewed by Geoffrey Garen.

        Added finishCreation() methods to all immediately subclasses of JSCell with
        non-empty constructors.  Part of a larger refactoring to "unzip" initialization
        lists and constructor bodies.  Also renamed JSCell's constructorBody() method
        to finishCreation().

        * runtime/Executable.h:
        (JSC::ExecutableBase::ExecutableBase):
        (JSC::ExecutableBase::constructorBody):
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::GetterSetter):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::constructorBody):
        (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
        * runtime/JSCell.h:
        (JSC::JSCell::JSCell::JSCell):
        (JSC::JSCell::JSCell::constructorBody):
        * runtime/JSObject.h:
        (JSC::JSObject::constructorBody):
        (JSC::JSObject::JSObject):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::constructorBody):
        * runtime/JSString.h:
        (JSC::RopeBuilder::JSString):
        (JSC::RopeBuilder::constructorBody):
        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::constructorBody):
        * runtime/RegExp.h:
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::ScopeChainNode):
        (JSC::ScopeChainNode::constructorBody):
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::StructureChain):
        * runtime/StructureChain.h:
        (JSC::StructureChain::create):
        (JSC::StructureChain::constructorBody):

2011-08-25  Gabor Loki  <loki@webkit.org>

        REGRESSION(r93755): It made 14 jsc test and ~500 layout test fail on Qt-ARM bot
        https://bugs.webkit.org/show_bug.cgi?id=66956

        Rebaseline constants for patching GetByIdSlowCaseCall on ARM.

        Reviewed by Oliver Hunt.

        * jit/JIT.h:

2011-08-24  Juan C. Montemayor  <jmont@apple.com>

        Keep track of topCallFrame for Stack traces
        https://bugs.webkit.org/show_bug.cgi?id=66571

        Reviewed by Geoffrey Garen.

        This patch adds a TopCallFrame to JSC in order to have that information
        when an error is thrown to create a stack trace. The TopCallFrame is
        updated throughout select points in the Interpreter and the JSC.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::privateExecute):
        * interpreter/Interpreter.h:
        (JSC::TopCallFrameSetter::TopCallFrameSetter):
        (JSC::TopCallFrameSetter::~TopCallFrameSetter):
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::updateTopCallFrame):
        * jit/JITStubCall.h:
        (JSC::JITStubCall::call):
        * jit/JITStubs.cpp:
        (JSC::throwExceptionFromOpCall):
        (JSC::DEFINE_STUB_FUNCTION):
        (JSC::arityCheckFor):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:

2011-08-24  Filip Pizlo  <fpizlo@apple.com>

        ErrorInstance::create sometimes has two heap object constructions
        in flight at once
        https://bugs.webkit.org/show_bug.cgi?id=66845

        Reviewed by Darin Adler.
        
        The fix is simple since there is already a second create() method
        that takes a UString.

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

2011-08-24  Filip Pizlo  <fpizlo@apple.com>

        There is no facility for profiling how the write barrier is used
        https://bugs.webkit.org/show_bug.cgi?id=66747

        Reviewed by Geoffrey Garen.
        
        Added facilities for the JIT to specify the kind of write barrier
        being executed.  Added code for profiling the number of each kind
        of barrier encountered.

        * GNUmakefile.list.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::writeBarrier):
        (JSC::DFG::JITCodeGenerator::cachedPutById):
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::emitCount):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::emitCount):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::tryCachePutByID):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * heap/Heap.h:
        (JSC::Heap::writeBarrier):
        * heap/WriteBarrierSupport.cpp: Added.
        (JSC::WriteBarrierCounters::initialize):
        * heap/WriteBarrierSupport.h: Added.
        (JSC::WriteBarrierCounters::WriteBarrierCounters):
        (JSC::WriteBarrierCounters::jitCounterFor):
        (JSC::WriteBarrierCounters::countWriteBarrier):
        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::emit_op_put_scoped_var):
        (JSC::JIT::emit_op_put_global_var):
        (JSC::JIT::emitWriteBarrier):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::emit_op_put_scoped_var):
        (JSC::JIT::emit_op_put_global_var):
        (JSC::JIT::emitWriteBarrier):
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreadingOnce):
        * runtime/WriteBarrier.h:
        (JSC::WriteBarrierBase::setWithoutWriteBarrier):

2011-08-23  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add checks to ensure allocation does not take place during initialization of GC-managed objects
        https://bugs.webkit.org/show_bug.cgi?id=65288

        Reviewed by Darin Adler.

        Adding the new validation functionality.  In its current state, it will performs checks, 
        but they don't fail unless you do allocation in the arguments to the parent constructor in the 
        initialization list of a class.  The allocateCell() method turns on the global flag disallowing any new 
        allocations, and the constructorBody() method in JSCell turns it off.  This way, allocation is still 
        allowed in constructor bodies while other refactoring efforts continue.

        * runtime/JSCell.h:
        (JSC::JSCell::JSCell::constructorBody):
        (JSC::JSCell::JSCell::JSCell):
        (JSC::JSCell::allocateCell):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::isInitializingObject):
        (JSC::JSGlobalData::setInitializingObject):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::create):

2011-08-23  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=55347
        "name" and "message" enumerable on *Error.prototype

        Reviewed by Sam Weinig.

        The default value of a NativeErrorPrototype's message
        property is "", not the name of the error.

        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * runtime/NativeErrorConstructor.h:
        (JSC::NativeErrorConstructor::create):
        (JSC::NativeErrorConstructor::constructorBody):
        * runtime/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::NativeErrorPrototype):
        (JSC::NativeErrorPrototype::constructorBody):
        * runtime/NativeErrorPrototype.h:
        (JSC::NativeErrorPrototype::create):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        * runtime/StringPrototype.h:
        (JSC::StringPrototype::create):

2011-08-23  Steve Block  <steveblock@google.com>

        Remove last occurrences of PLATFORM(ANDROID)
        https://bugs.webkit.org/show_bug.cgi?id=66763

        Reviewed by Tony Gentilcore.

        * wtf/Platform.h:

2011-08-23  Steve Block  <steveblock@google.com>

        Remove all mention of removed Android files from build scripts
        https://bugs.webkit.org/show_bug.cgi?id=66755

        Reviewed by Tony Gentilcore.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:
        * JavaScriptCore.gypi:
        * gyp/JavaScriptCore.gyp:

2011-08-23  Adam Barth  <abarth@webkit.org>

        Remove WebCore/editing/android and other Android-specific directories
        https://bugs.webkit.org/show_bug.cgi?id=66739

        Reviewed by Steve Block.

        Now that Android shares more code with Chromium, we don't need these
        Android-specific files.

        * wtf/android: Removed.
        * wtf/android/AndroidThreading.h: Removed.
        * wtf/android/MainThreadAndroid.cpp: Removed.

2011-08-23  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed build fix for compile error on Windows for r93560.

        * runtime/SamplingCounter.h:

2011-08-22  Filip Pizlo  <fpizlo@apple.com>

        Sampling counter support is in the bytecode directory
        https://bugs.webkit.org/show_bug.cgi?id=66724

        Reviewed by Darin Adler.
        
        Moved SamplingCounter to a separate header in runtime/.

        * GNUmakefile.list.am:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/SamplingTool.cpp:
        * bytecode/SamplingTool.h:
        * runtime/SamplingCounter.cpp: Added.
        (JSC::AbstractSamplingCounter::dump):
        * runtime/SamplingCounter.h: Added.
        (JSC::AbstractSamplingCounter::count):
        (JSC::AbstractSamplingCounter::addressOfCounter):
        (JSC::AbstractSamplingCounter::init):
        (JSC::SamplingCounter::SamplingCounter):
        (JSC::GlobalSamplingCounter::name):
        (JSC::DeletableSamplingCounter::DeletableSamplingCounter):
        (JSC::DeletableSamplingCounter::~DeletableSamplingCounter):

2011-08-21  Martin Robinson  <mrobinson@igalia.com>

        Fix 'make dist' for WebKitGTK+.

        * GNUmakefile.list.am: Add a missing header to the sources list.

2011-08-20  Filip Pizlo  <fpizlo@apple.com>

        JavaScriptCore bytecompiler does not compute scope depth correctly
        in the case of constant declarations
        https://bugs.webkit.org/show_bug.cgi?id=66572

        Reviewed by Oliver Hunt.
        
        Changed the handling of const to add the dynamic scope depth.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::ConstDeclNode::emitCodeSingle):

2011-08-19  Daniel Bates  <dbates@webkit.org>

        Only #include <signal.h> and require SA_RESTART when building with JSC_MULTIPLE_THREADS
        https://bugs.webkit.org/show_bug.cgi?id=66617

        Both <signal.h> and SA_RESTART usage are guarded behind ENABLE(JSC_MULTIPLE_THREADS).
        But we cause a compile error if the platform doesn't support SA_RESTART regardless of
        whether JSC_MULTIPLE_THREADS is enabled for the port. Instead, we shouldn't require
        SA_RESTART support unless we are building with JSC_MULTIPLE_THREADS enabled.

        Reviewed by Antonio Gomes.

        * heap/MachineStackMarker.cpp:

2011-08-19  Filip Pizlo  <fpizlo@apple.com>

        The JSC JIT currently has no facility to profile and report
        the types of values
        https://bugs.webkit.org/show_bug.cgi?id=65901

        Reviewed by Gavin Barraclough.
        
        Added the ability to profile the values seen at function calls (both
        arguments and results) and heap loads.  This is done with emphasis
        on performance.  A value profiling site consists of: add, and,
        move, and store; no branching is necessary.  Each value profiling
        site (called a ValueProfile) has a ring buffer of 8 recently-seen
        values.  ValueProfiles are stored in the CodeBlock; there will be
        one for each argument (excluding this) and each heap load or callsite.
        Each time a value profiling site executes, it stores the value into
        a pseudo-random element in the ValueProfile buffer.  The point is
        that for frequently executed code, we will have 8 somewhat recent
        values in the buffer and will be able to not only figure out what
        type it is, but also to be able to reason about the actual values
        if we wish to do so.
        
        This feature is currently disabled by default.  When enabled, it
        results in a 3.7% slow-down on SunSpider.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addValueProfile):
        (JSC::CodeBlock::numberOfValueProfiles):
        (JSC::CodeBlock::valueProfile):
        (JSC::CodeBlock::valueProfileForBytecodeOffset):
        * bytecode/ValueProfile.h: Added.
        (JSC::ValueProfile::ValueProfile):
        (JSC::ValueProfile::numberOfSamples):
        (JSC::ValueProfile::computeProbability):
        (JSC::ValueProfile::numberOfInt32s):
        (JSC::ValueProfile::numberOfDoubles):
        (JSC::ValueProfile::numberOfCells):
        (JSC::ValueProfile::probabilityOfInt32):
        (JSC::ValueProfile::probabilityOfDouble):
        (JSC::ValueProfile::probabilityOfCell):
        (JSC::getValueProfileBytecodeOffset):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        (JSC::JIT::emitValueProfilingSite):
        * jit/JITCall.cpp:
        (JSC::JIT::emit_op_call_put_result):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitValueProfilingSite):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        * jit/JSInterfaceJIT.h:
        * wtf/Platform.h:
        * wtf/StdLibExtras.h:
        (WTF::binarySearch):
        (WTF::genericBinarySearch):

2011-08-19  Daniel Bates  <dbates@webkit.org>

        Don't include DisallowCType.h when building on QNX
        https://bugs.webkit.org/show_bug.cgi?id=66616

        Reviewed by Antonio Gomes.

        * config.h:

2011-08-19  Daniel Bates  <dbates@webkit.org>

        Implement ExecutableAllocator::cacheFlush() for QNX
        https://bugs.webkit.org/show_bug.cgi?id=66611

        Reviewed by Antonio Gomes.

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

2011-08-19  Daniel Bates  <dbates@webkit.org>

        Implement WTF::atomic{Increment, Decrement}() for QNX
        https://bugs.webkit.org/show_bug.cgi?id=66605

        Reviewed by Darin Adler.

        * wtf/Atomics.h:
        (WTF::atomicIncrement):
        (WTF::atomicDecrement):

2011-08-19  Beth Dakin  <bdakin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=66590
        Re-name scrollbar painter types

        Reviewed by Sam Weinig.

        WTF_USE_WK_SCROLLBAR_PAINTER is now WTF_USE_SCROLLBAR_PAINTER since WK no longer 
        applies.
        * wtf/Platform.h:

2011-08-18  Mark Hahnenberg  <mhahnenberg@apple.com>

        Move allocation in constructors into separate constructorBody() methods
        https://bugs.webkit.org/show_bug.cgi?id=66265

        Reviewed by Oliver Hunt.

        Refactoring to put all allocations that need to be done after the object's 
        initialization list has executed but before the object is ready for use 
        into a separate constructorBody() method.  This method is still called by the constructor, 
        so the patch doesn't resolve any potential issues, it's just to set up the code for further refactoring.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * jsc.cpp:
        (GlobalObject::constructorBody):
        (GlobalObject::GlobalObject):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::constructorBody):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        (JSC::ErrorPrototype::constructorBody):
        * runtime/ErrorPrototype.h:
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::FunctionExecutable):
        * runtime/Executable.h:
        (JSC::FunctionExecutable::constructorBody):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction):
        * runtime/InternalFunction.h:
        (JSC::InternalFunction::constructorBody):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::JSByteArray):
        * runtime/JSByteArray.h:
        (JSC::JSByteArray::constructorBody):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::constructorBody):
        * runtime/JSFunction.h:
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObject):
        (JSC::JSGlobalObject::constructorBody):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::constructorBody):
        * runtime/JSString.h:
        (JSC::RopeBuilder::JSString):
        (JSC::RopeBuilder::constructorBody):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * runtime/NativeErrorConstructor.h:
        (JSC::NativeErrorConstructor::constructorBody):
        * runtime/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::NativeErrorPrototype):
        (JSC::NativeErrorPrototype::constructorBody):
        * runtime/NativeErrorPrototype.h:
        * runtime/StringObject.cpp:
        * runtime/StringObject.h:
        (JSC::StringObject::create):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::create):
        (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        * runtime/StringPrototype.h:
        (JSC::StringPrototype::create):

2011-08-10  Filip Pizlo  <fpizlo@apple.com>

        DFG non-speculative JIT does not inline the double case of ValueAdd
        https://bugs.webkit.org/show_bug.cgi?id=66025

        Reviewed by Gavin Barraclough.
        
        This is a 1.3% win on Kraken overall, with >=8% speed-ups on a few
        benchmarks (imaging-darkroom, stanford-crypto-pbkdf2,
        stanford-crypto-sha256-iterative).  It looks like it might have
        a speed-up in SunSpider (though not statistically significant or
        particularly reproducible) and a slight slow-down in V8 (0.14%,
        not statistically significant).  It does slow down v8-crypto by
        1.5%.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::isKnownInteger):
        (JSC::DFG::JITCodeGenerator::isKnownNumeric):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
        (JSC::DFG::NonSpeculativeJIT::basicArithOp):
        * dfg/DFGOperations.cpp:

2011-08-18  Filip Pizlo  <fpizlo@apple.com>

        [jsfunfuzz] DFG speculative JIT does divide-by-zero checks incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=66426

        Reviewed by Oliver Hunt.
        
        Changed the branchTestPtr to branchTest32.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-08-17  Thouraya ANDOLSI  <thouraya.andolsi@st.com>

        https://bugs.webkit.org/show_bug.cgi?id=66379
        implements load32WithCompactAddressOffsetPatch function 
        and fixes store32 and moveWithPatch functions for SH4 platforms.

        Reviewed by Gavin Barraclough.

        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::rshift32):
        (JSC::MacroAssemblerSH4::store32):
        (JSC::MacroAssemblerSH4::load32WithCompactAddressOffsetPatch):
        (JSC::MacroAssemblerSH4::moveWithPatch):
        * assembler/SH4Assembler.h:
        (JSC::SH4Assembler::movlMemRegCompact):
        (JSC::SH4Assembler::readPointer):
        (JSC::SH4Assembler::repatchCompact):
        * jit/JIT.h:

2011-08-17  Filip Pizlo  <fpizlo@apple.com>

        JSC verbose debugging output sometimes doesn't work as expected.
        https://bugs.webkit.org/show_bug.cgi?id=66107

        Reviewed by Gavin Barraclough.
        
        Hardened the CodeBlock::dump() code so that it no longer crashes.  Improved
        the DFG verbose code so that it prints slightly more useful information.

        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::debugSize):
        * bytecode/CodeBlock.cpp:
        (JSC::valueToSourceString):
        (JSC::CodeBlock::dump):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::numberOfRegExps):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::link):

2011-08-16  Michael Saboff  <msaboff@apple.com>

        Crash in Structure::visitChildren running iAd.js regression test suite under memory pressure
        https://bugs.webkit.org/show_bug.cgi?id=66351

        JIT::privateCompilePutByIdTransition expects that regT0 and regT1
        have the basePayload and baseTag respectively.  In some cases,
        we may get to this generated code with one or both of these
        registers trash.  One know case is that regT0 on ARM may be
        trashed as regT0 (r0) is also arg0 and can be overrun with sp due
        to calls to JIT::restoreReturnAddress().  This patch uses the
        values on the stack.  A longer term solution is to work out all
        cases so that the register entry assumptions can assured.

        While fixing this, also determined that the additional stack offset
        of sizeof(void*) is not needed for ARM.

        Reviewed by Gavin Barraclough.

        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):

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

        https://bugs.webkit.org/show_bug.cgi?id=66263
        DFG JIT does not always zero extend boolean result of DFG operations

        Reviewed by Sam Weinig.

        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
            - Change bool return values to a 64-bit type.

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

        Crash accessing static property on sealed object
        https://bugs.webkit.org/show_bug.cgi?id=66242

        Reviewed by Sam Weinig.

        * runtime/JSObject.h:
        (JSC::JSObject::putDirectInternal):
            - should only check isExtensible if checkReadOnly.

2011-08-15  Sam Weinig  <sam@webkit.org>

        Fix release build when building with Clang.

        Reviewed by Anders Carlsson.

        * runtime/Identifier.cpp:
        (JSC::Identifier::checkCurrentIdentifierTable):
        Add NO_RETURN_DUE_TO_CRASH.

2011-08-15  Oliver Varga  <Varga.Oliver@stud.u-szeged.hu>

        Reviewed by Nikolas Zimmermann.

        Speed up SVGSMILElement::findInstanceTime.
        https://bugs.webkit.org/show_bug.cgi?id=61025

        Add a new parameter to StdlibExtras.h::binarySerarch function
        to also handle cases when the array does not contain the key value.
        This is needed for an svg function.

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

2011-08-13  Sam Weinig  <sam@webkit.org>

        Add back 0xbbadbeef to CRASH to allow for old habits
        https://bugs.webkit.org/show_bug.cgi?id=66190

        Reviewed by David Kilzer.

        * wtf/Assertions.h:
        Add back the assignment to the memory address 0xbbadbeef in the CRASH
        macro, as it does not cause issue in the clang static analyzer and many
        people use its presence in crash reports to easily identify ASSERTs. 

2011-08-13  Sam Weinig  <sam@webkit.org>

        Fix a bunch of minor bugs caught by the clang static analyzer in JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=66182

        Reviewed by Dan Bernstein.

        Fixes 10 warnings in JavaScriptCore and 2 in testapi.

        * API/tests/testapi.c:
        (main):
        Remove dead variables.

        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        Initialize hasPrinted and silence an unused warning by casting to void (Ok here
        since it is debug code and I want to keep it clear that if other cases are added,
        the hasPrinted flag would be needed).

        * wtf/dtoa.cpp:
        (WTF::d2b):
        The variable "de" in the else block is always zero, so there is no reason to
        use it.

2011-08-12  Sam Weinig  <sam@webkit.org>

        Use __builtin_trap() for CRASH when building with clang
        https://bugs.webkit.org/show_bug.cgi?id=66152

        Reviewed by Anders Carlsson.

        * wtf/Assertions.h:
        Add Clang specific CRASH macro that calls __builtin_trap() instead
        of silly techniques to crash. This allows the static analyzer to understand
        that we are intentionally crashing. As a result, we need to mark some functions
        as not returning.

        Also adds a macros that annotates a function as never returning due to ASSERT or CRASH.

        * wtf/Compiler.h:
        Add COMPILIER(CLANG) and fix some formatting and spelling mistakes.

        * wtf/FastMalloc.cpp:
        (WTF::Internal::fastMallocMatchFailed):
        Add NO_RETURN_DUE_TO_CRASH.

        * yarr/YarrParser.h:
        (JSC::Yarr::Parser::CharacterClassParserDelegate::assertionWordBoundary):
        (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBackReference):
        Add NO_RETURN_DUE_TO_ASSERT.

2011-08-12  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT has inconsistent use of boxDouble and unboxDouble,
        inconsistent use of assertions regarding doubles, and those
        assertions are not turned on in debug builds
        https://bugs.webkit.org/show_bug.cgi?id=66160

        Reviewed by Gavin Barraclough.
        
        JIT assertions are now turned on in debug builds.  JIT
        assertions are now used for boxing and unboxing doubles, and boxing
        and unboxing no longer involves code duplication.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::fillDouble):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::boxDouble):
        (JSC::DFG::JITCodeGenerator::unboxDouble):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::fillNumericToDouble):
        (JSC::DFG::GeneralizedRegister::moveTo):
        (JSC::DFG::GeneralizedRegister::swapWith):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::boxDouble):
        (JSC::DFG::JITCompiler::unboxDouble):
        * dfg/DFGNode.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::convertToDouble):

2011-08-12  Mark Rowe  <mrowe@apple.com>

        Be more forward-looking in the choice of compiler.

        Rubber-stamped by Jon Honeycutt.

        * Configurations/CompilerVersion.xcconfig:

2011-08-12  Kalev Lember  <kalevlember@gmail.com>

        [GTK] Fix non-pthreads build after r91906.
        https://bugs.webkit.org/show_bug.cgi?id=66151

        Reviewed by David Levin.

        r91906 broke the non-pthreads GTK+ build by including a header which
        doesn't exist. Fix it by including DateMath.h instead of DateMap.h.

        * wtf/gtk/ThreadingGtk.cpp:

2011-08-12  Mark Rowe  <mrowe@apple.com>

        Update some configuration settings that were missed back in r92432.

        * Configurations/CompilerVersion.xcconfig:

2011-08-12  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION (r91610?): Bing Maps fail to initialize (InvalidOperation:
        Matrix3D.invert)
        https://bugs.webkit.org/show_bug.cgi?id=66038

        Reviewed by Gavin Barraclough.
        
        Simplest and lowest-impact fix for the case where the spilled format
        of a DFG node differs from the register format: if the format is
        converted then indicate that the spilled value is no longer valid
        ("kill the spill").

        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::GenerationInfo::killSpilled):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::fillDouble):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):

2011-08-12  Sam Weinig  <sam@webkit.org>

        Move compiler specific macros to their own header
        https://bugs.webkit.org/show_bug.cgi?id=66119

        Reviewed by Anders Carlsson.

        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        Add Compiler.h

        * wtf/AlwaysInline.h:
        Move the contents of this file (which no longer was just about ALWAYS_INLINE) to
        Compiler.h.  We can remove this file in a later commit.

        * wtf/Compiler.h: Added.
        Put all compiler specific checks and features in this file.

        * wtf/Platform.h:
        Move COMPILER macro and definitions (and the odd WARN_UNUSED_RETURN compiler feature)
        to Compiler.h.  Include Compiler.h since it is necessary.

2011-08-11  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT-specific structure stub info code offset fields are signed
        8-bit, but it is possible for the offsets to be greater than 127
        https://bugs.webkit.org/show_bug.cgi?id=66122

        Reviewed by Gavin Barraclough.

        * bytecode/StructureStubInfo.h:
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::cachedGetById):
        (JSC::DFG::JITCodeGenerator::cachedPutById):

2011-08-11  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT speculation failure code sometimes picks the wrong register
        as a scratch register.
        https://bugs.webkit.org/show_bug.cgi?id=66104

        Reviewed by Gavin Barraclough.
        
        Hardened the code with more assertions and fixed the bug.  Now a
        spilled register is only used for scratch if it also isn't being
        used for shuffling.

        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::ShuffledRegister::handleNonCyclingPermutation):
        (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):

2011-08-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r92880.
        http://trac.webkit.org/changeset/92880
        https://bugs.webkit.org/show_bug.cgi?id=66123

        Breaks compile in VS2010 (Requested by jamesr_ on #webkit).

        * wtf/PassRefPtr.h:

2011-08-11  Mark Rowe  <mrowe@apple.com>

        Don't conditionalize the use of -fomit-frame-pointer on compiler version as
        all of our supported compilers are now new enough to have the same, sane behavior.

        Rubber-stamped by Sam Weinig.

        * Configurations/JavaScriptCore.xcconfig:

2011-08-11  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT verbose mode does not report the generated types of nodes
        https://bugs.webkit.org/show_bug.cgi?id=65830

        Reviewed by Sam Weinig.
        
        Added code that prints the type selected for each node's result.

        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::dataFormatToString):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-08-11  James Robinson  <jamesr@chromium.org>

        nullptr can't be used for PassRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=66024

        Reviewed by Anders Carlsson.

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

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

        Removed unused variable in StackBounds::initialize() to resolve
        compiler warning when building on QNX.
        https://bugs.webkit.org/show_bug.cgi?id=66072

        Reviewed by Antonio Gomes.

        * wtf/StackBounds.cpp:
        (WTF::StackBounds::initialize):

2011-08-11  Devdatta Deshpande  <pwjd73@motorola.com>

        Implementation of monotonically increasing clock on GTK
        https://bugs.webkit.org/show_bug.cgi?id=62175

        Reviewed by Martin Robinson.

        * wtf/CurrentTime.cpp:
        (WTF::monotonicallyIncreasingTime):
        The default implementation of monotonicallyIncreasingTime only
        guarantees the result to be non-decreasing.
        If the system time is changed to past then default implementation will
        still fail and WebCore timers will not fire.

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

        Removed some incorrect code that was dead.

        Reviewed by Oliver Hunt.

        clearSingleTransition() wasn't resetting m_data. Luckily,
        no one cares, because its caller was unused. Removed both.

        * runtime/Structure.cpp:
        * runtime/StructureTransitionTable.h:
        (JSC::StructureTransitionTable::~StructureTransitionTable):

2011-08-10  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION(r92670-r92744): WebKit crashes when opening Gmail
        https://bugs.webkit.org/show_bug.cgi?id=66010

        Reviewed by Oliver Hunt.
        
        Made sure that Construct calls use() on the this argument.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::emitCall):

2011-08-10  Mark Hahnenberg  <mhahnenberg@apple.com>

        JSC should always throw when function arg list is too long
        https://bugs.webkit.org/show_bug.cgi?id=65869

        Reviewed by Oliver Hunt.

        Changed the behavior of the interpreter and JIT to throw an exception 
        when too many arguments are passed rather than truncating the list.  Added 
        a new method to create a "Too many arguments." exception used by this 
        new functionality.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/ExceptionHelpers.cpp:
        (JSC::createTooManyParamsError):
        * runtime/ExceptionHelpers.h:

2011-08-10  Oliver Hunt  <oliver@apple.com>

        Make GC checks more aggressive in release builds
        https://bugs.webkit.org/show_bug.cgi?id=66001

        Reviewed by Gavin Barraclough.

        * heap/HandleHeap.cpp:
        (JSC::HandleHeap::visitStrongHandles):
        (JSC::HandleHeap::visitWeakHandles):
        (JSC::HandleHeap::finalizeWeakHandles):
        (JSC::HandleHeap::writeBarrier):
        (JSC::HandleHeap::isLiveNode):
        (JSC::HandleHeap::isValidWeakNode):
           Increase handle heap validation logic, and make some of
           the crashes trigger in release builds as well as debug.
        * heap/HandleHeap.h:
        (JSC::HandleHeap::allocate):
        (JSC::HandleHeap::makeWeak):
           Ditto
        * runtime/JSGlobalData.cpp:
        (WTF::Recompiler::operator()):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::visitChildren):
           Fix GC bugs found while testing this patch

2011-08-10  Oliver Hunt  <oliver@apple.com>

        JSEvaluteScript does not return the correct object when given JSONP data
        https://bugs.webkit.org/show_bug.cgi?id=66003

        Reviewed by Gavin Barraclough.

        Make sure we propagate the result of the function call rather than the
        argument.

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

2011-08-10  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT heap prediction causes regressions when combined with
        aggressive integer prediction
        https://bugs.webkit.org/show_bug.cgi?id=65954

        Reviewed by Gavin Barraclough.
        
        Disabled heap prediction, but did not remove the capability.
        This improves V8 crypto performance by 20%.

        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::predict):

2011-08-09  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not speculative integers as aggressively as it should
        https://bugs.webkit.org/show_bug.cgi?id=65949

        Reviewed by Gavin Barraclough.
        
        Added a tree walk to propagate integer predictions through arithmetic
        expressions.
        
        This is a 71% speed-up on Kraken's imaging-gaussian-blur, which
        translates to a 19% speed-up on Kraken overall.  It's neutral on
        other benchmarks.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::predictInt32):

2011-08-09  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT has no way of propagating predictions to loads and calls
        https://bugs.webkit.org/show_bug.cgi?id=65883

        Reviewed by Gavin Barraclough.
        
        This introduces the capability to store predictions on graph
        nodes.  To save space while being somewhat consistent, the
        prediction is always stored in the second OpInfo slot (since
        a GetById will use the first one for the identifier).  This
        change is a natural extension of r92593 (global variable
        prediction).
        
        This is a 1.5% win on V8 in the arithmetic mean, and a 0.6%
        win on V8 in the geometric mean.  It is neutral on SunSpider
        and Kraken.  Interestingly, on V8 it regresses crypto by 3%
        while progressing deltablue and richards by 2.6% and 4.3%,
        respectively.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addToGraph):
        (JSC::DFG::ByteCodeParser::addCall):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::predict):
        (JSC::DFG::Graph::getPrediction):
        * dfg/DFGNode.h:
        (JSC::DFG::isCellPrediction):
        (JSC::DFG::isArrayPrediction):
        (JSC::DFG::isInt32Prediction):
        (JSC::DFG::isDoublePrediction):
        (JSC::DFG::isNumberPrediction):
        (JSC::DFG::predictionToString):
        (JSC::DFG::Node::Node):
        (JSC::DFG::Node::hasPrediction):
        (JSC::DFG::Node::getPrediction):
        (JSC::DFG::Node::predict):

2011-08-09  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT passes the this argument to constructors even though
        it's not necessary
        https://bugs.webkit.org/show_bug.cgi?id=65943

        Reviewed by Gavin Barraclough.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::emitCall):

2011-08-09  Chao-ying Fu  <fu@mips.com>

        Fix one MIPS instruction to call JITStubThunked_##op
        https://bugs.webkit.org/show_bug.cgi?id=65942

        Reviewed by Gavin Barraclough.

        Changed "bal" to "jalr" for a possible processor mode change from
        MIPS32 to MIPS16.

        * jit/JITStubs.cpp:

2011-08-09  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT failure loading web site
        https://bugs.webkit.org/show_bug.cgi?id=65930

        Reviewed by Oliver Hunt.
        
        Put the use() call after the fpr()/gpr() calls, since doing otherwise
        breaks the register allocator.

        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):

2011-08-09  Mark Hahnenberg  <mhahnenberg@apple.com>

        Add ParentClass typedef in all JSC classes
        https://bugs.webkit.org/show_bug.cgi?id=65731

        Reviewed by Oliver Hunt.

        Just added the Base typedefs in all the classes that are a subclass of JSCell 
        to point at their parent classes.  This is a change to support future changes to the way
        constructors and destructors are implemented in JS objects, among other things.

        * API/JSCallbackConstructor.h:
        * API/JSCallbackFunction.h:
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::createStructure):
        (JSC::JSCallbackObject::visitChildren):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::asCallbackObject):
        (JSC::::JSCallbackObject):
        (JSC::::init):
        (JSC::::className):
        (JSC::::getOwnPropertySlot):
        (JSC::::getOwnPropertyDescriptor):
        (JSC::::put):
        (JSC::::deleteProperty):
        (JSC::::getConstructData):
        (JSC::::construct):
        (JSC::::hasInstance):
        (JSC::::getCallData):
        (JSC::::call):
        (JSC::::getOwnPropertyNames):
        (JSC::::toNumber):
        (JSC::::toString):
        (JSC::::setPrivate):
        (JSC::::getPrivate):
        (JSC::::inherits):
        (JSC::::getStaticValue):
        (JSC::::staticFunctionGetter):
        (JSC::::callbackGetter):
        * debugger/DebuggerActivation.h:
        * jsc.cpp:
        * runtime/Arguments.h:
        * runtime/ArrayConstructor.h:
        * runtime/ArrayPrototype.h:
        * runtime/BooleanConstructor.h:
        * runtime/BooleanObject.h:
        * runtime/BooleanPrototype.h:
        * runtime/DateConstructor.h:
        * runtime/DateInstance.h:
        * runtime/DatePrototype.h:
        * runtime/Error.cpp:
        * runtime/ErrorConstructor.h:
        * runtime/ErrorInstance.h:
        * runtime/ErrorPrototype.h:
        * runtime/ExceptionHelpers.cpp:
        * runtime/Executable.h:
        * runtime/FunctionConstructor.h:
        * runtime/FunctionPrototype.h:
        * runtime/GetterSetter.h:
        * runtime/InternalFunction.h:
        * runtime/JSAPIValueWrapper.h:
        * runtime/JSActivation.h:
        * runtime/JSArray.h:
        * runtime/JSFunction.h:
        * runtime/JSGlobalObject.h:
        * runtime/JSNotAnObject.h:
        * runtime/JSONObject.h:
        * runtime/JSObject.h:
        * runtime/JSPropertyNameIterator.h:
        * runtime/JSStaticScopeObject.h:
        * runtime/JSString.h:
        * runtime/JSVariableObject.h:
        * runtime/JSWrapperObject.h:
        * runtime/MathObject.h:
        * runtime/NativeErrorConstructor.h:
        * runtime/NativeErrorPrototype.h:
        * runtime/NumberConstructor.h:
        * runtime/NumberObject.h:
        * runtime/NumberPrototype.h:
        * runtime/ObjectConstructor.h:
        * runtime/ObjectPrototype.h:
        * runtime/RegExp.h:
        * runtime/RegExpConstructor.h:
        * runtime/RegExpMatchesArray.h:
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::create):
        * runtime/RegExpPrototype.h:
        * runtime/ScopeChain.h:
        * runtime/StrictEvalActivation.h:
        * runtime/StringConstructor.h:
        * runtime/StringObject.h:
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        * runtime/StringPrototype.h:
        * runtime/Structure.h:
        * runtime/StructureChain.h:

2011-08-08  Oliver Hunt  <oliver@apple.com>

        Using mprotect to create guard pages breaks our use of madvise to release executable memory
        https://bugs.webkit.org/show_bug.cgi?id=65870

        Reviewed by Gavin Barraclough.

        Use mmap rather than mprotect to clear guard page permissions.

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

2011-08-08  Oliver Hunt  <oliver@apple.com>

        Non-extensibility does not prevent mutating [[Prototype]]
        https://bugs.webkit.org/show_bug.cgi?id=65832

        Reviewed by Gavin Barraclough.

        Disallow mutation of __proto__ on objects that are not extensible.

        * runtime/JSObject.cpp:
        (JSC::JSObject::put):

2011-08-08  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not track speculation decisions for global variables
        https://bugs.webkit.org/show_bug.cgi?id=65825

        Reviewed by Gavin Barraclough.
        
        Added the capability to track predictions for global variables, and
        ensured that code can abstract over the source of prediction (local
        versus global variable) wherever it is appropriate to do so.  Also
        cleaned up the code in SpeculativeJIT that decides how to speculate
        based on recorded predictions (for example instead of using isInteger,
        which makes sense for local predictions where the GetLocal would
        return an integer value, we now tend to use shouldSpeculateInteger,
        which checks if the value is either already an integer or should be
        speculated to be an integer).
        
        This is an 0.8% win on SunSpider, almost entirely thanks to a 25%
        win on controlflow-recursive.  It's also a 4.8% win on v8-crypto.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::predictArray):
        (JSC::DFG::ByteCodeParser::predictInt32):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::predictGlobalVar):
        (JSC::DFG::Graph::predict):
        (JSC::DFG::Graph::getGlobalVarPrediction):
        (JSC::DFG::Graph::getPrediction):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::shouldSpeculateInteger):
        (JSC::DFG::SpeculativeJIT::shouldSpeculateDouble):

2011-08-07  Martin Robinson  <mrobinson@igalia.com>

        Distribution fix for GTK+.

        * GNUmakefile.list.am: Strip removed files from the source list.

2011-08-06  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=65821
        Don't form identifiers the first time a string is used as a property name.

        Reviewed by Oliver Hunt.

        This is a 1% win on SunSpider.

        * dfg/DFGOperations.cpp:
            - Use fastGetOwnProperty.
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
            - Use fastGetOwnProperty.
        * runtime/JSCell.h:
        * runtime/JSObject.h:
        (JSC::JSCell::fastGetOwnProperty):
            - Fast call to get a property without creating an identifier the first time.
        * runtime/PropertyMapHashTable.h:
        (JSC::PropertyTable::find):
        (JSC::PropertyTable::findWithString):
            - Add interface to look up by either strinsg or identifiers.
        * runtime/Structure.h:
        (JSC::Structure::get):
            - Add a get() call that takes a UString, not an Identifier.
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::hasHash):
            - Add a call to check if the has has been set (to detect the first use as a property name).

2011-08-06  Aron Rosenberg  <arosenberg@logitech.com>

        Reviewed by Benjamin Poulain.

        [Qt] Fix build with Intel compiler on Windows
        https://bugs.webkit.org/show_bug.cgi?id=65088

        Intel compiler needs .lib suffixes instead of .a
        Intel compiler doesn't support nullptr
        Intel compiler supports unsized arrays

        * JavaScriptCore.pri:
        * jsc.cpp:
        * wtf/ByteArray.h:
        * wtf/NullPtr.h:

2011-08-05  Gavin Barraclough  <barraclough@apple.com>

        String replace with the empty string means string removal
        https://bugs.webkit.org/show_bug.cgi?id=65799

        Reviewed by Sam Weinig.

        Optimization for String.prototype.replace([RegExp], ""), this improves v8-regexp by ~3%.

        * runtime/StringPrototype.cpp:
        (JSC::jsSpliceSubstrings):
        (JSC::stringProtoFuncReplace):

2011-08-05  Noel Gordon  <noel.gordon@gmail.com>

        [Chromium] Remove JSZombie references from gyp project files.
        https://bugs.webkit.org/show_bug.cgi?id=65798

        JSC runtime/JSZombie.{cpp,h} were removed in r92046.  Remove references to these
        file names from the gyp projects.

        Reviewed by Darin Adler.

        * JavaScriptCore.gypi: zombies be gone.

2011-08-05  Mark Rowe  <mrowe@apple.com>

        <http://webkit.org/b/65785> ThreadRestrictionVerifier needs a mode where an object
        is tied to a particular dispatch queue

        A RefCounted object can be opted in to this mode by calling setDispatchQueueForVerifier
        with the dispatch queue it will be tied to. This will cause ThreadRestrictionVerifier
        to ensure that all operations are performed on the given dispatch queue.

        Reviewed by Anders Carlsson.

        * wtf/RefCounted.h:
        (WTF::RefCountedBase::setDispatchQueueForVerifier):
        * wtf/ThreadRestrictionVerifier.h:
        (WTF::ThreadRestrictionVerifier::ThreadRestrictionVerifier):
        (WTF::ThreadRestrictionVerifier::~ThreadRestrictionVerifier):
        (WTF::ThreadRestrictionVerifier::setDispatchQueueMode):
        (WTF::ThreadRestrictionVerifier::setShared):
        (WTF::ThreadRestrictionVerifier::isSafeToUse):

2011-08-05  Oliver Hunt  <oliver@apple.com>

        Inline allocation of function objects
        https://bugs.webkit.org/show_bug.cgi?id=65779

        Reviewed by Gavin Barraclough.

        Inline allocation and initilisation of function objects
        in generated code.  This ended up being a 60-70% improvement
        in function allocation performance.  This improvement shows
        up as a ~2% improvement in 32bit sunspider and V8, but is a
        wash on 64-bit.

        We currently don't inline the allocation of named function
        expressions, as that requires being able to gc allocate a
        variable object.

        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        (JSC::JIT::emitStoreCell):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitAllocateBasicJSObject):
        (JSC::JIT::emitAllocateJSFinalObject):
        (JSC::JIT::emitAllocateJSFunction):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_new_func):
        (JSC::JIT::emitSlow_op_new_func):
        (JSC::JIT::emit_op_new_func_exp):
        (JSC::JIT::emitSlow_op_new_func_exp):
        * jit/JITOpcodes32_64.cpp:
            Removed duplicate implementation of op_new_func and op_new_func_exp
        * runtime/JSFunction.h:
        (JSC::JSFunction::offsetOfScopeChain):
        (JSC::JSFunction::offsetOfExecutable):

2011-08-04  David Levin  <levin@chromium.org>

        CStringBuffer should have thread safety checks turned on.
        https://bugs.webkit.org/show_bug.cgi?id=58093

        Reviewed by Dmitry Titov.

        * wtf/text/CString.h:
        (WTF::CStringBuffer::CStringBuffer): Removed the ifdef that
        turned this off for Chromium.

2011-08-04  Mark Rowe  <mrowe@apple.com>

        Future-proof Xcode configuration settings.

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

2011-08-04  Mark Hahnenberg  <mhahnenberg@apple.com>

        Interpreter can potentially GC in the middle of initializing a structure chain
        https://bugs.webkit.org/show_bug.cgi?id=65638

        Reviewed by Oliver Hunt.

        Moved the allocation of a prototype StructureChain before the initialization of 
        the structure chain within the interpreter that was causing intermittent GC crashes.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::tryCachePutByID):
        * wtf/Platform.h:

2011-08-04  Filip Pizlo  <fpizlo@apple.com>

        Eval handling attempts literal parsing even when the eval
        string is in the cache
        https://bugs.webkit.org/show_bug.cgi?id=65675

        Reviewed by Oliver Hunt.
        
        This is a 25% speed-up on date-format-tofte and a 1.5% speed-up overall
        in SunSpider.  It's neutral on V8.

        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::tryGet):
        (JSC::EvalCodeCache::getSlow):
        (JSC::EvalCodeCache::get):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::callEval):

2011-08-03  Mark Rowe  <mrowe@apple.com>

        Bring some order to FeatureDefines.xcconfig to make it easier to follow.

        Reviewed by Sam Weinig.

        * Configurations/FeatureDefines.xcconfig:

2011-08-03  Mark Rowe  <mrowe@apple.com>

        Clean up FeatureDefines.xcconfig to remove some unnecessary conditional settings

        Reviewed by Dave Kilzer.

        * Configurations/FeatureDefines.xcconfig:

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

        JSC GC heap size improvement breaks build on some platforms due to
        unused parameter
        https://bugs.webkit.org/show_bug.cgi?id=65641

        Reviewed by Darin Adler.
        
        Fix build on non-x86 platforms, by ensuring that the relevant
        parameter always appears to be used even when it isn't.

        * heap/Heap.cpp:

2011-08-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        [GTK] Reorganize pkg-config files
        https://bugs.webkit.org/show_bug.cgi?id=65548

        Reviewed by Martin Robinson.

        * GNUmakefile.am:
        * javascriptcoregtk.pc.in: Renamed from Source/WebKit/gtk/javascriptcoregtk.pc.in.

2011-08-01  David Levin  <levin@chromium.org>

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

        Reviewed by Dmitry Titov.

        * GNUmakefile.list.am: Added new files to the build.
        * JavaScriptCore.gypi: Ditto.
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
        * jit/ExecutableAllocator.h:
        (JSC::ExecutablePool::ExecutablePool): Turned off checks for this
        due to not being able to figure out what was guarding it (bug 58091).
        * parser/SourceProvider.h:
        (JSC::SourceProvider::SourceProvider): Ditto.
        * wtf/CMakeLists.txt: Added new files to the build.
        * wtf/ThreadRestrictionVerifier.h: Added.
        Everything is done in the header to avoid the issue with exports
        that are only useful in debug but still needing to export them.
        * wtf/RefCounted.h:
        (WTF::RefCountedBase::ref): Added checks using the non thread safe verifier.
        and filed bug 58171 about making it stricter.
        (WTF::RefCountedBase::hasOneRef): Ditto.
        (WTF::RefCountedBase::refCount): Ditto.
        (WTF::RefCountedBase::setMutexForVerifier): Expose a way to change the checks to be based
        on a mutex. This is in the header to avoid adding more exports from JavaScriptCore.
        (WTF::RefCountedBase::deprecatedTurnOffVerifier): Temporary way to turn off verification.
        Filed bug 58174 to remove this method.
        (WTF::RefCountedBase::derefBase):
        * wtf/SizeLimits.cpp: Adjusted the debug size check for RefCounted.
        * wtf/text/CString.h:
        (WTF::CStringBuffer::CStringBuffer): Turned off checks for this while a fix is being
        done in Chromium (bug 58093).

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

        JSC GC may not be able to reuse partially-free blocks after a
        full collection
        https://bugs.webkit.org/show_bug.cgi?id=65585

        Reviewed by Darin Adler.
        
        This fixes the linked list management bug.  This fix is performance
        neutral on SunSpider.

        * heap/NewSpace.cpp:
        (JSC::NewSpace::removeBlock):

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

        Simplify JSFunction creation for functions written in JS
        https://bugs.webkit.org/show_bug.cgi?id=65422

        Reviewed by Gavin Barraclough.

        Remove hash lookups used to write name property and transition
        function structure by caching the resultant structure and property
        offset in JSGlobalObject.  This doesn't impact performance, but
        we can use this change to make other improvements later.

        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::FunctionExecutable):
        * runtime/Executable.h:
        (JSC::ScriptExecutable::ScriptExecutable):
        (JSC::FunctionExecutable::jsName):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::namedFunctionStructure):
        (JSC::JSGlobalObject::functionNameOffset):

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

        JSC GC uses dummy cells to avoid having to remember which cells
        it has already destroyed
        https://bugs.webkit.org/show_bug.cgi?id=65556

        Reviewed by Oliver Hunt.
        
        This gets rid of dummy cells, and ensures that it's not necessary
        to invoke a destructor on cells that have already been swept.  In
        the common case, a block knows that either all of its free cells
        still need to have destructors called, or none of them do, which
        minimizes the amount of branching that needs to happen per cell
        when performing a sweep.
        
        This is performance neutral on SunSpider and V8.  It is meant as
        a stepping stone to simplify the implementation of more
        sophisticated sweeping algorithms.

        * heap/Heap.cpp:
        (JSC::CountFunctor::ClearMarks::operator()):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::initForCellSize):
        (JSC::MarkedBlock::callDestructor):
        (JSC::MarkedBlock::specializedReset):
        (JSC::MarkedBlock::reset):
        (JSC::MarkedBlock::specializedSweep):
        (JSC::MarkedBlock::sweep):
        (JSC::MarkedBlock::produceFreeList):
        (JSC::MarkedBlock::lazySweep):
        (JSC::MarkedBlock::blessNewBlockForFastPath):
        (JSC::MarkedBlock::blessNewBlockForSlowPath):
        (JSC::MarkedBlock::canonicalizeBlock):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::FreeCell::setNoObject):
        (JSC::MarkedBlock::setDestructorState):
        (JSC::MarkedBlock::destructorState):
        (JSC::MarkedBlock::notifyMayHaveFreshFreeCells):
        * runtime/JSCell.cpp:
        * runtime/JSCell.h:
        (JSC::JSCell::JSCell::JSCell):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::clearBuiltinStructures):
        * runtime/JSGlobalData.h:
        * runtime/Structure.h:

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

        Virtual copying of FastMalloc allocated memory causes madvise MADV_FREE_REUSABLE errors
        https://bugs.webkit.org/show_bug.cgi?id=65502

        Reviewed by Anders Carlsson.

        With the fix of the issues causing madvise MADV_FREE_REUSABLE to fail,
        added an assert to the return code of madvise to catch any regressions.

        * wtf/TCSystemAlloc.cpp:
        (TCMalloc_SystemRelease):

2011-08-02  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-08-02  Anders Carlsson  <andersca@apple.com>

        Fix a Windows build error.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        JSC GC is far too conservative about growing the heap size, particularly
        on desktop platforms
        https://bugs.webkit.org/show_bug.cgi?id=65438

        Reviewed by Oliver Hunt.

        The minimum heap size is now 16MB instead of 512KB, provided all of the
        following are true:
        a) ENABLE(LARGE_HEAP) is set, which currently only happens on
           x86 targets, but could reasonably happen on any platform that is
           known to have a decent amount of RAM.
        b) JSGlobalData is initialized with HeapSize = LargeHeap, which
           currently only happens when it's the JSDOMWindowBase in WebCore or
           in the jsc command-line tool.
           
        This is a 4.1% speed-up on SunSpider.

        * JavaScriptCore.exp:
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::collect):
        * heap/Heap.h:
        * jsc.cpp:
        (main):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::createContextGroup):
        (JSC::JSGlobalData::create):
        (JSC::JSGlobalData::createLeaked):
        (JSC::JSGlobalData::sharedInstance):
        * runtime/JSGlobalData.h:
        * wtf/Platform.h:

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

        JSC does a GC even when the heap still has free pages
        https://bugs.webkit.org/show_bug.cgi?id=65445

        Reviewed by Oliver Hunt.
        
        If the high watermark is not reached, then we allocate new blocks as
        before.  If the current watermark does reach (or exceed) the high
        watermark, then we check if there is a block on the free block pool.
        If there is, we simply allocation from it.  If there isn't, we
        invoke a collectin as before.  This effectively couples the elastic
        scavenging to the collector's decision function.  That is, if an
        application rapidly varies its heap usage (sometimes using more and
        sometimes less) then the collector will not thrash as it used to.
        But if heap usage drops and stays low then the scavenger thread and
        the GC will eventually reach a kind of consensus: the GC will set
        the watermark low because of low heap usage, and the scavenger thread
        will steadily eliminate pages from the free page pool, until the size
        of the free pool is below the high watermark.
        
        On command-line, this is neutral on SunSpider and Kraken and a 3% win
        on V8.  In browser, this is a 1% win on V8 and neutral on the other
        two.

        * heap/Heap.cpp:
        (JSC::Heap::allocateSlowCase):
        (JSC::Heap::allocateBlock):
        * heap/Heap.h:

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

        Move WTF_USE_AVFOUNDATION from JavaScriptCore/wtf/platform.h to WebCore/config.h
        https://bugs.webkit.org/show_bug.cgi?id=65552
        
        Since this is a WebCore feature, there's no need to define it in JavaScriptCore/wtf/platform.h.

        Reviewed by Adam Roben.

        * wtf/Platform.h: Removed WTF_USE_AVFOUNDATION.

2011-08-01  Jean-luc Brouillet  <jeanluc@chromium.org>

        Removing old source files in gyp files that slow build
        https://bugs.webkit.org/show_bug.cgi?id=65503

        Reviewed by Adam Barth.

        A number of stale files are listed in the gyp files. These slow the
        build on Visual Studio 2010. Removing them.

        * JavaScriptCore.gypi:

2011-07-14  David Levin  <levin@chromium.org>

        currentThread is too slow!
        https://bugs.webkit.org/show_bug.cgi?id=64577

        Reviewed by Darin Adler and Dmitry Titov.

        The problem is that currentThread results in a pthread_once call which always takes a lock.
        With this change, currentThread is 10% faster than isMainThread in release mode and only
        5% slower than isMainThread in debug.

        * wtf/ThreadIdentifierDataPthreads.cpp:
        (WTF::ThreadIdentifierData::initializeOnce): Remove the pthread once stuff
        which is no longer needed because this is called from initializeThreading().
        (WTF::ThreadIdentifierData::identifier): Remove the initializeKeyOnce call because
        intialization of the pthread key should already be done.
        (WTF::ThreadIdentifierData::initialize): Ditto.
        * wtf/ThreadIdentifierDataPthreads.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::initializeThreading): Acquire the pthread key here.

2011-08-01  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT sometimes creates speculation check data structures that have
        invalid information about the format of a register
        https://bugs.webkit.org/show_bug.cgi?id=65490

        Reviewed by Gavin Barraclough.
        
        The code now makes sure to (1) always have correct and up-to-date
        information about register format at the time that a speculation
        check is emitted, (2) assert that speculation data is correct
        inside the speculation check implementation, and (3) avoid creating
        speculation data altogether if compilation has already failed, since
        at that point the format data is almost guaranteed to be bogus.

        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::EntryLocation::EntryLocation):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculationCheck::SpeculationCheck):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::speculationCheck):

2011-08-01  Filip Pizlo  <fpizlo@apple.com>

        REGRESSION(r92092): Build fails on 64 bit
        https://bugs.webkit.org/show_bug.cgi?id=65458

        Reviewed by Oliver Hunt.
        
        The build was broken because some compilers were smart enough to see
        an array index out of bounds due to the decision fuction for when to
        go from precise size classes to imprecise size classes being broken:
        it would assume that sizes in the range 97..128 belonged to a precise
        size class when in fact they belonged to an imprecise one.
        
        In fact, the code would have run correctly, by way of a fluke, because
        though the 4th precise size class (for 97..128) didn't exist, the next
        array over from m_preciseSizeClasses was m_impreciseSizeClasses, and
        its first entry would have been a size class that is appropriate for
        allocations in the range 97..128.  However, this relies on specific
        ordering of fields in NewSpace, so it's still a bug.
        
        This fixes the bug by ensuring that allocations larger than 96 use
        the imprecise size classes.

        * heap/NewSpace.h:
        (JSC::NewSpace::sizeClassFor):

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

        https://bugs.webkit.org/show_bug.cgi?id=64679
        Fix bugs in Array.prototype this handling.

        Unreviewed - rolling out r91290.

        Looks like the wild wild web isn't ready for this yet.

        This change broke http://slides.html5rocks.com/#landing-slide.
        Interestingly, this might only be due to our lack of bind support -
        it looks like this site is calling  Array.prototype.slice as a part
        of its bind implementation.

        * runtime/ArrayPrototype.cpp:
        (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):

2011-07-31  Filip Pizlo  <fpizlo@apple.com>

        JSC GC lays out size classes under wrong assumptions about expected
        object size.
        https://bugs.webkit.org/show_bug.cgi?id=65437

        Reviewed by Oliver Hunt.
        
        Changed the atom size - which is both the smallest allocation size and
        the smallest possible stepping unit for size class spacing - from
        8 bytes to 4 pointer-size words.  This is a 1% win on SunSpider.

        * heap/MarkedBlock.h:

2011-07-31  Filip Pizlo  <fpizlo@apple.com>

        DFG non-speculative JIT does not optimize PutByVal
        https://bugs.webkit.org/show_bug.cgi?id=65424

        Reviewed by Gavin Barraclough.
        
        Added code to emit PutByVal inline fast path.

        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):

2011-07-31  Filip Pizlo  <fpizlo@apple.com>

        The JSC garbage collector returns memory to the operating system too
        eagerly.
        https://bugs.webkit.org/show_bug.cgi?id=65382

        Reviewed by Oliver Hunt.
        
        This introduces a memory reuse model similar to the one in FastMalloc.
        A periodic scavenger thread runs in the background and returns half the
        free memory to the OS on each timer fire.  New block allocations first
        attempt to get the memory from the collector's internal pool, reverting
        to OS allocation only when this pool is empty.

        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::~Heap):
        (JSC::Heap::destroy):
        (JSC::Heap::waitForRelativeTimeWhileHoldingLock):
        (JSC::Heap::waitForRelativeTime):
        (JSC::Heap::blockFreeingThreadStartFunc):
        (JSC::Heap::blockFreeingThreadMain):
        (JSC::Heap::allocateBlock):
        (JSC::Heap::freeBlocks):
        (JSC::Heap::releaseFreeBlocks):
        * heap/Heap.h:
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::destroy):
        (JSC::MarkedBlock::MarkedBlock):
        (JSC::MarkedBlock::initForCellSize):
        (JSC::MarkedBlock::reset):
        * heap/MarkedBlock.h:
        * wtf/Platform.h:

2011-07-30  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT speculation failure pass sometimes forgets to emit code to
        move certain registers.
        https://bugs.webkit.org/show_bug.cgi?id=65421

        Reviewed by Oliver Hunt.
        
        Restructured the offending loops (for gprs and fprs).  It's once again
        possible to use spreadsheets on docs.google.com.

        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):

2011-07-30  Patrick Gansterer  <paroga@webkit.org>

        Remove inclusion of MainThread.h from Threading.h
        https://bugs.webkit.org/show_bug.cgi?id=65081

        Reviewed by Darin Adler.

        Add missing and remove unneeded include statements for MainThread.

        * wtf/CryptographicallyRandomNumber.cpp:
        * wtf/Threading.h:
        * wtf/ThreadingPthreads.cpp:
        * wtf/text/StringStatics.cpp:

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

        Reduce the size of JSGlobalObject slightly
        https://bugs.webkit.org/show_bug.cgi?id=65417

        Reviewed by Dan Bernstein.

        Push a few members that either aren't commonly used,
        or aren't frequently accessed into a separate struct.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::WeakMapsFinalizer::finalize):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObjectRareData::JSGlobalObjectRareData):
        (JSC::JSGlobalObject::createRareDataIfNeeded):
        (JSC::JSGlobalObject::setProfileGroup):
        (JSC::JSGlobalObject::profileGroup):
        (JSC::JSGlobalObject::registerWeakMap):
        (JSC::JSGlobalObject::deregisterWeakMap):

2011-07-30  Balazs Kelemen  <kbalazs@webkit.org>

        MessageQueue::waitForMessageFilteredWithTimeout can triggers an assertion
        https://bugs.webkit.org/show_bug.cgi?id=65263

        Reviewed by Dmitry Titov.

        * wtf/Deque.h:
        (WTF::::operator): Don't check the validity of an iterator
        that will be reassigned right now.
        * wtf/MessageQueue.h:
        (WTF::::removeIf): Revert r51198 as I beleave this is the better
        solution for the problem that was solved by that.

2011-07-29  Filip Pizlo  <fpizlo@apple.com>

        JSC GC zombie support no longer works, and is likely no longer needed.
        https://bugs.webkit.org/show_bug.cgi?id=65404

        Reviewed by Darin Adler.
        
        This removes zombies, because they no longer work, are not tested, are
        probably not needed, and are getting in the way of GC optimization
        work.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/Handle.h:
        (JSC::HandleConverter::operator->):
        (JSC::HandleConverter::operator*):
        * heap/HandleHeap.cpp:
        (JSC::HandleHeap::isValidWeakNode):
        * heap/Heap.cpp:
        (JSC::Heap::destroy):
        (JSC::Heap::collect):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::sweep):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::clearMarks):
        * interpreter/Register.h:
        (JSC::Register::Register):
        (JSC::Register::operator=):
        * runtime/ArgList.h:
        (JSC::MarkedArgumentBuffer::append):
        (JSC::ArgList::ArgList):
        * runtime/JSCell.cpp:
        (JSC::isZombie):
        * runtime/JSCell.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::clearBuiltinStructures):
        * runtime/JSGlobalData.h:
        * runtime/JSValue.h:
        * runtime/JSValueInlineMethods.h:
        (JSC::JSValue::JSValue):
        * runtime/JSZombie.cpp: Removed.
        * runtime/JSZombie.h: Removed.
        * runtime/WriteBarrier.h:
        (JSC::WriteBarrierBase::setEarlyValue):
        (JSC::WriteBarrierBase::operator*):
        (JSC::WriteBarrierBase::setWithoutWriteBarrier):
        * wtf/Platform.h:

2011-07-29  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT verbose mode provides no details about predictions
        https://bugs.webkit.org/show_bug.cgi?id=65389

        Reviewed by Darin Adler.
        
        Added a print-out of the predictions to the IR dump, with names as follows:
        "p-bottom" = the parser made no predictions
        "p-int32" = the parser predicted int32
        ... (same for array, cell, double, number)
        "p-top" = the parser made conflicting predictions which will be ignored.

        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        (JSC::DFG::predictionToString):

2011-07-29  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not have any way of undoing double speculation.
        https://bugs.webkit.org/show_bug.cgi?id=65334

        Reviewed by Gavin Barraclough.
        
        This adds code to do a branchConvertDoubleToInt on specualtion failure.
        This is performance-neutral on most benchmarks but does result in
        a slight improvement in Kraken.

        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::GeneralizedRegister::moveTo):
        (JSC::DFG::GeneralizedRegister::swapWith):
        (JSC::DFG::ShuffledRegister::handleNonCyclingPermutation):
        (JSC::DFG::ShuffledRegister::handleCyclingPermutation):
        (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):

2011-07-29  Filip Pizlo  <fpizlo@apple.com>

        Crash when opening docs.google.com
        https://bugs.webkit.org/show_bug.cgi?id=65327

        Reviewed by Gavin Barraclough.
        
        The speculative JIT was only checking whether a value is an array when
        we had already checked that it was, rather then when we hadn't.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-07-28  Oliver Hunt  <oliver@apple.com>

        *_list instructions are only used in one place, where the code is wrong.
        https://bugs.webkit.org/show_bug.cgi?id=65348

        Reviewed by Darin Adler.

        Simply remove the instructions and all users.  Speeds up the interpreter
        slightly due to code motion, but otherwise has no effect (because none
        of the _list instructions are ever used).

        * bytecode/CodeBlock.cpp:
        (JSC::isPropertyAccess):
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::visitStructures):
        * bytecode/Instruction.h:
        * bytecode/Opcode.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):

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

        https://bugs.webkit.org/show_bug.cgi?id=65325
        Performance tweak to parseInt

        Reviewed by Oliver Hunt.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncParseInt):
            - This change may an existing optimization redundant,
              cleanup from Darin's comments, plus fix existing bugs.

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

        https://bugs.webkit.org/show_bug.cgi?id=65325
        Performance tweak to parseInt

        Reviewed by Oliver Hunt.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncParseInt):
            - parseInt applied to small positive numbers = floor.

2011-07-28  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::compileForCallInternal):

2011-07-28  Kent Tamura  <tkent@chromium.org>

        Improve StringImpl::stripWhiteSpace() and simplifyWhiteSpace().
        https://bugs.webkit.org/show_bug.cgi?id=65300

        Reviewed by Darin Adler.

        r91837 had performance regression of StringImpl::stripWhiteSpace()
        and simplifyWhiteSpace(). This changes the code so that compilers
        generates code equivalent to r91836 or piror.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::stripMatchedCharacters):
        A template member function for stripWhiteSpace(). This function takes a functor.
        (WTF::UCharPredicate):
        A functor for generic predicate for single UChar argument.
        (WTF::SpaceOrNewlinePredicate):
        A special functor for isSpaceOrNewline().
        (WTF::StringImpl::stripWhiteSpace):
        Use stripmatchedCharacters().
        (WTF::StringImpl::simplifyMatchedCharactersToSpace):
        A template member function for simplifyWhiteSpace().
        (WTF::StringImpl::simplifyWhiteSpace):
        Use simplifyMatchedCharactersToSpace().
        * wtf/text/StringImpl.h:

2011-07-27  Dmitry Lomov  <dslomov@google.com>

        [chromium] Turn on WTF_MULTIPLE_THREADS.
        https://bugs.webkit.org/show_bug.cgi?id=61017
        The patch turns on WTF_MULTIPLE_THREADS in chromium and 
        pushes some relevant initializations from JSC::initializeThreading
        to WTF::initializeThreading.

        Reviewed by David Levin.

        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreadingOnce):
        * wtf/FastMalloc.cpp:
        (WTF::isForbidden):
        (WTF::fastMallocForbid):
        (WTF::fastMallocAllow):
        * wtf/Platform.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::initializeThreading):
        * wtf/ThreadingWin.cpp:
        (WTF::initializeThreading):
        * wtf/gtk/ThreadingGtk.cpp:
        (WTF::initializeThreading):
        * wtf/qt/ThreadingQt.cpp:
        (WTF::initializeThreading):

2011-07-27  Mark Hahnenberg  <mhahnenberg@apple.com>

        Remove operator new from JSCell
        https://bugs.webkit.org/show_bug.cgi?id=64999

        Reviewed by Oliver Hunt.

        Removed the implementation of operator new in JSCell, so any further uses
        will not successfully link.  Also removed any remaining uses of operator new.

        * API/JSContextRef.cpp:
        * debugger/DebuggerActivation.h:
        (JSC::DebuggerActivation::create):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        (JSC::Interpreter::createExceptionScope):
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSCell.h:
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::create):
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::create):
        (JSC::JSStaticScopeObject::JSStaticScopeObject):
        * runtime/StrictEvalActivation.h:
        (JSC::StrictEvalActivation::create):

2011-07-27  Filip Pizlo  <fpizlo@apple.com>

        DFG graph has no notion of double prediction.
        https://bugs.webkit.org/show_bug.cgi?id=65234

        Reviewed by Gavin Barraclough.
        
        Added the notion of PredictDouble, and PredictNumber, which is the least
        upper bound of PredictInt32 and PredictDouble.  Least upper bound is
        defined as the bitwise-or of two predictions.  Bottom is defined as 0,
        and Top is defined as all bits being set.  Added the ability to explicitly
        distinguish between a node having had a prediction associated with it,
        and that prediction still being valid (i.e. no conflicting predictions
        have also been added).  Used this to guard the speculative JIT from
        speculating Int32 in cases where the graph knows that the value is
        double, which currently only happens for GetLocal nodes on arguments
        which were double at compile-time.

        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::predictArgumentTypes):
        * dfg/DFGGraph.h:
        (JSC::DFG::isCellPrediction):
        (JSC::DFG::isArrayPrediction):
        (JSC::DFG::isInt32Prediction):
        (JSC::DFG::isDoublePrediction):
        (JSC::DFG::isNumberPrediction):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::SpeculativeJIT::initializeVariableTypes):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::isRegisterDataFormatDouble):

2011-07-27  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=65294
        DFG JIT - may speculate based on wrong arguments.

        Reviewed by Oliver Hunt

        In the case of a DFG compiled function calling to and compiling a second function that
        also compiles through the DFG JIT (i.e. compilation triggered with DFGOperations.cpp),
        we call compileFor passing the caller functions exec state, rather than the callee's.
        This may lead to mis-optimization, since the DFG compiler will example the exec state's
        arguments on the assumption that these will be passed to the callee - it is wanting the
        callee exec state, not the caller's exec state.

        Fixing this for all cases of compilation is tricksy, due to the way the numeric sort
        function is compiled, & the structure of the calls in the Interpreter::execute methods.
        Only fix for compilation from the JIT, in other calls don't speculate based on arguments
        for now.

        * dfg/DFGOperations.cpp:
        * runtime/Executable.cpp:
        (JSC::tryDFGCompile):
        (JSC::tryDFGCompileFunction):
        (JSC::FunctionExecutable::compileForCallInternal):
        * runtime/Executable.h:
        (JSC::FunctionExecutable::compileForCall):
        (JSC::FunctionExecutable::compileFor):

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

        Handle callback oriented JSONP
        https://bugs.webkit.org/show_bug.cgi?id=65271

        Reviewed by Gavin Barraclough.

        Handle the callback oriented versions of JSONP.  The Literal parser
        now handles <Identifier> (. <Identifier>)* (jsonData).

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::tryJSONPParse):
        (JSC::LiteralParser::Lexer::lex):
        * runtime/LiteralParser.h:

2011-07-27  Stephanie Lewis  <slewis@apple.com>

        Revert http://trac.webkit.org/changeset/90415.
        Caused a 5% sunspider regression in-browser.

        Unreviewed rollout.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitAggregate):
        * heap/Heap.cpp:
        (JSC::Heap::collectAllGarbage):
        * heap/MarkStack.h:
        (JSC::MarkStack::MarkStack):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::releaseExecutableMemory):
        * runtime/RegExp.cpp:
        (JSC::RegExp::compile):
        (JSC::RegExp::invalidateCode):
        * runtime/RegExp.h:

2011-07-27  Shinya Kawanaka  <shinyak@google.com>

        Added an interface to take IsWhiteSpaceFunctionPtr.
        https://bugs.webkit.org/show_bug.cgi?id=57746

        Reviewed by Kent Tamura.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::stripWhiteSpace):
          Added an interface to take IsWhiteSpaceFunctionPtr.
        (WTF::StringImpl::simplifyWhiteSpace): ditto.
        * wtf/text/StringImpl.h:
        * wtf/text/WTFString.cpp:
        (WTF::String::stripWhiteSpace): ditto.
        (WTF::String::simplifyWhiteSpace): ditto.
        * wtf/text/WTFString.h:

2011-07-27  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT speculation failure code performs incorrect conversions in
        the case where two registers need to be swapped.
        https://bugs.webkit.org/show_bug.cgi?id=65233

        Reviewed by Gavin Barraclough.
        
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::GeneralizedRegister::swapWith):

2011-07-26  Mark Hahnenberg  <mhahnenberg@apple.com>

        reduce and reduceRight bind callback's this to null rather than undefined
        https://bugs.webkit.org/show_bug.cgi?id=62264

        Reviewed by Oliver Hunt.

        Fixed Array.prototype.reduce and Array.prototype.reduceRight so that they behave correctly
        when calling the callback function without an argument for this, which means it should 
        be undefined according to ES 15.4.4.21 and 15.4.4.22.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncReduce):
        (JSC::arrayProtoFuncReduceRight):

2011-07-26  Filip Pizlo  <fpizlo@apple.com>

        JSC command-line tool does not come with any facility for
        measuring time precisely.
        https://bugs.webkit.org/show_bug.cgi?id=65223

        Reviewed by Gavin Barraclough.
        
        Exposed WTF::currentTime() as currentTimePrecise().

        * jsc.cpp:
        (GlobalObject::GlobalObject):
        (functionPreciseTime):

2011-07-26  Filip Pizlo  <fpizlo@apple.com>

        DFG speculative JIT never emits inline double comparisons, even when it
        would be obvious more efficient to do so.
        https://bugs.webkit.org/show_bug.cgi?id=65212

        Reviewed by Gavin Barraclough.
        
        This handles the obvious case of inlining double comparisons: it only addresses
        the speculative JIT, and only for fused compare/branch sequences.  But it does
        handle the case where both operands are double (and there is no slow path),
        or where one operand is double and the other is unknown type (in which case it
        attempts to unbox the double, otherwise taking slow path).  This is an 0.8%
        speed-up on SunSpider.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::convertToDouble):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleDoubleBranch):
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::isRegisterDataFormatDouble):
        (JSC::DFG::SpeculativeJIT::shouldSpeculateInteger):

2011-07-26  Filip Pizlo  <fpizlo@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64969
        DFG JIT generates inefficient code for speculation failures.

        Reviewed by Gavin Barraclough.
        
        This implements a speculation failure strategy where (1) values spilled on
        non-speculative but not spilled on speculative are spilled, (2) values that
        are in registers on both paths are rearranged without ever touching memory,
        and (3) values spilled on speculative but not spilled on non-speculative are
        filled.
        
        The register shuffling is the most interesting part of this patch.  It
        constructs a permutation graph for registers.  Each node represents a
        register, and each directed edge corresponds to the register's value having
        to be moved to a different register as part of the shuffling.  This is a
        directed graph where each node may only have 0 or 1 incoming edges, and
        0 or 1 outgoing edges.  The algorithm then first finds maximal non-cyclic
        subgraphs where all nodes in the subgraph are reachable from a start node.
        Such subgraphs always resemble linked lists, and correspond to simply
        moving the value in the second-to-last register into the last register, and
        then moving the value in the third-to-last register into the second-to-last
        register, and so on.  Once these subgraphs are taken care of, the remaining
        subgraphs are cycles, and are handled using either (a) conversion or no-op
        if the cycle involves one node, (b) swap if it involves two nodes, or (c)
        a cyclic shuffle involving a scratch register if there are three or more
        nodes.
        
        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::needDataFormatConversion):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::GeneralizedRegister::GeneralizedRegister):
        (JSC::DFG::GeneralizedRegister::createGPR):
        (JSC::DFG::GeneralizedRegister::createFPR):
        (JSC::DFG::GeneralizedRegister::dump):
        (JSC::DFG::GeneralizedRegister::findInSpeculationCheck):
        (JSC::DFG::GeneralizedRegister::findInEntryLocation):
        (JSC::DFG::GeneralizedRegister::previousDataFormat):
        (JSC::DFG::GeneralizedRegister::nextDataFormat):
        (JSC::DFG::GeneralizedRegister::convert):
        (JSC::DFG::GeneralizedRegister::moveTo):
        (JSC::DFG::GeneralizedRegister::swapWith):
        (JSC::DFG::ShuffledRegister::ShuffledRegister):
        (JSC::DFG::ShuffledRegister::isEndOfNonCyclingPermutation):
        (JSC::DFG::ShuffledRegister::handleNonCyclingPermutation):
        (JSC::DFG::ShuffledRegister::handleCyclingPermutation):
        (JSC::DFG::ShuffledRegister::lookup):
        (JSC::DFG::lookupForRegister):
        (JSC::DFG::NodeToRegisterMap::Tuple::Tuple):
        (JSC::DFG::NodeToRegisterMap::NodeToRegisterMap):
        (JSC::DFG::NodeToRegisterMap::set):
        (JSC::DFG::NodeToRegisterMap::end):
        (JSC::DFG::NodeToRegisterMap::find):
        (JSC::DFG::NodeToRegisterMap::clear):
        (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
        (JSC::DFG::JITCompiler::linkSpeculationChecks):
        * dfg/DFGJITCompiler.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::EntryLocation::EntryLocation):
        * dfg/DFGNonSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculationCheck::SpeculationCheck):
        * dfg/DFGSpeculativeJIT.h:

2011-07-26  Oliver Hunt  <oliver@apple.com>

        Buffer overflow creating error messages for JSON.parse
        https://bugs.webkit.org/show_bug.cgi?id=65211

        Reviewed by Darin Adler.

        Parse string length to the UString constructor.

        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::parse):

2011-07-26  Mark Hahnenberg  <mhahnenberg@apple.com>

        Refactor automatically generated JS DOM bindings to replace operator new with static create methods
        https://bugs.webkit.org/show_bug.cgi?id=64732

        Reviewed by Oliver Hunt.

        Replacing the public constructors in the automatically generated JS DOM bindings with static 
        create methods.  JSByteArray is used by several of these bindings in WebCore.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::create):
        * runtime/JSByteArray.h:

2011-07-26  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed build fix for Qt/Linux.

        On platforms with no glib and gstreamer we should not build javascriptcore
        with the Glib support. This is related to http://trac.webkit.org/changeset/91752.

        * wtf/wtf.pri:

2011-07-26  Juan C. Montemayor  <jmont@apple.com>

        JSON errors should be informative
        https://bugs.webkit.org/show_bug.cgi?id=63339

        Added error messages to the JSON Parser.

        Reviewed by Oliver Hunt.

        * runtime/JSONObject.cpp:
        (JSC::JSONProtoFuncParse):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::Lexer::lex):
        (JSC::LiteralParser::Lexer::lexString):
        (JSC::LiteralParser::Lexer::lexNumber):
        (JSC::LiteralParser::parse):
        * runtime/LiteralParser.h:
        (JSC::LiteralParser::getErrorMessage):
        (JSC::LiteralParser::Lexer::sawError):
        (JSC::LiteralParser::Lexer::getErrorMessage):

2011-07-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r91746.
        http://trac.webkit.org/changeset/91746
        https://bugs.webkit.org/show_bug.cgi?id=65180

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

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::stripWhiteSpace):
        (WTF::StringImpl::simplifyWhiteSpace):
        * wtf/text/StringImpl.h:
        * wtf/text/WTFString.cpp:
        * wtf/text/WTFString.h:

2011-07-26  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Change default backend to use GStreamer on Linux and QuickTime on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=63472

        Enable the bits needed for GStreamer only when QtMultimedia is not used.

        * wtf/wtf.pri:

2011-07-26  Shinya Kawanaka  <shinyak@google.com>

        Added an interface to take IsWhiteSpaceFunctionPtr.
        https://bugs.webkit.org/show_bug.cgi?id=57746

        Reviewed by Kent Tamura.

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::stripWhiteSpace):
          Added an interface to take IsWhiteSpaceFunctionPtr.
        (WTF::StringImpl::simplifyWhiteSpace): ditto.
        * wtf/text/StringImpl.h:
        * wtf/text/WTFString.cpp:
        (WTF::String::stripWhiteSpace): ditto.
        (WTF::String::simplifyWhiteSpace): ditto.
        * wtf/text/WTFString.h:

2011-07-25  Filip Pizlo  <fpizlo@apple.com>

        DFG non-speculative JIT emits inefficient code for arithmetic
        involving two registers
        https://bugs.webkit.org/show_bug.cgi?id=65160

        Reviewed by Gavin Barraclough.
        
        The non-speculative JIT now emits inline code for double arithmetic, but
        still attempts integer arithmetic first.  This is a speed-up on SunSpider
        (albeit a small one), and a large speed-up on Kraken.

        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::basicArithOp):

2011-07-25  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Build break with --debug after r89153.
        https://bugs.webkit.org/show_bug.cgi?id=65150

        Unreviewed build fix.

        * wtf/CMakeListsEfl.txt: Add missing libraries.

2011-07-25  Filip Pizlo  <fpizlo@apple.com>

        DFG non-speculative JIT emits obviously inefficient code for arithmetic
        where one operand is a constant.
        https://bugs.webkit.org/show_bug.cgi?id=65146

        Reviewed by Gavin Barraclough.
        
        Changed the code to emit double arithmetic inline.

        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):

2011-07-25  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT bytecode parser misuses pointers into objects allocated as part of a
        WTF::Vector.
        https://bugs.webkit.org/show_bug.cgi?id=65128

        Reviewed by Gavin Barraclough.
        
        The bytecode parser code seems to be right to have a DFGNode& phiNode reference
        into the graph, since this makes the code greatly more readable.  This patch
        thus makes the minimal change necessary to make the code right: it uses a
        pointer (to disambiguate between reloading the pointer and performing a
        copy from one location of the vector to another) and reloads it after the
        calls to addToGraph().

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::processPhiStack):

2011-07-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r91686.
        http://trac.webkit.org/changeset/91686
        https://bugs.webkit.org/show_bug.cgi?id=65144

        1.5% regression in JSC (Requested by jmontemayor on #webkit).

        * runtime/JSONObject.cpp:
        (JSC::JSONProtoFuncParse):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::Lexer::lex):
        (JSC::LiteralParser::Lexer::lexString):
        (JSC::LiteralParser::Lexer::lexNumber):
        (JSC::LiteralParser::parse):
        * runtime/LiteralParser.h:

2011-07-25  Jon Lee  <jonlee@apple.com>

        Assertion called in ExecutableBase::generatedJITCodeForCall() when JIT is not available
        https://bugs.webkit.org/show_bug.cgi?id=65132
        <rdar://problem/9836297>
        
        Reviewed by Oliver Hunt.
        
        Make sure the JIT is available to use before running the following calls:

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::unlinkCalls): Added check, return early if JIT is not available.
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addMethodCallLinkInfos): Added assertion.

2011-07-25  Juan C. Montemayor  <jmont@apple.com>

        JSON errors should be informative
        https://bugs.webkit.org/show_bug.cgi?id=63339

        Added error messages to the JSON Parser.

        Reviewed by Oliver Hunt.

        * runtime/JSONObject.cpp:
        (JSC::JSONProtoFuncParse):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::Lexer::lex):
        (JSC::LiteralParser::Lexer::lexString):
        (JSC::LiteralParser::Lexer::lexNumber):
        (JSC::LiteralParser::parse):
        * runtime/LiteralParser.h:
        (JSC::LiteralParser::getErrorMessage):
        (JSC::LiteralParser::Lexer::sawError):
        (JSC::LiteralParser::Lexer::getErrorMessage):

2011-07-25  Filip Pizlo  <fpizlo@apple.com>

        X86-64 assembler emits three instructions instead of two for certain
        loads and stores.
        https://bugs.webkit.org/show_bug.cgi?id=65095

        Reviewed by Gavin Barraclough.
        
        Simply made these four methods in the assembler use the scratch register,
        which they were previously avoiding.  It still optimizes for the case where
        an absolute address memory accesses is using EAX.  This results in a slight
        performance improvement.

        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::load32):
        (JSC::MacroAssemblerX86_64::store32):
        (JSC::MacroAssemblerX86_64::loadPtr):
        (JSC::MacroAssemblerX86_64::storePtr):

2011-07-25  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Implement EFL-specific current time and monotonicallyIncreasingTime.
        https://bugs.webkit.org/show_bug.cgi?id=64354

        Use ecore_time_unix_get which returns unix time as double type for currentTime
        and ecore_time_get which uses monotonic clock for monotonicallyIncreasingTime.

        Reviewed by Kent Tamura.

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

2011-07-22  Sommer Panage  <panage@apple.com>

        Reviewed by Oliver Hunt.

        export JSContextCreateBacktrace as SPI in JSContextRefPrivate.h
        https://bugs.webkit.org/show_bug.cgi?id=64981

        UIAutomation for iOS would like to support a Javascript backtrace in our error logs.
        Currently, the C API does not provide the tools to do this. However, the private API
        does expose the necessary functionality to get a backtrace
        (via Interpreter::retrieveLastCaller). We recognize this information may result in
        failure in the cases of programs run by 'eval', stack frames beneath host function
        call frames, and in programs run from other programs. Thus, we propose exporting our
        JSContextCreateBacktrace in JSContextRefPrivate.h. This will provide us with the tools
        we need while not advertising an API that isn't really ready for full use.

        * API/JSContextRef.cpp:
        * API/JSContextRefPrivate.h:
        * JavaScriptCore.exp:


2011-07-22  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=65051
        DFG JIT - Enable by default for mac platform on x86-64.

        Rubber Stamped by Geoff Garen.

        This is now a performance progression.

        * wtf/Platform.h:
            - Removed definition of ENABLE_DFG_JIT_RESTRICTIONS.

2011-07-22  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=65047
        DFG JIT - Add support for op_resolve/op_resolve_base

        Reviewed by Sam Weinig.

        These are necessary for any significant eval code coverage
        (and as such increase LayoutTest coverage).

        * dfg/DFGAliasTracker.h:
        (JSC::DFG::AliasTracker::recordResolve):
            - Conservatively blow aliasing optimizations for now.
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
            - Add support for op_resolve/op_resolve_base.
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::callOperation):
            - Add call with exec, identifer aguments.
        * dfg/DFGNode.h:
            - Add new node types.
        (JSC::DFG::Node::hasIdentifier):
            - Resolve nodes have identifiers, too!
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
            - Add generation for new Nodes.
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
            - Added new operations.
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
            - Add generation for new Nodes.

2011-07-22  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=65036
        Messing with the register allocation within flow control = badness.

        Reviewed by Sam Weinig.

        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
            - Fix register allocation.

2011-07-22  Mark Hahnenberg  <mhahnenberg@apple.com>

        Date.prototype.toISOString doesn't handle negative years or years > 9999 correctly.
        https://bugs.webkit.org/show_bug.cgi?id=63986

        Reviewed by Geoffrey Garen.

        Changed the implementation of Date.prototype.toISOString() to use the extended year
        format (+/-yyyyyy) for years outside of [0,9999] to be in compliance with ES 15.9.1.15.1.

        * runtime/DatePrototype.cpp:
        (JSC::dateProtoFuncToISOString):

2011-07-21  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Build fix after r91555.

        * JavaScriptCore.exp:

2011-07-21  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=19271
        eliminate PIC branches by changing NaN handling in JSValue::toNumber

        Reviewed by Sam Weinig.

        Moving the non-numeric cases out of line seems to be a consistent
        win on SunSpider for me, to the order of about 0.5%.

        * runtime/JSCell.h:
        (JSC::JSCell::JSValue::toNumber):
            - Changed to only handle values that are already numbers, moce non-numeric cases out of line.
        * runtime/JSValue.cpp:
        (JSC::JSValue::toNumberSlowCase):
            - Added toNumberSlowCase, handling non-numeric cases.
        * runtime/JSValue.h:
            - Add declaration of toNumberSlowCase.

2011-07-21  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64875
        Use of `yield` keyword is broken

        Reviewed by Sam Weinig.

        * parser/Lexer.cpp:
        (JSC::Lexer::parseIdentifier):
            - The bug here is that a successful match of a RESERVED_IF_STRICT token from
              parseKeyword is being nullified back to IDENT. The problem is that in the
              case of IDENT matches parseKeyword should not move the lexer's input
              position, but in the case of RESERVED_IF_STRICT it has done so.

2011-07-21  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64900
        Function.prototype.apply should accept an array-like object as its second argument

        Reviewed by Sam Weinig.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/FunctionPrototype.cpp:
        (JSC::functionProtoFuncApply):
            - Remove the type error if object is not an array.

2011-07-21  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64964
        DFG JIT - Enable support for eval code

        Reviewed by Sam Weinig.

        This is basically the same as program code, to the JIT!

        * bytecode/Opcode.cpp:
        * bytecode/Opcode.h:
            - Enable opcodeNames in !NDEBUG builds.
        * dfg/DFGOperations.cpp:
            - Fix a bug exposed by eval support, throw correct type error for new.
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
            - Enable DFG JIT for eval code.

2011-07-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r91380.
        http://trac.webkit.org/changeset/91380
        https://bugs.webkit.org/show_bug.cgi?id=64924

        Caused assertion failures in Chromium's IndexedDB tests
        (Requested by rniwa on #webkit).

        * wtf/ThreadIdentifierDataPthreads.cpp:
        (WTF::ThreadIdentifierData::identifier):
        (WTF::ThreadIdentifierData::initialize):
        (WTF::ThreadIdentifierData::initializeKeyOnceHelper):
        (WTF::ThreadIdentifierData::initializeKeyOnce):
        * wtf/ThreadIdentifierDataPthreads.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::initializeThreading):

2011-07-20  Filip Pizlo  <fpizlo@apple.com>

        DFG non-speculative JIT does not use() the aliased GetByVal,
        resulting in bloated use counts.
        https://bugs.webkit.org/show_bug.cgi?id=64911

        Reviewed by Gavin Barraclough.
        
        Inserted a call to use() for the aliased GetByVal.

        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):

2011-07-20  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64909
        DFG JIT - Missing ToInt32 conversions for double constants.

        Reviewed by Sam Weinig.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::toInt32):
            - We cannot trivially omit ToInt32 conversions on double constants.

2011-07-20  Filip Pizlo  <fpizlo@apple.com>

        DFG speculative JIT sometimes claims to use compare operands twice, leading to
        use count corruption.
        https://bugs.webkit.org/show_bug.cgi?id=64903

        Reviewed by Gavin Barraclough.
        
        Move the calls to use() in SpeculativeJIT::compare() so that they only happen
        if the JITCodeGenerator's helper method (which also calls use()) is not called.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compare):

2011-07-20  Oliver Hunt  <oliver@apple.com>

        Don't throw away code when JSGarbageCollect API is called
        https://bugs.webkit.org/show_bug.cgi?id=64894

        Reviewed by Sam Weinig.

        Just call collectAllGarbage.  That will clean up all unneeded
        code without causing any pathological recompilation problems.

        * API/JSBase.cpp:
        (JSGarbageCollect):

2011-07-20  Oliver Hunt  <oliver@apple.com>

        Codeblock doesn't visit cached structures in global resolve instructions
        https://bugs.webkit.org/show_bug.cgi?id=64889

        Reviewed by Sam Weinig.

        Visit the global resolve instructions.  This fixes a couple
        of random crashes seen in the jquery tests when using the
        interpreter.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitAggregate):

2011-07-20  James Robinson  <jamesr@chromium.org>

        Revert worker and WebKit2 runloops to use currentTime() for scheduling instead of the monotonic clock
        https://bugs.webkit.org/show_bug.cgi?id=64841

        Reviewed by Mark Rowe.

        http://trac.webkit.org/changeset/91206 converted most of WebKit's deferred work scheduling to using the
        monotonic clock instead of WTF::currentTime().  This broke many plugin tests on WebKit2 for reasons that are
        unclear.  This reverts everything except for WebCore::ThreadTimers back to the previous behavior.

        * wtf/ThreadingPthreads.cpp:
        (WTF::ThreadCondition::timedWait):
        * wtf/ThreadingWin.cpp:
        (WTF::absoluteTimeToWaitTimeoutInterval):
        * wtf/gtk/ThreadingGtk.cpp:
        (WTF::ThreadCondition::timedWait):
        * wtf/qt/ThreadingQt.cpp:
        (WTF::ThreadCondition::timedWait):

2011-07-14  David Levin  <levin@chromium.org>

        currentThread is too slow!
        https://bugs.webkit.org/show_bug.cgi?id=64577

        Reviewed by Darin Adler and Dmitry Titov.

        The problem is that currentThread results in a pthread_once call which always takes a lock.
        With this change, currentThread is 10% faster than isMainThread in release mode and only
        5% slower than isMainThread in debug.

        * wtf/ThreadIdentifierDataPthreads.cpp:
        (WTF::ThreadIdentifierData::initializeOnce): Remove the pthread once stuff
        which is no longer needed because this is called from initializeThreading().
        (WTF::ThreadIdentifierData::identifier): Remove the initializeKeyOnce call because
        intialization of the pthread key should already be done.
        (WTF::ThreadIdentifierData::initialize): Ditto.
        * wtf/ThreadIdentifierDataPthreads.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::initializeThreading): Acquire the pthread key here.

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

        Fix the 32-bit build.

        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncToString):

2011-07-19  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64678
        Fix bugs in Object.prototype this handling.

        Reviewed by Darin Adler.

        Fix ES5.1 correctness issues identified by Mads Ager.

        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncToString):
            - ES5.1 expects toString of undefined/null to produce "[object Undefined]"/"[object Null]".

2011-07-19  Mark Hahnenberg  <mhahnenberg@apple.com>

        [JSC] WebKit allocates gigabytes of memory when doing repeated string concatenation
        https://bugs.webkit.org/show_bug.cgi?id=63918

        Reviewed by Darin Adler.

        When allocating JSStrings during concatenation, we needed to call the Heap's reportExtraMemoryCost
        method due to additional string copying within several of the constructors when dealing with 
        UStrings.  This has been added to the UString version of the appendStringInConstruct method 
        within the JSString class.

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

2011-07-19  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64679
        Fix bugs in Array.prototype this handling.

        Reviewed by Oliver Hunt.

        * runtime/ArrayPrototype.cpp:
        (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):
            - These methods should throw if this value is undefined.

2011-07-19  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64677
        Fix bugs in String.prototype this handling.

        Reviewed by Oliver Hunt.

        undefined/null this values should throw TypeErrors, not convert to
        the global object, and primitive values should not be converted via
        object types.

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace):
        (JSC::stringProtoFuncCharAt):
        (JSC::stringProtoFuncCharCodeAt):
        (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::trimString):
            - These methods should throw if this value is undefined,
              convert ToString directly, not via ToObject.

2011-07-19  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT sometimes emits spill code even when the respective values
        are never needed.
        https://bugs.webkit.org/show_bug.cgi?id=64774

        Reviewed by Gavin Barraclough.
        
        The main high-level change is that it is now easier to call use() on a
        virtual register.  JSValueOperand and its other-typed relatives now have
        a handy use() method, and jsValueResult() and friends now make it easier to
        pass UseChildrenCalledExplicitly.
        
        The rest of this patch hoists the call to use() as high as possible for
        all of those cases where either flushRegisters() or silentSpillAllRegisters()
        may be called.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::cachedGetById):
        (JSC::DFG::JITCodeGenerator::cachedGetMethod):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeStrictEq):
        (JSC::DFG::JITCodeGenerator::emitBranch):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::use):
        (JSC::DFG::JITCodeGenerator::integerResult):
        (JSC::DFG::JITCodeGenerator::jsValueResult):
        (JSC::DFG::IntegerOperand::use):
        (JSC::DFG::DoubleOperand::use):
        (JSC::DFG::JSValueOperand::use):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::valueToNumber):
        (JSC::DFG::NonSpeculativeJIT::valueToInt32):
        (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
        (JSC::DFG::NonSpeculativeJIT::basicArithOp):
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculateStrictInt32Operand::use):
        (JSC::DFG::SpeculateCellOperand::use):

2011-07-19  Xan Lopez  <xlopez@igalia.com>

        ARMv7 backend broken, lacks 3 parameter rshift32 method
        https://bugs.webkit.org/show_bug.cgi?id=64571

        Reviewed by Zoltan Herczeg.

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::rshift32): add missing rshift32 method.

2011-07-18  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not optimize strict equality as effectively as the old JIT does.
        https://bugs.webkit.org/show_bug.cgi?id=64759

        Reviewed by Gavin Barraclough.
        
        This adds a more complete set of strict equality optimizations.  If either
        operand is known numeric, then the code reverts to the old style of optimizing
        (first try integer comparison).  Otherwise it uses the old JIT's trick of
        first simultaneously checking if both operands are either numbers or cells;
        if not then a fast path is taken.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeStrictEq):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeStrictEq):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeStrictEq):
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-07-18  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64760
        DFG JIT - Should be able to compile program code.

        Reviewed by Geoff Garen.

        Add support for op_end, hooks to compile program code in Executable.cpp.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
            - Add support for op_end
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileEntry):
        (JSC::DFG::JITCompiler::compileBody):
        (JSC::DFG::JITCompiler::link):
            - Added, separate out steps of compileFunction.
        (JSC::DFG::JITCompiler::compile):
            - Added, compile program code.
        (JSC::DFG::JITCompiler::compileFunction):
            - Sections separated out to helper functions.
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::JITCompiler):
            - Added m_exceptionCheckCount.
        * runtime/Executable.cpp:
        (JSC::tryDFGCompile):
        (JSC::tryDFGCompileFunction):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):
            - Renamed tryDFGCompile to tryDFGCompileFunction, added tryDFGCompile to compile program code.

2011-07-18  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64678
        Fix bugs in Object.prototype this handling.

        Reviewed by Oliver Hunt.

        undefined/null this values should throw TypeErrors, not convert to the global object,
        also, to toLocaleString should be calling the ToObject & invoking the object's toString
        function, even for values that are already strings.

        * runtime/ObjectPrototype.cpp:
        (JSC::objectProtoFuncValueOf):
        (JSC::objectProtoFuncHasOwnProperty):
        (JSC::objectProtoFuncIsPrototypeOf):
        (JSC::objectProtoFuncPropertyIsEnumerable):
        (JSC::objectProtoFuncToLocaleString):
        (JSC::objectProtoFuncToString):

2011-07-18  Filip Pizlo  <fpizlo@apple.com>

        JSC GC lazy sweep does not inline the common cases of cell destruction.
        https://bugs.webkit.org/show_bug.cgi?id=64745

        Reviewed by Oliver Hunt.
        
        This inlines the case of JSFinalObject destruction.

        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::lazySweep):

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

        Interpreter build-fix

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

2011-07-18  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not optimize equal-null comparisons and branches.
        https://bugs.webkit.org/show_bug.cgi?id=64659

        Reviewed by Gavin Barraclough.
        
        Added a peephole-aware compare-to-null implementation to JITCodeGenerator,
        which is used by both the speculative and non-speculative JIT.  Through
        the use of the new isNullConstant helper, the two JITs invoke the
        nonSpecualtiveCompareNull() helper instead of their regular comparison
        helpers when compiling CompareEq.  Through the use of the new isKnownCell
        helper, the compare-null code will skip the is-a-cell check if the
        speculative JIT had been speculating cell.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::isKnownCell):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompareNull):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranchNull):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeCompareNull):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::isNullConstant):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-07-18  James Robinson  <jamesr@chromium.org>

        Timer scheduling should be based off the monotonic clock
        https://bugs.webkit.org/show_bug.cgi?id=64544

        Reviewed by Darin Adler.

        Switches ThreadCondition::timedWait and related utility functions from currentTime() to
        monotonicallyIncreasingTime().

        Add WTF::monotonicallyIncreasingTime() to list of exported functions so it can be accessed from WebCore/WebKit.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/ThreadingPthreads.cpp:
        (WTF::ThreadCondition::timedWait):
        * wtf/ThreadingWin.cpp:
        (WTF::absoluteTimeToWaitTimeoutInterval):
        * wtf/gtk/ThreadingGtk.cpp:
        (WTF::ThreadCondition::timedWait):
        * wtf/qt/ThreadingQt.cpp:
        (WTF::ThreadCondition::timedWait):

2011-07-18  Filip Pizlo  <fpizlo@apple.com>

        JSC JIT does not inline GC allocation fast paths
        https://bugs.webkit.org/show_bug.cgi?id=64582

        Reviewed by Oliver Hunt.

        This addresses inlining allocation for the easiest-to-allocate cases:
        op_new_object and op_create_this.  Inlining GC allocation fast paths
        required three changes.  First, the JSGlobalData now saves the vtable
        pointer of JSFinalObject, since that's what op_new_object and
        op_create_this allocate.  Second, the Heap exposes a reference to
        the appropriate SizeClass, so that the JIT may inline accesses
        directly to the SizeClass for JSFinalObject allocations.  And third,
        the JIT is extended with code to emit inline fast paths for GC
        allocation.  A stub call is emitted in the case where the inline fast
        path fails.

        * heap/Heap.h:
        (JSC::Heap::sizeClassFor):
        (JSC::Heap::allocate):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitAllocateJSFinalObject):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_new_object):
        (JSC::JIT::emitSlow_op_new_object):
        (JSC::JIT::emit_op_create_this):
        (JSC::JIT::emitSlow_op_create_this):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_new_object):
        (JSC::JIT::emitSlow_op_new_object):
        (JSC::JIT::emit_op_create_this):
        (JSC::JIT::emitSlow_op_create_this):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::storeVPtrs):
        * runtime/JSGlobalData.h:
        * runtime/JSObject.h:
        (JSC::JSFinalObject::JSFinalObject):
        (JSC::JSObject::offsetOfInheritorID):

2011-07-18  Mark Hahnenberg  <mhahnenberg@apple.com>

        Refactor JSC to replace JSCell::operator new with static create method
        https://bugs.webkit.org/show_bug.cgi?id=64466

        Reviewed by Oliver Hunt (oliver@apple.com) and Darin Adler (darin@apple.com).

        First step in a longer refactoring process to remove the use of
        operator new overloading in order to allocate GC objects and to replace
        this method with static create methods for each individual type of heap-allocated
        JS object.  This particular patch only deals with replacing uses of
        operator new within JSC proper.  Future patches will remove it from the
        parts that interface with the DOM.  Due to the DOM's continued dependence
        on it, operator new has not actually been removed from JSCell.

        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::create):
        * API/JSCallbackFunction.h:
        (JSC::JSCallbackFunction::create):
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::operator new):
        (JSC::JSCallbackObject::create):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::staticFunctionGetter):
        * API/JSClassRef.cpp:
        (OpaqueJSClass::prototype):
        * API/JSContextRef.cpp:
        * API/JSObjectRef.cpp:
        (JSObjectMake):
        (JSObjectMakeFunctionWithCallback):
        (JSObjectMakeConstructor):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::createActivation):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::makeFunction):
        * bytecompiler/NodesCodegen.cpp:
        (JSC::RegExpNode::emitBytecode):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::retrieveArguments):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jsc.cpp:
        (GlobalObject::create):
        (GlobalObject::GlobalObject):
        (functionRun):
        (jscmain):
        * runtime/Arguments.h:
        (JSC::Arguments::create):
        (JSC::Arguments::createNoParameters):
        * runtime/ArrayConstructor.cpp:
        (JSC::constructArrayWithSizeQuirk):
        * runtime/ArrayConstructor.h:
        (JSC::ArrayConstructor::create):
        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSplice):
        * runtime/ArrayPrototype.h:
        (JSC::ArrayPrototype::create):
        * runtime/BooleanConstructor.cpp:
        (JSC::constructBoolean):
        (JSC::constructBooleanFromImmediateBoolean):
        * runtime/BooleanConstructor.h:
        (JSC::BooleanConstructor::create):
        * runtime/BooleanObject.h:
        (JSC::BooleanObject::create):
        * runtime/BooleanPrototype.h:
        (JSC::BooleanPrototype::create):
        * runtime/DateConstructor.cpp:
        (JSC::constructDate):
        * runtime/DateConstructor.h:
        (JSC::DateConstructor::create):
        * runtime/DateInstance.h:
        (JSC::DateInstance::create):
        * runtime/DatePrototype.h:
        (JSC::DatePrototype::create):
        * runtime/Error.cpp:
        (JSC::createError):
        (JSC::createEvalError):
        (JSC::createRangeError):
        (JSC::createReferenceError):
        (JSC::createSyntaxError):
        (JSC::createTypeError):
        (JSC::createURIError):
        (JSC::StrictModeTypeErrorFunction::create):
        (JSC::createTypeErrorFunction):
        * runtime/ErrorConstructor.h:
        (JSC::ErrorConstructor::create):
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        (JSC::ErrorInstance::create):
        * runtime/ErrorInstance.h:
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        * runtime/ErrorPrototype.h:
        (JSC::ErrorPrototype::create):
        * runtime/ExceptionHelpers.cpp:
        (JSC::InterruptedExecutionError::InterruptedExecutionError):
        (JSC::InterruptedExecutionError::create):
        (JSC::createInterruptedExecutionException):
        (JSC::TerminatedExecutionError::TerminatedExecutionError):
        (JSC::TerminatedExecutionError::create):
        (JSC::createTerminatedExecutionException):
        * runtime/Executable.cpp:
        (JSC::FunctionExecutable::FunctionExecutable):
        (JSC::FunctionExecutable::fromGlobalCode):
        * runtime/Executable.h:
        (JSC::ExecutableBase::create):
        (JSC::NativeExecutable::create):
        (JSC::ScriptExecutable::ScriptExecutable):
        (JSC::EvalExecutable::create):
        (JSC::ProgramExecutable::create):
        (JSC::FunctionExecutable::create):
        (JSC::FunctionExecutable::make):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/FunctionConstructor.h:
        (JSC::FunctionConstructor::create):
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::addFunctionProperties):
        * runtime/FunctionPrototype.h:
        (JSC::FunctionPrototype::create):
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::create):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::create):
        (JSC::jsAPIValueWrapper):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::argumentsGetter):
        * runtime/JSActivation.h:
        (JSC::JSActivation::create):
        * runtime/JSArray.h:
        (JSC::JSArray::create):
        * runtime/JSCell.h:
        (JSC::JSCell::allocateCell):
        * runtime/JSFunction.h:
        (JSC::JSFunction::create):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::reset):
        * runtime/JSGlobalObject.h:
        (JSC::constructEmptyArray):
        (JSC::constructArray):
        * runtime/JSNotAnObject.h:
        (JSC::JSNotAnObject::create):
        * runtime/JSONObject.h:
        (JSC::JSONObject::create):
        * runtime/JSObject.cpp:
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::defineSetter):
        (JSC::putDescriptor):
        * runtime/JSObject.h:
        (JSC::JSFinalObject::create):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::create):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::create):
        * runtime/JSString.cpp:
        (JSC::JSString::substringFromRope):
        (JSC::JSString::replaceCharacter):
        (JSC::StringObject::create):
        * runtime/JSString.h:
        (JSC::RopeBuilder::JSString):
        (JSC::RopeBuilder::create):
        (JSC::RopeBuilder::createHasOtherOwner):
        (JSC::jsSingleCharacterString):
        (JSC::jsSingleCharacterSubstring):
        (JSC::jsNontrivialString):
        (JSC::jsString):
        (JSC::jsSubstring):
        (JSC::jsOwnedString):
        * runtime/JSValue.cpp:
        (JSC::JSValue::toObjectSlowCase):
        (JSC::JSValue::synthesizeObject):
        (JSC::JSValue::synthesizePrototype):
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
        * runtime/MathObject.h:
        (JSC::MathObject::create):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * runtime/NativeErrorConstructor.h:
        (JSC::NativeErrorConstructor::create):
        * runtime/NativeErrorPrototype.h:
        (JSC::NativeErrorPrototype::create):
        * runtime/NumberConstructor.cpp:
        (JSC::constructWithNumberConstructor):
        * runtime/NumberConstructor.h:
        (JSC::NumberConstructor::create):
        * runtime/NumberObject.cpp:
        (JSC::constructNumber):
        * runtime/NumberObject.h:
        (JSC::NumberObject::create):
        * runtime/NumberPrototype.h:
        (JSC::NumberPrototype::create):
        * runtime/ObjectConstructor.h:
        (JSC::ObjectConstructor::create):
        * runtime/ObjectPrototype.h:
        (JSC::ObjectPrototype::create):
        * runtime/Operations.h:
        (JSC::jsString):
        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::createWithoutCaching):
        (JSC::RegExp::create):
        * runtime/RegExp.h:
        * runtime/RegExpCache.cpp:
        (JSC::RegExpCache::lookupOrCreate):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::arrayOfMatches):
        (JSC::constructRegExp):
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::create):
        * runtime/RegExpMatchesArray.h:
        (JSC::RegExpMatchesArray::create):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::create):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):
        * runtime/RegExpPrototype.h:
        (JSC::RegExpPrototype::create):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::create):
        (JSC::ScopeChainNode::push):
        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::createEmptyString):
        (JSC::SmallStrings::createSingleCharacterString):
        * runtime/StringConstructor.cpp:
        (JSC::constructWithStringConstructor):
        * runtime/StringConstructor.h:
        (JSC::StringConstructor::create):
        * runtime/StringObject.h:
        (JSC::StringObject::create):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::create):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):
        * runtime/StringPrototype.h:
        (JSC::StringPrototype::create):
        * runtime/Structure.h:
        (JSC::Structure::create):
        (JSC::Structure::createStructure):
        * runtime/StructureChain.h:
        (JSC::StructureChain::create):

2011-07-17  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Refactor scheduleDispatchFunctionsOnMainThread to fix crash.
        https://bugs.webkit.org/show_bug.cgi?id=64337

        Replace ecore_timer_add to Ecore_Pipe.
        This is needed because ecore_timer should not be called in a child thread,
        but in the main thread.

        Reviewed by Antonio Gomes.

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

2011-07-17  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT operationCompareEqual does not inline JSValue::equalSlowCaseInline.
        https://bugs.webkit.org/show_bug.cgi?id=64637

        Reviewed by Gavin Barraclough.

        * dfg/DFGOperations.cpp:

2011-07-16  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64657
        Converted this value not preserved when accessed via direct eval.

        Reviewed by Oliver Hunt.

        Upon entry into a non-strict function, primitive this values should be boxed as Object types
        (or substituted with the global object) - which is done by op_convert_this. However we only
        do so where this is used lexically within the function (we omit the conversion op if not).
        The problem comes if a direct eval (running within the function's scope) accesses the this
        value.

        We are safe in the case of a single eval, since the this object will be converted within
        callEval, however the converted value is not preserved, and a new wrapper object is allocated
        each time eval is invoked. This is inefficient and incorrect, since any changes to the wrapper
        object will be lost between eval statements.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
            - If a function uses eval, we always need to convert this.
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
            - Don't convert primitive values here - this is too late!
        (JSC::Interpreter::privateExecute):
            - Changed op_convert_this to call new isPrimitive method.
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
            - Changed op_convert_this to call new isPrimitive method.
        * runtime/JSCell.h:
        (JSC::JSCell::JSValue::isPrimitive):
            - Added JSValue::isPrimitive.
        * runtime/JSValue.h:
            - Added JSValue::isPrimitive.

2011-07-16  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT compare/branch code emits is-integer tests even when a value is
        definitely not an integer.
        https://bugs.webkit.org/show_bug.cgi?id=64654

        Reviewed by Gavin Barraclough.
        
        Added the isKnownNotInteger() method, which returns true if a node is
        definitely not an integer and will always fail any is-integer test.  Then
        modified the compare and branch code to use this method; if it returns
        true then is-int tests are omitted and the compiler always emits a slow
        call.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::isKnownNotInteger):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeNonPeepholeCompare):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare):
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compare):

2011-07-16  Filip Pizlo  <fpizlo@apple.com>

        DFG speculative JIT has dead code for slow calls for branches.
        https://bugs.webkit.org/show_bug.cgi?id=64653

        Reviewed by Gavin Barraclough.
        
        Removed SpeculativeJIT::compilePeepHoleCall.

        * dfg/DFGSpeculativeJIT.cpp:
        * dfg/DFGSpeculativeJIT.h:

2011-07-15  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        * dfg/DFGGraph.h:

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

        NativeError.prototype objects have [[Class]] of "Object" but should be "Error"
        https://bugs.webkit.org/show_bug.cgi?id=55346

        Reviewed by Sam Weinig.

        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
            - Switch to putDirect since we're not the only ones tranitioning this Structure now.
        * runtime/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::NativeErrorPrototype):
        * runtime/NativeErrorPrototype.h:
            - Switch base class to ErrorPrototype.

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

        DFG JIT - Where arguments passed are integers, speculate this.
        https://bugs.webkit.org/show_bug.cgi?id=64630

        Reviewed by Sam Weinig.

        Presently the DFG JIT is overly aggressively predicting double.
        Use a bit of dynamic information, and curtail this a little.

        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::predictArgumentTypes):
            - Check for integer arguments.
        * dfg/DFGGraph.h:
            - Function declaration.
        * runtime/Executable.cpp:
        (JSC::tryDFGCompile):
        (JSC::FunctionExecutable::compileForCallInternal):
            - Add call to predictArgumentTypes.

2011-07-15  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT is inconsistent about fusing branches and speculating
        integer comparisons for branches.
        https://bugs.webkit.org/show_bug.cgi?id=64573

        Reviewed by Gavin Barraclough.
        
        This patch moves some of NonSpeculativeJIT's functionality up into the
        JITCodeGenerator superclass so that it can be used from both JITs.  Now,
        in cases where the speculative JIT doesn't want to speculate but still
        wants to emit good code, it can reliably emit the same code sequence as
        the non-speculative JIT.  This patch also extends the non-speculative
        JIT's compare optimizations to include compare/branch fusing, and
        extends the speculative JIT's compare optimizations to cover StrictEqual.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::isKnownInteger):
        (JSC::DFG::JITCodeGenerator::isKnownNumeric):
        (JSC::DFG::JITCodeGenerator::nonSpeculativePeepholeBranch):
        (JSC::DFG::JITCodeGenerator::nonSpeculativeCompare):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::detectPeepHoleBranch):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGNonSpeculativeJIT.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        * wtf/Platform.h:

2011-07-14  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64250
        Global strict mode function leaking global object as "this".

        Reviewed by Oliver Hunt.

        The root problem here is that we pass the wrong values into
        calls, and then try to fix them up in the callee. Correct
        behaviour per the spec is to pass in the value undefined,
        as this unless either (1) the function call is based on an
        explicit property access or (2) the base of the call comes
        directly from a 'with'.

        This change does away with the need for this conversion of
        objects (non strict code should only box primitives), and
        does away with all this conversion for strict functions.

        This patch may have web compatibility ramifications, and may
        require some advocacy.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
            - Removed op_convert_this_strict, added op_resolve_with_this.
        * bytecode/Opcode.h:
            - Removed op_convert_this_strict, added op_resolve_with_this.
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitResolveWithThis):
            - Removed op_convert_this_strict, added op_resolve_with_this.
        * bytecompiler/BytecodeGenerator.h:
            - Removed op_convert_this_strict, added op_resolve_with_this.
        * bytecompiler/NodesCodegen.cpp:
        (JSC::EvalFunctionCallNode::emitBytecode):
        (JSC::FunctionCallResolveNode::emitBytecode):
            - Removed op_convert_this_strict, added op_resolve_with_this.
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
            - Change NeedsThisConversion check to test for JSString's vptr
              (objects no longer need conversion).
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolveThisAndProperty):
            - Based on resolveBaseAndProperty, but produce correct this value.
        (JSC::Interpreter::privateExecute):
            - Removed op_convert_this_strict, added op_resolve_with_this.
        * interpreter/Interpreter.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
            - Removed op_convert_this_strict, added op_resolve_with_this.
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_resolve_with_this):
            - Removed op_convert_this_strict, added op_resolve_with_this.
        (JSC::JIT::emit_op_convert_this):
        (JSC::JIT::emitSlow_op_convert_this):
            - Change NeedsThisConversion check to test for JSString's vptr
              (objects no longer need conversion).
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_resolve_with_this):
            - Removed op_convert_this_strict, added op_resolve_with_this.
        (JSC::JIT::emit_op_convert_this):
        (JSC::JIT::emitSlow_op_convert_this):
            - Change NeedsThisConversion check to test for JSString's vptr
              (objects no longer need conversion).
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
            - Removed op_convert_this_strict, added op_resolve_with_this.
        * jit/JITStubs.h:
            - Removed op_convert_this_strict, added op_resolve_with_this.
        * runtime/JSActivation.h:
            - removed NeedsThisConversion flag, added IsEnvironmentRecord.
        * runtime/JSStaticScopeObject.h:
            - removed NeedsThisConversion flag, added IsEnvironmentRecord.
        * runtime/JSString.h:
        (JSC::RopeBuilder::createStructure):
            - removed NeedsThisConversion.
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::isEnvironmentRecord):
        (JSC::TypeInfo::overridesHasInstance):
            - removed NeedsThisConversion flag, added IsEnvironmentRecord.
        * runtime/JSValue.h:
            - removed NeedsThisConversion.
        * runtime/JSVariableObject.h:
            - Corrected StructureFlags inheritance.
        * runtime/StrictEvalActivation.h:
        (JSC::StrictEvalActivation::createStructure):
            - Added IsEnvironmentRecord to StructureFlags, addded createStructure.
        * runtime/Structure.h:
            - removed NeedsThisConversion.
        * tests/mozilla/ecma/String/15.5.4.6-2.js:
        (getTestCases):
            - Removed invalid test case.

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

        Unreviewed, rolling out r91082, r91087, and r91089.
        http://trac.webkit.org/changeset/91082
        http://trac.webkit.org/changeset/91087
        http://trac.webkit.org/changeset/91089
        https://bugs.webkit.org/show_bug.cgi?id=64616

        gtk tests are failing a lot after this change. (Requested by
        dave_levin on #webkit).

        * wtf/ThreadIdentifierDataPthreads.cpp:
        (WTF::ThreadIdentifierData::identifier):
        (WTF::ThreadIdentifierData::initialize):
        (WTF::ThreadIdentifierData::initializeKeyOnceHelper):
        (WTF::ThreadIdentifierData::initializeKeyOnce):
        * wtf/ThreadIdentifierDataPthreads.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::initializeThreading):

2011-07-15  David Levin  <levin@chromium.org>

        Another attempted build fix.

        * wtf/ThreadIdentifierDataPthreads.cpp: Add include to pick
        up the definition of PTHREAD_KEYS_MAX.

2011-07-15  David Levin  <levin@chromium.org>

        Chromium build fix.

        * wtf/ThreadIdentifierDataPthreads.cpp: Add include to pick
        up the definition of PTHREAD_KEYS_MAX.

2011-07-14  David Levin  <levin@chromium.org>

        currentThread is too slow!
        https://bugs.webkit.org/show_bug.cgi?id=64577

        Reviewed by Darin Adler and Dmitry Titov.

        The problem is that currentThread results in a pthread_once call which always takes a lock.
        With this change, currentThread is 10% faster than isMainThread in release mode and only
        5% slower than isMainThread in debug.

        * wtf/ThreadIdentifierDataPthreads.cpp:
        (WTF::ThreadIdentifierData::initializeOnce): Remove the pthread once stuff
        which is no longer needed because this is called from initializeThreading().
        (WTF::ThreadIdentifierData::identifier): Remove the initializeKeyOnce call because
        intialization of the pthread key should already be done.
        (WTF::ThreadIdentifierData::initialize): Ditto.
        * wtf/ThreadIdentifierDataPthreads.h:
        * wtf/ThreadingPthreads.cpp:
        (WTF::initializeThreading): Acquire the pthread key here.

2011-07-14  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not optimize Branch as well as it could.
        https://bugs.webkit.org/show_bug.cgi?id=64574

        Reviewed by Gavin Barraclough.
        
        This creates a common code path for emitting unfused branches, which does
        no speculation, and only performs a slow call if absolutely necessary.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::emitBranch):
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-07-14  Filip Pizlo  <fpizlo@apple.com>

        GC allocation fast path has too many operations.
        https://bugs.webkit.org/show_bug.cgi?id=64493

        Reviewed by Darin Adler.
        
        Changed the timing of the lazy sweep so that it occurs when we land on
        a previously-unsweeped block, rather than whenever we land on an unsweeped
        cell.  After the per-block lazy sweep occurs, the block is turned into a
        singly linked list of free cells.  The allocation fast path is now just a
        load-branch-store to remove a cell from the head of the list.
        
        Additionally, this changes the way new blocks are allocated.  Previously,
        they would be populated with dummy cells.  With this patch, they are
        turned into a free list, which means that there will never be destructor
        calls for allocations in fresh blocks.
        
        These changes result in a 1.9% speed-up on V8, and a 0.6% speed-up on
        SunSpider.  There are no observed statistically significant slow-downs
        on any individual benchmark.

        * JavaScriptCore.exp:
        * heap/Heap.cpp:
        (JSC::Heap::allocateSlowCase):
        (JSC::Heap::collect):
        (JSC::Heap::canonicalizeBlocks):
        (JSC::Heap::resetAllocator):
        * heap/Heap.h:
        (JSC::Heap::forEachProtectedCell):
        (JSC::Heap::forEachCell):
        (JSC::Heap::forEachBlock):
        (JSC::Heap::allocate):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock):
        (JSC::MarkedBlock::lazySweep):
        (JSC::MarkedBlock::blessNewBlockForFastPath):
        (JSC::MarkedBlock::blessNewBlockForSlowPath):
        (JSC::MarkedBlock::canonicalizeBlock):
        * heap/MarkedBlock.h:
        * heap/NewSpace.cpp:
        (JSC::NewSpace::addBlock):
        (JSC::NewSpace::canonicalizeBlocks):
        * heap/NewSpace.h:
        (JSC::NewSpace::allocate):
        (JSC::NewSpace::SizeClass::SizeClass):
        (JSC::NewSpace::SizeClass::canonicalizeBlock):
        * heap/OldSpace.cpp:
        (JSC::OldSpace::addBlock):

2011-07-14  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT crashes on host constructor calls in debug mode.
        https://bugs.webkit.org/show_bug.cgi?id=64562
        
        Reviewed by Gavin Barraclough.
        
        Fixed the relevant ASSERT.

        * dfg/DFGOperations.cpp:

2011-07-14  Filip Pizlo  <fpizlo@apple.com>

        DFG speculative JIT contains a FIXME for rewinding speculative code generation that
        has already been fixed.
        https://bugs.webkit.org/show_bug.cgi?id=64022

        Reviewed by Gavin Barraclough.

        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):

2011-07-14  Ryuan Choi  <ryuan.choi@samsung.com>

        [EFL] Add OwnPtr specialization for Ecore_Pipe.
        https://bugs.webkit.org/show_bug.cgi?id=64515

        Add an overload for deleteOwnedPtr(Ecore_Pipe*) on EFL port.

        Reviewed by Xan Lopez.

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

2011-07-14  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT unnecessarily boxes and unboxes values during silent spilling.
        https://bugs.webkit.org/show_bug.cgi?id=64068

        Reviewed by Gavin Barraclough.
        
        Silent spilling and filling of registers is done during slow-path C
        function calls.  The silent spill/fill logic does not affect register
        allocation on paths that don't involve the C function call.
        
        This changes the silent spilling code to spill in unboxed form.  The
        silent fill will refill in whatever form the register was spilled in.
        For example, the silent spill code may choose not to spill the register
        because it was already spilled previously, which would imply that it
        was spilled in boxed form.  The filling code detects this and either
        unboxes, or not, depending on what is appropriate.
        
        This change also results in a simplification of the silent spill/fill
        API: silent spilling no longer needs to know about the set of registers
        that cannot be trampled, since it never does boxing and hence does not
        need a temporary register.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::cachedGetById):
        (JSC::DFG::JITCodeGenerator::cachedPutById):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::silentSpillGPR):
        (JSC::DFG::JITCodeGenerator::silentSpillFPR):
        (JSC::DFG::JITCodeGenerator::silentFillFPR):
        (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::valueToNumber):
        (JSC::DFG::NonSpeculativeJIT::valueToInt32):
        (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
        (JSC::DFG::NonSpeculativeJIT::basicArithOp):
        (JSC::DFG::NonSpeculativeJIT::compare):
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-07-13  Michael Saboff  <msaboff@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=64202
        Enh: Improve handling of RegExp in the form of /.*blah.*/

        Reviewed by Gavin Barraclough.

        Added code to both the Yarr interpreter and JIT to handle
        these expressions a little differently.  First off, the terms
        in between the leading and trailing .*'s cannot capture and
        also this enhancement is limited to single alternative expressions.
        If an expression is of the right form with the aforementioned
        restrictions, we process the inner terms and then look for the
        beginning of the string and end of the string.  There is handling 
        for multiline expressions to allow the beginning and end to be 
        right after and right before newlines.

        This enhancement speeds up expressions of this type 12x on
        a MacBookPro.

        Cleaned up 'case' statement indentation.

        A new set of tests was added as LayoutTests/fast/regex/dotstar.html

        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::InputStream::end):
        (JSC::Yarr::Interpreter::matchDotStarEnclosure):
        (JSC::Yarr::Interpreter::matchDisjunction):
        (JSC::Yarr::ByteCompiler::assertionDotStarEnclosure):
        (JSC::Yarr::ByteCompiler::emitDisjunction):
        * yarr/YarrInterpreter.h:
        (JSC::Yarr::ByteTerm::DotStarEnclosure):
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::generateDotStarEnclosure):
        (JSC::Yarr::YarrGenerator::backtrackDotStarEnclosure):
        (JSC::Yarr::YarrGenerator::generateTerm):
        (JSC::Yarr::YarrGenerator::backtrackTerm):
        * yarr/YarrPattern.cpp:
        (JSC::Yarr::YarrPatternConstructor::setupAlternativeOffsets):
        (JSC::Yarr::YarrPatternConstructor::containsCapturingTerms):
        (JSC::Yarr::YarrPatternConstructor::optimizeDotStarWrappedExpressions):
        (JSC::Yarr::YarrPattern::compile):
        * yarr/YarrPattern.h:
        (JSC::Yarr::PatternTerm::PatternTerm):

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

        [GTK] Fix distcheck

        Reviewed by Martin Robinson.

        * GNUmakefile.list.am: add missing files.

2011-07-13  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not implement prototype chain or list caching for get_by_id.
        https://bugs.webkit.org/show_bug.cgi?id=64147

        Reviewed by Gavin Barraclough.
        
        This implements unified support for prototype caching, prototype chain
        caching, and polymorphic (i.e. list) prototype and prototype chain
        caching.  This is done by creating common code for emitting prototype
        or chain access stubs, and having it factored out into
        generateProtoChainAccessStub().  This function is called by
        tryCacheGetByID once the latter determines that some form of prototype
        access caching is necessary (i.e. the slot being accessed is not on the
        base value but on some other object).
        
        Direct prototype list, and prototype chain list, caching is implemented by
        linking the slow path to operationGetByIdProtoBuildList(), which uses the
        same helper function (generateProtoChainAccessStub()) as tryCacheGetByID.
        
        This change required ensuring that the value in the scratchGPR field in
        StructureStubInfo is preserved even after the stub info is in the
        chain, or proto_list, states.  Hence scratchGPR was moved out of the union
        and into the top-level of StructureStubInfo.
        
        * bytecode/StructureStubInfo.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::emitRestoreScratch):
        (JSC::DFG::linkRestoreScratch):
        (JSC::DFG::generateProtoChainAccessStub):
        (JSC::DFG::tryCacheGetByID):
        (JSC::DFG::tryBuildGetByIDProtoList):
        (JSC::DFG::dfgBuildGetByIDProtoList):
        (JSC::DFG::tryCachePutByID):
        * dfg/DFGRepatch.h:

2011-07-12  Brent Fulgham  <bfulgham@webkit.org>

        Standardize WinCairo conditionalized code under PLATFORM macro.
        https://bugs.webkit.org/show_bug.cgi?id=64377

        Reviewed by Maciej Stachowiak.

        * wtf/Platform.h: Update to use PLATFORM(WIN_CAIRO) for tests.

2011-07-13  David Levin  <levin@chromium.org>

        Possible race condition in ThreadIdentifierData::initializeKeyOnce and shouldCallRealDebugger.
        https://bugs.webkit.org/show_bug.cgi?id=64465

        Reviewed by Dmitry Titov.

        There isn't a good way to test this as it is very highly unlikely to occur.

        * wtf/ThreadIdentifierDataPthreads.cpp:
        (WTF::ThreadIdentifierData::initializeKeyOnce): Since scoped static initialization
        isn't thread-safe, change the initialization to be global.

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

        https://bugs.webkit.org/show_bug.cgi?id=64424
        Our direct eval behaviour deviates slightly from the spec.

        Reviewed by Oliver Hunt.

        The ES5 spec defines a concept of 'Direct Call to Eval' (see section 15.1.2.1.1), where
        behaviour will differ from that of an indirect call (e.g. " { eval: window.eval }.eval();"
        or "var a = eval; a();" are indirect calls), particularly in non-strict scopes variables
        may be introduced into the caller's environment.

        ES5 direct calls are any call where the callee function is provided by a reference, a base
        of that Reference is an EnvironmentRecord (this corresponds to all productions
        "PrimaryExpression: Identifier", see 10.2.2.1 GetIdentifierReference), and where the name
        of the reference is "eval". This means any expression of the form "eval(...)", and that
        calls the standard built in eval method from on the Global Object, is considered to be
        direct.

        In JavaScriptCore we are currently overly restrictive. We also check that the
        EnvironmentRecord that is the base of the reference is the Declaractive Environment Record
        at the root of the scope chain, corresponding to the Global Object - an "eval(..)" statement
        that hits a var eval in a nested scope is not considered to be direct. This behaviour does
        not emanate from the spec, and is incorrect.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
            - Fixed direct eval check in op_call_eval.
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
            - Fixed direct eval check in op_call_eval.
        * runtime/Executable.h:
        (JSC::isHostFunction):
            - Added check for host function with specific NativeFunction.

2011-07-13  Ademar de Souza Reis Jr.  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        Broken build on QNX
        https://bugs.webkit.org/show_bug.cgi?id=63717

        QNX doesn't support pthread's SA_RESTART (required by
        JSC_MULTIPLE_THREADS), JIT is broken at runtime and there a
        few minor compilation errors here and there.

        Original patch by Ritt Konstantin <ritt.ks@gmail.com>, also
        tested by him on QNX v6.5 (x86)

        * wtf/DateMath.cpp: fix usage of abs/labs
        * wtf/Platform.h: Disable JIT and JSC_MULTIPLE_THREADS
        * wtf/StackBounds.cpp: Add a couple of missing includes (and sort them)

2011-07-12  Anders Carlsson  <andersca@apple.com>

        If a compiler has nullptr support, include <cstddef> to get the nullptr_t definition
        https://bugs.webkit.org/show_bug.cgi?id=64429

        Include the cstddef which has the nullptr_t typedef according to the C++0x standard.

        * wtf/NullPtr.h:

2011-07-13  MORITA Hajime  <morrita@google.com>

        Refactoring: Ignored ExceptionCode value should be less annoying.
        https://bugs.webkit.org/show_bug.cgi?id=63688

        Added ASSERT_AT macro.

        Reviewed by Darin Adler.

        * wtf/Assertions.h:

2011-07-12  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not implement op_construct.
        https://bugs.webkit.org/show_bug.cgi?id=64066

        Reviewed by Gavin Barraclough.
        
        This is a fixed implementation of op_construct.  Constructor calls are implemented
        by reusing almost all of the code for Call, with care taken to make sure that
        where the are differences (like selecting different code blocks), those differences
        are respected.  The two fixes over the last patch are: (1) make sure the
        CodeBlock::unlinkCalls respects differences between Call and Construct, and (2)
        make sure that virtualFor() in DFGOperations respects the CodeSpecializationKind
        (either CodeForCall or CodeForConstruct) when invoking the compiler.

        * dfg/DFGAliasTracker.h:
        (JSC::DFG::AliasTracker::recordConstruct):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addCall):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::emitCall):
        * dfg/DFGNode.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::dfgLinkFor):
        * dfg/DFGRepatch.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * runtime/CodeBlock.cpp:
        (JSC::CodeBlock::unlinkCalls):

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

        Overzealous type validation in method_check
        https://bugs.webkit.org/show_bug.cgi?id=64415

        Reviewed by Gavin Barraclough.

        method_check is essentially just a value look up
        optimisation, but it internally stores the value
        as a JSFunction, even though it never relies on
        this fact.  Under GC validation however we end up
        trying to enforce that assumption.  The fix is
        simply to store the value as a correct supertype.

        * bytecode/CodeBlock.h:
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::dfgRepatchGetMethodFast):
        (JSC::DFG::tryCacheGetMethod):
        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::patchMethodCallProto):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):

2011-07-12  Filip Pizlo  <fpizlo@apple.com>

        COLLECT_ON_EVERY_ALLOCATION no longer works.
        https://bugs.webkit.org/show_bug.cgi?id=64388

        Reviewed by Oliver Hunt.
        
        Added a flag to Heap that determines if it's safe to collect (which for now means that
        JSGlobalObject has actually been initialized, but it should work for other things, too).
        This allows JSGlobalObject to allocate even if the allocator wants to GC; instead of
        GCing it just grows the heap, if necessary.
        
        Then changed Heap::allocate() to not recurse ad infinitum when
        COLLECT_ON_EVERY_ALLOCATION is set.  This also makes the allocator generally more
        resilient against bugs; this change allowed me to put in handy assertions, such as that
        an allocation must succeed after either a collection or after a new block was added.

        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::tryAllocate):
        (JSC::Heap::allocate):
        (JSC::Heap::collectAllGarbage):
        (JSC::Heap::collect):
        * heap/Heap.h:
        (JSC::Heap::notifyIsSafeToCollect):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):

2011-07-12  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT put_by_id transition caching does not inform the GC about the structure and
        prototype chain that it is referencing.
        https://bugs.webkit.org/show_bug.cgi?id=64387

        Reviewed by Gavin Barraclough.
        
        Fixed the relevant code in DFGRepatch to call StructureStubInfo::initPutByIdTransition().

        * dfg/DFGRepatch.cpp:
        (JSC::DFG::tryCachePutByID):

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

        Ensure no intermediate WTF::Strings are created when concatenating with string literals

        Fixes <http://webkit.org/b/63330> Concatenating string literals and WTF::Strings using
        operator+ is suboptimal

        Reviewed by Darin Adler.

        * wtf/text/StringConcatenate.h:
        (WTF::StringTypeAdapter<String>::writeTo): Added a macro that can be used for testing how
        many WTF::Strings get copied while evaluating an operator+ expression.

        * wtf/text/StringOperators.h:
        (WTF::operator+): Changed the overload that takes a StringAppend to take it on the left-hand
        side, since operator+ is left-associative. Having the StringAppend on the right-hand side
        was causing us to make intermediate WTF::Strings when evaluating expressions that contained
        multiple calls to operator+. Added some more overloads for that take a left-hand side of
        const char* to resolve overload ambiguity for certain expressions. Added overloads that take
        a left-hand side of const UChar* (matching the const char* overloads) so that wide string
        literals don't first have to be converted to a WTF::String in operator+ expressions.

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

        Unreviewed, rolling out r90811.
        http://trac.webkit.org/changeset/90811
        https://bugs.webkit.org/show_bug.cgi?id=61025

        Several svg tests failing assertions beneath
        SVGSMILElement::findInstanceTime

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

2011-07-12  Oliver Varga  <Varga.Oliver@stud.u-szeged.hu>

        Reviewed by Nikolas Zimmermann.

        Speed up SVGSMILElement::findInstanceTime.
        https://bugs.webkit.org/show_bug.cgi?id=61025

        Add a new parameter to StdlibExtras.h::binarySerarch function
        to also handle cases when the array does not contain the key value.
        This is needed for an svg function.

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

2011-07-11  Filip Pizlo  <fpizlo@apple.com>

        DFG speculative JIT does not guard itself against floating point speculation
        failures on non-floating-point constants.
        https://bugs.webkit.org/show_bug.cgi?id=64330

        Reviewed by Gavin Barraclough.
        
        Made fillSpeculateDouble immediate invoke terminateSpeculativeExecution() as
        soon as it notices that it's speculating on something that is a non-numeric
        JSConstant.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):

2011-07-11  Filip Pizlo  <fpizlo@apple.com>

        DFG Speculative JIT does not always insert speculation checks when speculating
        arrays.
        https://bugs.webkit.org/show_bug.cgi?id=64254

        Reviewed by Gavin Barraclough.
        
        Changed the SetLocal instruction to always validate that the value being stored
        into the local variable is an array, if that variable was marked PredictArray.
        This is necessary since uses of arrays assume that if a PredictArray value is
        in a local variable then the speculation check validating that the value is an
        array was already performed.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-07-11  Gabor Loki  <loki@webkit.org>

        Fix the condition of the optimized code in doubleTransfer
        https://bugs.webkit.org/show_bug.cgi?id=64261

        Reviewed by Zoltan Herczeg.

        The condition of the optimized code in doubleTransfer is wrong. The
        data transfer should be executed with four bytes aligned address.
        VFP cannot perform unaligned memory access.

        Reported by Jacob Bramley.

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::doubleTransfer):

2011-07-11  Gabor Loki  <loki@webkit.org>

        Signed arithmetic bug in dataTransfer32.
        https://bugs.webkit.org/show_bug.cgi?id=64257

        Reviewed by Zoltan Herczeg.

        An arithmetic bug is fixed. If the offset of dataTransfer is half of the
        addressable memory space on a 32-bit machine (-2147483648 = 0x80000000)
        a load instruction is emitted with a wrong zero offset.

        Inspired by Jacob Bramley's patch from JaegerMonkey.

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::dataTransfer32):

2011-07-09  Thouraya Andolsi  <thouraya.andolsi@st.com>

        Fix unaligned userspace access for SH4 platforms. 
        https://bugs.webkit.org/show_bug.cgi?id=62993

        * wtf/Platform.h:

2011-07-09  Chao-ying Fu  <fu@mips.com>

        Fix MIPS build due to readInt32 and readPointer
        https://bugs.webkit.org/show_bug.cgi?id=63962

        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::readInt32):
        (JSC::MIPSAssembler::readPointer):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::rshift32):

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

        https://bugs.webkit.org/show_bug.cgi?id=64181
        REGRESSION (r90602): Gmail doesn't load

        Rolling out r90601, r90602.

        * dfg/DFGAliasTracker.h:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addVarArgChild):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::emitCall):
        * dfg/DFGNode.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::tryCacheGetByID):
        (JSC::DFG::dfgLinkCall):
        * dfg/DFGRepatch.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * runtime/JSObject.h:
        (JSC::JSObject::isUsingInlineStorage):

2011-07-08  Kalev Lember  <kalev@smartlink.ee>

        Reviewed by Adam Roben.

        Add missing _WIN32_WINNT and WINVER definitions
        https://bugs.webkit.org/show_bug.cgi?id=59702

        Moved _WIN32_WINNT and WINVER definitions to config.h so that they are
        available for all source files.

        In particular, wtf/FastMalloc.cpp uses CreateTimerQueueTimer and
        DeleteTimerQueueTimer which are both guarded by
        #if (_WIN32_WINNT >= 0x0500)
        in MinGW headers.

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

2011-07-08  Chang Shu  <cshu@webkit.org>

        Rename "makeSecure" to "fill" and remove the support for displaying last character
        to avoid layering violatation.
        https://bugs.webkit.org/show_bug.cgi?id=59114

        Reviewed by Alexey Proskuryakov.

        * JavaScriptCore.exp:
        * JavaScriptCore.order:
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::fill):
        * wtf/text/StringImpl.h:
        * wtf/text/WTFString.h:
        (WTF::String::fill):

2011-07-08  Benjamin Poulain  <benjamin@webkit.org>

        [WK2] Do not forward touch events to the web process when it does not need them
        https://bugs.webkit.org/show_bug.cgi?id=64164

        Reviewed by Kenneth Rohde Christiansen.

        Add a convenience function to obtain a reference to the last element of a Deque.

        * wtf/Deque.h:
        (WTF::Deque::last):

2011-07-07  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not implement op_construct.
        https://bugs.webkit.org/show_bug.cgi?id=64066

        Reviewed by Gavin Barraclough.

        * dfg/DFGAliasTracker.h:
        (JSC::DFG::AliasTracker::recordConstruct):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::addCall):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::emitCall):
        * dfg/DFGNode.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::dfgLinkFor):
        * dfg/DFGRepatch.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-07-07  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not implement get_by_id prototype caching.
        https://bugs.webkit.org/show_bug.cgi?id=64077

        Reviewed by Gavin Barraclough.

        * dfg/DFGRepatch.cpp:
        (JSC::DFG::emitRestoreScratch):
        (JSC::DFG::linkRestoreScratch):
        (JSC::DFG::tryCacheGetByID):
        * runtime/JSObject.h:
        (JSC::JSObject::addressOfPropertyAtOffset):

2011-07-07  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT method_check implementation does not link to optimized get_by_id
        slow path.
        https://bugs.webkit.org/show_bug.cgi?id=64073

        Reviewed by Gavin Barraclough.

        * dfg/DFGRepatch.cpp:
        (JSC::DFG::dfgRepatchGetMethodFast):

2011-07-07  Oliver Hunt  <oliver@apple.com>

        Encode jump and link sizes into the appropriate enums
        https://bugs.webkit.org/show_bug.cgi?id=64123

        Reviewed by Sam Weinig.

        Finally kill off the out of line jump and link size arrays, 
        so we can avoid icky loads and constant fold the linking arithmetic.

        * assembler/ARMv7Assembler.cpp:
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::jumpSizeDelta):
        (JSC::ARMv7Assembler::computeJumpType):

2011-07-06  Juan C. Montemayor  <jmont@apple.com>

        ASSERT_NOT_REACHED running test 262
        https://bugs.webkit.org/show_bug.cgi?id=63951
        
        Added a case to the switch statement where the code was failing. Fixed
        some logic as well that gave faulty error messages.

        Reviewed by Gavin Barraclough.

        * parser/JSParser.cpp:
        (JSC::JSParser::getTokenName):
        (JSC::JSParser::updateErrorMessageSpecialCase):
        (JSC::JSParser::updateErrorMessage):

2011-07-06  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT implementation of op_call results in regressions on sunspider
        controlflow-recursive.
        https://bugs.webkit.org/show_bug.cgi?id=64039

        Reviewed by Gavin Barraclough.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::isSmallInt32Constant):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::isInteger):

2011-07-06  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not support method_check
        https://bugs.webkit.org/show_bug.cgi?id=63972

        Reviewed by Gavin Barraclough.

        * assembler/CodeLocation.h:
        (JSC::CodeLocationPossiblyNearCall::CodeLocationPossiblyNearCall):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitAggregate):
        * bytecode/CodeBlock.h:
        (JSC::MethodCallLinkInfo::MethodCallLinkInfo):
        (JSC::MethodCallLinkInfo::seenOnce):
        (JSC::MethodCallLinkInfo::setSeen):
        * dfg/DFGAliasTracker.h:
        (JSC::DFG::AliasTracker::recordGetMethod):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::cachedGetById):
        (JSC::DFG::JITCodeGenerator::cachedGetMethod):
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addMethodGet):
        (JSC::DFG::JITCompiler::MethodGetRecord::MethodGetRecord):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasIdentifier):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::dfgRepatchGetMethodFast):
        (JSC::DFG::tryCacheGetMethod):
        (JSC::DFG::dfgRepatchGetMethod):
        * dfg/DFGRepatch.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JITWriteBarrier.h:
        (JSC::JITWriteBarrier::set):

2011-07-06  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT op_call implementation will flush registers even when those registers are dead
        https://bugs.webkit.org/show_bug.cgi?id=64023

        Reviewed by Gavin Barraclough.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::emitCall):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::integerResult):
        (JSC::DFG::JITCodeGenerator::noResult):
        (JSC::DFG::JITCodeGenerator::cellResult):
        (JSC::DFG::JITCodeGenerator::jsValueResult):
        (JSC::DFG::JITCodeGenerator::doubleResult):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-07-06  Filip Pizlo  <fpizlo@apple.com>

        DFG speculative JIT may crash when speculating int on a non-int JSConstant.
        https://bugs.webkit.org/show_bug.cgi?id=64017

        Reviewed by Gavin Barraclough.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::compile):

2011-07-06  Dmitriy Vyukov  <dvyukov@google.com>

        Reviewed by David Levin.

        Allow substitution of dynamic annotations and prevent identical code folding by the linker.
        https://bugs.webkit.org/show_bug.cgi?id=62443

        * wtf/DynamicAnnotations.cpp:
        (WTFAnnotateBenignRaceSized):
        (WTFAnnotateHappensBefore):
        (WTFAnnotateHappensAfter):

2011-07-06  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Calls on 32 bit machines are failed after r90423
        https://bugs.webkit.org/show_bug.cgi?id=63980

        Reviewed by Gavin Barraclough.

        Copy the necessary lines from JITCall.cpp.

        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCall):

2011-07-05  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT virtual call implementation is inefficient.
        https://bugs.webkit.org/show_bug.cgi?id=63974

        Reviewed by Gavin Barraclough.

        * dfg/DFGOperations.cpp:
        * runtime/Executable.h:
        (JSC::ExecutableBase::generatedJITCodeForCallWithArityCheck):
        (JSC::ExecutableBase::generatedJITCodeForConstructWithArityCheck):
        (JSC::ExecutableBase::generatedJITCodeWithArityCheckFor):
        (JSC::ExecutableBase::hasJITCodeForCall):
        (JSC::ExecutableBase::hasJITCodeForConstruct):
        (JSC::ExecutableBase::hasJITCodeFor):
        * runtime/JSFunction.h:
        (JSC::JSFunction::scopeUnchecked):

2011-07-05  Oliver Hunt  <oliver@apple.com>

        Force inlining of simple functions that show up as not being inlined
        https://bugs.webkit.org/show_bug.cgi?id=63964

        Reviewed by Gavin Barraclough.

        Looking at profile data indicates the gcc is failing to inline a
        number of trivial functions.  This patch hits the ones that show
        up in profiles with the ALWAYS_INLINE hammer.

        We also replace the memcpy() call in linking with a manual loop.
        Apparently memcpy() is almost never faster than an inlined loop.

        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::add):
        (JSC::ARMv7Assembler::add_S):
        (JSC::ARMv7Assembler::ARM_and):
        (JSC::ARMv7Assembler::asr):
        (JSC::ARMv7Assembler::b):
        (JSC::ARMv7Assembler::blx):
        (JSC::ARMv7Assembler::bx):
        (JSC::ARMv7Assembler::clz):
        (JSC::ARMv7Assembler::cmn):
        (JSC::ARMv7Assembler::cmp):
        (JSC::ARMv7Assembler::eor):
        (JSC::ARMv7Assembler::it):
        (JSC::ARMv7Assembler::ldr):
        (JSC::ARMv7Assembler::ldrCompact):
        (JSC::ARMv7Assembler::ldrh):
        (JSC::ARMv7Assembler::ldrb):
        (JSC::ARMv7Assembler::lsl):
        (JSC::ARMv7Assembler::lsr):
        (JSC::ARMv7Assembler::movT3):
        (JSC::ARMv7Assembler::mov):
        (JSC::ARMv7Assembler::movt):
        (JSC::ARMv7Assembler::mvn):
        (JSC::ARMv7Assembler::neg):
        (JSC::ARMv7Assembler::orr):
        (JSC::ARMv7Assembler::orr_S):
        (JSC::ARMv7Assembler::ror):
        (JSC::ARMv7Assembler::smull):
        (JSC::ARMv7Assembler::str):
        (JSC::ARMv7Assembler::sub):
        (JSC::ARMv7Assembler::sub_S):
        (JSC::ARMv7Assembler::tst):
        (JSC::ARMv7Assembler::linkRecordSourceComparator):
        (JSC::ARMv7Assembler::link):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp5Reg3Imm8):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp5Imm5Reg3Reg3):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp7Reg3Reg3Reg3):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp8Imm8):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp8RegReg143):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp9Imm7):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::oneWordOp10Reg3Reg3):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp12Reg4FourFours):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp16FourFours):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp16Op16):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp5i6Imm4Reg4EncodedImm):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::twoWordOp12Reg4Reg4Imm12):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::vfpOp):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::vfpMemOp):
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::linkCode):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::nearCall):
        (JSC::MacroAssemblerARMv7::call):
        (JSC::MacroAssemblerARMv7::ret):
        (JSC::MacroAssemblerARMv7::moveWithPatch):
        (JSC::MacroAssemblerARMv7::branchPtrWithPatch):
        (JSC::MacroAssemblerARMv7::storePtrWithPatch):
        (JSC::MacroAssemblerARMv7::tailRecursiveCall):
        (JSC::MacroAssemblerARMv7::makeTailRecursiveCall):
        (JSC::MacroAssemblerARMv7::jump):
        (JSC::MacroAssemblerARMv7::makeBranch):

2011-07-05  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Make "Add optimised paths for a few maths functions" work on Qt
        https://bugs.webkit.org/show_bug.cgi?id=63893

        Reviewed by Oliver Hunt.

        Move the generated code to the .text section instead of .data section.
        Fix alignment for the 32 bit thunk code.

        * jit/ThunkGenerators.cpp:

2011-07-05  Filip Pizlo  <fpizlo@apple.com>

        DFG JIT does not implement op_call.
        https://bugs.webkit.org/show_bug.cgi?id=63858

        Reviewed by Gavin Barraclough.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::unlinkCalls):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::setNumberOfCallLinkInfos):
        (JSC::CodeBlock::numberOfCallLinkInfos):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitConstruct):
        * dfg/DFGAliasTracker.h:
        (JSC::DFG::AliasTracker::lookupGetByVal):
        (JSC::DFG::AliasTracker::recordCall):
        (JSC::DFG::AliasTracker::equalIgnoringLaterNumericConversion):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::getLocal):
        (JSC::DFG::ByteCodeParser::getArgument):
        (JSC::DFG::ByteCodeParser::toInt32):
        (JSC::DFG::ByteCodeParser::addToGraph):
        (JSC::DFG::ByteCodeParser::addVarArgChild):
        (JSC::DFG::ByteCodeParser::predictInt32):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::processPhiStack):
        (JSC::DFG::ByteCodeParser::allocateVirtualRegisters):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::opName):
        (JSC::DFG::Graph::dump):
        (JSC::DFG::Graph::refChildren):
        * dfg/DFGGraph.h:
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::useChildren):
        (JSC::DFG::JITCodeGenerator::emitCall):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::addressOfCallData):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::CallRecord::CallRecord):
        (JSC::DFG::JITCompiler::notifyCall):
        (JSC::DFG::JITCompiler::appendCallWithFastExceptionCheck):
        (JSC::DFG::JITCompiler::addJSCall):
        (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord):
        (JSC::DFG::JITCompiler::JSCallRecord::JSCallRecord):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::Node):
        (JSC::DFG::Node::child1):
        (JSC::DFG::Node::child2):
        (JSC::DFG::Node::child3):
        (JSC::DFG::Node::firstChild):
        (JSC::DFG::Node::numChildren):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::basicArithOp):
        (JSC::DFG::NonSpeculativeJIT::compare):
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::dfgLinkCall):
        * dfg/DFGRepatch.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleCall):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
        * interpreter/CallFrame.h:
        (JSC::ExecState::calleeAsValue):
        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):
        (JSC::JIT::linkCall):
        (JSC::JIT::linkConstruct):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):
        * jit/JITCode.h:
        (JSC::JITCode::JITCode):
        (JSC::JITCode::jitType):
        (JSC::JITCode::HostFunction):
        * runtime/JSFunction.h:
        * runtime/JSGlobalData.h:

2011-07-05  Oliver Hunt  <oliver@apple.com>

        Initialize new MarkStack member

        * heap/MarkStack.h:
        (JSC::MarkStack::MarkStack):

2011-07-05  Oliver Hunt  <oliver@apple.com>

        Don't throw out compiled code repeatedly
        https://bugs.webkit.org/show_bug.cgi?id=63960

        Reviewed by Gavin Barraclough.

        Stop throwing away all compiled code every time
        we're told to do a full GC.  Instead unlink all
        callsites during such GC passes to maximise the
        number of collectable functions, but otherwise
        leave compiled functions alone.

        * API/JSBase.cpp:
        (JSGarbageCollect):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitAggregate):
        * heap/Heap.cpp:
        (JSC::Heap::collectAllGarbage):
        * heap/MarkStack.h:
        (JSC::MarkStack::shouldUnlinkCalls):
        (JSC::MarkStack::setShouldUnlinkCalls):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::recompileAllJSFunctions):
        (JSC::JSGlobalData::releaseExecutableMemory):
        * runtime/RegExp.cpp:
        (JSC::RegExp::compile):
        (JSC::RegExp::invalidateCode):
        * runtime/RegExp.h:

2011-07-05  Filip Pizlo  <fpizlo@apple.com>

        JSC JIT has code duplication for the handling of call and construct
        https://bugs.webkit.org/show_bug.cgi?id=63957

        Reviewed by Gavin Barraclough.

        * jit/JIT.cpp:
        (JSC::JIT::linkFor):
        * jit/JIT.h:
        * jit/JITStubs.cpp:
        (JSC::jitCompileFor):
        (JSC::DEFINE_STUB_FUNCTION):
        (JSC::arityCheckFor):
        (JSC::lazyLinkFor):
        * runtime/Executable.h:
        (JSC::ExecutableBase::generatedJITCodeFor):
        (JSC::FunctionExecutable::compileFor):
        (JSC::FunctionExecutable::isGeneratedFor):
        (JSC::FunctionExecutable::generatedBytecodeFor):
        (JSC::FunctionExecutable::generatedJITCodeWithArityCheckFor):

2011-07-05  Gavin Barraclough  <barraclough@apple.com>

        Build fix following last patch.

        * runtime/JSFunction.cpp:
        (JSC::createPrototypeProperty):

2011-07-05  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=63947
        ASSERT running Object.preventExtensions(Math.sin)

        Reviewed by Oliver Hunt.

        This is due to calling scope() on a hostFunction as a part of
        calling createPrototypeProperty to reify the prototype property.
        But host functions don't have a prototype property anyway!

        Prevent callling createPrototypeProperty on a host function.

        * runtime/JSFunction.cpp:
        (JSC::JSFunction::createPrototypeProperty):
        (JSC::JSFunction::preventExtensions):

2011-07-04  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=63880
        Evaluation order of conversions of operands to >, >= incorrect.

        Reviewed by Sam Weinig.

        Add 'leftFirst' parameter to jsLess, jsLessEq matching that described in the ES5
        spec. This allows these methods to be reused to perform >, >= relational compares
        with correct ordering of type conversions.

        * dfg/DFGOperations.cpp:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Operations.h:
        (JSC::jsLess):
        (JSC::jsLessEq):

2011-07-04  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=16652
        Firefox and JavaScriptCore differ in Number.toString(integer)

        Our arbitrary radix (2..36) toString conversion is inaccurate.
        This is partly because it uses doubles to perform math that requires
        higher accuracy, and partly becasue it does not attempt to correctly
        detect where to terminate, instead relying on a simple 'epsilon'.

        * runtime/NumberPrototype.cpp:
        (JSC::decomposeDouble):
            - helper function to extract sign, exponent, mantissa from IEEE doubles.
        (JSC::Uint16WithFraction::Uint16WithFraction):
            - helper class, u16int with infinite precision fraction, used to convert
              the fractional part of the number to a string.
        (JSC::Uint16WithFraction::operator*=):
            - Multiply by a uint16.
        (JSC::Uint16WithFraction::operator<):
            - Compare two Uint16WithFractions.
        (JSC::Uint16WithFraction::floorAndSubtract):
            - Extract the integer portion of the number, and subtract it (clears the integer portion).
        (JSC::Uint16WithFraction::comparePoint5):
            - Compare to 0.5.
        (JSC::Uint16WithFraction::sumGreaterThanOne):
            - Passed a second Uint16WithFraction, returns true if the result of adding
              the two values would be greater than one.
        (JSC::Uint16WithFraction::isNormalized):
            - Used by ASSERTs to consistency check internal representation.
        (JSC::BigInteger::BigInteger):
            - helper class, unbounded integer value, used to convert the integer part
              of the number to a string.
        (JSC::BigInteger::divide):
            - Divide this value through by a uint32.
        (JSC::BigInteger::operator!):
            - test for zero.
        (JSC::toStringWithRadix):
            - Performs number to string conversion, with the given radix (2..36).
        (JSC::numberProtoFuncToString):
            - Changed to use toStringWithRadix.

2011-07-04  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=63881
        Need separate bytecodes for handling >, >= comparisons.

        Reviewed by Oliver Hunt.

        This clears the way to fix Bug#63880. We currently handle greater-than comparisons
        as being using the corresponding op_less, etc opcodes.  This is incorrect with
        respect to evaluation ordering of the implicit conversions performed on operands -
        we should be calling ToPrimitive on the LHS and RHS operands to the greater than,
        but instead convert RHS then LHS.

        This patch adds opcodes for greater-than comparisons mirroring existing ones used
        for less-than.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitJumpIfTrue):
        (JSC::BytecodeGenerator::emitJumpIfFalse):
        * bytecompiler/NodesCodegen.cpp:
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGNode.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compare):
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGNonSpeculativeJIT.h:
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compare):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        * jit/JIT.h:
        (JSC::JIT::emit_op_loop_if_greater):
        (JSC::JIT::emitSlow_op_loop_if_greater):
        (JSC::JIT::emit_op_loop_if_greatereq):
        (JSC::JIT::emitSlow_op_loop_if_greatereq):
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_jgreater):
        (JSC::JIT::emit_op_jgreatereq):
        (JSC::JIT::emit_op_jngreater):
        (JSC::JIT::emit_op_jngreatereq):
        (JSC::JIT::emitSlow_op_jgreater):
        (JSC::JIT::emitSlow_op_jgreatereq):
        (JSC::JIT::emitSlow_op_jngreater):
        (JSC::JIT::emitSlow_op_jngreatereq):
        (JSC::JIT::emit_compareAndJumpSlow):
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emitBinaryDoubleOp):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        * parser/NodeConstructors.h:
        (JSC::GreaterNode::GreaterNode):
        (JSC::GreaterEqNode::GreaterEqNode):
        * parser/Nodes.h:

2011-07-03  Gavin Barraclough  <barraclough@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=63879
        Reduce code duplication for op_jless, op_jlesseq, op_jnless, op_jnlesseq.

        Reviewed by Sam Weinig.
        
        There is a lot of copy & paste code here; we can reduce duplication by making
        a shared implementation.

        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::branch32):
        (JSC::MacroAssembler::commute):
            - Make these function platform agnostic.
        * assembler/MacroAssemblerX86Common.h:
            - Moved branch32/commute up to MacroAssembler.
        * jit/JIT.h:
        (JSC::JIT::emit_op_loop_if_lesseq):
        (JSC::JIT::emitSlow_op_loop_if_lesseq):
            - Add an implementation matching that for op_loop_if_less, which just calls op_jless.
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_jless):
        (JSC::JIT::emit_op_jlesseq):
        (JSC::JIT::emit_op_jnless):
        (JSC::JIT::emit_op_jnlesseq):
        (JSC::JIT::emitSlow_op_jless):
        (JSC::JIT::emitSlow_op_jlesseq):
        (JSC::JIT::emitSlow_op_jnless):
        (JSC::JIT::emitSlow_op_jnlesseq):
            - Common implmentations of these methods for JSVALUE64 & JSVALUE32_64.
        (JSC::JIT::emit_compareAndJump):
        (JSC::JIT::emit_compareAndJumpSlow):
            - Internal implmementation of jless etc for JSVALUE64.
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_compareAndJump):
        (JSC::JIT::emit_compareAndJumpSlow):
            - Internal implmementation of jless etc for JSVALUE32_64.
        * jit/JITOpcodes.cpp:
        * jit/JITOpcodes32_64.cpp:
        * jit/JITStubs.cpp:
        * jit/JITStubs.h:
            - Remove old implementation of emit_op_loop_if_lesseq.

2011-07-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r90347.
        http://trac.webkit.org/changeset/90347
        https://bugs.webkit.org/show_bug.cgi?id=63886

        Build breaks on Leopard, Chromium-win, WinCairo, and WinCE.
        (Requested by tkent on #webkit).

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/BigInteger.h: Removed.
        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToPrecision):
        (JSC::numberProtoFuncToString):
        * runtime/Uint16WithFraction.h: Removed.
        * wtf/MathExtras.h:

2011-06-30  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=16652
        Firefox and JavaScriptCore differ in Number.toString(integer)

        Our arbitrary radix (2..36) toString conversion is inaccurate.
        This is partly because it uses doubles to perform math that requires
        higher accuracy, and partly becasue it does not attempt to correctly
        detect where to terminate, instead relying on a simple 'epsilon'.

        * runtime/NumberPrototype.cpp:
        (JSC::decomposeDouble):
            - helper function to extract sign, exponent, mantissa from IEEE doubles.
        (JSC::Uint16WithFraction::Uint16WithFraction):
            - helper class, u16int with infinite precision fraction, used to convert
              the fractional part of the number to a string.
        (JSC::Uint16WithFraction::operator*=):
            - Multiply by a uint16.
        (JSC::Uint16WithFraction::operator<):
            - Compare two Uint16WithFractions.
        (JSC::Uint16WithFraction::floorAndSubtract):
            - Extract the integer portion of the number, and subtract it (clears the integer portion).
        (JSC::Uint16WithFraction::comparePoint5):
            - Compare to 0.5.
        (JSC::Uint16WithFraction::sumGreaterThanOne):
            - Passed a second Uint16WithFraction, returns true if the result of adding
              the two values would be greater than one.
        (JSC::Uint16WithFraction::isNormalized):
            - Used by ASSERTs to consistency check internal representation.
        (JSC::BigInteger::BigInteger):
            - helper class, unbounded integer value, used to convert the integer part
              of the number to a string.
        (JSC::BigInteger::divide):
            - Divide this value through by a uint32.
        (JSC::BigInteger::operator!):
            - test for zero.
        (JSC::toStringWithRadix):
            - Performs number to string conversion, with the given radix (2..36).
        (JSC::numberProtoFuncToString):
            - Changed to use toStringWithRadix.

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

        https://bugs.webkit.org/show_bug.cgi?id=63866
        DFG JIT - implement instanceof

        Reviewed by Sam Weinig.

        Add ops CheckHasInstance & InstanceOf to implement bytecodes
        op_check_has_instance & op_instanceof. This is an initial
        functional implementation, performance is a wash. We can
        follow up with changes to fuse the InstanceOf node with
        a subsequant branch, as we do with other comparisons.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::jitAssertIsCell):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::jitAssertIsCell):
        * dfg/DFGNode.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

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

        IE Web Workers demo crashes in JSC::SlotVisitor::visitChildren()
        https://bugs.webkit.org/show_bug.cgi?id=63732

        Reviewed by Gavin Barraclough.

        Initialise the memory at the head of the new storage so that
        GC is safe if triggered by reportExtraMemoryCost.

        * runtime/JSArray.cpp:
        (JSC::JSArray::increaseVectorPrefixLength):

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

        GC sweep can occur before an object is completely initialised
        https://bugs.webkit.org/show_bug.cgi?id=63836

        Reviewed by Gavin Barraclough.

        In rare cases it's possible for a GC sweep to occur while a
        live, but not completely initialised object is on the stack.
        In such a case we may incorrectly choose to mark it, even
        though it has no children that need marking.

        We resolve this by always zeroing out the structure of any
        value returned from JSCell::operator new(), and making the
        markstack tolerant of a null structure. 

        * runtime/JSCell.h:
        (JSC::JSCell::JSCell::~JSCell):
        (JSC::JSCell::JSCell::operator new):
        * runtime/Structure.h:
        (JSC::MarkStack::internalAppend):

2011-07-01  Filip Pizlo  <fpizlo@apple.com>

        Reviewed by Gavin Barraclough.

        DFG non-speculative JIT always performs slow C calls for div and mod.
        https://bugs.webkit.org/show_bug.cgi?id=63684

        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):

2011-07-01  Juan C. Montemayor  <jmont@apple.com>

        Reviewed by Oliver Hunt.

        Lexer error messages are currently appalling
        https://bugs.webkit.org/show_bug.cgi?id=63340

        Added error messages for the Lexer. These messages will be displayed
        instead of the lexer error messages from the parser that are currently
        shown.

        * parser/Lexer.cpp:
        (JSC::Lexer::getInvalidCharMessage):
        (JSC::Lexer::setCode):
        (JSC::Lexer::parseString):
        (JSC::Lexer::lex):
        (JSC::Lexer::clear):
        * parser/Lexer.h:
        (JSC::Lexer::getErrorMessage):
        (JSC::Lexer::setOffset):
        * parser/Parser.cpp:
        (JSC::Parser::parse):

2011-07-01  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Add ScriptCodesFromICU.h to wtf/unicode and make necessary changes in
        build files for ports not using ICU.
        Add icu/unicode/uscript.h for ports using ICU. It's taken from 
        ICU 3.6 (the version used on Mac OS 10.5)

        http://bugs.webkit.org/show_bug.cgi?id=20797

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * icu/unicode/uscript.h: Added for UScriptCode enum.
        * wtf/unicode/ScriptCodesFromICU.h: UScriptCode enum added.
        * wtf/unicode/icu/UnicodeIcu.h:
        * wtf/unicode/brew/UnicodeBrew.h:
        * wtf/unicode/glib/UnicodeGLib.h:
        * wtf/unicode/qt4/UnicodeQt4.h:
        * wtf/unicode/wince/UnicodeWinCE.h:

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

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=63819
        Escaping of forwardslashes in strings incorrect if multiple exist.

        The bug is in the parameters passed to a substring - should be
        start & length, but we're passing start & end indices!

        * runtime/RegExpObject.cpp:
        (JSC::regExpObjectSource):

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

        Roll out r90194
        http://trac.webkit.org/changeset/90194
        https://bugs.webkit.org/show_bug.cgi?id=63778

        Fixes <http://webkit.org/b/63812> REGRESSION (r90194): Multiple tests intermittently failing
        assertions in WriteBarrierBase<JSC::Structure>::get

        * runtime/JSCell.h:
        (JSC::JSCell::JSCell::~JSCell):

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

        Reviewed by Gavin Barraclough.

        Add optimised paths for a few maths functions
        https://bugs.webkit.org/show_bug.cgi?id=63757

        Relanding as a Mac only patch.

        This adds specialised thunks for Math.abs, Math.round, Math.ceil,
        Math.floor, Math.log, and Math.exp as they are apparently more
        important in real web content than we thought, which is somewhat
        mind-boggling.  On average doubles the performance of the common
        cases (eg. actually passing numbers in).  They're not as efficient
        as they could be, but this way gives them the most portability.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::supportsDoubleBitops):
        (JSC::MacroAssemblerARM::andnotDouble):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::supportsDoubleBitops):
        (JSC::MacroAssemblerARMv7::andnotDouble):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::andnotDouble):
        (JSC::MacroAssemblerMIPS::supportsDoubleBitops):
        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::supportsDoubleBitops):
        (JSC::MacroAssemblerSH4::andnotDouble):
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::supportsDoubleBitops):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::andnotDouble):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::supportsDoubleBitops):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::andnpd_rr):
        * create_hash_table:
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::finalize):
        (JSC::SpecializedThunkJIT::callDoubleToDouble):
        * jit/ThunkGenerators.cpp:
        (JSC::floorThunkGenerator):
        (JSC::ceilThunkGenerator):
        (JSC::roundThunkGenerator):
        (JSC::expThunkGenerator):
        (JSC::logThunkGenerator):
        (JSC::absThunkGenerator):
        * jit/ThunkGenerators.h:

2011-07-01  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/63814> Fix clang build error in JITOpcodes32_64.cpp

        Fixes the following build error in clang:

            JavaScriptCore/jit/JITOpcodes32_64.cpp:741:36:{741:9-741:35}: error: operator '?:' has lower precedence than '+'; '+' will be evaluated first [-Werror,-Wparentheses,3]
                 map(m_bytecodeOffset + dynamic ? OPCODE_LENGTH(op_resolve_global_dynamic) : OPCODE_LENGTH(op_resolve_global), dst, regT1, regT0);
                     ~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
            JavaScriptCore/jit/JITOpcodes32_64.cpp:741:36: note: place parentheses around the '+' expression to silence this warning [3]
                 map(m_bytecodeOffset + dynamic ? OPCODE_LENGTH(op_resolve_global_dynamic) : OPCODE_LENGTH(op_resolve_global), dst, regT1, regT0);
                                                ^
                     (                         )
            fix-it:"JavaScriptCore/jit/JITOpcodes32_64.cpp":{741:9-741:9}:"("
            fix-it:"JavaScriptCore/jit/JITOpcodes32_64.cpp":{741:35-741:35}:")"
            JavaScriptCore/jit/JITOpcodes32_64.cpp:741:36:{741:28-741:94}: note: place parentheses around the '?:' expression to evaluate it first [3]
                 map(m_bytecodeOffset + dynamic ? OPCODE_LENGTH(op_resolve_global_dynamic) : OPCODE_LENGTH(op_resolve_global), dst, regT1, regT0);
                                        ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            1 error generated.

        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_resolve_global): Add parenthesis to make the
        tertiary expression evaluate first.

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

        Unreviewed, rolling out r90177 and r90179.
        http://trac.webkit.org/changeset/90177
        http://trac.webkit.org/changeset/90179
        https://bugs.webkit.org/show_bug.cgi?id=63790

        It caused crashes on Qt in debug mode (Requested by Ossy on
        #webkit).

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::rshift32):
        (JSC::MacroAssemblerARM::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerARM::sqrtDouble):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::supportsFloatingPointSqrt):
        (JSC::MacroAssemblerARMv7::sqrtDouble):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::sqrtDouble):
        (JSC::MacroAssemblerMIPS::supportsFloatingPointSqrt):
        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::sqrtDouble):
        * assembler/MacroAssemblerX86.h:
        * assembler/MacroAssemblerX86Common.h:
        * assembler/MacroAssemblerX86_64.h:
        * assembler/X86Assembler.h:
        * create_hash_table:
        * jit/JSInterfaceJIT.h:
        (JSC::JSInterfaceJIT::emitLoadDouble):
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::finalize):
        * jit/ThunkGenerators.cpp:
        * jit/ThunkGenerators.h:

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

        Reviewed by Beth Dakin.

        Make GC validation clear cell structure on destruction
        https://bugs.webkit.org/show_bug.cgi?id=63778

        * runtime/JSCell.h:
        (JSC::JSCell::JSCell::~JSCell):

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

        Reviewed by Gavin Barraclough.

        Added write barrier that was missing from put_by_id_transition
        https://bugs.webkit.org/show_bug.cgi?id=63775

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::writeBarrier): Made this static with a
        MacroAssembler& argument so our patching functions could use it.

        (JSC::DFG::JITCodeGenerator::cachedPutById):
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile): Updated for signature change.

        * dfg/DFGRepatch.cpp:
        (JSC::DFG::tryCachePutByID): Missing barrier!

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile): Updated for signature change.

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):
        * jit/JSInterfaceJIT.h: Same game here. Removed storePtrWithWriteBarrier
        because its meaning isn't clear -- maybe in the future we'll have a
        clear way to pass all stores through a common function that guarantees
        a write barrier, but that's not the case right now.

2011-06-30  Filip Pizlo  <fpizlo@apple.com>

        Reviewed by Gavin Barraclough.

        DFG non-speculative JIT does not reuse registers when compiling comparisons.
        https://bugs.webkit.org/show_bug.cgi?id=63565

        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
        (JSC::DFG::NonSpeculativeJIT::basicArithOp):
        (JSC::DFG::NonSpeculativeJIT::compare):

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

        Reviewed by Gavin Barraclough.

        Added empty write barrier stubs in all the right places in the DFG JIT
        https://bugs.webkit.org/show_bug.cgi?id=63764
        
        SunSpider thinks this might be a 0.5% speedup. Meh.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::writeBarrier): Le stub.

        (JSC::DFG::JITCodeGenerator::cachedPutById): Don't do anything special
        for the case where base == scratch, since we now require base and scratch
        to be not equal, for the sake of the write barrier.

        * dfg/DFGJITCodeGenerator.h: Le stub.

        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile): Don't reuse the base register
        as the scratch register, since that's incompatible with the write barrier,
        which needs a distinct base and scratch.
        
        Do put the global object into a register before loading its var storage,
        since it needs to be in a register for the write barrier to operate on it.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitWriteBarrier): Second verse, same as the first.

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_scoped_var):
        (JSC::JIT::emit_op_put_scoped_var):
        (JSC::JIT::emit_op_put_global_var): Deployed offsetOfRegisters() to more
        places.

        (JSC::JIT::emitWriteBarrier): Added a teeny tiny ASSERT so this function
        is a little more than meaningless.

        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_get_scoped_var):
        (JSC::JIT::emit_op_put_scoped_var):
        (JSC::JIT::emit_op_put_global_var): Deployed offsetOfRegisters() to more
        places.

        (JSC::JIT::emitWriteBarrier): Added a teeny tiny ASSERT so this function
        is a little more than meaningless.

        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::offsetOfRegisters): Now used by the JIT, since
        we put the global object in a register and only then load its var storage
        by offset.

        (JSC::JIT::emitWriteBarrier):

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

        Fix ARMv6 build

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::rshift32):

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

        Reviewed by Gavin Barraclough.

        Add optimised paths for a few maths functions
        https://bugs.webkit.org/show_bug.cgi?id=63757

        This adds specialised thunks for Math.abs, Math.round, Math.ceil,
        Math.floor, Math.log, and Math.exp as they are apparently more
        important in real web content than we thought, which is somewhat
        mind-boggling.  On average doubles the performance of the common
        cases (eg. actually passing numbers in).  They're not as efficient
        as they could be, but this way gives them the most portability.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::supportsDoubleBitops):
        (JSC::MacroAssemblerARM::andnotDouble):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::supportsDoubleBitops):
        (JSC::MacroAssemblerARMv7::andnotDouble):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::andnotDouble):
        (JSC::MacroAssemblerMIPS::supportsDoubleBitops):
        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::supportsDoubleBitops):
        (JSC::MacroAssemblerSH4::andnotDouble):
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::supportsDoubleBitops):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::andnotDouble):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::supportsDoubleBitops):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::andnpd_rr):
        * create_hash_table:
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::finalize):
        (JSC::SpecializedThunkJIT::callDoubleToDouble):
        * jit/ThunkGenerators.cpp:
        (JSC::floorThunkGenerator):
        (JSC::ceilThunkGenerator):
        (JSC::roundThunkGenerator):
        (JSC::expThunkGenerator):
        (JSC::logThunkGenerator):
        (JSC::absThunkGenerator):
        * jit/ThunkGenerators.h:

2011-06-30  Cary Clark  <caryclark@google.com>

        Reviewed by James Robinson.

        Use Skia if Skia on Mac Chrome is enabled
        https://bugs.webkit.org/show_bug.cgi?id=62999

        * wtf/Platform.h:
        Add switch to use Skia if, externally,
        Skia has been enabled by a gyp define.

2011-06-30  Juan C. Montemayor  <jmont@apple.com>

        Reviewed by Geoffrey Garen.

        Web Inspector fails to display source for eval with syntax error
        https://bugs.webkit.org/show_bug.cgi?id=63583

        Web Inspector now displays a link to an eval statement that contains
        a syntax error.

        * parser/Parser.h:
        (JSC::isEvalNode):
        (JSC::EvalNode):
        (JSC::Parser::parse):

2011-06-30  Filip Pizlo  <fpizlo@apple.com>

        Reviewed by Gavin Barraclough.

        X86Assembler does not encode byte registers in 64-bit mode correctly.
        https://bugs.webkit.org/show_bug.cgi?id=63665

        * assembler/X86Assembler.h:
        (JSC::X86Assembler::testb_rr):
        (JSC::X86Assembler::X86InstructionFormatter::oneByteOp8):

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

        Unreviewed, rolling out r90102.
        http://trac.webkit.org/changeset/90102
        https://bugs.webkit.org/show_bug.cgi?id=63714

        Lots of tests asserting beneath
        SVGSMILElement::findInstanceTime (Requested by aroben on
        #webkit).

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

2011-06-30  Oliver Varga  <Varga.Oliver@stud.u-szeged.hu>

        Reviewed by Nikolas Zimmermann.

        Speed up SVGSMILElement::findInstanceTime.
        https://bugs.webkit.org/show_bug.cgi?id=61025

        Add a new parameter to StdlibExtras.h::binarySerarch function
        to also handle cases when the array does not contain the key value.
        This is needed for an svg function.

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

2011-06-29  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=63669
        DFG JIT - fix spectral-norm regression

        The problem is a mis-speculation leading to us falling off the speculative path.
        Make the speculation logic slightly smarter, don't predict int if one of the
        operands is already loaded as a double (we use this logic already for compares).

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::shouldSpeculateInteger):

2011-06-29  Filip Pizlo  <fpizlo@apple.com>

        Reviewed by Gavin Barraclough.

        DFG JIT does not do put_by_id transition caching.
        https://bugs.webkit.org/show_bug.cgi?id=63662

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::cachedPutById):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addPropertyAccess):
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::testPrototype):
        (JSC::DFG::tryCachePutByID):

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

        Reviewed by Oliver Hunt.

        Added a dummy write barrier emitting function in all the right places in the old JIT
        https://bugs.webkit.org/show_bug.cgi?id=63667
        
        SunSpider reports no change.

        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emit_op_put_scoped_var): Do it.

        (JSC::JIT::emit_op_put_global_var): Global object needs to be in a register
        for the sake of the write barrier.

        (JSC::JIT::emitWriteBarrier): Empty for now. Not for long!

        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emit_op_put_scoped_var): Do it.

        (JSC::JIT::emit_op_put_global_var): Global object needs to be in a register
        for the sake of the write barrier.

        (JSC::JIT::emitWriteBarrier): Empty for now. Not for long!

2011-06-29  Filip Pizlo  <fpizlo@apple.com>

        Reviewed by Gavin Barraclough.

        DFG JIT does not perform get_by_id self list caching.
        https://bugs.webkit.org/show_bug.cgi?id=63605

        * bytecode/StructureStubInfo.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::tryCacheGetByID):
        (JSC::DFG::tryBuildGetByIDList):
        (JSC::DFG::dfgBuildGetByIDList):
        * dfg/DFGRepatch.h:

2011-06-28  Filip Pizlo  <fpizlo@apple.com>

        Reviewed by Gavin Barraclough.

        DFG JIT lacks array.length caching.
        https://bugs.webkit.org/show_bug.cgi?id=63505

        * bytecode/StructureStubInfo.h:
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::cachedGetById):
        (JSC::DFG::JITCodeGenerator::cachedPutById):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::tryAllocate):
        (JSC::DFG::JITCodeGenerator::selectScratchGPR):
        (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addPropertyAccess):
        (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord):
        * dfg/DFGRegisterBank.h:
        (JSC::DFG::RegisterBank::tryAllocate):
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::tryCacheGetByID):

2011-06-28  Pierre Rossi  <pierre.rossi@gmail.com>

        Reviewed by Eric Seidel.

        Warnings in JSC's JIT on 32 bit
        https://bugs.webkit.org/show_bug.cgi?id=63259

        Fairly straightforward, just use ASSERT_JIT_OFFSET_UNUSED when it applies.

        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::emit_op_put_by_id):

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

        Unreviewed, rolling out r89968.
        http://trac.webkit.org/changeset/89968
        https://bugs.webkit.org/show_bug.cgi?id=63581

        Broke chromium windows compile (Requested by jamesr on
        #webkit).

        * wtf/Platform.h:

2011-06-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Fix sampling build
        https://bugs.webkit.org/show_bug.cgi?id=63579

        Gets opcode sampling building again, doesn't seem to work alas

        * bytecode/SamplingTool.cpp:
        (JSC::SamplingTool::notifyOfScope):
        * bytecode/SamplingTool.h:
        (JSC::SamplingTool::SamplingTool):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::enableSampler):
        * runtime/Executable.h:
        (JSC::ScriptExecutable::ScriptExecutable):

2011-06-28  Cary Clark  <caryclark@google.com>

        Reviewed by James Robinson.

        Use Skia if Skia on Mac Chrome is enabled
        https://bugs.webkit.org/show_bug.cgi?id=62999

        * wtf/Platform.h:
        Add switch to use Skia if, externally,
        Skia has been enabled by a gyp define.

2011-06-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        ASSERT when launching debug builds with interpreter and jit enabled
        https://bugs.webkit.org/show_bug.cgi?id=63566

        Add appropriate guards to the various Executable's memory reporting
        logic.

        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):

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

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=63563
        DFG JIT - add support for double arith to speculative path

        Add integer support for div & mod, add double support for div, mod,
        add, sub & mul, dynamically selecting based on operand types.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::FPRTemporary::FPRTemporary):
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::assembler):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateDouble):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculateDoubleOperand::SpeculateDoubleOperand):
        (JSC::DFG::SpeculateDoubleOperand::~SpeculateDoubleOperand):
        (JSC::DFG::SpeculateDoubleOperand::index):
        (JSC::DFG::SpeculateDoubleOperand::fpr):

2011-06-28  Oliver Hunt  <oliver@apple.com>

        Fix interpreter build.

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

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

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=63561
        DFG JIT - don't always assume integer in relational compare

        If neither operand is known integer, or either is in double representation,
        then at least use a function call (don't bail off the speculative path).

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleCall):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::isDataFormatDouble):
        (JSC::DFG::SpeculativeJIT::compareIsInteger):

2011-06-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make constant array optimisation less strict about what constitutes a constant
        https://bugs.webkit.org/show_bug.cgi?id=63554

        Now allow string constants in array literals to actually be considered constant,
        and so avoid codegen in array literals with strings in them.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addConstantBuffer):
        (JSC::CodeBlock::constantBuffer):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::addConstantBuffer):
        (JSC::BytecodeGenerator::addStringConstant):
        (JSC::BytecodeGenerator::emitNewArray):
        * bytecompiler/BytecodeGenerator.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):

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

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=63560
        DFG_JIT allow allocation of specific machine registers

        This allow us to allocate the registers necessary to perform x86
        idiv instructions for div/mod, and may be useful for shifts, too.

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::GPRTemporary::GPRTemporary):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::allocate):
        (JSC::DFG::GPRResult::GPRResult):
        * dfg/DFGRegisterBank.h:
        (JSC::DFG::RegisterBank::allocateSpecific):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::isInteger):

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

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=55040
        RegExp constructor returns the argument regexp instead of a new object

        Per 15.10.3.1, our current behaviour is correct if called as a function,
        but incorrect when called as a constructor.

        * runtime/RegExpConstructor.cpp:
        (JSC::constructRegExp):
        (JSC::constructWithRegExpConstructor):
        * runtime/RegExpConstructor.h:

2011-06-28  Luke Macpherson   <macpherson@chromium.org>

        Reviewed by Darin Adler.

        Clean up integer clamping functions in MathExtras.h and support arbitrary numeric types and limits.
        https://bugs.webkit.org/show_bug.cgi?id=63469

        * wtf/MathExtras.h:
        (defaultMinimumForClamp):
        Version of std::numeric_limits::min() that returns the largest negative value for floating point types.
        (defaultMaximumForClamp):
        Symmetric alias for std::numeric_limits::max()
        (clampTo):
        New templated clamping function that supports arbitrary output types.
        (clampToInteger):
        Use new clampTo template.
        (clampToFloat):
        Use new clampTo template.
        (clampToPositiveInteger):
        Use new clampTo template.

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

        Windows Debug build fix after r89885

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Exported
        JSGlobalData::releaseExecutableMemory for jsc.exe's benefit.

2011-06-28  Shinya Kawanaka  <shinyak@google.com>

        Reviewed by Kent Tamura.

        Add const to show() method in WTFString and AtomicString.
        https://bugs.webkit.org/show_bug.cgi?id=63515

        The lack of const in show() method is painful when
        doing something like printf-debug.

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

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

        Build fix attempt after r89885.

        * JavaScriptCore.exp:
        * jsc.cpp:

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

        Reviewed by Geoffrey Garen.

        Support throwing away non-running code even while other code is running
        https://bugs.webkit.org/show_bug.cgi?id=63485

        Add a function to CodeBlock to support unlinking direct linked callsites,
        and then with that in place add logic to discard code from any function
        that is not currently on the stack.

        The unlinking completely reverts any optimized call sites, such that they
        may be relinked again in future.

        * JavaScriptCore.exp:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::unlinkCalls):
        (JSC::CodeBlock::clearEvalCache):
        * bytecode/CodeBlock.h:
        (JSC::CallLinkInfo::CallLinkInfo):
        (JSC::CallLinkInfo::unlink):
        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::clear):
        * heap/Heap.cpp:
        (JSC::Heap::getConservativeRegisterRoots):
        * heap/Heap.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCall):
        * jit/JITWriteBarrier.h:
        (JSC::JITWriteBarrierBase::clear):
        * jsc.cpp:
        (GlobalObject::GlobalObject):
        (functionReleaseExecutableMemory):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::unlinkCalls):
        (JSC::ProgramExecutable::unlinkCalls):
        (JSC::FunctionExecutable::discardCode):
        (JSC::FunctionExecutable::unlinkCalls):
        * runtime/Executable.h:
        * runtime/JSGlobalData.cpp:
        (JSC::SafeRecompiler::returnValue):
        (JSC::SafeRecompiler::operator()):
        (JSC::JSGlobalData::releaseExecutableMemory):

2011-06-27  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler & Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=50554
        RegExp.prototype.toString does not escape slashes

        The problem here is that we don't escape forwards slashes when converting
        a RegExp to a string. This means that RegExp("/").toString() is "///",
        which is not a valid RegExp literal. Also, we return an invalid literal
        for RegExp.prototype.toString() ("//", which is an empty single-line comment).

        From ES5:
        "NOTE: The returned String has the form of a RegularExpressionLiteral that
        evaluates to another RegExp object with the same behaviour as this object."

        * runtime/RegExpObject.cpp:
        (JSC::regExpObjectSource):
            - Escape forward slashes when getting the source of a RegExp.
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncToString):
            - Remove unnecessary and erroneous hack to return "//" as the string
            representation of RegExp.prototype. This is not a valid RegExp literal
            (it is an empty single-line comment).

2011-06-27  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=63497
        Add DEBUG_WITH_BREAKPOINT support to the DFG JIT.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGNode.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-06-27  Juan C. Montemayor  <jmont@apple.com>

        Reviewed by Mark Rowe.

        Indirectly including TextPosition.h and XPathGrammar.h causes compile errors
        https://bugs.webkit.org/show_bug.cgi?id=63392
        
        When both TextPosition.h and XPathGrammar.h are included a compile-error
        is caused, since XPathGrammar.h defines a macro called NUMBER and 
        TextPosition has a typedef named NUMBER.

        * wtf/text/TextPosition.h:
        (WTF::TextPosition::TextPosition):
        (WTF::TextPosition::minimumPosition):
        (WTF::TextPosition::belowRangePosition):

2011-06-27  Filip Pizlo  <fpizlo@apple.com>

        Reviewed by Gavin Barraclough.

        DFG JIT does not perform put_by_id caching.
        https://bugs.webkit.org/show_bug.cgi?id=63409

        * bytecode/StructureStubInfo.h:
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::cachedPutById):
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::addPropertyAccess):
        (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGOperations.cpp:
        * dfg/DFGOperations.h:
        * dfg/DFGRepatch.cpp:
        (JSC::DFG::dfgRepatchByIdSelfAccess):
        (JSC::DFG::tryCacheGetByID):
        (JSC::DFG::appropriatePutByIdFunction):
        (JSC::DFG::tryCachePutByID):
        (JSC::DFG::dfgRepatchPutByID):
        * dfg/DFGRepatch.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-06-27  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed build fix. One more filed missing during distcheck, for
        the MIPS build.

        * GNUmakefile.list.am:

2011-06-26  Filip Pizlo  <fpizlo@apple.com>

        Reviewed by Gavin Barraclough.

        DFG non-speculative JIT has potentially harmful speculations with respect to arithmetic operations.
        https://bugs.webkit.org/show_bug.cgi?id=63347

        * dfg/DFGNonSpeculativeJIT.cpp:
            - Changed arithmetic operations to speculate in favor of integers.
        (JSC::DFG::NonSpeculativeJIT::valueToNumber):
        (JSC::DFG::NonSpeculativeJIT::knownConstantArithOp):
        (JSC::DFG::NonSpeculativeJIT::basicArithOp):
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGNonSpeculativeJIT.h:
        * dfg/DFGOperations.cpp:
            - Added slow-path routines for arithmetic that perform no speculation; the
              non-speculative JIT will generate calls to these in cases where its
              speculation fails.
        * dfg/DFGOperations.h:

2011-06-24  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Rob Buis.

        Integrate SVG Fonts within GlyphPage concept, removing the special SVG code paths from Font, making it possible to reuse the simple text code path for SVG Fonts
        https://bugs.webkit.org/show_bug.cgi?id=59085

        * wtf/Platform.h: Force Qt-EWS into a full rebuild, otherwhise this patch breaks the EWS.

2011-06-24  Michael Saboff  <msaboff@apple.com>

        Reviewed by Gavin Barraclough.

        Arm Assembler, Immediate stack offset values truncated to 8 bits for add & sub
        https://bugs.webkit.org/show_bug.cgi?id=63345

        The methods ARMThumbImmediate::getUInt9 and ARMThumbImmediate::getUInt10
        return 9 and 10 bit quantities, therefore changed their return type from
        uint8_t to uint16_t.  Also casted the places where they are used as they
        are currently shifted and used as 7 or 8 bit values.

        These methods are currently used for literals for stack offsets, 
        including creating and destroying stack frames.  The prior truncation of
        the upper bits caused stack frames to be too small, thus allowing a
        JIT'ed function to access and overwrite stack space outside of the
        incorrectly sized stack frame.

        * assembler/ARMv7Assembler.h:
        (JSC::ARMThumbImmediate::getUInt9):
        (JSC::ARMThumbImmediate::getUInt10):
        (JSC::ARMv7Assembler::add):
        (JSC::ARMv7Assembler::ldr):
        (JSC::ARMv7Assembler::str):
        (JSC::ARMv7Assembler::sub):
        (JSC::ARMv7Assembler::sub_S):

2011-06-24  Michael Saboff  <msaboff@apple.com>

        Reviewed by Geoffrey Garen.

        releaseFastMallocFreeMemory doesn't adjust free counts for scavenger
        https://bugs.webkit.org/show_bug.cgi?id=63015

        Added code to adjust class TCMalloc_PageHeap variables free_committed_pages_ and
        min_free_committed_pages_since_last_scavenge_ in ReleaseFreeList().  These 
        adjustments are a bug.  These need to reflect the pages that are released
        in ReleaseFreeLsit so that scavenge doesn't try to free that many pages as well.
        Made ReleaseFreeList a member of TCMalloc_PageHeap in the process.  Updated
        Check() and helper method CheckList() to check the number of actual free pages
        with free_committed_pages_.

        The symptom of the problem of the existing code is that the scavenger may
        run unneccesarily without any real work to do, i.e. pages on the free lists.
        The scanvenger would also end up freeing too many pages, that is going below 
        the current 528 target free pages.

        Note that the style of the changes was kept consistent with the
        existing style.

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::Check):
        (WTF::TCMalloc_PageHeap::CheckList):
        (WTF::TCMalloc_PageHeap::ReleaseFreeList):

2011-06-24  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Darin Adler.

        Match other clampTo* functions in style with clampToInteger(float)
        function.
        https://bugs.webkit.org/show_bug.cgi?id=53449

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

2011-06-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89594.
        http://trac.webkit.org/changeset/89594
        https://bugs.webkit.org/show_bug.cgi?id=63316

        It broke 5 tests on the Qt bot (Requested by Ossy_DC on
        #webkit).

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * icu/unicode/uscript.h: Removed.
        * wtf/unicode/ScriptCodesFromICU.h: Removed.
        * wtf/unicode/brew/UnicodeBrew.h:
        * wtf/unicode/glib/UnicodeGLib.h:
        * wtf/unicode/icu/UnicodeIcu.h:
        * wtf/unicode/qt4/UnicodeQt4.h:
        * wtf/unicode/wince/UnicodeWinCE.h:

2011-06-23  Filip Pizlo  <fpizlo@apple.com>

        Reviewed by Gavin Barraclough.

        DFG non-speculative JIT should have obvious optimizations for GetById and GetByVal
        https://bugs.webkit.org/show_bug.cgi?id=63173

        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::cachedGetById):
        * dfg/DFGJITCodeGenerator.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-06-23  Oliver Hunt  <oliver@apple.com>

        Fix Qt again.

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::readPointer):

2011-06-23  Oliver Hunt  <oliver@apple.com>

        Fix Qt Build

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::readPointer):

2011-06-23  Stephanie Lewis  <slewis@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=63298
        Replace Malloc with FastMalloc to match the rest of wtf.

        * wtf/BlockStack.h:
        (WTF::::~BlockStack):
        (WTF::::grow):
        (WTF::::shrink):

2011-06-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Add the ability to dynamically modify linked call sites
        https://bugs.webkit.org/show_bug.cgi?id=63291

        Add JITWriteBarrier as a writebarrier class that allows
        reading and writing directly into the code stream.

        This required adding logic to all the assemblers to allow
        us to read values back out of the instruction stream.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::readPointer):
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::readPointer):
        (JSC::ARMv7Assembler::readInt32):
        (JSC::ARMv7Assembler::decodeTwoWordOp5i6Imm4Reg4EncodedImmFirst):
        (JSC::ARMv7Assembler::decodeTwoWordOp5i6Imm4Reg4EncodedImmSecond):
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::readPointer):
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::readInt32):
        (JSC::MIPSAssembler::readPointer):
        * assembler/MacroAssemblerCodeRef.h:
        (JSC::MacroAssemblerCodePtr::operator!):
        * assembler/SH4Assembler.h:
        (JSC::SH4Assembler::readPCrelativeAddress):
        (JSC::SH4Assembler::readPointer):
        (JSC::SH4Assembler::readInt32):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::readPointer):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitAggregate):
        * bytecode/CodeBlock.h:
        (JSC::MethodCallLinkInfo::seenOnce):
        (JSC::MethodCallLinkInfo::setSeen):
        * heap/MarkStack.h:
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        (JSC::JIT::linkCall):
        (JSC::JIT::linkConstruct):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::patchMethodCallProto):
        * jit/JITPropertyAccess32_64.cpp:
        * jit/JITWriteBarrier.h: Added.
        (JSC::JITWriteBarrierBase::operator UnspecifiedBoolType*):
        (JSC::JITWriteBarrierBase::operator!):
        (JSC::JITWriteBarrierBase::setFlagOnBarrier):
        (JSC::JITWriteBarrierBase::isFlagged):
        (JSC::JITWriteBarrierBase::setLocation):
        (JSC::JITWriteBarrierBase::location):
        (JSC::JITWriteBarrierBase::JITWriteBarrierBase):
        (JSC::JITWriteBarrierBase::set):
        (JSC::JITWriteBarrierBase::get):
        (JSC::JITWriteBarrier::JITWriteBarrier):
        (JSC::JITWriteBarrier::set):
        (JSC::JITWriteBarrier::get):
        (JSC::MarkStack::append):

2011-06-23  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=61585
        Crash running regexp /(?:(?=g))|(?:m).{2147483648,}/

        This is due to use of int instead of unsigned, bad math around
        the 2^31 boundary.

        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::ByteCompiler::emitDisjunction):
            - Change some uses of int to unsigned, refactor compare logic to
              restrict to the range 0..2^32-1 (rather than -2^32-1..2^32-1).
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::generate):
        (JSC::Yarr::YarrGenerator::backtrack):
            - Ditto.

2011-06-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=63218
        DFG JIT - remove machine type guarantees from graph

        The DFG JIT currently makes assumptions about the types of machine registers
        that certain nodes will be loaded into. This will be broken as we generate
        nodes to produce both integer and double code paths. Remove int<->double
        conversions nodes. This design decision also gave rise to multiple types of
        constant nodes, requiring separate handling for each type. Merge these back
        into JSConstant.

        * dfg/DFGAliasTracker.h:
        (JSC::DFG::AliasTracker::equalIgnoringLaterNumericConversion):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getToInt32):
        (JSC::DFG::ByteCodeParser::getToNumber):
        (JSC::DFG::ByteCodeParser::toInt32):
        (JSC::DFG::ByteCodeParser::toNumber):
        (JSC::DFG::ByteCodeParser::isInt32Constant):
        (JSC::DFG::ByteCodeParser::isDoubleConstant):
        (JSC::DFG::ByteCodeParser::valueOfInt32Constant):
        (JSC::DFG::ByteCodeParser::valueOfDoubleConstant):
        (JSC::DFG::ByteCodeParser::one):
        (JSC::DFG::ByteCodeParser::predictInt32):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::silentFillGPR):
        (JSC::DFG::JITCodeGenerator::silentFillFPR):
        (JSC::DFG::JITCodeGenerator::isJSConstant):
        (JSC::DFG::JITCodeGenerator::isDoubleConstant):
        (JSC::DFG::JITCodeGenerator::valueOfJSConstantAsImmPtr):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::fillNumericToDouble):
        (JSC::DFG::JITCompiler::fillInt32ToInteger):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::isJSConstant):
        (JSC::DFG::JITCompiler::isInt32Constant):
        (JSC::DFG::JITCompiler::isDoubleConstant):
        (JSC::DFG::JITCompiler::valueOfJSConstant):
        (JSC::DFG::JITCompiler::valueOfInt32Constant):
        (JSC::DFG::JITCompiler::valueOfDoubleConstant):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::Node):
        (JSC::DFG::Node::isConstant):
        (JSC::DFG::Node::notTakenBytecodeOffset):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::isKnownInteger):
        (JSC::DFG::NonSpeculativeJIT::isKnownNumeric):
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
        (JSC::DFG::SpeculativeJIT::compile):

2011-06-23  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Add ScriptCodesFromICU.h to wtf/unicode and make necessary changes in
        build files for ports not using ICU.
        Add icu/unicode/uscript.h for ports using ICU. It's taken from 
        ICU 3.6 (the version used on Mac OS 10.5)

        http://bugs.webkit.org/show_bug.cgi?id=20797

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * icu/unicode/uscript.h: Added for UScriptCode enum.
        * wtf/unicode/ScriptCodesFromICU.h: UScriptCode enum added.
        * wtf/unicode/icu/UnicodeIcu.h:
        * wtf/unicode/brew/UnicodeBrew.h:
        * wtf/unicode/glib/UnicodeGLib.h:
        * wtf/unicode/qt4/UnicodeQt4.h:
        * wtf/unicode/wince/UnicodeWinCE.h:

2011-06-23  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Andreas Kling.

        [EFL][WK2] Add PLATFORM(EFL) to use UNIX_DOMAIN_SOCKETS.
        https://bugs.webkit.org/show_bug.cgi?id=63228

        * wtf/Platform.h: Add PLATFORM(EFL) guard.

2011-06-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89547.
        http://trac.webkit.org/changeset/89547
        https://bugs.webkit.org/show_bug.cgi?id=63252

        "Chrmium crash on start" (Requested by yurys on #webkit).

        * wtf/DynamicAnnotations.cpp:
        (WTFAnnotateBenignRaceSized):
        (WTFAnnotateHappensBefore):
        (WTFAnnotateHappensAfter):
        * wtf/DynamicAnnotations.h:

2011-06-23  Timur Iskhodzhanov  <timurrrr@google.com>

        Reviewed by David Levin.

        Make dynamic annotations weak symbols and prevent identical code folding by the linker
        https://bugs.webkit.org/show_bug.cgi?id=62443

        * wtf/DynamicAnnotations.cpp:
        (WTFAnnotateBenignRaceSized):
        (WTFAnnotateHappensBefore):
        (WTFAnnotateHappensAfter):
        * wtf/DynamicAnnotations.h:

2011-06-22  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Add a build flag for building with libxml2 and libxslt.
        https://bugs.webkit.org/show_bug.cgi?id=63113

        * wtf/Platform.h:

2011-06-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89489.
        http://trac.webkit.org/changeset/89489
        https://bugs.webkit.org/show_bug.cgi?id=63203

        Broke chromium mac build on build.webkit.org (Requested by
        abarth on #webkit).

        * wtf/Platform.h:

2011-06-22  Cary Clark  <caryclark@google.com>

        Reviewed by Darin Fisher.

        Use Skia if Skia on Mac Chrome is enabled
        https://bugs.webkit.org/show_bug.cgi?id=62999

        * wtf/Platform.h:
        Add switch to use Skia if, externally,
        Skia has been enabled by a gyp define.

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

        Reviewed by Oliver Hunt.

        * interpreter/RegisterFile.h: Removed unnecessary #include <stdio.h>.

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

        Reviewed by Oliver Hunt.

        Removed the conceit that global variables are local variables when running global code
        https://bugs.webkit.org/show_bug.cgi?id=63106
        
        This is required for write barrier correctness.
        
        SunSpider reports about a 0.5% regression, mostly from bitops-bitwise-and.js.
        I was able to reduce the regression with a tiny peephole optimization in
        the bytecompiler, but not eliminate it. I'm committing this assuming
        that turning on generational GC will win back at least 0.5%.

        (FWIW, the DFG JIT can easily eliminate any regression by sharing loads of
        the global object's var storage. I considered doing the same kind of
        optimization in the existing JIT, but it seemed like moving in the wrong
        direction.)

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::addGlobalVar):
        (JSC::BytecodeGenerator::BytecodeGenerator): Don't give global variables
        negative indices, since they're no longer negatively offset from the
        current stack frame.
        
        Do give global variables monotonically increasing positive indices, since
        that's much easier to work with.
        
        Don't limit the number of optimizable global variables, since it's no
        longer limited by the register file, since they're no longer stored in
        the register file.

        (JSC::BytecodeGenerator::registerFor): Global code never has any local
        registers because a var in global code is actually a property of the
        global object.

        (JSC::BytecodeGenerator::constRegisterFor): Ditto.

        (JSC::BytecodeGenerator::emitResolve): Did a tiny bit of constant
        propagation and dead code elimination to speed up our compiles and
        reduce WTFs / minute.

        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::registerFor): Removed special handling of globals.

        (JSC::BytecodeGenerator::shouldOptimizeLocals): Don't optimize locals in
        global code, since there are none.

        (JSC::BytecodeGenerator::canOptimizeNonLocals): Do optimize non-locals
        in global code (i.e., global vars), since there are some.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::callEval):
        (JSC::Interpreter::Interpreter):
        (JSC::Interpreter::dumpRegisters):
        (JSC::Interpreter::execute):
        * interpreter/Interpreter.h: Updated for deleted / renamed code.

        * interpreter/RegisterFile.cpp:
        (JSC::RegisterFile::gatherConservativeRoots):
        (JSC::RegisterFile::releaseExcessCapacity): Updated for deleted / renamed
        data members.

        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::begin):
        (JSC::RegisterFile::size):
        (JSC::RegisterFile::RegisterFile):
        (JSC::RegisterFile::shrink): Removed all code and comments dealing with
        global variables stored in the register file.

        (JSC::RegisterFile::grow): Updated for same.
        
        Also, a slight correctness fix: Test the VM commit end, and not just the
        in-use end, when checking for stack overflow. In theory, it's invalid to
        commit past the end of your allocation, even if you never touch that
        memory. This makes the usable size of the stack slightly smaller. No test
        because we don't know of any case in practice where this crashes.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData): Updated for changes above.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::resizeRegisters):
        (JSC::JSGlobalObject::addStaticGlobals):
        * runtime/JSGlobalObject.h: Simplified globals to have monotonically 
        increasing indexes, always located in our external storage.

2011-06-21  MORITA Hajime  <morrita@google.com>

        Unreviewed, rolling out r89401 and r89403.
        http://trac.webkit.org/changeset/89401
        http://trac.webkit.org/changeset/89403
        https://bugs.webkit.org/show_bug.cgi?id=62970

        Breaks mac build and mistakenly enables the spellcheck API

        * Configurations/FeatureDefines.xcconfig:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-06-21  Kent Tamura  <tkent@chromium.org>

        [Mac] Sort Xcode project files.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-06-20  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        Spellcheck API should be build-able.
        https://bugs.webkit.org/show_bug.cgi?id=62970

        No new tests, changing only build related files
        
        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Oliver Hunt.

        Moved 'const' off the global-variable-as-local-variable crack pipe
        https://bugs.webkit.org/show_bug.cgi?id=63105
        
        This is necessary for moving the rest of the code off of same.
        
        Many problems remain in our handling of const. I have fixed none of them.

        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::scopeChain): New accessor, needed to enable
        const to directly implement its unique scoping rules.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::PrefixResolveNode::emitBytecode): Do specify that our resolve is
        for writing, so we don't overwrite const variables.

        (JSC::ConstDeclNode::emitCodeSingle): Don't assume that all declared const
        variables are available as local variables, since this won't be the case
        once global variables are not available as local variables. Instead, use
        put_scoped_var in the case where there is no local variable. Like a local
        variable, put_scoped_var succeeds even though const properties are
        read-only, since put_scoped_var skips read-only checks. (Yay?)

2011-06-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Alexey Proskuryakov.

        REGRESSION(r89257): It broke 2 jscore tests (Requested by Ossy_away on #webkit).
        https://bugs.webkit.org/show_bug.cgi?id=63052

        Release mode only failure, the stack overflow guards were getting there error
        handling inlined, so that they were essentially causing their own demise.

        * parser/JSParser.cpp:
        (JSC::JSParser::updateErrorMessage):
        (JSC::JSParser::updateErrorWithNameAndMessage):

2011-06-20  Kenneth Russell  <kbr@google.com>

        Unreviewed.

        Rolled out r89233 and r89235 because of crashes in http/tests/misc/acid3.html on Snow Leopard and other platforms
        https://bugs.webkit.org/show_bug.cgi?id=63022

        * wtf/Platform.h:

2011-06-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Disallow assigning into PassOwnArrayPtr, PassOwnPtr and PassRefPtr
        https://bugs.webkit.org/show_bug.cgi?id=62940

        Remove clear() and all assignment operators except one which now has a COMPILE_ASSERT.

        * wtf/PassOwnArrayPtr.h:
        (WTF::PassOwnArrayPtr::operator=):
        * wtf/PassOwnPtr.h:
        (WTF::PassOwnPtr::operator=):
        * wtf/PassRefPtr.h:
        (WTF::PassRefPtr::operator=):
        (WTF::NonNullPassRefPtr::operator=):

2011-06-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r79060): Searching for a flight at united.com fails
        https://bugs.webkit.org/show_bug.cgi?id=63003

        This original change also broke Twitter, and we attempted to refine the fix to 
        address that problem (http://trac.webkit.org/changeset/80542), but since it still breaks United,
        we need to revert the change until we understand the problem better.

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

2011-06-20  Juan C. Montemayor  <jmont@apple.com>

        Reviewed by Oliver Hunt.

        No context for javascript parse errors.
        https://bugs.webkit.org/show_bug.cgi?id=62613
        
        Parse errors now show more details like:
        "Unexpected token: ]"
        or
        "Expected token: while"
        
        For reserved names, numbers, indentifiers, strings, lexer errors, 
        and EOFs, the following error messages are printed:
        
        "Use of reserved word: super"
        "Unexpected number: 42"
        "Unexpected identifier: "
        "Unexpected string: "foobar""
        "Invalid token character sequence: \u4023"
        "Unexpected EOF"

        * parser/JSParser.cpp:
        (JSC::JSParser::consume):
        (JSC::JSParser::getToken):
        (JSC::JSParser::getTokenName):
        (JSC::JSParser::updateErrorMessageSpecialCase):
        (JSC::JSParser::updateErrorMessage):
        (JSC::JSParser::updateErrorWithNameAndMessage):
        (JSC::jsParse):
        (JSC::JSParser::JSParser):
        (JSC::JSParser::parseProgram):
        (JSC::JSParser::parseVarDeclarationList):
        (JSC::JSParser::parseForStatement):
        (JSC::JSParser::parseBreakStatement):
        (JSC::JSParser::parseContinueStatement):
        (JSC::JSParser::parseWithStatement):
        (JSC::JSParser::parseTryStatement):
        (JSC::JSParser::parseStatement):
        (JSC::JSParser::parseFormalParameters):
        (JSC::JSParser::parseFunctionInfo):
        (JSC::JSParser::parseAssignmentExpression):
        (JSC::JSParser::parsePrimaryExpression):
        (JSC::JSParser::parseMemberExpression):
        (JSC::JSParser::parseUnaryExpression):
        * parser/JSParser.h:
        * parser/Lexer.cpp:
        (JSC::Lexer::lex):
        * parser/Parser.cpp:
        (JSC::Parser::parse):

2011-06-20  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Rob Buis.

        Integrate SVG Fonts within GlyphPage concept, removing the special SVG code paths from Font, making it possible to reuse the simple text code path for SVG Fonts
        https://bugs.webkit.org/show_bug.cgi?id=59085

        * wtf/Platform.h: Force Qt-EWS into a full rebuild, otherwhise this patch breaks the EWS.

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

        Reviewed by Sam Weinig.

        Correct logic for putting errors on the correct line when handling JSONP
        https://bugs.webkit.org/show_bug.cgi?id=62962

        Minor fix for the minor fix.  *sigh*

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

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

        Minor fix to correct layout test results.

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

2011-06-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        JSONP is unnecessarily slow
        https://bugs.webkit.org/show_bug.cgi?id=62920

        JSONP has unfortunately become a fairly common idiom online, yet
        it triggers very poor performance in JSC as we end up doing codegen
        for a large number of property accesses that will
           * only be run once, so the vast amount of logic we dump to handle
             caching of accesses is unnecessary.
           * We are doing codegen that is directly proportional to just
             creating the object in the first place.

        This patch extends the use of the literal parser to JSONP-like structures
        in global code, handling a number of different forms I have seen online.
        In an extreme case this improves performance of JSONP by more than 2x
        due to removal of code generation and execution time, and a few optimisations
        that I made to the parser itself.

        * API/JSValueRef.cpp:
        (JSValueMakeFromJSONString):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::callEval):
        (JSC::Interpreter::execute):
        * parser/Lexer.cpp:
        (JSC::Lexer::isKeyword):
        * parser/Lexer.h:
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * runtime/JSONObject.cpp:
        (JSC::JSONProtoFuncParse):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::tryJSONPParse):
        (JSC::LiteralParser::makeIdentifier):
        (JSC::LiteralParser::Lexer::lex):
        (JSC::LiteralParser::Lexer::next):
        (JSC::isSafeStringCharacter):
        (JSC::LiteralParser::Lexer::lexString):
        (JSC::LiteralParser::Lexer::lexNumber):
        (JSC::LiteralParser::parse):
        * runtime/LiteralParser.h:
        (JSC::LiteralParser::LiteralParser):
        (JSC::LiteralParser::tryLiteralParse):
        (JSC::LiteralParser::Lexer::Lexer):

2011-06-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r89184.
        http://trac.webkit.org/changeset/89184
        https://bugs.webkit.org/show_bug.cgi?id=62927

        It broke 22 tests on all bot (Requested by Ossy_weekend on
        #webkit).

        * API/JSValueRef.cpp:
        (JSValueMakeFromJSONString):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::callEval):
        (JSC::Interpreter::execute):
        * parser/Lexer.cpp:
        * parser/Lexer.h:
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * runtime/JSONObject.cpp:
        (JSC::JSONProtoFuncParse):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::Lexer::lex):
        (JSC::isSafeStringCharacter):
        (JSC::LiteralParser::Lexer::lexString):
        (JSC::LiteralParser::Lexer::lexNumber):
        (JSC::LiteralParser::parse):
        * runtime/LiteralParser.h:
        (JSC::LiteralParser::LiteralParser):
        (JSC::LiteralParser::tryLiteralParse):
        (JSC::LiteralParser::Lexer::Lexer):
        (JSC::LiteralParser::Lexer::next):

2011-06-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        JSONP is unnecessarily slow
        https://bugs.webkit.org/show_bug.cgi?id=62920

        JSONP has unfortunately become a fairly common idiom online, yet
        it triggers very poor performance in JSC as we end up doing codegen
        for a large number of property accesses that will
           * only be run once, so the vast amount of logic we dump to handle
             caching of accesses is unnecessary.
           * We are doing codegen that is directly proportional to just
             creating the object in the first place.

        This patch extends the use of the literal parser to JSONP-like structures
        in global code, handling a number of different forms I have seen online.
        In an extreme case this improves performance of JSONP by more than 2x
        due to removal of code generation and execution time, and a few optimisations
        that I made to the parser itself.

        * API/JSValueRef.cpp:
        (JSValueMakeFromJSONString):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::callEval):
        (JSC::Interpreter::execute):
        * parser/Lexer.cpp:
        (JSC::Lexer::isKeyword):
        * parser/Lexer.h:
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * runtime/JSONObject.cpp:
        (JSC::JSONProtoFuncParse):
        * runtime/LiteralParser.cpp:
        (JSC::LiteralParser::tryJSONPParse):
        (JSC::LiteralParser::makeIdentifier):
        (JSC::LiteralParser::Lexer::lex):
        (JSC::LiteralParser::Lexer::next):
        (JSC::isSafeStringCharacter):
        (JSC::LiteralParser::Lexer::lexString):
        (JSC::LiteralParser::Lexer::lexNumber):
        (JSC::LiteralParser::parse):
        * runtime/LiteralParser.h:
        (JSC::LiteralParser::LiteralParser):
        (JSC::LiteralParser::tryLiteralParse):
        (JSC::LiteralParser::Lexer::Lexer):

2011-06-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Moved some property access JIT code into property access JIT files
        https://bugs.webkit.org/show_bug.cgi?id=62906

        * jit/JITOpcodes.cpp:
        * jit/JITOpcodes32_64.cpp:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emitSlow_op_put_by_val):
        (JSC::JIT::emit_op_get_scoped_var):
        (JSC::JIT::emit_op_put_scoped_var):
        (JSC::JIT::emit_op_get_global_var):
        (JSC::JIT::emit_op_put_global_var):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_get_scoped_var):
        (JSC::JIT::emit_op_put_scoped_var):
        (JSC::JIT::emit_op_get_global_var):
        (JSC::JIT::emit_op_put_global_var):

2011-06-17  Anders Carlsson  <andersca@apple.com>

        Build fix.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-06-17  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Leopard build?

        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-06-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Added some write barrier action, compiled out by default
        https://bugs.webkit.org/show_bug.cgi?id=62844

        * JavaScriptCore.exp: Build!

        * JavaScriptCore.xcodeproj/project.pbxproj: Fixed an incremental build
        issue with Heap.cpp.

        * heap/Heap.cpp:
        (JSC::Heap::writeBarrierSlowCase):
        * heap/Heap.h:
        (JSC::Heap::writeBarrier):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::isAtomAligned):
        (JSC::MarkedBlock::blockFor):
        (JSC::MarkedBlock::atomNumber):
        (JSC::MarkedBlock::ownerSetNumber):
        (JSC::MarkedBlock::addOldSpaceOwner):
        (JSC::MarkedBlock::OwnerSet::OwnerSet):
        (JSC::MarkedBlock::OwnerSet::add):
        (JSC::MarkedBlock::OwnerSet::clear):
        (JSC::MarkedBlock::OwnerSet::size):
        (JSC::MarkedBlock::OwnerSet::didOverflow):
        (JSC::MarkedBlock::OwnerSet::owners): Added a basic write barrier that
        tracks owners for regions within blocks. Currently unused.

2011-06-17  Raphael Kubo da Costa  <kubo@profusion.mobi>

        Reviewed by Eric Seidel.

        [EFL] Add some OwnPtr specializations for EFL types.
        For now there are specializations for Ecore_Evas and Evas_Object.
        https://bugs.webkit.org/show_bug.cgi?id=62877

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

2011-06-17  Joone Hur  <joone.hur@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Replace GdkRectangle by cairo_rectangle_int_t
        https://bugs.webkit.org/show_bug.cgi?id=60687

        Replace GdkRectangle by cairo_rectangle_int_t.

        * wtf/gobject/GTypedefs.h: Replace GdkRectangle by cairo_rectangle_int_t.

2011-06-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=53014
        ES5 strict mode keyword restrictions aren't implemented

        The following are future restricted words is strict mode code:
            implements, interface, let, package, private, protected, public, static, yield

        * parser/JSParser.h:
            - Add RESERVED_IF_STRICT token.
        * parser/Keywords.table:
            - Add new future restricted words.
        * parser/Lexer.cpp:
        (JSC::Lexer::parseIdentifier):
            - Check for RESERVED_IF_STRICT; in nonstrict code this is converted to IDENT.
        (JSC::Lexer::lex):
            - Pass strictMode flag to parseIdentifier.
        * parser/Lexer.h:
            - parseIdentifier needs a strictMode flag.
        * runtime/CommonIdentifiers.h:
            - Add identifiers for new reserved words.

2011-06-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=23611
        Multiline Javascript comments cause incorrect parsing of following script.

        From the spec:
        "A MultiLineComment [is] simply discarded if it contains no line terminator,
        but if a MultiLineComment contains one or more line terminators, then it is
        replaced with a single line terminator, which becomes part of the stream of
        inputs for the syntactic grammar." 

        This may result in behavioural changes, due to automatic semicolon insertion.

        * parser/Lexer.cpp:
        (JSC::Lexer::parseMultilineComment):
            - Set m_terminator is we see a line terminator in a multiline comment.

2011-06-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=62824
        DFG JIT - add support for branch-fusion of compareEq, JSValue comparisons in SpeculativeJIT

        CompareEq of non-integer values is the most common cause of speculation failure.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleIntegerBranch):
            - Support Equals.
        (JSC::DFG::SpeculativeJIT::compilePeepHoleEq):
            - new! - peephole optimized Eq of JSValues.
        (JSC::DFG::SpeculativeJIT::compile):
            - Add peephole optimization for CompareEq.
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):
            - Add support for dead nodes between compare & branch.
        (JSC::DFG::SpeculativeJIT::isInteger):
            - Added to determine which form of peephole to do in CompareEq.

2011-06-16  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export another
        symbol.

        * bytecode/EvalCodeCache.h:
        * heap/HandleHeap.h:
        * heap/HeapRootVisitor.h:
        * heap/NewSpace.h:
        * runtime/ArgList.h:
        * runtime/ScopeChain.h:
        * runtime/SmallStrings.h:
        * runtime/Structure.h: Stop forward-declaring things that don't really
        exist anymore.

2011-06-16  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Mac build: Removed and re-added SlotVisitor.h to the Xcode
        project while crossing my fingers and facing west.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-06-16  Geoffrey Garen  <ggaren@apple.com>

        Build fix: Removed an incorrect symbol on Windows.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-06-16  Geoffrey Garen  <ggaren@apple.com>

        Build fix: Removed an accidental commit from the future.

        * CMakeLists.txt:

2011-06-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Introduced SlotVisitor into the project
        https://bugs.webkit.org/show_bug.cgi?id=62820
        
        This resolves a class vs typedef forward declaration issue, and gives all
        exported symbols the correct names.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.xcodeproj/project.pbxproj: Build!

        * bytecode/EvalCodeCache.h:
        * heap/HandleHeap.h:
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::markRoots):
        * heap/Heap.h:
        * heap/HeapRootVisitor.h: Replaced MarkStack with SlotVisitor. Now no
        clients operate on a MarkStack.

        * heap/MarkStack.cpp:
        (JSC::SlotVisitor::visitChildren):
        (JSC::SlotVisitor::drain):
        * heap/SlotVisitor.h: Added.
        (JSC::SlotVisitor::SlotVisitor): Used 'protected' and a little cheesy
        inheritance to give SlotVisitor all the attributes of MarkStack without
        making this change giant. Over time, we will move more behavior into
        SlotVisitor and its subclasses.

        * heap/MarkStack.h:
        * heap/NewSpace.h: Replaced MarkStack with SlotVisitor. Now no
        clients operate on a MarkStack.

        * runtime/ArgList.h:
        * runtime/JSCell.h:
        * runtime/JSObject.h:
        * runtime/ScopeChain.h:
        * runtime/SmallStrings.h:
        * runtime/Structure.h: Replaced MarkStack with SlotVisitor. Now no
        clients operate on a MarkStack.

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

        Reviewed by Geoffrey Garen.

        Reduce memory usage of resolve_global
        https://bugs.webkit.org/show_bug.cgi?id=62765

        If we have a large number of resolve_globals in a single
        block start planting plain resolve instructions instead 
        whenever we aren't in a loop.  This allows us to reduce
        the code size for extremely large functions without
        losing the performance benefits of op_resolve_global.

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::globalResolveInfoCount):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::shouldAvoidResolveGlobal):
        (JSC::BytecodeGenerator::emitResolve):
        (JSC::BytecodeGenerator::emitResolveWithBase):
        * bytecompiler/BytecodeGenerator.h:

2011-06-16  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Fix building with CONFIG(use_system_icu)
        https://bugs.webkit.org/show_bug.cgi?id=62744

        Do not define WTF_USE_QT4_UNICODE if WTF_USE_ICU_UNICODE is set.

        * wtf/Platform.h:

2011-06-15  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Remove obsolete LOOSE_OWN_PTR code
        https://bugs.webkit.org/show_bug.cgi?id=59909

        The internal Apple dependency on this is gone now.

        * wtf/OwnArrayPtr.h: Removed constructor that takes a raw pointer,
        set function that takes a raw pointer.

        * wtf/OwnPtr.h: Removed constructor that takes a raw pointer,
        set functino that takes a raw pointer.

        * wtf/PassOwnArrayPtr.h: Made constructor that takes a nullptr
        and assignment operator that takes a nullptr unconditional.
        Made constructor that takes a raw pointer private and explicit,
        and removed assignment operator that takes a raw pointer.

        * wtf/PassOwnPtr.h: Made assignment operator that takes a nullptr
        unconditional. Made constructor that takes a raw pointer private
        and explicit, and removed assignment operator that takes a raw pointer.

2011-06-15  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen and Gavin Barraclough.

        Make access-nseive ~9x faster on the non-speculative path by
        adding special casing for doubles that can lossless-ly be converted
        to a uint32_t in getByVal and putByVal. This avoids calls to stringification
        and the hash lookup.  Long term, we should try and get property of a getByVal
        and putByVal to be an integer immediate even in the non-speculative path.

        * dfg/DFGOperations.cpp:
        (JSC::DFG::putByVal):
        (JSC::DFG::operationPutByValInternal):

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

        Reviewed by Darin Adler.

        REGRESSION (r88719): 5by5.tv schedule is not visible
        https://bugs.webkit.org/show_bug.cgi?id=62720

        Problem here is that the lexer wasn't considering '$' to be
        a valid character in an identifier.

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

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

        Reviewed by Sam Weinig.

        Reduce the size of global_resolve
        https://bugs.webkit.org/show_bug.cgi?id=62738

        Reduce the code size of global_resolve in the JIT by replacing
        multiple pointer loads with a single pointer move + two offset
        loads.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_resolve_global):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_resolve_global):

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

        Reviewed by Dan Bernstein.

        Fixed an inavlid ASSERT I found while investigating
        <rdar://problem/9580254> Crash in JSC::HandleHeap::finalizeWeakHandles + 92
        https://bugs.webkit.org/show_bug.cgi?id=62699        

        No test since we don't know of a way to get WebCore to deallocate the
        next-to-finalize handle, which is also the last handle in the list,
        while finalizing the second-to-last handle in the list.

        * heap/HandleHeap.h:
        (JSC::HandleHeap::deallocate): Don't ASSERT that m_nextToFinalize has a
        non-0 next() after updating it, since it is valid to update m_nextToFinalize
        to point to the tail sentinel.
        
        Do ASSERT that m_nextToFinalize has a non-0 next() before updating it,
        since it is not valid to update m_nextToFinalize to point past the tail
        sentinel.
        
        Also, use m_nextToFinalize consistently for clarity.

2011-06-14  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=43841
        SegmentedVector::operator== typo

        * wtf/SegmentedVector.h:
        (WTF::SegmentedVectorIterator::operator==):
        (WTF::SegmentedVectorIterator::operator!=):

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

        Reviewed by Gavin Barraclough.

        Constant array literals result in unnecessarily large amounts of code
        https://bugs.webkit.org/show_bug.cgi?id=62658

        Add a new version of op_new_array that simply copies values from a buffer
        we hang off of the CodeBlock, rather than generating code to place each
        entry into the registerfile, and then copying it from the registerfile into
        the array.  This is a slight improvement on some sunspider tests, but no
        measurable overall change.  That's okay though as our goal was to reduce
        code size without hurting performance.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addImmediateBuffer):
        (JSC::CodeBlock::immediateBuffer):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::addImmediateBuffer):
        (JSC::BytecodeGenerator::emitNewArray):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ArrayNode::emitBytecode):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_new_array):
        (JSC::JIT::emit_op_new_array_buffer):
        * jit/JITOpcodes32_64.cpp:
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:

2011-06-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r88841.
        http://trac.webkit.org/changeset/88841
        https://bugs.webkit.org/show_bug.cgi?id=62672

        Caused many tests to crash (Requested by rniwa on #webkit).

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/CodeBlock.h:
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitNewArray):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ArrayNode::emitBytecode):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_new_array):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_new_array):
        * jit/JITStubs.cpp:
        * jit/JITStubs.h:

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

        Reviewed by Gavin Barraclough.

        Constant array literals result in unnecessarily large amounts of code
        https://bugs.webkit.org/show_bug.cgi?id=62658

        Add a new version of op_new_array that simply copies values from a buffer
        we hang off of the CodeBlock, rather than generating code to place each
        entry into the registerfile, and then copying it from the registerfile into
        the array.  This is a slight improvement on some sunspider tests, but no
        measurable overall change.  That's okay though as our goal was to reduce
        code size without hurting performance.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addImmediateBuffer):
        (JSC::CodeBlock::immediateBuffer):
        * bytecode/Opcode.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::addImmediateBuffer):
        (JSC::BytecodeGenerator::emitNewArray):
        * bytecompiler/BytecodeGenerator.h:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::ArrayNode::emitBytecode):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_new_array):
        (JSC::JIT::emit_op_new_array_buffer):
        * jit/JITOpcodes32_64.cpp:
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:

2011-06-14  Stephanie Lewis  <slewis@apple.com>

        Rubber stamped by Oliver Hunt.

        <rdar://problem/9511169>
        Update order files.

        * JavaScriptCore.order:

2011-06-14  Sam Weinig  <sam@webkit.org>

        Reviewed by Geoffrey Garen.

        Fix dumping of constants to have the correct constant number.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):

2011-06-14  Benjamin Poulain  <benjamin@webkit.org>

        Reviewed by Eric Seidel.

        KeywordLookupGenerator's Trie does not work with Python 3
        https://bugs.webkit.org/show_bug.cgi?id=62635

        With Python 3, dict.items() return an iterator. Since the iterator
        protocol changed between Python 2 and 3, the easiest way to get the
        values is to have something that use the iterator implicitely, like a
        for() loop.

        * KeywordLookupGenerator.py:

2011-06-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Fix llocp and lvalp names in the lexer to something more meaningful
        https://bugs.webkit.org/show_bug.cgi?id=62605

        A simple rename

        * parser/Lexer.cpp:
        (JSC::Lexer::parseIdentifier):
        (JSC::Lexer::parseString):
        (JSC::Lexer::lex):
        * parser/Lexer.h:
        (JSC::Lexer::lexExpectIdentifier):

2011-06-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make it possible to inline the common case of identifier lexing
        https://bugs.webkit.org/show_bug.cgi?id=62600

        Add a lexing function that expects to lex an "normal" alpha numeric
        identifier (that ignores keywords) so it's possible to inline the
        common parsing cases.  This comes out as a reasonable parsing speed
        boost.

        * parser/JSParser.cpp:
        (JSC::JSParser::nextExpectIdentifier):
        (JSC::JSParser::parseProperty):
        (JSC::JSParser::parseMemberExpression):
        * parser/Lexer.cpp:
        * parser/Lexer.h:
        (JSC::Lexer::makeIdentifier):
        (JSC::Lexer::lexExpectIdentifier):

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

        Reviewed by Martin Robinson.

        Distcheck fixes.

        * GNUmakefile.am:
        * GNUmakefile.list.am:

2011-06-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Simon Fraser.

        Make it possible to inline Identifier::equal
        https://bugs.webkit.org/show_bug.cgi?id=62584

        Move Identifier::equal to the Identifier header file.

        * runtime/Identifier.cpp:
        * runtime/Identifier.h:
        (JSC::Identifier::equal):

2011-06-13  Tony Chang  <tony@chromium.org>

        Reviewed by Dimitri Glazkov.

        rename ENABLE_NEW_FLEXBOX to ENABLE_CSS3_FLEXBOX
        https://bugs.webkit.org/show_bug.cgi?id=62578

        * Configurations/FeatureDefines.xcconfig:

2011-06-13  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        rename ENABLE_FLEXBOX to ENABLE_NEW_FLEXBOX
        https://bugs.webkit.org/show_bug.cgi?id=62545

        * Configurations/FeatureDefines.xcconfig:

2011-06-12  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed. Build fix for !ENABLE(JIT) after r88604.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitAggregate):

2011-06-11  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

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

        Remove #define NaN per Darin's comments.

        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::parseIntOverflow):
        (JSC::parseInt):
        (JSC::jsStrDecimalLiteral):
        (JSC::jsToNumber):
        (JSC::parseFloat):
        * wtf/DateMath.cpp:
        (WTF::equivalentYearForDST):
        (WTF::parseES5DateFromNullTerminatedCharacters):
        (WTF::parseDateFromNullTerminatedCharacters):
        (WTF::timeClip):
        (JSC::parseDateFromNullTerminatedCharacters):

2011-06-11  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=62503
        Remove JIT_OPTIMIZE_* switches

        The alternative code paths are untested, and not well maintained.
        These were useful when there was more churn in the JIT, but now
        are a maintenance overhead. Time to move on, removing.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitAggregate):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):
        (JSC::JIT::linkConstruct):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        * jit/JITCall32_64.cpp:
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::privateCompileCTINativeCall):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::privateCompileCTINativeCall):
        (JSC::JIT::softModulo):
        * jit/JITPropertyAccess.cpp:
        * jit/JITPropertyAccess32_64.cpp:
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
        * runtime/Lookup.h:
        * wtf/Platform.h:

2011-06-10  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=16777
        Eliminate JSC::NaN and JSC::Inf

        There's no good reason for -K-J-S- JSC to have its own NAN and infinity constants.
        The ones in std::numeric_limits are perfectly good.
        Remove JSC::Inf, JSC::NaN, switch some cases of (isnan || isinf) to !isfinite.

        * API/JSCallbackObjectFunctions.h:
        (JSC::::toNumber):
        * API/JSValueRef.cpp:
        (JSValueMakeNumber):
        (JSValueToNumber):
        * JavaScriptCore.exp:
        * runtime/CachedTranscendentalFunction.h:
        (JSC::CachedTranscendentalFunction::initialize):
        * runtime/DateConstructor.cpp:
        (JSC::constructDate):
        * runtime/DateInstanceCache.h:
        (JSC::DateInstanceData::DateInstanceData):
        (JSC::DateInstanceCache::reset):
        * runtime/JSCell.cpp:
        * runtime/JSCell.h:
        (JSC::JSCell::JSValue::getPrimitiveNumber):
        (JSC::JSCell::JSValue::toNumber):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::resetDateCache):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncParseInt):
        (JSC::globalFuncIsFinite):
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::toNumber):
        * runtime/JSValue.cpp:
        * runtime/JSValue.h:
        * runtime/JSValueInlineMethods.h:
        (JSC::jsNaN):
        * runtime/MathObject.cpp:
        (JSC::mathProtoFuncMax):
        (JSC::mathProtoFuncMin):
        * runtime/NumberConstructor.cpp:
        (JSC::numberConstructorNegInfinity):
        (JSC::numberConstructorPosInfinity):
        * runtime/NumberPrototype.cpp:
        (JSC::numberProtoFuncToExponential):
        (JSC::numberProtoFuncToFixed):
        (JSC::numberProtoFuncToPrecision):
        (JSC::numberProtoFuncToString):
        * runtime/UString.cpp:
        * wtf/DecimalNumber.h:
        (WTF::DecimalNumber::DecimalNumber):
        * wtf/dtoa.cpp:
        (WTF::dtoa):

2011-06-10  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        add a compile guard ENABLE(FLEXBOX)
        https://bugs.webkit.org/show_bug.cgi?id=62049

        * Configurations/FeatureDefines.xcconfig:

2011-06-10  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=55347
        "name" and "message" enumerable on *Error.prototype

        This arises from chapter 15 of the spec:
            "Every other property described in this clause has the attributes
            { [[Writable]]: true, [[Enumerable]]: false, [[Configurable]]: true }
            unless otherwise specified."
        Standardized properties are not enumerable.

        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        * runtime/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::NativeErrorPrototype):

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

        Build fix: Corrected header spelling.

        * heap/OldSpace.h:

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

        Reviewed by Oliver Hunt.

        Added OldSpace to the project
        https://bugs.webkit.org/show_bug.cgi?id=62417
        
        Currently unused.
        
        Added OldSpace, the ability to iterate NewSpace vs OldSpace, and a
        per-block flag for testing whether you're in NewSpace vs OldSpace.

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj: Build!

        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::inNewSpace):
        (JSC::MarkedBlock::setInNewSpace): Added inNewSpace flag, for use in
        write barrier.

        * heap/NewSpace.cpp:
        (JSC::NewSpace::addBlock):
        (JSC::NewSpace::removeBlock):
        * heap/NewSpace.h:
        (JSC::NewSpace::forEachBlock): Added forEachBlock, to use for
        NewSpace-specific operations.

        * heap/OldSpace.cpp: Added.
        (JSC::OldSpace::OldSpace):
        (JSC::OldSpace::addBlock):
        (JSC::OldSpace::removeBlock):
        * heap/OldSpace.h: Added.
        (JSC::OldSpace::forEachBlock): New class for holding promoted blocks.
        Not in use yet.

2011-06-09  Hyowon Kim  <hw1008.kim@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Make accelerated compositing build in Webkit-EFL
        https://bugs.webkit.org/show_bug.cgi?id=62361

        Add PLATFORM(EFL) to enable ACCELERATED_COMPOSITING on EFL port.

        * wtf/Platform.h:

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

        Reviewed by Geoff Garen.

        Bug 62405 - Fix integer overflow in Array.prototype.push

        Fix geoff's review comments re static_cast.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncPush):

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

        Reviewed by Oliver Hunt.

        Factored MarkedBlock set management into a helper class with a fast case Bloom filter
        https://bugs.webkit.org/show_bug.cgi?id=62413
        
        SunSpider reports a small speedup.
        
        This is in preparation for having ConservativeSet operate on arbitrary
        sets of MarkedBlocks, and in preparation for conservative scanning
        becoming proportionally more important than other GC activities.

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.xcodeproj/project.pbxproj: Build-o.

        * heap/ConservativeRoots.cpp:
        (JSC::ConservativeRoots::add):
        * heap/ConservativeRoots.h:
        (JSC::ConservativeRoots::ConservativeRoots): Operate on a MarkedBlockSet
        directly, instead of a Heap, so we can operate on subsets of the Heap
        instead.
        
        Use a TinyBloomFilter for single-cycle exclusion of most pointers. This
        is particularly important since we expect not to find our subject pointer
        in the MarkedBlock hash, and hash misses are more expensive than typical
        hash lookups because they have high collision rates.
        
        No need for single-pointer add() to be public anymore, since nobody uses it.

        * heap/Heap.cpp:
        (JSC::Heap::markRoots):
        * heap/Heap.h:
        (JSC::Heap::forEachCell):
        (JSC::Heap::forEachBlock): Use MarkedBlockSet since that's what
        ConservativeRoots relies on.
        
        Nixed contains(), since nobody uses it anymore.

        * heap/MarkedBlock.h:
        (WTF::MarkedBlockHash::hash): Added a faster hash taking advantage of
        the VM layout properties of MarkedBlocks.

        * heap/MarkedBlockSet.h: Added.
        (JSC::MarkedBlockSet::add):
        (JSC::MarkedBlockSet::remove):
        (JSC::MarkedBlockSet::recomputeFilter):
        (JSC::MarkedBlockSet::filter):
        (JSC::MarkedBlockSet::set):
        * heap/TinyBloomFilter.h: Added.
        (JSC::TinyBloomFilter::TinyBloomFilter):
        (JSC::TinyBloomFilter::add):
        (JSC::TinyBloomFilter::ruleOut): New helper class, used above.

        * interpreter/RegisterFile.cpp:
        (JSC::RegisterFile::gatherConservativeRoots): No need to specifically
        exclude values by tag -- the tiny bloom filter is already a register-register
        compare, so adding another "rule out" factor just slows things down.

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

        Reviewed by Oliver Hunt.

        Bug 62405 - Fix integer overflow in Array.prototype.push

        There are three integer overflows here, leading to safe (not a security risk)
        but incorrect (non-spec-compliant) behaviour.

        Two overflows occur when calculating the new length after pushing (one in the
        fast version of push in JSArray, one in the generic version in ArrayPrototype).
        The other occurs calculating indices to write to when multiple items are pushed.

        These errors result in three test-262 failures.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncPush):
        * runtime/JSArray.cpp:
        (JSC::JSArray::put):
        (JSC::JSArray::push):

2011-06-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Add Vector::reverse()
        https://bugs.webkit.org/show_bug.cgi?id=62393

        * wtf/Vector.h:
        (WTF::Vector::reverse): Added

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

        Reviewed by Oliver Hunt.

        Factored a bunch of Heap functionality into stand-alone functors
        https://bugs.webkit.org/show_bug.cgi?id=62337
        
        This is in preparation for making these functors operate on arbitrary
        sets of MarkedBlocks.

        * JavaScriptCore.exp: This file is a small tragedy.

        * debugger/Debugger.cpp:
        (JSC::Debugger::recompileAllJSFunctions): Updated for type change and rename.

        * heap/HandleHeap.h:
        (JSC::HandleHeap::forEachStrongHandle): New function for iterating all
        strong handles, so we can play along in the functor game.

        * heap/Heap.cpp:
        (JSC::CountFunctor::CountFunctor::CountFunctor):
        (JSC::CountFunctor::CountFunctor::count):
        (JSC::CountFunctor::CountFunctor::returnValue):
        (JSC::CountFunctor::ClearMarks::operator()):
        (JSC::CountFunctor::ResetAllocator::operator()):
        (JSC::CountFunctor::Sweep::operator()):
        (JSC::CountFunctor::MarkCount::operator()):
        (JSC::CountFunctor::Size::operator()):
        (JSC::CountFunctor::Capacity::operator()):
        (JSC::CountFunctor::Count::operator()):
        (JSC::CountFunctor::CountIfGlobalObject::operator()):
        (JSC::CountFunctor::TakeIfEmpty::TakeIfEmpty):
        (JSC::CountFunctor::TakeIfEmpty::operator()):
        (JSC::CountFunctor::TakeIfEmpty::returnValue):
        (JSC::CountFunctor::RecordType::RecordType):
        (JSC::CountFunctor::RecordType::typeName):
        (JSC::CountFunctor::RecordType::operator()):
        (JSC::CountFunctor::RecordType::returnValue): These functors factor out
        behavior that used to be in the functions below.

        (JSC::Heap::clearMarks):
        (JSC::Heap::sweep):
        (JSC::Heap::objectCount):
        (JSC::Heap::size):
        (JSC::Heap::capacity):
        (JSC::Heap::protectedGlobalObjectCount):
        (JSC::Heap::protectedObjectCount):
        (JSC::Heap::protectedObjectTypeCounts):
        (JSC::Heap::objectTypeCounts):
        (JSC::Heap::resetAllocator):
        (JSC::Heap::freeBlocks):
        (JSC::Heap::shrink): Factored out behavior into the functors above.

        * heap/Heap.h:
        (JSC::Heap::forEachProtectedCell):
        (JSC::Heap::forEachCell):
        (JSC::Heap::forEachBlock): Added forEach* iteration templates. I chose
        functor-based templates instead of plain iterators because they're simpler
        to implement in this case and they require a lot less code at the call site.

        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::VoidFunctor::returnValue): Default parent class for
        trivial functors.

        (JSC::MarkedBlock::forEachCell): Renamed forEach to forEachCell because
        we have a few different kind of "for each" now.

        * runtime/JSGlobalData.cpp:
        (WTF::Recompile::operator()):
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::recompileAllJSFunctions): Updated for type change and rename.

        * runtime/JSGlobalData.h: Removed globalObjectCount because it was unused.

2011-06-08  Mikołaj Małecki  <m.malecki@samsung.com>

        Reviewed by Pavel Feldman.

        Web Inspector: Crash by buffer overrun crash when serializing inspector object tree.
        https://bugs.webkit.org/show_bug.cgi?id=52791

        No new tests. The problem can be reproduced by trying to create InspectorValue
        from 1.0e-100 and call ->toJSONString() on this.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        export 2 functions DecimalNumber::bufferLengthForStringExponential and
        DecimalNumber::toStringExponential.

2011-06-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r88404.
        http://trac.webkit.org/changeset/88404
        https://bugs.webkit.org/show_bug.cgi?id=62342

        broke win and mac build (Requested by tony^work on #webkit).

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2011-06-08  Evan Martin  <evan@chromium.org>

        Reviewed by Adam Barth.

        [chromium] use gyp 'settings' type for settings target
        https://bugs.webkit.org/show_bug.cgi?id=62323

        The 'settings' gyp target type is for targets that exist solely
        for their settings (no build rules).  The comment above this target
        says it's for this, but it incorrectly uses 'none'.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2011-06-08  Sailesh Agrawal  <sail@chromium.org>

        Reviewed by Mihai Parparita.

        Chromium Mac: Enable overlay scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=59756

        Enable WTF_USE_WK_SCROLLBAR_PAINTER for Chromium Mac. This allows us to use overlay scrollbars on future versions of Mac OS X.

        * wtf/Platform.h:

2011-06-08  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Add faster lookup cache for multi character identifiers
        https://bugs.webkit.org/show_bug.cgi?id=62327

        Add a non-hash lookup for mutiple character identifiers.  This saves us from
        adding repeated identifiers to the ParserArena's identifier list as people
        tend to not start all their variables and properties with the same character
        and happily identifier locality works in our favour.

        * parser/ParserArena.h:
        (JSC::IdentifierArena::isEmpty):
        (JSC::IdentifierArena::clear):
        (JSC::IdentifierArena::makeIdentifier):

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

        Reviewed by Oliver Hunt.

        Took some responsibilities away from NewSpace
        https://bugs.webkit.org/show_bug.cgi?id=62325
        
        NewSpace is basically just an allocator now.
        
        Heap acts as a controller, responsible for managing the set of all
        MarkedBlocks.
        
        This is in preparation for moving parts of the controller logic into
        separate helper classes that can act on arbitrary sets of MarkedBlocks
        that may or may not be in NewSpace.

        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::destroy):
        (JSC::Heap::allocate):
        (JSC::Heap::markRoots):
        (JSC::Heap::clearMarks):
        (JSC::Heap::sweep):
        (JSC::Heap::objectCount):
        (JSC::Heap::size):
        (JSC::Heap::capacity):
        (JSC::Heap::collect):
        (JSC::Heap::resetAllocator):
        (JSC::Heap::allocateBlock):
        (JSC::Heap::freeBlocks):
        (JSC::Heap::shrink): Moved the set of MarkedBlocks from NewSpace to Heap,
        along with all functions that operate on the set of MarkedBlocks. Also
        moved responsibility for deciding whether to allocate a new MarkedBlock,
        and for allocating it.

        * heap/Heap.h:
        (JSC::Heap::contains):
        (JSC::Heap::forEach): Ditto.

        * heap/NewSpace.cpp:
        (JSC::NewSpace::addBlock):
        (JSC::NewSpace::removeBlock):
        (JSC::NewSpace::resetAllocator):
        * heap/NewSpace.h:
        (JSC::NewSpace::waterMark):
        (JSC::NewSpace::allocate): Ditto.

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

        Reviewed by Oliver Hunt.

        Some more MarkedSpace => NewSpace renaming
        https://bugs.webkit.org/show_bug.cgi?id=62305

        * JavaScriptCore.exp:
        * JavaScriptCore.order:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * heap/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::destroy):
        (JSC::Heap::reportExtraMemoryCostSlowCase):
        (JSC::Heap::allocate):
        (JSC::Heap::markRoots):
        (JSC::Heap::objectCount):
        (JSC::Heap::size):
        (JSC::Heap::capacity):
        (JSC::Heap::collect):
        (JSC::Heap::isValidAllocation):
        * heap/Heap.h:
        (JSC::Heap::markedSpace):
        (JSC::Heap::contains):
        (JSC::Heap::forEach):
        (JSC::Heap::allocate):
        * runtime/JSCell.h:

2011-06-08  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Eric Seidel.

        Add export macros to profiler headers.
        https://bugs.webkit.org/show_bug.cgi?id=27551

        * profiler/Profiler.h:

2011-06-08  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Eric Seidel.

        Add export symbols to parser headers.
        https://bugs.webkit.org/show_bug.cgi?id=27551

        * parser/SourceProviderCache.h:

2011-06-08  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Eric Seidel.

        Add export symbols to interpreter headers.
        https://bugs.webkit.org/show_bug.cgi?id=27551

        * interpreter/Interpreter.h:

2011-06-08  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Eric Seidel.

        Add export symbols to debugger headers.
        https://bugs.webkit.org/show_bug.cgi?id=27551

        * debugger/Debugger.h:
        * debugger/DebuggerCallFrame.h:

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

        Reviewed by Darin Adler.

        Moved MarkedSpace.* to NewSpace.* in preparation for more renaming
        https://bugs.webkit.org/show_bug.cgi?id=62268

        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/Heap.h:
        * heap/MarkedBlock.h:
        * heap/MarkedSpace.cpp: Removed.
        * heap/MarkedSpace.h: Removed.
        * heap/NewSpace.cpp: Copied from Source/JavaScriptCore/heap/MarkedSpace.cpp.
        * heap/NewSpace.h: Copied from Source/JavaScriptCore/heap/MarkedSpace.h.

2011-06-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r88365.
        http://trac.webkit.org/changeset/88365
        https://bugs.webkit.org/show_bug.cgi?id=62301

        windows bots broken (Requested by loislo_ on #webkit).

        * JavaScriptCore.exp:

2011-06-08  Ryan Sleevi  <rsleevi@chromium.org>

        Reviewed by Tony Chang.

        Suppress C++0x compat warnings when compiling Chromium port with GCC 4.6

        Compiling Chromium port under GCC 4.6 produces warnings about nullptr
        https://bugs.webkit.org/show_bug.cgi?id=62242

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2011-06-08  Ademar de Souza Reis Jr.  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        Webkit on SPARC Solaris has wrong endian
        https://bugs.webkit.org/show_bug.cgi?id=29407

        Bug 57256 fixed one crash on misaligned reads on sparc/solaris, but
        there are more ocurrences of the same code pattern in webkit.

        This patch includes the check on these other parts of the code.

        This is a speculative fix, I don't have a sparc machine to test and
        don't know which kind of test would trigger a crash (but it's quite
        obvious that it's the same code duplicated in different files).

        * runtime/UString.h:
        (JSC::UStringHash::equal):
        * wtf/text/StringHash.h:
        (WTF::StringHash::equal):

2011-06-08  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Build fix for building QtWebKit inside of Qt.
        https://bugs.webkit.org/show_bug.cgi?id=62280

        Remove CONFIG=staticlib, because it causes the configure script to add -ljavascriptcore
        into QtWebKit.prl.

        No new tests, as this is just a build fix.

        * JavaScriptCore.pri:

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

        Reviewed by Oliver Hunt.

        Split 'reset' into 'collect' and 'resetAllocator'
        https://bugs.webkit.org/show_bug.cgi?id=62267

        * heap/Heap.cpp:
        (JSC::Heap::allocate):
        (JSC::Heap::collectAllGarbage):
        (JSC::Heap::collect):
        * heap/Heap.h:
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::resetAllocator):
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::resetAllocator):
        * heap/MarkedSpace.h:
        (JSC::MarkedSpace::SizeClass::resetAllocator):

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

        Reviewed by Sam Weinig.

        Renamed some more marks to visits
        https://bugs.webkit.org/show_bug.cgi?id=62254

        * heap/HandleHeap.cpp:
        (JSC::HandleHeap::visitStrongHandles):
        (JSC::HandleHeap::visitWeakHandles):
        * heap/HandleHeap.h:
        * heap/HandleStack.cpp:
        (JSC::HandleStack::visit):
        * heap/HandleStack.h:
        * heap/Heap.cpp:
        (JSC::Heap::markProtectedObjects):
        (JSC::Heap::markTempSortVectors):
        (JSC::Heap::markRoots):
        * heap/HeapRootVisitor.h:
        (JSC::HeapRootVisitor::visit):
        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBuffer::markLists):

2011-06-07  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig

        https://bugs.webkit.org/show_bug.cgi?id=55537
        Functions claim to have 'callee' which they actually don't (and shouldn't)

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::getOwnPropertyNames):

2011-06-07  Juan C. Montemayor  <jmont@apple.com>

        Reviewed by Darin Adler.

        Make JSStaticFunction and JSStaticValue less "const"
        https://bugs.webkit.org/show_bug.cgi?id=62222

        * API/JSObjectRef.h:
        * API/tests/testapi.c:
        (checkConstnessInJSObjectNames):
        (main):
        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-06-07  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=62240
        DFG JIT - add support for for-loop array initialization.

        Support put by val beyond vector length.
        Add a operationPutByValBeyondArrayBounds operation, make
        PutValVal call this if the vector length check fails.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::silentSpillGPR):
        (JSC::DFG::JITCodeGenerator::silentFillGPR):
        (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters):
        (JSC::DFG::JITCodeGenerator::isDoubleConstantWithInt32Value):
        (JSC::DFG::JITCodeGenerator::isJSConstantWithInt32Value):
        (JSC::DFG::JITCodeGenerator::isIntegerConstant):
        (JSC::DFG::JITCodeGenerator::valueOfIntegerConstant):
        * dfg/DFGOperations.cpp:
        (JSC::DFG::operationPutByValInternal):
        * dfg/DFGOperations.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:

2011-06-06  James Simonsen  <simonjam@chromium.org>

        Reviewed by James Robinson.

        Add monotonicallyIncreasingTime() to get monotonically increasing time
        https://bugs.webkit.org/show_bug.cgi?id=37743

        * wtf/CurrentTime.cpp: Add monotonicallyIncreasingTime() for mac and a fallback implementation that just wraps currentTime().
        (WTF::monotonicallyIncreasingTime):
        * wtf/CurrentTime.h: Add monotonicallyIncreasingTime().

2011-06-06  Alexandru Chiculita  <achicu@adobe.com>

        Reviewed by Kent Tamura.

        Add ENABLE_CSS_EXCLUSIONS support for build-webkit script
        https://bugs.webkit.org/show_bug.cgi?id=61628

        * Configurations/FeatureDefines.xcconfig:

2011-06-06  Mihnea Ovidenie  <mihnea@adobe.com>

        Reviewed by Kent Tamura.

        Add ENABLE(CSS_REGIONS) guard for CSS Regions support
        https://bugs.webkit.org/show_bug.cgi?id=61631

        * Configurations/FeatureDefines.xcconfig:

2011-06-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Unreviewed. Fix the GTK+ build.

        * GNUmakefile.am: Add javascriptcore_cflags variable.

2011-06-04  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Unreviewed build fix. Restore the PPC build and allow users to specify architectures
        to build on Mac.

        * wtf/Platform.h:

2011-06-04  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed, MIPS build fix.

        WebKitGTK+ tarball fails to build on MIPS.
        https://buildd.debian.org/status/fetch.php?pkg=webkitgtk%2B&arch=mips&ver=1.4.0-1&stamp=1304786691

        * GNUmakefile.list.am: Add missing MIPS-related file to the list
        of files that are added to the tarball on make dist, and fix
        sorting.

2011-06-04  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Fix formatting of the output generated by KeywordLookupGenerator.py
        https://bugs.webkit.org/show_bug.cgi?id=62083

        - Uses correct year for copyright.
        - Puts ending brace on same line as "else if"
        - Puts starting brace of function on its own line.
        - Adds some tasteful whitespace.
        - Adds comments to make clear that scopes are ending
        - Make macros actually split on two lines.

        * KeywordLookupGenerator.py:

2011-06-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        KeywordLookupGenerator.py spams stdout in Chromium Linux build
        https://bugs.webkit.org/show_bug.cgi?id=62087

        This action does not appear to be needed.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2011-06-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Lexer needs to provide Identifier for reserved words
        https://bugs.webkit.org/show_bug.cgi?id=62086

        Alas it is necessary to provide an Identifier reference for keywords
        so that we can do the right thing when they're used in object literals.
        We now keep Identifiers for all reserved words in the CommonIdentifiers
        structure so that we can access them without a hash lookup.

        * KeywordLookupGenerator.py:
        * parser/Lexer.cpp:
        (JSC::Lexer::parseIdentifier):
        * parser/Lexer.h:
        * runtime/CommonIdentifiers.cpp:
        (JSC::CommonIdentifiers::CommonIdentifiers):
        * runtime/CommonIdentifiers.h:

2011-06-03  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Add debug code to break on speculation failures.

        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGNode.h:

2011-06-03  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=62082
        DFG JIT - bug passing arguments that need swap

        This is really just a typo.
        When setting up the arguments for a call out to a C operation, we'll
        fail to swap arguments where this is necessary. For example, in the
        case of 2 arg calls, where the first argument is in %rdx & the second
        is in %rsi we should swap (exec will be passed in %rdi), but we don't.

        This can also affect function calls passing three arguments.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::setupTwoStubArgs):
            - Call swap with the correct arguments.

2011-06-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Force inlining of some hot lexer functions
        https://bugs.webkit.org/show_bug.cgi?id=62079

        Fix more GCC stupidity

        * parser/Lexer.h:
        (JSC::Lexer::isWhiteSpace):
        (JSC::Lexer::isLineTerminator):

2011-06-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        GCC not inlining some functions that it really should be
        https://bugs.webkit.org/show_bug.cgi?id=62075

        Add ALWAYS_INLINE to a number of parsing and lexing functions
        that should always be inlined.  This gets us ~1.4% on my ad hoc
        parser test.

        * KeywordLookupGenerator.py:
        * parser/JSParser.cpp:
        (JSC::JSParser::next):
        (JSC::JSParser::nextTokenIsColon):
        (JSC::JSParser::consume):
        (JSC::JSParser::match):
        (JSC::JSParser::tokenStart):
        (JSC::JSParser::tokenLine):
        (JSC::JSParser::tokenEnd):
        * parser/Lexer.cpp:
        (JSC::isIdentPart):

2011-06-03  Oliver Hunt  <oliver@apple.com>

        Whoops, fix last minute bug.

        * parser/Lexer.cpp:
        (JSC::Lexer::parseIdentifier):

2011-06-03  Martin Robinson  <mrobinson@igalia.com>

        Try to fix the GTK+ build.

        * GNUmakefile.am: Clean up some spaces that should be tabs.
        * GNUmakefile.list.am: Add KeywordLookup.h to the source list
        and clean up some spaces that should be tabs.

2011-06-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Improve keyword lookup
        https://bugs.webkit.org/show_bug.cgi?id=61913

        Rather than doing multiple hash lookups as we currently
        do when trying to identify keywords we now use an 
        automatically generated decision tree (essentially it's
        a hard coded patricia trie).  We still use the regular
        lookup table for the last few characters of an input as
        this allows us to completely skip all bounds checks.

        * CMakeLists.txt:
        * DerivedSources.make:
        * DerivedSources.pro:
        * GNUmakefile.am:
        * JavaScriptCore.gyp/JavaScriptCore.gyp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * KeywordLookupGenerator.py: Added.
        * make-generated-sources.sh:
        * parser/Lexer.cpp:
        (JSC::Lexer::internalShift):
        (JSC::Lexer::shift):
        (JSC::Lexer::parseIdentifier):
        * parser/Lexer.h:

2011-06-03  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Benjamin Poulain.

        [Qt] Build flag for experimental ICU library support
        https://bugs.webkit.org/show_bug.cgi?id=60786

        Adds a build-time flag (CONFIG+=use_system_icu) that enables experimental 
        ICU powered Unicode support. 

        * JavaScriptCore.pri: Support for use_system_icu CONFIG flag.
        * wtf/unicode/qt4/UnicodeQt4.h: Guard an include file with USE(ICU_UNICODE). 

2011-06-03  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Benjamin Poulain.

        [Qt] Build fix of QtWebKit 2.2 when inside Qt tree with GCC 4.6.
        https://bugs.webkit.org/show_bug.cgi?id=61957

        When building inside the Qt source tree, qmake always append the mkspecs
        defines after ours. We have to workaround and make sure that we append 
        our flags after the qmake variable used inside Qt. This workaround was provided 
        by our qmake folks. We need to append in both case because qmake behave differently
        when called with -spec or via SUBDIR+=. This patch unbreak r87950 on Mac for Qt port.

        * JavaScriptCore.pro:

2011-06-02  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Adam Barth.

        Added a method to generate RFC 2822 compliant date strings.
        https://bugs.webkit.org/show_bug.cgi?id=7169

        * wtf/DateMath.cpp:
        (WTF::twoDigitStringFromNumber):
        (WTF::makeRFC2822DateString):
        * wtf/DateMath.h:

2011-06-02  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] Build fix of QtWebKit 2.2 when inside Qt tree with GCC 4.6.
        https://bugs.webkit.org/show_bug.cgi?id=61957

        When building inside the Qt source tree, qmake always append the mkspecs
        defines after ours. We have to workaround and make sure that we append  
        our flags after the qmake variable used inside Qt. This workaround was provided
        by our qmake folks.

        * JavaScriptCore.pro:

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

        Reviewed by Geoffrey Garen.

        Add single character lookup cache to IdentifierArena
        https://bugs.webkit.org/show_bug.cgi?id=61879

        Add a simple lookup cache for single ascii character
        identifiers.  Produces around a 2% improvement in parse
        time for my adhoc parser test.

        * parser/ParserArena.h:
        (JSC::IdentifierArena::IdentifierArena):
        (JSC::IdentifierArena::clear):
        (JSC::IdentifierArena::makeIdentifier):

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

        Reviewed by Geoffrey Garen.

        Freezing a function and its prototype causes browser to crash.
        https://bugs.webkit.org/show_bug.cgi?id=61758

        Make JSObject::preventExtensions virtual so that we can override it
        and instantiate all lazy

        * JavaScriptCore.exp:
        * runtime/JSFunction.cpp:
        (JSC::createPrototypeProperty):
        (JSC::JSFunction::preventExtensions):
        (JSC::JSFunction::getOwnPropertySlot):
        * runtime/JSFunction.h:
        * runtime/JSObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::seal):
        (JSC::JSObject::seal):

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

        Unreviewed, rolling out r87788.
        http://trac.webkit.org/changeset/87788
        https://bugs.webkit.org/show_bug.cgi?id=61856

        breaks windows chromium canary (Requested by jknotten on
        #webkit).

        * wtf/DateMath.cpp:
        (WTF::timeClip):
        * wtf/DateMath.h:

2011-06-01  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Adam Barth.

        Added a method to generate RFC 2822 compliant date strings.
        https://bugs.webkit.org/show_bug.cgi?id=7169

        * wtf/DateMath.cpp:
        (WTF::twoDigitStringFromNumber):
        (WTF::makeRFC2822DateString):
        * wtf/DateMath.h:

2011-05-31  Yong Li  <yoli@rim.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=54807
        We have been assuming plain bitfields (like "int a : 31") are always signed integers.
        However some compilers can treat them as unsigned. For example, RVCT 4.0 states plain
        bitfields (declared without either signed or unsigned qualifiers) are treats as unsigned.
        http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0348c/Babjddhe.html
        Although we can use "--signed-bitfields" flag to make RVCT 4.0 behave as most other compilers,
        always using "signed"/"unsigned" qualifier to declare integral type bitfields is still a good
        rule we should have in order to make our code independent from compilers and compiler flags.

        No new test added because this change is not known to fix any issue.

        * bytecode/StructureStubInfo.h:

2011-05-30  Hojong Han  <hojong.han@samsung.com>

        Reviewed by Geoffrey Garen.

        [JSC] malfunction during arithmetic condition check with negative number (-2147483648)
        https://bugs.webkit.org/show_bug.cgi?id=61416

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::branch32):
        * tests/mozilla/ecma/Expressions/11.12-1.js:
        (getTestCases):

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

        Reviewed by Sam Weinig.

        Some heap refactoring
        https://bugs.webkit.org/show_bug.cgi?id=61704
        
        SunSpider says no change.

        * JavaScriptCore.exp: Export!

        * heap/Heap.cpp: COLLECT_ON_EVERY_ALLOCATION can actually do so now.

        (JSC::Heap::Heap): Changed Heap sub-objects to point to the heap.

        (JSC::Heap::allocate): Changed inline allocation code to only select the
        size class, since this can be optimized out at compile time -- everything
        else is now inlined into this out-of-line function.
        
        No need to duplicate ASSERTs made in our caller.

        * heap/Heap.h:
        (JSC::Heap::heap):
        (JSC::Heap::isMarked):
        (JSC::Heap::testAndSetMarked):
        (JSC::Heap::testAndClearMarked):
        (JSC::Heap::setMarked): Call directly into MarkedBlock instead of adding
        a layer of indirection through MarkedSpace.

        (JSC::Heap::allocate): See above.

        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::create):
        (JSC::MarkedBlock::MarkedBlock):
        * heap/MarkedBlock.h: Changed Heap sub-objects to point to the heap.

        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::allocateBlock):
        * heap/MarkedSpace.h:
        (JSC::MarkedSpace::allocate): Updated to match changes above.

2011-05-28  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX when building only the interpreter

        Fixes the following compiler warning:

            JavaScriptCore/runtime/JSGlobalData.cpp:462:6: error: no previous prototype for function 'releaseExecutableMemory' [-Werror,-Wmissing-prototypes,3]
             void releaseExecutableMemory(JSGlobalData& globalData)
                  ^

        * jit/ExecutableAllocator.h: Moved declaration of
        JSC::releaseExecutableMemory().

2011-05-28  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX after r87527 with ENABLE(BRANCH_COMPACTION)

        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::linkCode): Added missing argument.

2011-05-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        JS API is too aggressive about throwing exceptions for NULL get or set operations
        https://bugs.webkit.org/show_bug.cgi?id=61678

        * API/JSCallbackObject.h: Changed our staticValueGetter to a regular
        function that returns a JSValue, so it can fail and still forward to
        normal property lookup.

        * API/JSCallbackObjectFunctions.h:
        (JSC::::getOwnPropertySlot): Don't throw an exception when failing to
        access a static property -- just forward the access. This allows objects
        to observe get/set operations but still let the JS object manage lifetime.

        (JSC::::put): Ditto.

        (JSC::::getStaticValue): Same as JSCallbackObject.h.

        * API/tests/testapi.c:
        (MyObject_set_nullGetForwardSet):
        * API/tests/testapi.js: Updated tests to reflect slightly less strict
        behavior, which matches headerdoc claims.

2011-05-27  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Property caching is too aggressive for API objects
        https://bugs.webkit.org/show_bug.cgi?id=61677

        * API/JSCallbackObject.h: Opt in to ProhibitsPropertyCaching, since our
        callback APIs allow the client to change its mind about our propertis at
        any time.

        * API/tests/testapi.c:
        (PropertyCatchalls_getProperty):
        (PropertyCatchalls_setProperty):
        (PropertyCatchalls_getPropertyNames):
        (PropertyCatchalls_class):
        (main):
        * API/tests/testapi.js: Some tests for dynamic API objects.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::tryCachePutByID):
        (JSC::Interpreter::tryCacheGetByID):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCachePutByID):
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::DEFINE_STUB_FUNCTION): Opt out of property caching if the client
        requires it.

        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::TypeInfo):
        (JSC::TypeInfo::isFinal):
        (JSC::TypeInfo::prohibitsPropertyCaching):
        (JSC::TypeInfo::flags): Added a flag to track opting out of property
        caching. Fixed an "&&" vs "&" typo that was previously harmless, but
        is now harmful since m_flags2 can have more than one bit set.

2011-05-27  Stephanie Lewis  <slewis@apple.com>

        Unreviewed.

        Fix a typo in the order_file flag.

        * Configurations/Base.xcconfig:

2011-05-27  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed. Build fix for !ENABLE(ASSEMBLER) after r87527.

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

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

        Reviewed by Geoffrey Garen.

        Add a few validity assertions to JSCallbackObject
        https://bugs.webkit.org/show_bug.cgi?id=61659

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::visitChildren):

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

        Build fix

        * runtime/RegExpCache.cpp:
        (JSC::RegExpCache::invalidateCode):

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

        Reviewed by Geoffrey Garen.

        Try to release unused executable memory when the FixedVMPool allocator is under pressure
        https://bugs.webkit.org/show_bug.cgi?id=61651

        Rather than crashing when full the FixedVMPool allocator now returns a null
        allocation.  We replace the code that used to CRASH() on null allocations
        with logic that asks the provided globalData to release any executable memory
        that it can.  Currently this just means throwing away all regexp code, but
        in future we'll try to be more aggressive.

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::executableCopy):
        * assembler/ARMAssembler.h:
        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::executableCopy):
        * assembler/AssemblerBufferWithConstantPool.h:
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::LinkBuffer):
        (JSC::LinkBuffer::linkCode):
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::executableCopy):
        * assembler/SH4Assembler.h:
        (JSC::SH4Assembler::executableCopy):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::executableCopy):
        (JSC::X86Assembler::X86InstructionFormatter::executableCopy):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileFunction):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutablePool::create):
        (JSC::ExecutablePool::alloc):
        (JSC::ExecutableAllocator::ExecutableAllocator):
        (JSC::ExecutableAllocator::poolForSize):
        (JSC::ExecutablePool::ExecutablePool):
        (JSC::ExecutablePool::poolAllocate):
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolAllocator::alloc):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * 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/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::finalize):
        * jit/ThunkGenerators.cpp:
        (JSC::charCodeAtThunkGenerator):
        (JSC::charAtThunkGenerator):
        (JSC::fromCharCodeThunkGenerator):
        (JSC::sqrtThunkGenerator):
        (JSC::powThunkGenerator):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::releaseExecutableMemory):
        (JSC::releaseExecutableMemory):
        * runtime/JSGlobalData.h:
        * runtime/RegExpCache.cpp:
        (JSC::RegExpCache::invalidateCode):
        * runtime/RegExpCache.h:
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::compile):

2011-05-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Optimized ConservativeSet to avoid double-visiting objects
        https://bugs.webkit.org/show_bug.cgi?id=61592
        
        SunSpider thinks this might be a 1% speedup

        * heap/ConservativeRoots.h:
        (JSC::ConservativeRoots::add): Use testAndClearMarked to avoid double-visiting
        an object.

        * heap/Heap.h:
        (JSC::Heap::isMarked):
        (JSC::Heap::testAndSetMarked):
        (JSC::Heap::testAndClearMarked):
        (JSC::Heap::setMarked): Added testAndClearMarked. Changed argument type
        to void*, since clients want to ask questions about arbitrary pointers
        into the heap, even when they aren't known to be JSCells.

        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::testAndClearMarked):
        * heap/MarkedSpace.h:
        (JSC::MarkedSpace::isMarked):
        (JSC::MarkedSpace::testAndSetMarked):
        (JSC::MarkedSpace::testAndClearMarked):
        (JSC::MarkedSpace::setMarked):
        (JSC::MarkedSpace::contains): Ditto.

        * wtf/Bitmap.h:
        (WTF::::testAndClear): New function for ConservativeRoots's inverted
        marking pass.

2011-05-27  Stephanie Lewis  <slewis@apple.com>

        Rubber Stamped by Adam Roben.

        Update Order Files.  Use -order_file flag since it can order more of the binary.

        * Configurations/Base.xcconfig:
        * JavaScriptCore.order:

2011-05-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Renamed heapRootMarker to heapRootVisitor to match its class name
        https://bugs.webkit.org/show_bug.cgi?id=61584

        * heap/Heap.cpp:
        (JSC::Heap::markProtectedObjects):
        (JSC::Heap::markTempSortVectors):
        (JSC::Heap::markRoots):

2011-05-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed some interdependency between Heap and SmallStrings by simplifying
        the SmallStrings lifetime model
        https://bugs.webkit.org/show_bug.cgi?id=61579
        
        SunSpider reports no change.
        
        Using Weak<T> could accomplish this too, but we're not sure it will give
        us the performance we need. This is a first step, and it accomplishes
        most of the value of using Weak<T>.

        * heap/Heap.cpp:
        (JSC::Heap::destroy):
        (JSC::Heap::markRoots):
        (JSC::Heap::reset): Finalize small strings just like other weak handles.

        * runtime/SmallStrings.cpp:
        (JSC::finalize):
        (JSC::SmallStrings::finalizeSmallStrings):
        * runtime/SmallStrings.h: Make all small strings trivially weak, instead
        of having an "all for one, one for all" memory model.

2011-05-26  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make RegExpCache a weak map
        https://bugs.webkit.org/show_bug.cgi?id=61554

        Switch to a weak map for the regexp cache, and hide that
        behaviour behind RegExp::create.

        When a RegExp is compiled it attempts to add itself to
        the "strong" cache.  This cache is a simple round-robin
        buffer as was the old strong cache.  Happily this can
        be smaller than the old strong cache as RegExps are only
        added when they're compiled so it is under less pressure
        to evict.

        * bytecompiler/NodesCodegen.cpp:
        (JSC::RegExpNode::emitBytecode):
        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::create):
        (JSC::RegExp::match):
        * runtime/RegExp.h:
        (JSC::RegExp::gcShouldInvalidateCode):
        (JSC::RegExp::hasCode):
        (JSC::RegExp::key):
        * runtime/RegExpCache.cpp:
        (JSC::RegExpCache::lookupOrCreate):
        (JSC::RegExpCache::RegExpCache):
        (JSC::RegExpCache::isReachableFromOpaqueRoots):
        (JSC::RegExpCache::finalize):
        * runtime/RegExpCache.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::constructRegExp):
        * runtime/RegExpPrototype.cpp:
        (JSC::regExpProtoFuncCompile):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):

2011-05-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Moved Heap-related functions out of JSCell.h and into respective header files
        https://bugs.webkit.org/show_bug.cgi?id=61567

        * heap/Heap.h:
        (JSC::Heap::allocate):
        (JSC::Heap::heap):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::allocate):
        * heap/MarkedSpace.h:
        (JSC::MarkedSpace::sizeClassFor):
        (JSC::MarkedSpace::allocate):
        * runtime/JSCell.h:
        (JSC::JSCell::destructor):

2011-05-26  Geoffrey Garen  <ggaren@apple.com>

        Try to fix Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-05-26  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        [debug feature] WTFString should have show() method
        https://bugs.webkit.org/show_bug.cgi?id=61149

        Added String::show and AtomicString::show in NDEBUG.

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

2011-05-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Geoffrey Garen.

        Factored out some Heap ASSERTs
        https://bugs.webkit.org/show_bug.cgi?id=61565

        * JavaScriptCore.exp:
        * heap/Heap.cpp:
        (JSC::isValidSharedInstanceThreadState):
        (JSC::isValidThreadState):
        (JSC::Heap::markRoots):
        (JSC::Heap::isValidAllocation):
        * heap/Heap.h:
        * runtime/JSCell.h:
        (JSC::JSCell::Heap::allocate):

2011-05-26  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=61508
        DFG JIT - Add support for get by id self caching.

        Change the call out to be an unexpected call (using silent spill/fill functions),
        add a structure check & compact load to the JIT code, and add repatching mechanisms.
        Since DFGOperations may want to be be implemented in asm, make these symbols be extern
        "C". Add an asm wrapper to pass the return address to the optimizing get-by-id operation,
        so that it can look up its StructureStubInfo.

        * JavaScriptCore.xcodeproj/project.pbxproj:
            - Added new files.
        * bytecode/StructureStubInfo.h:
            - Added 'unset' entries to union.
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::appendCallWithExceptionCheck):
            - Return the call, we need this to populate the StructureStubInfo.
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileFunction):
            - Populate the CodebBlock's StructureStubInfo Vector.
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::appendCallWithExceptionCheck):
            - Return the call, we need this to populate the StructureStubInfo.
        (JSC::DFG::JITCompiler::addPropertyAccess):
        (JSC::DFG::JITCompiler::PropertyAccessRecord::PropertyAccessRecord):
            - Add structures to record property access info during compilation.
        * dfg/DFGOperations.cpp:
            - Made all external methods extern "C".
        (JSC::DFG::operationPutByValInternal):
            - Moved outside of the extern "C" block.
        * dfg/DFGOperations.h:
            - Made all external methods extern "C".
        * dfg/DFGRepatch.cpp: Added.
        (JSC::DFG::dfgRepatchCall):
            - repatch a call to link to a new callee function.
        (JSC::DFG::dfgRepatchGetByIdSelf):
            - Modify the JIT code to optimize self accesses.
        (JSC::DFG::tryCacheGetByID):
            - Internal implementation of dfgRepatchGetByID (factor out failing cases).
        (JSC::DFG::dfgRepatchGetByID):
            - Used to optimize 'operationGetByIdOptimize' - repatches to 'operationGetById', and tries to optimize self accesses!
        * dfg/DFGRepatch.h: Added.
            - Expose dfgRepatchGetByID.
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
            - Changed implementation of GetById ops.

2011-05-26  Geoffrey Garen  <ggaren@apple.com>

        Rolled back in http://trac.webkit.org/changeset/87408 with Windows build fixed.

        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock):
        * heap/MarkedBlock.h:
        * wtf/DoublyLinkedList.h:
        (WTF::::DoublyLinkedListNode):
        (WTF::::setPrev):
        (WTF::::setNext):
        (WTF::::prev):
        (WTF::::next):
        (WTF::::DoublyLinkedList):
        (WTF::::isEmpty):
        (WTF::::size):
        (WTF::::clear):
        (WTF::::head):
        (WTF::::append):
        (WTF::::remove):
        (WTF::::removeHead):

2011-05-26  Geoffrey Garen  <ggaren@apple.com>

        Rolled out http://trac.webkit.org/changeset/87408 because it broke the
        Windows build.

        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock):
        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::setPrev):
        (JSC::MarkedBlock::setNext):
        (JSC::MarkedBlock::prev):
        (JSC::MarkedBlock::next):
        * wtf/DoublyLinkedList.h:
        (WTF::::DoublyLinkedList):
        (WTF::::isEmpty):
        (WTF::::head):
        (WTF::::append):
        (WTF::::remove):

2011-05-26  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Provide a real owner when copying a property table, for the sake of
        write barriers.
        https://bugs.webkit.org/show_bug.cgi?id=61547
        
        No test because we can't enable the writeBarrier() ASSERT just yet.

        * runtime/Structure.cpp:
        (JSC::Structure::addPropertyTransition):

2011-05-26  Adam Roben  <aroben@apple.com>

        Windows build fix after r87346

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Fixed up exports to match
        reality.

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

        Reviewed by Adam Barth.

        ASSERT(isMainThread()) when using single threaded jsc executable
        https://bugs.webkit.org/show_bug.cgi?id=60846

        Remove the ASSERT since we do not have the concept of MainThread in JSC.

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

2011-05-25  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

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

        Move the silent spill/fill methods in the DFG JIT to the JITCodeGenerator
        so that they are available to the SpeculativeJIT.

        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::silentSpillGPR):
        (JSC::DFG::JITCodeGenerator::silentSpillFPR):
        (JSC::DFG::JITCodeGenerator::silentFillGPR):
        (JSC::DFG::JITCodeGenerator::silentFillFPR):
        (JSC::DFG::JITCodeGenerator::silentSpillAllRegisters):
        (JSC::DFG::JITCodeGenerator::silentFillAllRegisters):
        * dfg/DFGNonSpeculativeJIT.h:

2011-05-25  Ryosuke Niwa  <rniwa@webkit.org>

        An attempt to revive Windows bots.

        * runtime/RegExp.cpp:
        * runtime/RegExp.h:

2011-05-25  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 61503 - Move population of CodeBlock::m_structureStubInfos into JIT

        This data structure, used at runtime by the JIT, is currently unnecessarily populated
        with default entries during byte compilation.

        Aside from meaning that there is JIT specific code in the bytecompiler, this also ties
        us to one entry per corresponding bytecode op, which may be undesirable. Instead,
        populate this array from the JIT.

        The type StructureStubInfo has two unused states, one for gets & one for puts. Unify
        these, so that the class can have a default constructor (and to simply switch statements
        in code walking over the table).

        This change has ramification for the DFG JIT, in that the DFG JIT used this datastructure
        to check for functions containing property access. Instead do so in the DFGByteCodeParser.

        * bytecode/CodeBlock.cpp:
        (JSC::printStructureStubInfo):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::setNumberOfStructureStubInfos):
        (JSC::CodeBlock::numberOfStructureStubInfos):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::deref):
        (JSC::StructureStubInfo::visitAggregate):
        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::StructureStubInfo):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitGetById):
        (JSC::BytecodeGenerator::emitPutById):
        (JSC::BytecodeGenerator::emitDirectPutById):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parseBlock):
        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        (JSC::JIT::privateCompileMainPass):
        (JSC::JIT::privateCompileSlowCases):
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        (JSC::JIT::emitSlow_op_put_by_id):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emitSlow_op_get_by_id):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        * runtime/Executable.cpp:
        (JSC::tryDFGCompile):

2011-05-25  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 61501 - Unify AbstractMacroAssembler::differenceBetween methods.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::Call::Call):
        (JSC::AbstractMacroAssembler::Call::fromTailJump):
        (JSC::AbstractMacroAssembler::Jump::Jump):
        (JSC::AbstractMacroAssembler::Jump::link):
        (JSC::AbstractMacroAssembler::Jump::linkTo):
        (JSC::AbstractMacroAssembler::Jump::isSet):
        (JSC::AbstractMacroAssembler::differenceBetween):
        (JSC::AbstractMacroAssembler::linkJump):
        (JSC::AbstractMacroAssembler::getLinkerCallReturnOffset):
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::link):
        (JSC::LinkBuffer::locationOf):
        (JSC::LinkBuffer::locationOfNearCall):
        (JSC::LinkBuffer::returnAddressOffset):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::linkCall):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::linkCall):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::linkCall):
        * assembler/MacroAssemblerSH4.cpp:
        (JSC::MacroAssemblerSH4::linkCall):
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::linkCall):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::linkCall):

2011-05-25  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=61500
        Add JSObject::offsetOfPropertyStorage

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetDirectOffset):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::compilePutDirectOffset):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::compilePutDirectOffset):
        (JSC::JIT::compileGetDirectOffset):
        * runtime/JSObject.h:
        (JSC::JSObject::offsetOfPropertyStorage):

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

        Reviewed by Geoffrey Garen.

        Make RegExp GC allocated
        https://bugs.webkit.org/show_bug.cgi?id=61490

        Make RegExp GC allocated.  Basically mechanical change to replace
        most use of [Pass]RefPtr<RegExp> with RegExp* or WriteBarrier<RegExp>
        where actual ownership happens.

        Made the RegExpCache use Strong<> references currently to avoid any
        changes in behaviour.

        * JavaScriptCore.exp:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitAggregate):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addRegExp):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::addRegExp):
        (JSC::BytecodeGenerator::emitNewRegExp):
        * bytecompiler/BytecodeGenerator.h:
        * runtime/JSCell.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::clearBuiltinStructures):
        (JSC::JSGlobalData::addRegExpToTrace):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::create):
        (JSC::RegExp::invalidateCode):
        * runtime/RegExp.h:
        (JSC::RegExp::createStructure):
        * runtime/RegExpCache.cpp:
        (JSC::RegExpCache::lookupOrCreate):
        (JSC::RegExpCache::create):
        * runtime/RegExpCache.h:
        * runtime/RegExpConstructor.cpp:
        (JSC::constructRegExp):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::RegExpObject):
        (JSC::RegExpObject::visitChildren):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::setRegExp):
        (JSC::RegExpObject::RegExpObjectData::RegExpObjectData):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::RegExpPrototype):
        (JSC::regExpProtoFuncCompile):
        * runtime/RegExpPrototype.h:
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):

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

        Reviewed by Geoffrey Garen.

        Generate regexp code lazily
        https://bugs.webkit.org/show_bug.cgi?id=61476

        RegExp construction now simply validates the RegExp, it does
        not perform actual codegen.

        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        (JSC::RegExp::recompile):
        (JSC::RegExp::compile):
        (JSC::RegExp::match):
        * runtime/RegExp.h:
        (JSC::RegExp::recompileIfNecessary):
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::performMatch):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::match):
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncReplace):
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):
        (JSC::stringProtoFuncSplit):

2011-05-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Geoffrey Garen.

        Removed MarkSetProperties because it was unused
        https://bugs.webkit.org/show_bug.cgi?id=61418

        * heap/MarkStack.h:
        (JSC::MarkSet::MarkSet):
        (JSC::MarkStack::append):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::visitChildren):
        * runtime/JSArray.h:
        (JSC::JSArray::visitChildrenDirect):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::visitChildren):
        * runtime/WriteBarrier.h:
        (JSC::MarkStack::appendValues):

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

        Reviewed by Geoffrey Garen.

        Make allocations with guard pages ensure that the allocation succeeded
        https://bugs.webkit.org/show_bug.cgi?id=61453

        Add null checks, and make PageBlock's operator bool() use
        the realbase, rather than the start of usable memory.

        * wtf/OSAllocatorPosix.cpp:
        (WTF::OSAllocator::reserveAndCommit):
        * wtf/PageBlock.h:
        (WTF::PageBlock::operator bool):
        (WTF::PageBlock::PageBlock):

2011-04-10  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Eric Seidel.

        Add JS_EXPORT_PRIVATE macro for exported methods in bytecompiler headers.
        
        https://bugs.webkit.org/show_bug.cgi?id=27551

        * bytecompiler/BytecodeGenerator.h:

2011-05-24  Keishi Hattori  <keishi@webkit.org>

        Reviewed by Kent Tamura.

        Disable textfield implementation of <input type=color>. Add INPUT_COLOR feature flag. Add input color sanitizer.
        https://bugs.webkit.org/show_bug.cgi?id=61273

        * Configurations/FeatureDefines.xcconfig: Added COLOR_INPUT feature flag.

2011-05-24  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Eric Seidel.

        Add export macros to WTFString.h.
        
        https://bugs.webkit.org/show_bug.cgi?id=27551

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

2011-05-24  Geoffrey Garen  <ggaren@apple.com>

        Maybe fix the Mac build now?

        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-05-24  Geoffrey Garen  <ggaren@apple.com>

        Maybe fix the Mac build?
        
        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-05-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Split HeapRootVisitor into its own class
        https://bugs.webkit.org/show_bug.cgi?id=61399

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/HandleHeap.cpp:
        * heap/HandleStack.cpp:
        * heap/Heap.cpp:
        * heap/HeapRootVisitor.h: Copied from Source/JavaScriptCore/heap/MarkStack.h.
        * heap/MarkStack.h:
        * runtime/ArgList.cpp:
        * runtime/SmallStrings.cpp:

2011-05-24  Jay Civelli  <jcivelli@chromium.org>

        Rubberstamped by David Kilzer.

        Updated some files that I forgot in my previous MHTML CL.

        * Configurations/FeatureDefines.xcconfig:

2011-05-24  Geoffrey Garen  <ggaren@apple.com>

        Fix the Mac build: Yes, please do remove these files, svn.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-05-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Let's just have one way to get the system page size, bokay?
        https://bugs.webkit.org/show_bug.cgi?id=61384

        * CMakeListsEfl.txt:
        * CMakeListsWinCE.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: MarkStack[Platform].cpp
        is gone completely now, since it only existed to provide a duplicate way
        to access the system page size.

        * heap/MarkStack.cpp:
        (JSC::MarkStack::reset):
        * heap/MarkStack.h:
        (JSC::::MarkStackArray):
        (JSC::::shrinkAllocation): Use WTF::pageSize.

        * heap/MarkStackPosix.cpp:
        * heap/MarkStackSymbian.cpp:
        * heap/MarkStackWin.cpp: Removed now-empty files.

        * jit/ExecutableAllocator.cpp:
        (JSC::ExecutableAllocator::reprotectRegion):
        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::ExecutableAllocator):
        (JSC::ExecutablePool::ExecutablePool):
        (JSC::ExecutablePool::poolAllocate):
        * jit/ExecutableAllocatorFixedVMPool.cpp: Use WTF::pageSize.

        * wscript: Removed now-empty files.

        * wtf/PageBlock.cpp:
        (WTF::systemPageSize): Integrated questionable Symbian page size rule
        from ExecutableAllocator, because that seems like what the original
        author should have done.

2011-05-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Interpreter crashes with gc validation enabled due to failure to mark initial cache structure
        https://bugs.webkit.org/show_bug.cgi?id=61385

        The interpreter uses the structure slot of get_by_id and put_by_id to hold
        the initial structure it encountered so that it can identify whether a
        given access is stable.

        When marking though we only visit the slot when we've decided to cache, and
        so this value could die.  This was "safe" as the value was only used for a
        pointer compare, but it was incorrect.  We now just mark the slot like we
        should have been doing already.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitStructures):

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

        Windows build fix

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed now-inline functions.

2011-05-24  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix: update the #if OS(WINDOWS) section to match my last patch.

        * heap/MarkStack.h:
        (JSC::::shrinkAllocation):

2011-05-24  Geoffrey Garen  <ggaren@apple.com>

        Rubber-stamped by Oliver Hunt.

        Split out function definitions and class definitions from class
        declarations in MarkStack.h, for readability.

        * heap/MarkStack.h:
        (JSC::MarkStack::MarkStack):
        (JSC::MarkStack::~MarkStack):
        (JSC::MarkStack::addOpaqueRoot):
        (JSC::MarkStack::containsOpaqueRoot):
        (JSC::MarkStack::opaqueRootCount):
        (JSC::MarkSet::MarkSet):
        (JSC::MarkStack::allocateStack):
        (JSC::MarkStack::releaseStack):
        (JSC::MarkStack::pageSize):
        (JSC::::MarkStackArray):
        (JSC::::~MarkStackArray):
        (JSC::::expand):
        (JSC::::append):
        (JSC::::removeLast):
        (JSC::::last):
        (JSC::::isEmpty):
        (JSC::::size):
        (JSC::::shrinkAllocation):

2011-05-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Avoid creating unnecessary identifiers and strings in the syntax checker
        https://bugs.webkit.org/show_bug.cgi?id=61378

        Selectively tell the lexer that there are some places it does not need to
        do the real work of creating Identifiers for IDENT and STRING tokens.

        Make parseString and parseIdentifier templatized on whether they should
        do real work, or merely validate the tokens.

        SunSpider --parse-only reports ~5-8% win depending on hardware.

        * parser/ASTBuilder.h:
        (JSC::ASTBuilder::createDotAccess):
        * parser/JSParser.cpp:
        (JSC::JSParser::next):
        (JSC::JSParser::consume):
        (JSC::JSParser::parseVarDeclarationList):
        (JSC::JSParser::parseConstDeclarationList):
        (JSC::JSParser::parseExpression):
        (JSC::JSParser::parseAssignmentExpression):
        (JSC::JSParser::parseConditionalExpression):
        (JSC::JSParser::parseBinaryExpression):
        (JSC::JSParser::parseProperty):
        (JSC::JSParser::parseObjectLiteral):
        (JSC::JSParser::parseArrayLiteral):
        (JSC::JSParser::parseArguments):
        (JSC::JSParser::parseMemberExpression):
        * parser/Lexer.cpp:
        (JSC::Lexer::parseIdentifier):
        (JSC::Lexer::parseString):
        (JSC::Lexer::lex):
        * parser/Lexer.h:
        * parser/SyntaxChecker.h:
        (JSC::SyntaxChecker::createDotAccess):
        (JSC::SyntaxChecker::createProperty):

2011-05-23  Michael Saboff  <msaboff@apple.com>

        Reviewed by Mark Rowe.

        Safari often freezes when clicking "Return free memory" in Caches dialog
        https://bugs.webkit.org/show_bug.cgi?id=61325

        There are two fixes and improvement in instrumentation code used to find 
        one of the problems.
        Changed ReleaseFreeList() to set the "decommitted" bit when releasing
        pages to the system and moving Spans from the normal list to the returned 
        list.
        Added a "not making forward progress" check to TCMalloc_PageHeap::scavenge
        to eliminate an infinite loop if we can't meet the pagesToRelease target.
        Added a check for the decommitted bit being set properly in 
        TCMalloc_PageHeap::CheckList.

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::scavenge):
        (WTF::TCMalloc_PageHeap::Check):
        (WTF::TCMalloc_PageHeap::CheckList):
        (WTF::ReleaseFreeList):

2011-05-23  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

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

        The begin characters optimization currently has issues (#61129),
        and does not appear to still be a performance win. The prudent
        next step seems to be to disable while we ascertain whether this
        is still a useful performance optimization.

        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::matchDisjunction):
        (JSC::Yarr::Interpreter::interpret):
        * yarr/YarrInterpreter.h:
        (JSC::Yarr::BytecodePattern::BytecodePattern):
        * yarr/YarrPattern.cpp:
        (JSC::Yarr::YarrPatternConstructor::YarrPatternConstructor):
        (JSC::Yarr::YarrPattern::compile):
        (JSC::Yarr::YarrPattern::YarrPattern):
        * yarr/YarrPattern.h:
        (JSC::Yarr::YarrPattern::reset):

2011-05-23  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Remove safeFloatToInt() in FloatRect.cpp and replace with working version of clampToInteger()
        https://bugs.webkit.org/show_bug.cgi?id=58216

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

2011-05-23  Ruben  <chromium@hybridsource.org>

        Reviewed by Tony Chang.

        Chromium gyp patch to use new POSIX defines toolkit_uses_gtk and os_posix
        https://bugs.webkit.org/show_bug.cgi?id=61219

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2011-05-23  Thouraya ANDOLSI  <thouraya.andolsi@st.com>

        Reviewed by Gavin Barraclough.

        [SH4] AssemblerLabel does not name a type
        https://bugs.webkit.org/show_bug.cgi?id=59927

        SH4Assembler.h file shoold be included before AbstractMacroAssembler.h.

        * assembler/MacroAssemblerSH4.h:

2011-05-23  Ryuan Choi  <ryuan.choi@samsung.com>

        Rubber stamped by Eric Seidel.

        [CMAKE] Refactoring wtf related code.
        https://bugs.webkit.org/show_bug.cgi?id=60146

        Move wtf-files to Source/JavaScriptCore/wtf/CMakeLists.txt.

        * CMakeLists.txt:
        * CMakeListsEfl.txt:
        * wtf/CMakeLists.txt:
        * wtf/CMakeListsEfl.txt:

2011-05-22  Adam Barth  <abarth@webkit.org>

        Enable strict PassOwnPtr for everyone.  I expect this patch will need
        some followups to make the GTK and EFL bots green again.

        * wtf/PassOwnPtr.h:

2011-05-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Reduce size of inline cache path of get_by_id on ARMv7
        https://bugs.webkit.org/show_bug.cgi?id=61221

        This reduces the code size of get_by_id by 20 bytes

        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::ldrCompact):
        (JSC::ARMv7Assembler::repatchCompact):
        (JSC::ARMv7Assembler::setUInt7ForLoad):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::load32WithCompactAddressOffsetPatch):
        * jit/JIT.h:

2011-05-20  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Oliver Hunt.

        Zombies should "live" forever
        https://bugs.webkit.org/show_bug.cgi?id=61170

        Reusing zombie cells could still hide garbage
        collected cell related bugs.

        * JavaScriptCore.pro:
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::clearMarks):
        * heap/MarkedBlock.h:
        * heap/MarkedSpace.cpp:
        (JSC::MarkedSpace::destroy):
        * runtime/JSCell.h:
        (JSC::JSCell::JSValue::isZombie):
        * runtime/JSZombie.h:
        (JSC::JSZombie::~JSZombie):
        * runtime/WriteBarrier.h:
        (JSC::WriteBarrierBase::setWithoutWriteBarrier):

2011-05-20  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/9472883> and https://bugs.webkit.org/show_bug.cgi?id=61203
        Horrendous bug in callOnMainThreadAndWait

        * wtf/MainThread.cpp:
        (WTF::dispatchFunctionsFromMainThread): Before signaling the background thread with the
          syncFlag condition, reacquire the mutex first.

2011-05-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Remove unnecessary double->int conversion at the end of op_div
        https://bugs.webkit.org/show_bug.cgi?id=61198

        We don't attempt this conversion on 64bit, removing it actually speeds
        up sunspider and v8 slightly, and it reduces code size.

        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_op_div):

2011-05-19  Evan Martin  <evan@chromium.org>

        Reviewed by Tony Chang.

        [chromium] remove <(library) variable
        https://bugs.webkit.org/show_bug.cgi?id=61158

        This was for a build experiment; we can just use the correct value now.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2011-05-20  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        Interpreter uses wrong bytecode offset for determining exception handler
        https://bugs.webkit.org/show_bug.cgi?id=61191

        The bytecode offset given for the returnPC from the JIT is
        actually the offset for the start of the instruction triggering
        the call, whereas in the interpreter it is the actual return
        VPC.  This means if the next instruction following a call was
        in an exception region we would incorrectly redirect to its
        handler.  Long term we want to completely redo how exceptions
        are handled anyway so the simplest and lowest risk fix here is
        to simply subtract one from the return vPC so that we have an
        offset in the triggering instruction.

        It turns out this is caught by a couple of tests already.

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

2011-05-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Oliver Hunt.

        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

        Use the MAP_NORESERVE flag for mmap on Linux to skip the kernel
        check of the available memory. This should give us an
        overcommit-like behavior in most systems, which is what we want.

        * wtf/OSAllocatorPosix.cpp:
        (WTF::OSAllocator::reserveAndCommit): pass MAP_NORSERVE to mmap.

2011-05-19  Gabor Loki  <loki@webkit.org>

        Fix ARM build after r86919

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::nop):

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

        Reviewed by Gavin Barraclough.

        Randomise code starting location a little
        https://bugs.webkit.org/show_bug.cgi?id=61161

        Add a nop() function to the Assemblers so that we
        can randomise code offsets slightly at no real cost.

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::nop):
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::nop):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::nop):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::nop):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::nop):
        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::nop):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::nop):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::nop):
        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        * runtime/WeakRandom.h:
        (JSC::WeakRandom::getUint32):

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

        Fix windows build.

        * wtf/OSAllocatorWin.cpp:
        (WTF::OSAllocator::reserveUncommitted):
        (WTF::OSAllocator::reserveAndCommit):

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

        Reviewed by Gavin Barraclough.

        Add guard pages to each end of the memory region used by the fixedvm allocator
        https://bugs.webkit.org/show_bug.cgi?id=61150

        Add mechanism to notify the OSAllocator that pages at either end of an
        allocation should be considered guard pages.  Update PageReservation,
        PageAllocation, etc to handle this.

        * JavaScriptCore.exp:
        * jit/ExecutableAllocatorFixedVMPool.cpp:
        (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator):
        * wtf/OSAllocator.h:
        * wtf/OSAllocatorPosix.cpp:
        (WTF::OSAllocator::reserveUncommitted):
        (WTF::OSAllocator::reserveAndCommit):
        * wtf/PageAllocation.h:
        (WTF::PageAllocation::PageAllocation):
        * wtf/PageAllocationAligned.h:
        (WTF::PageAllocationAligned::PageAllocationAligned):
        * wtf/PageBlock.h:
        (WTF::PageBlock::PageBlock):
        * wtf/PageReservation.h:
        (WTF::PageReservation::reserve):
        (WTF::PageReservation::reserveWithGuardPages):
            Add a new function to make a reservation that will add guard
            pages to the ends of an allocation.
        (WTF::PageReservation::PageReservation):

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

        Reviewed by Geoffrey Garen.

        Make Executables release their JIT code as soon as they become dead
        https://bugs.webkit.org/show_bug.cgi?id=61134

        Add an ability to clear an Executable's jit code without requiring
        it to be destroyed, and then call that from a finalizer.

        * heap/Weak.h:
        (JSC::Weak::Weak):
        (JSC::Weak::leak):
        * jit/JITCode.h:
        (JSC::JITCode::clear):
        * runtime/Executable.cpp:
        (JSC::ExecutableFinalizer::finalize):
        (JSC::ExecutableBase::executableFinalizer):
        * runtime/Executable.h:
        (JSC::ExecutableBase::ExecutableBase):
        (JSC::ExecutableBase::clearExecutableCode):

2011-05-19  Adam Roben  <aroben@apple.com>

        Remove a redundant and broken data export

        Data can't be exported from JavaScriptCore.dll by listing it in the .def file. The
        JS_EXPORTDATA macro must be used instead. (In this case it was already being used, leading
        to a linker warning about multiple definitions.)

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed JSGlobalData::s_info.

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

        Reviewed by Gavin Barraclough.

        Some tests crashing in JSC::MarkStack::validateValue beneath ScriptController::clearWindowShell on SnowLeopard Intel Release (WebKit2 Tests)
        https://bugs.webkit.org/show_bug.cgi?id=61064

        Switch NonFinalObject to using WriteBarrier<> rather than WriteBarrierBase<>
        for its inline storage.  This resolves the problem of GC occurring before
        a subclass has initialised its anonymous storage.

        * runtime/JSObject.h:

2011-05-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Delete WTFURL
        https://bugs.webkit.org/show_bug.cgi?id=61084

        It's been a year and we've failed to complete this project.  It's time
        to throw in the towel.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/url: Removed.
        * wtf/url/api: Removed.
        * wtf/url/api/ParsedURL.cpp: Removed.
        * wtf/url/api/ParsedURL.h: Removed.
        * wtf/url/api/URLString.h: Removed.
        * wtf/url/src: Removed.
        * wtf/url/src/RawURLBuffer.h: Removed.
        * wtf/url/src/URLBuffer.h: Removed.
        * wtf/url/src/URLCharacterTypes.cpp: Removed.
        * wtf/url/src/URLCharacterTypes.h: Removed.
        * wtf/url/src/URLComponent.h: Removed.
        * wtf/url/src/URLEscape.cpp: Removed.
        * wtf/url/src/URLEscape.h: Removed.
        * wtf/url/src/URLParser.h: Removed.
        * wtf/url/src/URLQueryCanonicalizer.h: Removed.
        * wtf/url/src/URLSegments.cpp: Removed.
        * wtf/url/src/URLSegments.h: Removed.
        * wtf/url/wtfurl.gyp: Removed.

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

        Reviewed by Sam Weinig.

        JSGlobalObject and some others do GC allocation during initialization, which can cause heap corruption
        https://bugs.webkit.org/show_bug.cgi?id=61090

        Remove the Structure-free JSGlobalObject constructor and instead always
        pass the structure into the JSGlobalObject constructor.
        Stop DebuggerActivation creating a new structure every time, and simply
        use a single shared structure held by the GlobalData.

        * API/JSContextRef.cpp:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::DebuggerActivation):
        * jsc.cpp:
        (GlobalObject::GlobalObject):
        (functionRun):
        (jscmain):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::clearBuiltinStructures):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.h:

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

        Reviewed by Adam Roben.

        Disable gc validation in release builds
        https://bugs.webkit.org/show_bug.cgi?id=60680

        Add back the NDEBUG check

        * wtf/Platform.h:

2011-05-17  Geoffrey Garen  <ggaren@apple.com>

        Rolled out attempts to fix EFL build because they're not enough -- the
        build script needs to be fixed.

        * runtime/BooleanPrototype.cpp:
        * runtime/DateConstructor.cpp:
        * runtime/ErrorPrototype.cpp:

2011-05-17  Geoffrey Garen  <ggaren@apple.com>

        More attempts to work around the EFL build system being borken.

        * runtime/DateConstructor.cpp:
        * runtime/ErrorPrototype.cpp:

2011-05-17  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the EFL build.

        * runtime/BooleanPrototype.cpp:

2011-05-16  Geoffrey Garen  <ggaren@apple.com>

        Rolling back in r86653 with build fixed.

        Reviewed by Gavin Barraclough and Oliver Hunt.

        Global object initialization is expensive
        https://bugs.webkit.org/show_bug.cgi?id=60933
        
        Changed a bunch of globals to allocate their properties lazily, and changed
        the global object to allocate a bunch of its globals lazily.
        
        This reduces the footprint of a global object from 287 objects with 58
        functions for 24K to 173 objects with 20 functions for 15K.

        Large patch, but it's all mechanical.

        * DerivedSources.make:
        * JavaScriptCore.exp: Build!

        * create_hash_table: Added a special case for fromCharCode, since it uses
        a custom "thunk generator".

        * heap/Heap.cpp:
        (JSC::TypeCounter::operator()): Fixed a bug where the type counter would
        overcount objects that were owned through more than one mechanism because
        it was getting in the way of counting the results for this patch.

        * interpreter/CallFrame.h:
        (JSC::ExecState::arrayConstructorTable):
        (JSC::ExecState::arrayPrototypeTable):
        (JSC::ExecState::booleanPrototypeTable):
        (JSC::ExecState::dateConstructorTable):
        (JSC::ExecState::errorPrototypeTable):
        (JSC::ExecState::globalObjectTable):
        (JSC::ExecState::numberConstructorTable):
        (JSC::ExecState::numberPrototypeTable):
        (JSC::ExecState::objectPrototypeTable):
        (JSC::ExecState::regExpPrototypeTable):
        (JSC::ExecState::stringConstructorTable): Added new tables.

        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        (JSC::ArrayConstructor::getOwnPropertySlot):
        (JSC::ArrayConstructor::getOwnPropertyDescriptor):
        * runtime/ArrayConstructor.h:
        (JSC::ArrayConstructor::createStructure):
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::getOwnPropertySlot):
        (JSC::ArrayPrototype::getOwnPropertyDescriptor):
        * runtime/ArrayPrototype.h:
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        (JSC::BooleanPrototype::getOwnPropertySlot):
        (JSC::BooleanPrototype::getOwnPropertyDescriptor):
        * runtime/BooleanPrototype.h:
        (JSC::BooleanPrototype::createStructure):
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        (JSC::DateConstructor::getOwnPropertySlot):
        (JSC::DateConstructor::getOwnPropertyDescriptor):
        * runtime/DateConstructor.h:
        (JSC::DateConstructor::createStructure):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        (JSC::ErrorPrototype::getOwnPropertySlot):
        (JSC::ErrorPrototype::getOwnPropertyDescriptor):
        * runtime/ErrorPrototype.h:
        (JSC::ErrorPrototype::createStructure): Standardized these objects
        to use static tables for function properties.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::~JSGlobalData):
        * runtime/JSGlobalData.h: Added new tables.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::addStaticGlobals):
        (JSC::JSGlobalObject::getOwnPropertySlot):
        (JSC::JSGlobalObject::getOwnPropertyDescriptor):
        * runtime/JSGlobalObject.h:
        * runtime/JSGlobalObjectFunctions.cpp:
        * runtime/JSGlobalObjectFunctions.h: Changed JSGlobalObject to use a
        static table for its global functions. This required uninlining some
        things to avoid a circular header dependency. However, those things
        probably shouldn't have been inlined in the first place.
        
        Even more global object properties can be made lazy, but that requires
        more in-depth changes.

        * runtime/MathObject.cpp:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::getOwnPropertySlot):
        (JSC::NumberConstructor::getOwnPropertyDescriptor):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        (JSC::NumberPrototype::getOwnPropertySlot):
        (JSC::NumberPrototype::getOwnPropertyDescriptor):
        * runtime/NumberPrototype.h:
        (JSC::NumberPrototype::createStructure):
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::ObjectPrototype):
        (JSC::ObjectPrototype::put):
        (JSC::ObjectPrototype::getOwnPropertySlot):
        (JSC::ObjectPrototype::getOwnPropertyDescriptor):
        * runtime/ObjectPrototype.h:
        (JSC::ObjectPrototype::createStructure):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::RegExpPrototype):
        (JSC::RegExpPrototype::getOwnPropertySlot):
        (JSC::RegExpPrototype::getOwnPropertyDescriptor):
        * runtime/RegExpPrototype.h:
        (JSC::RegExpPrototype::createStructure):
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        (JSC::StringConstructor::getOwnPropertySlot):
        (JSC::StringConstructor::getOwnPropertyDescriptor):
        * runtime/StringConstructor.h:
        (JSC::StringConstructor::createStructure): Standardized these objects
        to use static tables for function properties.

2011-05-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        JSGlobalContextRelease should not trigger a synchronous garbage collection
        https://bugs.webkit.org/show_bug.cgi?id=60990

        * API/JSContextRef.cpp:
        Change synchronous call to collectAllGarbage to a call to trigger the
        activityCallback.

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

        Reviewed by Gavin Barraclough.

        Reduce code size for inline cache
        https://bugs.webkit.org/show_bug.cgi?id=60942

        This patch introduces the concept of a "compact" address that
        allows individual architectures to control the maximum offset
        used for the inline path of get_by_id.  This reduces the code
        size of get_by_id by 3 bytes on x86 and x86_64 and slightly
        improves performance on v8 tests.

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::repatchCompact):
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::repatchCompact):
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::DataLabelCompact::DataLabelCompact):
        (JSC::AbstractMacroAssembler::differenceBetween):
        (JSC::AbstractMacroAssembler::repatchCompact):
        * assembler/CodeLocation.h:
        (JSC::CodeLocationDataLabelCompact::CodeLocationDataLabelCompact):
        (JSC::CodeLocationCommon::dataLabelCompactAtOffset):
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::locationOf):
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::repatchCompact):
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::loadPtrWithCompactAddressOffsetPatch):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::load32WithCompactAddressOffsetPatch):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::load32WithCompactAddressOffsetPatch):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::load32WithCompactAddressOffsetPatch):
        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::load32WithAddressOffsetPatch):
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::repatchCompact):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::loadCompactWithAddressOffsetPatch):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::loadPtrWithCompactAddressOffsetPatch):
        * assembler/RepatchBuffer.h:
        (JSC::RepatchBuffer::repatch):
        * assembler/SH4Assembler.h:
        (JSC::SH4Assembler::repatchCompact):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::movl_mr_disp8):
        (JSC::X86Assembler::movq_mr_disp8):
        (JSC::X86Assembler::repatchCompact):
        (JSC::X86Assembler::setInt8):
        (JSC::X86Assembler::X86InstructionFormatter::oneByteOp_disp8):
        (JSC::X86Assembler::X86InstructionFormatter::oneByteOp64_disp8):
        (JSC::X86Assembler::X86InstructionFormatter::memoryModRM):
        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::patchGetByIdSelf):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::patchGetByIdSelf):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCacheGetByID):

2011-05-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r86653.
        http://trac.webkit.org/changeset/86653
        https://bugs.webkit.org/show_bug.cgi?id=60944

        "Caused regressions on Windows, OSX and EFL" (Requested by
        yutak on #webkit).

        * DerivedSources.make:
        * DerivedSources.pro:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * create_hash_table:
        * heap/Heap.cpp:
        (JSC::TypeCounter::operator()):
        * interpreter/CallFrame.h:
        (JSC::ExecState::arrayTable):
        (JSC::ExecState::numberTable):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        * runtime/ArrayConstructor.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::getOwnPropertySlot):
        (JSC::ArrayPrototype::getOwnPropertyDescriptor):
        * runtime/ArrayPrototype.h:
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        * runtime/BooleanPrototype.h:
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        * runtime/DateConstructor.h:
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        * runtime/ErrorPrototype.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::~JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::addStaticGlobals):
        (JSC::JSGlobalObject::getOwnPropertySlot):
        (JSC::JSGlobalObject::getOwnPropertyDescriptor):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncJSCPrint):
        * runtime/JSGlobalObjectFunctions.h:
        * runtime/MathObject.cpp:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::getOwnPropertySlot):
        (JSC::NumberConstructor::getOwnPropertyDescriptor):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        * runtime/NumberPrototype.h:
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::ObjectPrototype):
        (JSC::ObjectPrototype::put):
        (JSC::ObjectPrototype::getOwnPropertySlot):
        * runtime/ObjectPrototype.h:
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::RegExpPrototype):
        * runtime/RegExpPrototype.h:
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        * runtime/StringConstructor.h:

2011-05-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Geoffrey Garen.

        Global object initialization is expensive
        https://bugs.webkit.org/show_bug.cgi?id=60933
        
        Changed a bunch of globals to allocate their properties lazily, and changed
        the global object to allocate a bunch of its globals lazily.
        
        This reduces the footprint of a global object from 287 objects with 58
        functions for 24K to 173 objects with 20 functions for 15K.

        Large patch, but it's all mechanical.

        * DerivedSources.make:
        * JavaScriptCore.exp: Build!

        * create_hash_table: Added a special case for fromCharCode, since it uses
        a custom "thunk generator".

        * heap/Heap.cpp:
        (JSC::TypeCounter::operator()): Fixed a bug where the type counter would
        overcount objects that were owned through more than one mechanism because
        it was getting in the way of counting the results for this patch.

        * interpreter/CallFrame.h:
        (JSC::ExecState::arrayConstructorTable):
        (JSC::ExecState::arrayPrototypeTable):
        (JSC::ExecState::booleanPrototypeTable):
        (JSC::ExecState::dateConstructorTable):
        (JSC::ExecState::errorPrototypeTable):
        (JSC::ExecState::globalObjectTable):
        (JSC::ExecState::numberConstructorTable):
        (JSC::ExecState::numberPrototypeTable):
        (JSC::ExecState::objectPrototypeTable):
        (JSC::ExecState::regExpPrototypeTable):
        (JSC::ExecState::stringConstructorTable): Added new tables.

        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        (JSC::ArrayConstructor::getOwnPropertySlot):
        (JSC::ArrayConstructor::getOwnPropertyDescriptor):
        * runtime/ArrayConstructor.h:
        (JSC::ArrayConstructor::createStructure):
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::getOwnPropertySlot):
        (JSC::ArrayPrototype::getOwnPropertyDescriptor):
        * runtime/ArrayPrototype.h:
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        (JSC::BooleanPrototype::getOwnPropertySlot):
        (JSC::BooleanPrototype::getOwnPropertyDescriptor):
        * runtime/BooleanPrototype.h:
        (JSC::BooleanPrototype::createStructure):
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        (JSC::DateConstructor::getOwnPropertySlot):
        (JSC::DateConstructor::getOwnPropertyDescriptor):
        * runtime/DateConstructor.h:
        (JSC::DateConstructor::createStructure):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        (JSC::ErrorPrototype::getOwnPropertySlot):
        (JSC::ErrorPrototype::getOwnPropertyDescriptor):
        * runtime/ErrorPrototype.h:
        (JSC::ErrorPrototype::createStructure): Standardized these objects
        to use static tables for function properties.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::~JSGlobalData):
        * runtime/JSGlobalData.h: Added new tables.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::addStaticGlobals):
        (JSC::JSGlobalObject::getOwnPropertySlot):
        (JSC::JSGlobalObject::getOwnPropertyDescriptor):
        * runtime/JSGlobalObject.h:
        * runtime/JSGlobalObjectFunctions.cpp:
        * runtime/JSGlobalObjectFunctions.h: Changed JSGlobalObject to use a
        static table for its global functions. This required uninlining some
        things to avoid a circular header dependency. However, those things
        probably shouldn't have been inlined in the first place.
        
        Even more global object properties can be made lazy, but that requires
        more in-depth changes.

        * runtime/MathObject.cpp:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::getOwnPropertySlot):
        (JSC::NumberConstructor::getOwnPropertyDescriptor):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        (JSC::NumberPrototype::getOwnPropertySlot):
        (JSC::NumberPrototype::getOwnPropertyDescriptor):
        * runtime/NumberPrototype.h:
        (JSC::NumberPrototype::createStructure):
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::ObjectPrototype):
        (JSC::ObjectPrototype::put):
        (JSC::ObjectPrototype::getOwnPropertySlot):
        (JSC::ObjectPrototype::getOwnPropertyDescriptor):
        * runtime/ObjectPrototype.h:
        (JSC::ObjectPrototype::createStructure):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::RegExpPrototype):
        (JSC::RegExpPrototype::getOwnPropertySlot):
        (JSC::RegExpPrototype::getOwnPropertyDescriptor):
        * runtime/RegExpPrototype.h:
        (JSC::RegExpPrototype::createStructure):
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        (JSC::StringConstructor::getOwnPropertySlot):
        (JSC::StringConstructor::getOwnPropertyDescriptor):
        * runtime/StringConstructor.h:
        (JSC::StringConstructor::createStructure): Standardized these objects
        to use static tables for function properties.

2011-05-16  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/60913> C++ exceptions should not be enabled when building with llvm-gcc-4.2
        <rdar://problem/9446430>

        Reviewed by Mark Rowe.

        * Configurations/Base.xcconfig: Fixed typo.

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

        Reviewed by Geoffrey Garen.

        JSWeakObjectMap finalisation may occur while gc is in inconsistent state
        https://bugs.webkit.org/show_bug.cgi?id=60908
        <rdar://problem/9409491>

        We need to ensure that we have called all the weak map finalizers while
        the global object (and hence global context) is still in a consistent
        state.  The best way to achieve this is to simply use a weak handle and
        finalizer on the global object.

        * JavaScriptCore.exp:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::WeakMapFinalizer::finalize):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::registerWeakMap):

2011-05-16  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][WK2][Symbian] Shared memory implementation for Symbian
        https://bugs.webkit.org/show_bug.cgi?id=55875

        * wtf/Platform.h: Exclude Symbian OS from USE(UNIX_DOMAIN_SOCKETS) users

2011-05-16  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=60866
        Evaluation order broken for empty alternatives in subpatterns

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

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

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

        Reviewed by Geoff Garen & Michael Saboff.

        https://bugs.webkit.org/show_bug.cgi?id=60860
        Simplify backtracking in YARR JIT

        YARR JIT currently performs a single pass of code generation over the pattern,
        with special handling to allow the code generation for some backtracking code
        out of line. We can simplify things by moving to a common mechanism whereby all
        forwards matching code is generated in one pass, and all backtracking code is
        generated in another. Backtracking code can be generated in reverse order, to
        optimized the common fall-through case.

        To make it easier to walk over the pattern, we can first convert to a more
        byte-code like format before JIT generating. In time we should unify this with
        the YARR interpreter to more closely unify the two.

        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::jumpIfNoAvailableInput):
        (JSC::Yarr::YarrGenerator::YarrOp::YarrOp):
        (JSC::Yarr::YarrGenerator::BacktrackingState::BacktrackingState):
        (JSC::Yarr::YarrGenerator::BacktrackingState::append):
        (JSC::Yarr::YarrGenerator::BacktrackingState::fallthrough):
        (JSC::Yarr::YarrGenerator::BacktrackingState::link):
        (JSC::Yarr::YarrGenerator::BacktrackingState::linkTo):
        (JSC::Yarr::YarrGenerator::BacktrackingState::takeBacktracksToJumpList):
        (JSC::Yarr::YarrGenerator::BacktrackingState::isEmpty):
        (JSC::Yarr::YarrGenerator::BacktrackingState::linkDataLabels):
        (JSC::Yarr::YarrGenerator::BacktrackingState::ReturnAddressRecord::ReturnAddressRecord):
        (JSC::Yarr::YarrGenerator::generateAssertionBOL):
        (JSC::Yarr::YarrGenerator::backtrackAssertionBOL):
        (JSC::Yarr::YarrGenerator::generateAssertionEOL):
        (JSC::Yarr::YarrGenerator::backtrackAssertionEOL):
        (JSC::Yarr::YarrGenerator::matchAssertionWordchar):
        (JSC::Yarr::YarrGenerator::generateAssertionWordBoundary):
        (JSC::Yarr::YarrGenerator::backtrackAssertionWordBoundary):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterOnce):
        (JSC::Yarr::YarrGenerator::backtrackPatternCharacterOnce):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
        (JSC::Yarr::YarrGenerator::backtrackPatternCharacterFixed):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy):
        (JSC::Yarr::YarrGenerator::backtrackPatternCharacterGreedy):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterNonGreedy):
        (JSC::Yarr::YarrGenerator::backtrackPatternCharacterNonGreedy):
        (JSC::Yarr::YarrGenerator::generateCharacterClassOnce):
        (JSC::Yarr::YarrGenerator::backtrackCharacterClassOnce):
        (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
        (JSC::Yarr::YarrGenerator::backtrackCharacterClassFixed):
        (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy):
        (JSC::Yarr::YarrGenerator::backtrackCharacterClassGreedy):
        (JSC::Yarr::YarrGenerator::generateCharacterClassNonGreedy):
        (JSC::Yarr::YarrGenerator::backtrackCharacterClassNonGreedy):
        (JSC::Yarr::YarrGenerator::generateTerm):
        (JSC::Yarr::YarrGenerator::backtrackTerm):
        (JSC::Yarr::YarrGenerator::generate):
        (JSC::Yarr::YarrGenerator::backtrack):
        (JSC::Yarr::YarrGenerator::opCompileParenthesesSubpattern):
        (JSC::Yarr::YarrGenerator::opCompileParentheticalAssertion):
        (JSC::Yarr::YarrGenerator::opCompileAlternative):
        (JSC::Yarr::YarrGenerator::opCompileBody):
        (JSC::Yarr::YarrGenerator::YarrGenerator):
        (JSC::Yarr::YarrGenerator::compile):

2011-05-15  Adam Barth  <abarth@webkit.org>

        Enable strict PassOwnPtr on Qt.  (Build fixes to follow.)

        * wtf/PassOwnPtr.h:

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

        Reviewed by Maciej Stachowiak.

        Partial fix for <rdar://problem/9417875> REGRESSION: SunSpider ~17% slower
        in browser than on command line
        
        This patch fixes a few issues in generated code that could unreasonably
        prolong object lifetimes.

        * heap/Heap.cpp:
        (JSC::Heap::collectAllGarbage): Throw away all function code before doing
        a major collection. We want to clear polymorphic caches, since they can
        keep alive large object graphs that have gone "stale". For the same reason,
        but to a lesser extent, we also want to clear linked functions and other
        one-off caches.

        This has the side-benefit of reducing memory footprint from run-once
        functions, and of allowing predictions and caches that have failed to
        re-specialize.

        Eventually, if compilation costs rise far enough, we may want a more
        limited strategy for de-specializing code without throwing it away
        completely, but this works for now, and it's the simplest solution.

        * jit/JITStubs.cpp:
        (JSC::JITThunks::hostFunctionStub):
        * jit/JITStubs.h:
        * runtime/JSFunction.cpp: Made the host function stub cache weak --
        otherwise it's effectively a memory leak that can seriously fragment the
        GC and JIT heaps.

        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::visitChildren): Cleared up some comments that confused
        me when working with this code.

2011-05-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make GC validation more aggressive
        https://bugs.webkit.org/show_bug.cgi?id=60802

        This patch makes the checks performed under GC_VALIDATION
        much more aggressive, and adds the checks to more places
        in order to allow us to catch GC bugs much closer to the
        point of failure.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::visitChildren):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock):
        * heap/MarkedSpace.cpp:
        * runtime/Arguments.cpp:
        (JSC::Arguments::visitChildren):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::visitChildren):
        (JSC::ProgramExecutable::visitChildren):
        (JSC::FunctionExecutable::visitChildren):
        * runtime/Executable.h:
        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::visitChildren):
        * runtime/GetterSetter.h:
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::createStructure):
        (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::visitChildren):
        * runtime/JSArray.cpp:
        (JSC::JSArray::visitChildren):
        * runtime/JSCell.cpp:
        (JSC::slowValidateCell):
        * runtime/JSCell.h:
        (JSC::JSCell::JSCell::unvalidatedStructure):
        (JSC::JSCell::JSCell::JSCell):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::visitChildren):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::visitChildren):
        (JSC::slowValidateCell):
        * runtime/JSONObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::visitChildren):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::visitChildren):
        * runtime/JSPropertyNameIterator.h:
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::visitChildren):
        * runtime/JSString.h:
        (JSC::RopeBuilder::JSString):
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::visitChildren):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::visitChildren):
        * runtime/PropertyMapHashTable.h:
        (JSC::PropertyMapEntry::PropertyMapEntry):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::visitChildren):
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::visitChildren):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::ScopeChainNode):
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::visitChildren):
        * runtime/Structure.h:
        (JSC::JSCell::classInfo):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::visitChildren):
        * runtime/StructureChain.h:
        * runtime/WriteBarrier.h:
        (JSC::validateCell):
        (JSC::JSCell):
        (JSC::JSGlobalObject):
        (JSC::WriteBarrierBase::set):
        (JSC::WriteBarrierBase::setMayBeNull):
        (JSC::WriteBarrierBase::setEarlyValue):
        (JSC::WriteBarrierBase::get):
        (JSC::WriteBarrierBase::operator*):
        (JSC::WriteBarrierBase::operator->):
        (JSC::WriteBarrierBase::unvalidatedGet):
        (JSC::WriteBarrier::WriteBarrier):
        * wtf/Assertions.h:

2011-05-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make GC validation more aggressive
        https://bugs.webkit.org/show_bug.cgi?id=60802

        This patch makes the checks performed under GC_VALIDATION
        much more aggressive, and adds the checks to more places
        in order to allow us to catch GC bugs much closer to the
        point of failure.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::visitChildren):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock):
        * heap/MarkedSpace.cpp:
        * runtime/Arguments.cpp:
        (JSC::Arguments::visitChildren):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::visitChildren):
        (JSC::ProgramExecutable::visitChildren):
        (JSC::FunctionExecutable::visitChildren):
        * runtime/Executable.h:
        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::visitChildren):
        * runtime/GetterSetter.h:
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::createStructure):
        (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::visitChildren):
        * runtime/JSArray.cpp:
        (JSC::JSArray::visitChildren):
        * runtime/JSCell.cpp:
        (JSC::slowValidateCell):
        * runtime/JSCell.h:
        (JSC::JSCell::JSCell::unvalidatedStructure):
        (JSC::JSCell::JSCell::JSCell):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::visitChildren):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::visitChildren):
        (JSC::slowValidateCell):
        * runtime/JSONObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::visitChildren):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::visitChildren):
        * runtime/JSPropertyNameIterator.h:
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::visitChildren):
        * runtime/JSString.h:
        (JSC::RopeBuilder::JSString):
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::visitChildren):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::visitChildren):
        * runtime/PropertyMapHashTable.h:
        (JSC::PropertyMapEntry::PropertyMapEntry):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::visitChildren):
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::visitChildren):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::ScopeChainNode):
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::visitChildren):
        * runtime/Structure.h:
        (JSC::JSCell::classInfo):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::visitChildren):
        * runtime/StructureChain.h:
        * runtime/WriteBarrier.h:
        (JSC::validateCell):
        (JSC::JSCell):
        (JSC::JSGlobalObject):
        (JSC::WriteBarrierBase::set):
        (JSC::WriteBarrierBase::setMayBeNull):
        (JSC::WriteBarrierBase::setEarlyValue):
        (JSC::WriteBarrierBase::get):
        (JSC::WriteBarrierBase::operator*):
        (JSC::WriteBarrierBase::operator->):
        (JSC::WriteBarrierBase::unvalidatedGet):
        (JSC::WriteBarrier::WriteBarrier):
        * wtf/Assertions.h:

2011-05-14  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed, rolling out r86469 and r86471, because they made hundreds tests crash on Qt.

        Make GC validation more aggressive
        https://bugs.webkit.org/show_bug.cgi?id=60802

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::visitChildren):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock):
        * heap/MarkedSpace.cpp:
        * runtime/Arguments.cpp:
        (JSC::Arguments::visitChildren):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::visitChildren):
        (JSC::ProgramExecutable::visitChildren):
        (JSC::FunctionExecutable::visitChildren):
        * runtime/Executable.h:
        (JSC::ProgramExecutable::createStructure):
        (JSC::FunctionExecutable::createStructure):
        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::visitChildren):
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::createStructure):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::createStructure):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::visitChildren):
        * runtime/JSArray.cpp:
        (JSC::JSArray::visitChildren):
        * runtime/JSCell.cpp:
        * runtime/JSCell.h:
        (JSC::JSCell::JSCell::JSCell):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::visitChildren):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSONObject.h:
        (JSC::JSONObject::createStructure):
        * runtime/JSObject.cpp:
        (JSC::JSObject::visitChildren):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::visitChildren):
        * runtime/JSPropertyNameIterator.h:
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::visitChildren):
        * runtime/JSString.h:
        (JSC::RopeBuilder::createStructure):
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::visitChildren):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::visitChildren):
        * runtime/PropertyMapHashTable.h:
        (JSC::PropertyMapEntry::PropertyMapEntry):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::visitChildren):
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::visitChildren):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::ScopeChainNode):
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::visitChildren):
        * runtime/Structure.h:
        (JSC::Structure::createStructure):
        (JSC::JSCell::classInfo):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::visitChildren):
        * runtime/StructureChain.h:
        * runtime/WriteBarrier.h:
        (JSC::WriteBarrierBase::set):
        (JSC::WriteBarrierBase::get):
        (JSC::WriteBarrierBase::operator*):
        (JSC::WriteBarrierBase::operator->):
        (JSC::WriteBarrier::WriteBarrier):
        * wtf/Assertions.h:

2011-05-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make GC validation more aggressive
        https://bugs.webkit.org/show_bug.cgi?id=60802

        This patch makes the checks performed under GC_VALIDATION
        much more aggressive, and adds the checks to more places
        in order to allow us to catch GC bugs much closer to the
        point of failure.

        * JavaScriptCore.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::visitChildren):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock):
        * heap/MarkedSpace.cpp:
        * runtime/Arguments.cpp:
        (JSC::Arguments::visitChildren):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::visitChildren):
        (JSC::ProgramExecutable::visitChildren):
        (JSC::FunctionExecutable::visitChildren):
        * runtime/Executable.h:
        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::visitChildren):
        * runtime/GetterSetter.h:
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::createStructure):
        (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::visitChildren):
        * runtime/JSArray.cpp:
        (JSC::JSArray::visitChildren):
        * runtime/JSCell.cpp:
        (JSC::slowValidateCell):
        * runtime/JSCell.h:
        (JSC::JSCell::JSCell::unvalidatedStructure):
        (JSC::JSCell::JSCell::JSCell):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::visitChildren):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::visitChildren):
        (JSC::slowValidateCell):
        * runtime/JSONObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::visitChildren):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::visitChildren):
        * runtime/JSPropertyNameIterator.h:
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::visitChildren):
        * runtime/JSString.h:
        (JSC::RopeBuilder::JSString):
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::visitChildren):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::visitChildren):
        * runtime/PropertyMapHashTable.h:
        (JSC::PropertyMapEntry::PropertyMapEntry):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::visitChildren):
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::visitChildren):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::ScopeChainNode):
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::visitChildren):
        * runtime/Structure.h:
        (JSC::JSCell::classInfo):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::visitChildren):
        * runtime/StructureChain.h:
        * runtime/WriteBarrier.h:
        (JSC::validateCell):
        (JSC::JSCell):
        (JSC::JSGlobalObject):
        (JSC::WriteBarrierBase::set):
        (JSC::WriteBarrierBase::setMayBeNull):
        (JSC::WriteBarrierBase::setEarlyValue):
        (JSC::WriteBarrierBase::get):
        (JSC::WriteBarrierBase::operator*):
        (JSC::WriteBarrierBase::operator->):
        (JSC::WriteBarrierBase::unvalidatedGet):
        (JSC::WriteBarrier::WriteBarrier):
        * wtf/Assertions.h:

2011-05-01  Holger Hans Peter Freyther  <holger@moiji-mobile.com>

        Reviewed by Steve Block.

        [android] OS(ANDROID) does not imply PLATFORM(ANDROID)
        https://bugs.webkit.org/show_bug.cgi?id=59888

        It is possible to build QtWebKit and others for OS(ANDROID). Let
        the buildsystem decide which platform is to be build.

        * wtf/Platform.h:

2011-05-12  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        XMLDocumentParserLibxml2 should play nice with strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59394

        This portion of the change introduces a PassTraits template, which
        is used to enable takeFirst() to work for a Deque holding OwnPtrs,
        and optimize it for a Deque holding RefPtrs. In the future it can
        be deployed elsewhere to make our data structures work better with
        our smart pointers.

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/Deque.h:
        (WTF::::takeFirst):
        * wtf/PassTraits.h: Added.
        (WTF::PassTraits::transfer):

2011-05-12  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed.

        Revert r86334, it broke the win build. WinCE build is fixed even without this patch. WinCairo remains broken atm, everything else works.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-05-12  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed.

        String operator+ reallocates unnecessarily when concatting > 2 strings
        https://bugs.webkit.org/show_bug.cgi?id=58420

        Try to fix WinCE/WinCairo linking by exporting three symbols, not sure whether it's correct though. Win worked just fine before.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-05-12  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Darin Adler.

        String operator+ reallocates unnecessarily when concatting > 2 strings
        https://bugs.webkit.org/show_bug.cgi?id=58420

        Provide a faster String append operator.
        Up until now, "String operator+(const String& a, const String& b)" copied String a into a temporary
        object, and used a.append(b), which reallocates a new buffer of aLength+bLength. When concatting
        N strings using operator+, this leads to N-1 reallocations.

        Replace this with a flexible operator+ implementation, that avoids these reallocations.
        When concatting a 'String' with any string type (char*, UChar, Vector<char>, String, AtomicString, etc..)
        a StringAppend<String, T> object is created, which holds the intermediate string objects, and delays
        creation of the final string, until operator String() is invoked.

        template<typename T>
        StringAppend<String, T> operator+(const String& string1, T string2)
        {
            return StringAppend<String, T>(string1, string2);
        }

        template<typename U, typename V, typename W>
        StringAppend<U, StringAppend<V, W> > operator+(U string1, const StringAppend<V, W>& string2)
        {
            return StringAppend<U, StringAppend<V, W> >(string1, string2);
        }

        When concatting three strings - "String a, b, c; String result = a + b + c;" following happens:
        first a StringAppend<String, String> object is created by operator+(const String& string1, String string2).
        Then operator+(String string1, const StringAppend<String, String>& string2) is invoked, which returns
        a StringAppend<String, StringAppend<String, String> > object.
        Then operator String() is invoked, which allocates a StringImpl object, once, large enough to hold the
        final string - it uses tryMakeString provided by StringConcatenate.h under the hoods, which guards us
        against too big string allocations, etc.

        Note that the second template, defines a recursive way to concat an arbitary number of strings
        into a single String with just one allocation.

        * GNUmakefile.list.am: Add StringOperators.h to build.
        * JavaScriptCore.exp: Export WTF::emptyString(). Remove no longer needed symbols.
        * JavaScriptCore.gypi: Add StringOperators.h to build.
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
        * wtf/text/AtomicString.h: Pull in StringConcatenate.h at the end of the file.
        * wtf/text/StringConcatenate.h: Conditionally include AtomicString.h to avoid a cyclic dependency. Pull in StringOperators.h at the end of the file.
        * wtf/text/StringOperators.h: Added. This is never meant to be included directly, including either WTFString.h or AtomicString.h automatically pulls in this file.
        (WTF::StringAppend::StringAppend):
        (WTF::StringAppend::operator String):
        (WTF::StringAppend::operator AtomicString):
        (WTF::StringAppend::writeTo):
        (WTF::StringAppend::length):
        (WTF::operator+):
        * wtf/text/WTFString.cpp: Remove operator+ implementations that use String::append(). 
        (WTF::emptyString): Add new shared empty string free function.
        * wtf/text/WTFString.h: Replace operator+ implementations by StringAppend template solution. Pull in AtomicString.h at the end of the file.

2011-05-12  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix.

        * wtf/Platform.h:

2011-05-12  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Csaba Osztrogonác.

        [Qt] Arm debug build failing on ARMAssembler::debugOffset()
        https://bugs.webkit.org/show_bug.cgi?id=60688

        Related to svn rev 85523

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::debugOffset):

2011-05-11  Igor Oliveira  <igor.oliveira@openbossa.org>

        Reviewed by Eric Seidel.

        WebKit does not build with GCCE
        https://bugs.webkit.org/show_bug.cgi?id=60667

        Allow compile WebKit with GCCE

        * wtf/Alignment.h:
        * wtf/Platform.h:

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

        Reviewed by Eric Seidel.

        Enable strict PassOwnPtr on Mac
        https://bugs.webkit.org/show_bug.cgi?id=60684

        This should build cleanly now.

        * wtf/PassOwnPtr.h:

2011-05-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Protect JSC from WebCore executing JS during JS wrapper finalization
        https://bugs.webkit.org/show_bug.cgi?id=60672
        <rdar://problem/9350997>

        Detect when we're trying to execute JS during GC and prevent the
        execution from happening.  We also assert that this isn't happening
        as it implies incorrect behaviour of an object's destructor.

        * JavaScriptCore.exp:
        * heap/Heap.cpp:
        * heap/Heap.h:
        (JSC::Heap::isBusy):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::isCollectorBusy):

2011-05-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Enable gc mark validation in temporarily in release builds
        https://bugs.webkit.org/show_bug.cgi?id=60678

        Make it easier to turn the gc mark validation on and off, and
        temporarily turn it on for all builds.

        * heap/MarkStack.cpp:
        * heap/MarkStack.h:
        (JSC::MarkStack::append):
        (JSC::MarkStack::internalAppend):
        * runtime/WriteBarrier.h:
        (JSC::MarkStack::appendValues):
        * wtf/Platform.h:

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

        Reviewed by Oliver Hunt.

        <rdar://problem/9331651> REGRESSION: RPRVT grows by 1MB / sec @ dvd2blu.com
        
        SunSpider reports no change.

        This bug was caused by changing Structure and Executable to being GC
        objects, and by a long-standing bug that would thrash the global object
        between dictionary and non-dictionary states.

        * runtime/BatchedTransitionOptimizer.h:
        (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer): Don't
        eagerly transition to dictionary -- this can cause pathological dictionary
        churn, and it's not necessary, since objects know how to automatically
        transition to dictionary when necessary.

        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal): Be sure to report
        extra cost from compilation, because it can be quite high. This is especially
        important for program code, since DOM timers can repeatedly allocate
        program code without allocating any other objects.

        * runtime/JSObject.cpp:
        (JSC::JSObject::removeDirect): Don't transition to the uncacheable state
        if the thing we're trying to remove doesn't exist. This can happen during
        compilation, since the compiler needs to ensure that no pre-existing
        conflicting definitions exist for certain declarations.

2011-05-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make mark stack validation functions do something useful in a release build
        https://bugs.webkit.org/show_bug.cgi?id=60645

        Turn ASSERTs into actual if(...) CRASH(); statements.

        * heap/MarkStack.cpp:
        (JSC::MarkStack::validateValue):

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

        Reviewed by Martin Robinson.

        Fix copy&paste error in comment.

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::stringGetByValStubGenerator): the value is stored in
        regT2, not regT1.

2011-05-11  Adam Roben  <aroben@apple.com>

        WinCE build fixes for strict PassOwnPtr

        * wtf/unicode/CollatorDefault.cpp:
        (WTF::Collator::userDefault): Use adoptPtr.

2011-05-11  Holger Hans Peter Freyther  <holger@moiji-mobile.com>

        Unreviewed build fix.

        [MIPS] Fix compilation of the MIPS JIT

        Include the MIPSAssembler.h first to indirectly include
        AssemblerBuffer.h before the AbstractMacroAssembler.h. This
        order is used for the ARM and X86 MacroAssembler*.h

        * assembler/MacroAssemblerMIPS.h:

2011-05-11  Adam Roben  <aroben@apple.com>

        Turn on strict PassOwnPtr on Windows

        Fixes <http://webkit.org/b/60632> Windows should build with strict PassOwnPtr enabled

        Reviewed by Adam Barth.

        * wtf/PassOwnPtr.h:

2011-05-10  Stephanie Lewis  <slewis@apple.com>

        Unreviewed.

        Revert accidental JavaScriptCore change in http://trac.webkit.org/changeset/86130

        * Configurations/JavaScriptCore.xcconfig:

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

        Reviewed by David Levin.

        Enable strict PassOwnPtr on Chromium
        https://bugs.webkit.org/show_bug.cgi?id=60502

        Other platforms to follow.

        * wtf/PassOwnPtr.h:

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

        Reviewed by Darin Adler.

        Fixed up some #include dependencies so the WriteBarrier class can actually call Heap::writeBarrier
        https://bugs.webkit.org/show_bug.cgi?id=60532

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.xcodeproj/project.pbxproj: Build!

        * heap/Handle.h: Moved HandleTypes to its own header because that's the
        WebKit style, and it was necessary to resolve a circular dependency
        between Handle.h and WriteBarrier.h.

        * heap/Heap.h:
        (JSC::Heap::writeBarrier): Added an inline no-op writeBarrier(), to
        verify that all the code is in the right place.

        * heap/MarkStack.h: Moved WriteBarrier operations to WriteBarrier.h to
        resolve a circular dependency.

        * runtime/ArgList.h:
        * runtime/JSCell.h: #include WriteBarrier.h since we don't get it for
        free anymore.

        * runtime/PropertyMapHashTable.h:
        (JSC::PropertyTable::PropertyTable): Call the real writeBarrier()
        function, now that it exists.

        * runtime/SmallStrings.h: Removed a stray #include to resolve a circular
        dependency.

        * runtime/WriteBarrier.h:
        (JSC::WriteBarrierBase::set):
        (JSC::MarkStack::append):
        (JSC::MarkStack::appendValues): Updated to match the changes above.

2011-05-10  Oliver Hunt  <oliver@apple.com>

        Build fix.

        * heap/MarkStack.cpp:
        (JSC::MarkStack::validateValue):

2011-05-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Add some aggressive GC validation to debug builds.
        https://bugs.webkit.org/show_bug.cgi?id=60601

        When assertions are enabled we now do some validity checking
        of objects being added to the mark stack.

        * bytecode/Instruction.h:
        (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::PolymorphicStubInfo):
        (JSC::PolymorphicAccessStructureList::visitAggregate):
        * heap/MarkStack.cpp:
        (JSC::MarkStack::validateSet):
        (JSC::MarkStack::validateValue):
        * heap/MarkStack.h:
        (JSC::MarkStack::appendValues):
        (JSC::MarkStack::append):
        (JSC::MarkStack::internalAppend):

2011-05-09  Darin Adler  <darin@apple.com>

        Reviewed by Oliver Hunt.

        http://bugs.webkit.org/show_bug.cgi?id=60509
        Wrong type used for return value from strlen

        * wtf/FastMalloc.cpp:
        (WTF::fastStrDup): Use size_t. Also don't bother checking for failure since
        fastMalloc won't return if it fails.

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

        Reviewed by Eric Seidel.

        CSP should block Function constructor
        https://bugs.webkit.org/show_bug.cgi?id=60240

        When eval is disabled, we need to block the use of the function
        constructor.  However, the WebCore JSC bindings call the function
        constructor directly to create inline event listeners.  To support that
        use, this patch adds an entrypoint that bypasses the check for whether
        eval is enabled.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        (JSC::constructFunctionSkippingEvalEnabledCheck):
        * runtime/FunctionConstructor.h:

2011-05-09  Adam Roben  <aroben@apple.com>

        Automatically touch WebKit.idl whenever any other WebKit1 IDL file changes

        Fixes <http://webkit.org/b/60468> WebKit.idl needs to be manually touched whenever any other
        WebKit1 IDL file changes to avoid build errors

        Reviewed by Tim Hatcher.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
        Updated for script rename.

        * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py: Removed.
        * JavaScriptCore.vcproj/JavaScriptCore/work-around-vs-dependency-tracking-bugs.py: Renamed
        from react-to-vsprops-changes.py.
        (top level): Moved a constant here from main.
        (main): Moved most code from here to react_to_vsprops_changes. Added a call to the new
        react_to_webkit1_interface_changes function.
        (react_to_vsprops_changes): Moved code here from main. Updated to use the
        TOP_LEVEL_DIRECTORY global. Moved some code from here to mtime_of_newest_file_matching_globa
        and touch_if_older_than.
        (react_to_webkit1_interface_changes): Added. Touches WebKit.idl if any other WebKit1 IDL
        file has changed.
        (mtime_of_newest_file_matching_glob): Added. Code came from main.
        (touch_if_older_than): Added. Code came from main.

2011-05-08  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Dan Bernstein.

        Make JSRetainPtr work with JSGlobalContextRefs.
        https://bugs.webkit.org/show_bug.cgi?id=60452

        Add specialized functions for JSRetain and JSRelease when dealing with JSGlobalContextRefs.

        * API/JSRetainPtr.h:
        (JSRetain):
        (JSRelease):

2011-05-07  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Daniel Bates.

        Fix compile with GCC 4.6.0
        https://bugs.webkit.org/show_bug.cgi?id=60380

        Remove unused local variable from code.

        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncMatch):

2011-05-06  Alexis Menard  <alexis.menard@openbossa.org>

        Unreviewed build fix with gcc 4.6.0 on linux and c++0x support.

        std::tr1::has_trivial_constructor is in <tr1/memory>.

        * wtf/TypeTraits.h:

2011-05-05  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Adam Barth.

        Added convenience methods to convert from a byte to hex ASCII digit
        characters and vice-versa.
        https://bugs.webkit.org/show_bug.cgi?id=59834

        * wtf/ASCIICType.h:
        (WTF::toASCIIHexValue):
        (WTF::lowerNibbleToASCIIHexDigit):
        (WTF::upperNibbleToASCIIHexDigit):

2011-05-05  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Benjamin Poulain.

        [Qt] Make QtWebKit build when using gcc 4.6.0
        https://bugs.webkit.org/show_bug.cgi?id=60265

        If QtWebKit is compiled with gcc 4.6.0 or later we don't want to deactivate
        the c++0x support because it works.

        * JavaScriptCore.pro:

2011-05-04  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Geoffrey Garen.

        Port MachineStackMarker.cpp to Windows x64
        https://bugs.webkit.org/show_bug.cgi?id=60216

        * heap/MachineStackMarker.cpp:
        (JSC::getPlatformThreadRegisters): the CONTEXT struct is usable also
        on 64-bit Windows.
        (JSC::otherThreadStackPointer): return the Rsp register on Windows x64.

2011-05-04  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Martin Robinson.

        Link libjavascriptcoregtk on Windows with winmm.dll
        https://bugs.webkit.org/show_bug.cgi?id=60215

        * GNUmakefile.am:

2011-05-04  Tao Bai  <michaelbai@chromium.org>

        Reviewed by David Kilzer.

        Populate touch-icon url to FrameLoaderClient
        https://bugs.webkit.org/show_bug.cgi?id=59143

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Darin Adler.

        <rdar://problem/9366557> Various crashes due to bad DFG codegen at canalplus.fr

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes): Removed a stray line of
        code that accidentally survived the conversion to a switch statement,
        causing a lot of important code not to run most of the time.

        Since this is not a trivial finger-picking mistake, I will not call it a
        typo.

2011-05-04  Adam Roben  <aroben@apple.com>

        Another attempted build fix

        * wtf/OwnPtr.h:
        (WTF::OwnPtr::operator==):
        (WTF::OwnPtr::operator!=):
        * wtf/PassOwnPtr.h:
        (WTF::PassOwnPtr::operator==):
        (WTF::PassOwnPtr::operator!=):
        Added a return statement. And made a tweak based on a suggestion from Anders Carlsson.

2011-05-04  Adam Roben  <aroben@apple.com>

        Try to fix Leopard, Qt, and probably others

        * wtf/OwnPtr.h:
        (WTF::OwnPtr::operator==):
        (WTF::OwnPtr::operator!=):
        * wtf/PassOwnPtr.h:
        (WTF::PassOwnPtr::operator==):
        (WTF::PassOwnPtr::operator!=):
        Try to get the compiler not to instantiate these function templates unnecessarily.

2011-05-03  Adam Roben  <aroben@apple.com>

        Disallow equality comparisons between [Pass]OwnPtrs

        If you have two OwnPtrs that are equal, you've already lost. (Unless you're doing something
        really sneaky, in which case you should stop!)

        Fixes <http://webkit.org/b/60053> Testing OwnPtrs for equality should cause a compiler error

        Reviewed by Anders Carlsson and Antti Koivisto.

        * wtf/OwnPtr.h:
        (WTF::OwnPtr::operator==):
        (WTF::OwnPtr::operator!=):
        * wtf/PassOwnPtr.h:
        (WTF::PassOwnPtr::operator==):
        (WTF::PassOwnPtr::operator!=):
        Added private equality operators that fail to compile when used. (When not used, the
        compiler will skip over them because they are function templates.)

2011-05-04  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Gavin Barraclough.

        JITArithmetic.cpp produces a warning on a unused variable.
        https://bugs.webkit.org/show_bug.cgi?id=60060

        Just properly use what we already have converted.

        * jit/JITArithmetic.cpp:
        (JSC::JIT::emitSlow_op_add):
        (JSC::JIT::emitSlow_op_mul):

2011-05-04  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Geoffrey Garen.

        JITPropertyAccess produces a unused but set variable warning in gcc 4.6.0.
        https://bugs.webkit.org/show_bug.cgi?id=60050

        This patch fix a compilation warning. The new warning scenario -Wunused-but-set-variable
        in gcc 4.6.0 is included in -Wall and therefore stops the compilation when warnings are treated
        as errors. The patch introduces a new macro ASSERT_JIT_OFFSET_UNUSED and ASSERT_WITH_MESSAGE_UNUSED
        which copy the idea of ASSERT_UNUSED.

        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::emit_op_put_by_id):
        * wtf/Assertions.h:
        (assertWithMessageUnused):

2011-04-29  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Seidel.

        Implement FULLSCREEN_API on Windows, Part 4: Enable it
        https://bugs.webkit.org/show_bug.cgi?id=59798

        * wtf/Platform.h: Set ENABLE_FULLSCREEN_API on win.

2011-05-03  Alexis Menard  <alexis.menard@openbossa.org>

        Reviewed by Eric Seidel.

        Unused but set variable warning in MacroAssemberX86_64
        https://bugs.webkit.org/show_bug.cgi?id=59482

        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::call):
        (JSC::MacroAssemblerX86_64::tailRecursiveCall):
        (JSC::MacroAssemblerX86_64::makeTailRecursiveCall):

2011-05-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make malloc validation useful
        https://bugs.webkit.org/show_bug.cgi?id=57502

        Reland this patch (rolled out in 82905) without
        turning it on by default.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/FastMalloc.cpp:
        (WTF::tryFastMalloc):
        (WTF::fastMalloc):
        (WTF::tryFastCalloc):
        (WTF::fastCalloc):
        (WTF::fastFree):
        (WTF::tryFastRealloc):
        (WTF::fastRealloc):
        (WTF::fastMallocSize):
        (WTF::TCMalloc_PageHeap::isScavengerSuspended):
        (WTF::TCMalloc_PageHeap::scheduleScavenger):
        (WTF::TCMalloc_PageHeap::suspendScavenger):
        (WTF::TCMalloc_PageHeap::signalScavenger):
        (WTF::TCMallocStats::malloc):
        (WTF::TCMallocStats::free):
        (WTF::TCMallocStats::fastCalloc):
        (WTF::TCMallocStats::tryFastCalloc):
        (WTF::TCMallocStats::calloc):
        (WTF::TCMallocStats::fastRealloc):
        (WTF::TCMallocStats::tryFastRealloc):
        (WTF::TCMallocStats::realloc):
        (WTF::TCMallocStats::fastMallocSize):
        * wtf/FastMalloc.h:
        (WTF::Internal::fastMallocValidationHeader):
        (WTF::Internal::fastMallocValidationSuffix):
        (WTF::Internal::fastMallocMatchValidationType):
        (WTF::Internal::setFastMallocMatchValidationType):
        (WTF::fastMallocMatchValidateFree):
        (WTF::fastMallocValidate):

2011-05-03  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Anders Carlsson.

        Compile error with GCC 4.6.0, tries to assign unsigned& to bitfield
        https://bugs.webkit.org/show_bug.cgi?id=59261

        Use unary '+' to force proper type detection in template arguments
        with GCC 4.6.0. See bug report for more details.

        * runtime/Structure.cpp:
        (JSC::StructureTransitionTable::remove): Use '+' to force precise type detection.
        (JSC::StructureTransitionTable::add): ditto.
        * runtime/Structure.h:
        (JSC::StructureTransitionTable::keyForWeakGCMapFinalizer): ditto.

2011-05-03  Jessie Berlin  <jberlin@apple.com>

        Rubber-stamped by Adam Roben.

        Revert r85550 and r85575.

        Variables cannot be exported via the .def file. Instead, they should be annotated with
        JS_EXPORTDATA.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/Structure.cpp:
        (JSC::Structure::materializePropertyMap):
        * runtime/Structure.h:
        (JSC::Structure::typeInfo):
        (JSC::Structure::previousID):
        (JSC::Structure::propertyStorageCapacity):
        (JSC::Structure::propertyStorageSize):
        (JSC::Structure::get):
        (JSC::Structure::materializePropertyMapIfNecessary):

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

        Allow implicit conversion from nullptr_t to PassOwnPtr

        This makes it a lot easier to write code that just wants a null PassOwnPtr, especially in
        strict PassOwnPtr mode.

        Fixes <http://webkit.org/b/59964> Implicit conversion from std::nullptr_t to PassOwnPtr
        doesn't work, but should

        Reviewed by Adam Barth.

        * wtf/PassOwnPtr.h:
        (WTF::PassOwnPtr::PassOwnPtr): Added a non-explicit constructor that takes a nullptr_t.

        * wtf/MessageQueue.h:
        (WTF::::waitForMessageFilteredWithTimeout):
        (WTF::::tryGetMessage):
        Use the new implicit conversion.

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

        Rubber-stamped by Oliver Hunt.

        Remove an assertion that Windows was hitting on launch.

        * runtime/Structure.cpp:
        (JSC::Structure::materializePropertyMap):
        * runtime/Structure.h:
        (JSC::Structure::typeInfo):
        (JSC::Structure::previousID):
        (JSC::Structure::propertyStorageCapacity):
        (JSC::Structure::propertyStorageSize):
        (JSC::Structure::get):
        (JSC::Structure::materializePropertyMapIfNecessary):

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

        Reviewed by Geoff Garen.

        <rdar://problem/9371948> JavaScriptCore should build with GCC 4.2

        * Configurations/CompilerVersion.xcconfig:

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

        ARMv7 build fix.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::Jump::link):
        (JSC::AbstractMacroAssembler::Jump::linkTo):

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

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

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

        Reviewed by Geoffrey Garen.

        crash in JSC::RegExp::match
        https://bugs.webkit.org/show_bug.cgi?id=58922

        Cleared chained backtrack data label when linking label even if that 
        label doesn't chain itself.  This is needed so that subsequent 
        backtrack data labels point to the next outer paren and not within 
        the current paren.

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

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

        Reviewed by Oliver Hunt.

        Tiny bit of heap cleanup.

        * heap/MarkedBlock.h:
        (JSC::MarkedBlock::contains): Tightened up an assertion and a comment.

        * heap/MarkedSpace.h:
        (JSC::MarkedSpace::globalData):
        (JSC::MarkedSpace::highWaterMark):
        (JSC::MarkedSpace::setHighWaterMark): Moved inlines out of the class
        definition, for better clarity.

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

        Reviewed by Gavin Barraclough.

        Correct marking of interpreter data in mixed mode builds
        https://bugs.webkit.org/show_bug.cgi?id=59962

        We had a few places in mixed mode builds where we would not
        track data used by the interpreter for marking.  This patch
        corrects the problem and adds a number of assertions to catch
        live Structures being collected.

        * JavaScriptCore.exp:
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::ARMInstructionFormatter::debugOffset):
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addPropertyAccessInstruction):
        (JSC::CodeBlock::addGlobalResolveInstruction):
        (JSC::CodeBlock::addStructureStubInfo):
        (JSC::CodeBlock::addGlobalResolveInfo):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitResolve):
        (JSC::BytecodeGenerator::emitResolveWithBase):
        (JSC::BytecodeGenerator::emitGetById):
        (JSC::BytecodeGenerator::emitPutById):
        (JSC::BytecodeGenerator::emitDirectPutById):
        * runtime/Structure.cpp:
        (JSC::Structure::materializePropertyMap):
        * runtime/Structure.h:
        (JSC::Structure::typeInfo):
        (JSC::Structure::previousID):
        (JSC::Structure::propertyStorageCapacity):
        (JSC::Structure::propertyStorageSize):
        (JSC::Structure::get):
        (JSC::Structure::materializePropertyMapIfNecessary):

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

        Reviewed by Alexey Proskuryakov.

        Use native NullPtr when using GCC 4.6.0 and C++0x
        https://bugs.webkit.org/show_bug.cgi?id=59252

        GCC 4.6.0 has nullptr support, use it when possible.

        * wtf/NullPtr.cpp: include config.h to pull in Platform.h before
        NullPtr.h, since we need the GCC_VERSION_AT_LEAST definition.
        * wtf/NullPtr.h: check for GCC >= 4.6.0 and C++0x in order to
        use native nullptr.

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

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=59950
        Clean up AssemblerBuffer to use a Vector internally.

        AssemblerBuffer handles reallocing a byte array itself - stop that.

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::executableCopy):
        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerLabel::AssemblerLabel):
        (JSC::AssemblerLabel::labelAtOffset):
        (JSC::AssemblerBuffer::AssemblerBuffer):
        (JSC::AssemblerBuffer::~AssemblerBuffer):
        (JSC::AssemblerBuffer::isAvailable):
        (JSC::AssemblerBuffer::ensureSpace):
        (JSC::AssemblerBuffer::isAligned):
        (JSC::AssemblerBuffer::putIntegral):
        (JSC::AssemblerBuffer::putIntegralUnchecked):
        (JSC::AssemblerBuffer::putByteUnchecked):
        (JSC::AssemblerBuffer::putByte):
        (JSC::AssemblerBuffer::putShortUnchecked):
        (JSC::AssemblerBuffer::putShort):
        (JSC::AssemblerBuffer::putIntUnchecked):
        (JSC::AssemblerBuffer::putInt):
        (JSC::AssemblerBuffer::putInt64Unchecked):
        (JSC::AssemblerBuffer::putInt64):
        (JSC::AssemblerBuffer::codeSize):
        (JSC::AssemblerBuffer::label):
        (JSC::AssemblerBuffer::executableCopy):
        (JSC::AssemblerBuffer::rewindToLabel):
        (JSC::AssemblerBuffer::debugOffset):
        (JSC::AssemblerBuffer::append):
        (JSC::AssemblerBuffer::grow):
        * assembler/AssemblerBufferWithConstantPool.h:
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::linkCall):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::X86InstructionFormatter::rewindToLabel):

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

        Reviewed by Alexy Proskuryakov.

        Avoid potential buffer overflow in WTFLog() and WTFLogVerbose()
        https://bugs.webkit.org/show_bug.cgi?id=59949

        * wtf/Assertions.cpp: Check for 0 or empty format string in WTFLog() and WTFLogVerbose().

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

        Reviewed by Alexey Proskuryakov.

        StringImpl::endsWith has some insane code
        https://bugs.webkit.org/show_bug.cgi?id=59900

        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::endsWith):
            - m_data shadows a member variable of the same name.

2011-05-02  Gabor Loki  <loki@webkit.org>

        Buildfix for ARM after r85448

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::loadBranchTarget):

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

        Reviewed by Gavin Barraclough.

        Strict-mode only reserved words not reserved
        https://bugs.webkit.org/show_bug.cgi?id=55342

        Fix line number tracking when we rollback the lexer.

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

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

        Reviewed by Gavin Barraclough.

        ES5 Strict mode does not allow getter and setter for same propId
        https://bugs.webkit.org/show_bug.cgi?id=57295

        Simplify and correct the logic for strict mode object literals.

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

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

        Reviewed by Gavin Barraclough.

        Assigning to function identifier under strict should throw
        https://bugs.webkit.org/show_bug.cgi?id=59289

        Add logic to StaticScopeObject to ensure we don't silently consume
        writes to constant properties.

        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::put):

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

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=59903
        Use AssemblerLabel throughout Assembler classes, AssemblerBuffer

        Creating a lable() into the AssemblerBuffer should return an AssemblerLabel,
        not an unsigned int.

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::executableCopy):
        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::blx):
        (JSC::ARMAssembler::label):
        (JSC::ARMAssembler::loadBranchTarget):
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::b):
        (JSC::ARMv7Assembler::blx):
        (JSC::ARMv7Assembler::bx):
        (JSC::ARMv7Assembler::label):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::label):
        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::label):
        * assembler/AssemblerBufferWithConstantPool.h:
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::label):
        (JSC::MIPSAssembler::relocateJumps):
        * assembler/SH4Assembler.h:
        (JSC::SH4Assembler::loadConstant):
        (JSC::SH4Assembler::loadConstantUnReusable):
        (JSC::SH4Assembler::call):
        (JSC::SH4Assembler::jmp):
        (JSC::SH4Assembler::jne):
        (JSC::SH4Assembler::je):
        (JSC::SH4Assembler::label):
        (JSC::SH4Assembler::oneShortOp):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::call):
        (JSC::X86Assembler::jmp_r):
        (JSC::X86Assembler::label):
        (JSC::X86Assembler::X86InstructionFormatter::immediateRel32):
        (JSC::X86Assembler::X86InstructionFormatter::label):

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

        Reviewed by David Levin.

        Enable strict mode for OwnPtr and PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59428

        * wtf/OwnPtr.h:

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

        Reviewed by Adam Barth.

        Enable strict OwnPtr for PLATFORM(WIN)
        https://bugs.webkit.org/show_bug.cgi?id=59881

        * wtf/OwnPtr.h:

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

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=59896
        Remove JmpSrc/JmpDst types.

        The JmpSrc/JmpDst classes predate the MacroAssembler interface. Having these
        object be per-assembler in unhelpful, causes unnecessary code duplication,
        and prevents the AssemblerBuffer from providing a richer type for labels.
        The limited semantic meaning that they did convey is undermined by the manner
        in which their meanings have been overloaded (use of JmpSrc for Call, JmpDst
        for data labels).

        Jumps on ARMv7 have had additional information added to the object via the
        ARMv7 JmpSrc. This data should probably be in the instruction stream. This
        patch does not fix the problem, and moves the data (ifdefed) to
        AbstractMacroAssembler::Jump (which is effectively where it was before!).
        This at least closes the hole such that no further data may be added to JmpSrc,
        but this is unfortunate, and should be cleaned up.

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::blx):
        (JSC::ARMAssembler::label):
        (JSC::ARMAssembler::align):
        (JSC::ARMAssembler::loadBranchTarget):
        (JSC::ARMAssembler::jmp):
        (JSC::ARMAssembler::linkPointer):
        (JSC::ARMAssembler::linkJump):
        (JSC::ARMAssembler::linkCall):
        (JSC::ARMAssembler::getRelocatedAddress):
        (JSC::ARMAssembler::getDifferenceBetweenLabels):
        (JSC::ARMAssembler::getCallReturnOffset):
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::b):
        (JSC::ARMv7Assembler::blx):
        (JSC::ARMv7Assembler::bx):
        (JSC::ARMv7Assembler::label):
        (JSC::ARMv7Assembler::align):
        (JSC::ARMv7Assembler::getRelocatedAddress):
        (JSC::ARMv7Assembler::getDifferenceBetweenLabels):
        (JSC::ARMv7Assembler::getCallReturnOffset):
        (JSC::ARMv7Assembler::linkJump):
        (JSC::ARMv7Assembler::linkCall):
        (JSC::ARMv7Assembler::linkPointer):
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::Label::isSet):
        (JSC::AbstractMacroAssembler::Call::Call):
        (JSC::AbstractMacroAssembler::Jump::Jump):
        (JSC::AbstractMacroAssembler::Jump::link):
        (JSC::AbstractMacroAssembler::Jump::linkTo):
        (JSC::AbstractMacroAssembler::linkPointer):
        (JSC::AbstractMacroAssembler::getLinkerAddress):
        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerLabel::AssemblerLabel):
        (JSC::AssemblerLabel::isSet):
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::patch):
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::label):
        (JSC::MIPSAssembler::align):
        (JSC::MIPSAssembler::getRelocatedAddress):
        (JSC::MIPSAssembler::getDifferenceBetweenLabels):
        (JSC::MIPSAssembler::getCallReturnOffset):
        (JSC::MIPSAssembler::linkJump):
        (JSC::MIPSAssembler::linkCall):
        (JSC::MIPSAssembler::linkPointer):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::branchDouble):
        (JSC::MacroAssemblerARMv7::branchDoubleZeroOrNaN):
        (JSC::MacroAssemblerARMv7::jump):
        (JSC::MacroAssemblerARMv7::nearCall):
        (JSC::MacroAssemblerARMv7::call):
        (JSC::MacroAssemblerARMv7::ret):
        (JSC::MacroAssemblerARMv7::tailRecursiveCall):
        (JSC::MacroAssemblerARMv7::makeBranch):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::nearCall):
        (JSC::MacroAssemblerMIPS::call):
        (JSC::MacroAssemblerMIPS::tailRecursiveCall):
        (JSC::MacroAssemblerMIPS::branchTrue):
        (JSC::MacroAssemblerMIPS::branchFalse):
        (JSC::MacroAssemblerMIPS::branchEqual):
        (JSC::MacroAssemblerMIPS::branchNotEqual):
        * assembler/SH4Assembler.h:
        (JSC::SH4Assembler::call):
        (JSC::SH4Assembler::jmp):
        (JSC::SH4Assembler::jne):
        (JSC::SH4Assembler::je):
        (JSC::SH4Assembler::label):
        (JSC::SH4Assembler::align):
        (JSC::SH4Assembler::linkJump):
        (JSC::SH4Assembler::linkCall):
        (JSC::SH4Assembler::linkPointer):
        (JSC::SH4Assembler::getCallReturnOffset):
        (JSC::SH4Assembler::getRelocatedAddress):
        (JSC::SH4Assembler::getDifferenceBetweenLabels):
        (JSC::SH4Assembler::patchPointer):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::call):
        (JSC::X86Assembler::jmp):
        (JSC::X86Assembler::jmp_r):
        (JSC::X86Assembler::jne):
        (JSC::X86Assembler::jnz):
        (JSC::X86Assembler::je):
        (JSC::X86Assembler::jz):
        (JSC::X86Assembler::jl):
        (JSC::X86Assembler::jb):
        (JSC::X86Assembler::jle):
        (JSC::X86Assembler::jbe):
        (JSC::X86Assembler::jge):
        (JSC::X86Assembler::jg):
        (JSC::X86Assembler::ja):
        (JSC::X86Assembler::jae):
        (JSC::X86Assembler::jo):
        (JSC::X86Assembler::jp):
        (JSC::X86Assembler::js):
        (JSC::X86Assembler::jCC):
        (JSC::X86Assembler::label):
        (JSC::X86Assembler::labelFor):
        (JSC::X86Assembler::align):
        (JSC::X86Assembler::linkJump):
        (JSC::X86Assembler::linkCall):
        (JSC::X86Assembler::linkPointer):
        (JSC::X86Assembler::getCallReturnOffset):
        (JSC::X86Assembler::getRelocatedAddress):
        (JSC::X86Assembler::getDifferenceBetweenLabels):
        (JSC::X86Assembler::rewindToLabel):
        (JSC::X86Assembler::X86InstructionFormatter::immediateRel32):
        (JSC::X86Assembler::X86InstructionFormatter::rewindToLabel):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompileMainPass):
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::atJumpTarget):
        (JSC::JIT::emitGetVirtualRegister):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jmp):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_jsr):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emit_op_jmp_scopes):

2011-05-01  Chao-ying Fu  <fu@mips.com>

        Reviewed by Eric Seidel.

        Fix MIPS build due to the split of "Condition" enum
        https://bugs.webkit.org/show_bug.cgi?id=59407

        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::debugOffset):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::branch32):
        (JSC::MacroAssemblerMIPS::compare32):

2011-04-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Adam Barth.

        Enable strict OwnPtr for GTK
        https://bugs.webkit.org/show_bug.cgi?id=59861

        * wtf/OwnPtr.h:

2011-04-30  Gavin Barraclough  <barraclough@apple.com>

        ARMv7 build fix.

        * assembler/AssemblerBufferWithConstantPool.h:

2011-04-30  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 59869 - AssemblerBuffer cleanup - disambiguate size()

        The method size() is called on the AssemblerBuffer both to acquire
        the complete size of the code, and to get a position to use as a
        label into the code. Instead, add an explicit 'label' method.

        * assembler/ARMAssembler.cpp:
        (JSC::ARMAssembler::executableCopy):
        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::blx):
        (JSC::ARMAssembler::codeSize):
        (JSC::ARMAssembler::label):
        (JSC::ARMAssembler::loadBranchTarget):
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::b):
        (JSC::ARMv7Assembler::blx):
        (JSC::ARMv7Assembler::bx):
        (JSC::ARMv7Assembler::label):
        (JSC::ARMv7Assembler::codeSize):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::codeSize):
        (JSC::ARMv7Assembler::ARMInstructionFormatter::data):
        * assembler/AbstractMacroAssembler.h:
        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::codeSize):
        (JSC::AssemblerBuffer::label):
        * assembler/AssemblerBufferWithConstantPool.h:
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::LinkBuffer):
        (JSC::LinkBuffer::linkCode):
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::newJmpSrc):
        (JSC::MIPSAssembler::appendJump):
        (JSC::MIPSAssembler::label):
        (JSC::MIPSAssembler::codeSize):
        (JSC::MIPSAssembler::relocateJumps):
        * assembler/SH4Assembler.h:
        (JSC::SH4Assembler::loadConstant):
        (JSC::SH4Assembler::loadConstantUnReusable):
        (JSC::SH4Assembler::call):
        (JSC::SH4Assembler::jmp):
        (JSC::SH4Assembler::jne):
        (JSC::SH4Assembler::je):
        (JSC::SH4Assembler::label):
        (JSC::SH4Assembler::executableCopy):
        (JSC::SH4Assembler::oneShortOp):
        (JSC::SH4Assembler::codeSize):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::call):
        (JSC::X86Assembler::jmp_r):
        (JSC::X86Assembler::codeSize):
        (JSC::X86Assembler::label):
        (JSC::X86Assembler::executableCopy):
        (JSC::X86Assembler::X86InstructionFormatter::immediateRel32):
        (JSC::X86Assembler::X86InstructionFormatter::codeSize):
        (JSC::X86Assembler::X86InstructionFormatter::label):
        (JSC::X86Assembler::X86InstructionFormatter::executableCopy):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileFunction):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::compile):

2011-04-29  Adam Barth  <abarth@webkit.org>

        Attempt to fix the Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-04-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CSP script-src should block eval
        https://bugs.webkit.org/show_bug.cgi?id=59850

        ggaren recommend a different approach to this patch, essentially
        installing a new function for function-eval and changing the AST
        representation of operator-eval to call function-eval.  However, I'm
        not sure that approach is workable because the ASTBuilder doesn't know
        about global objects, and there is added complication due to the cache.

        This approach is more dynamic, adding a branch in EvalExecutable to
        detect whether eval is current disabled in the lexical scope.  The spec
        is slightly unclear about whether we should return undefined or throw
        an exception.  I've asked Brandon to clarify the spec, but throwing an
        exception seems natural.

        * JavaScriptCore.exp:
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::disableEval):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObject):
        (JSC::JSGlobalObject::isEvalEnabled):

2011-04-29  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=59847
        Remove linkOffset from LinkBuffer

        This is redundant since removal of recompilation for exception info.

        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::LinkBuffer):
        (JSC::LinkBuffer::linkCode):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileFunction):
        * jit/JIT.cpp:
        (JSC::JIT::JIT):
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        (JSC::JIT::compile):
        (JSC::JIT::compileCTIMachineTrampolines):
        (JSC::JIT::compileCTINativeCall):
        * 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/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::finalize):
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::compile):

2011-04-29  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt & Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=59221
        [RegexFuzz] Regression blocking testing

        Okay, so the bug here is that when, in the case of a TypeParentheticalAssertion
        node, emitDisjunction recursively calls to itself to emit the nested disjunction
        the value of parenthesesInputCountAlreadyChecked is bogus (doesn't take into
        account the uncheck that has just taken place).

        Also, the special handling given to countToCheck in the case of parenthetical
        assertions is nonsense, delete it, along with the isParentheticalAssertion argument.

        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::ByteCompiler::emitDisjunction):

2011-04-29  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Adam Barth.

        Enable strict OwnPtr for Qt
        https://bugs.webkit.org/show_bug.cgi?id=59667

        * wtf/OwnPtr.h:

2011-04-29  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        Add ENABLE macro for WebKitAnimation
        https://bugs.webkit.org/show_bug.cgi?id=59729

        Add new feature to toggle WebKit Animation API.

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Mark Rowe.

        Install testapi.js along side testapi
        https://bugs.webkit.org/show_bug.cgi?id=59773

        * JavaScriptCore.xcodeproj/project.pbxproj:
        Add new build phase to copy testapi.js to install path of testapi
        on install.

2011-04-28  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        Remove IMAGE_RESIZER related code.
        https://bugs.webkit.org/show_bug.cgi?id=59735

        * Configurations/FeatureDefines.xcconfig:

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

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=59763
        DFG JIT - Unify FPRReg & FPRegisterID

        (Following on from GPRReg/RegisterID unification).

        * dfg/DFGFPRInfo.h:
        (JSC::DFG::FPRInfo::toRegister):
        (JSC::DFG::FPRInfo::debugName):
        * dfg/DFGGPRInfo.h:
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::fillDouble):
        (JSC::DFG::JITCodeGenerator::checkConsistency):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::boxDouble):
        (JSC::DFG::JITCodeGenerator::unboxDouble):
        (JSC::DFG::JITCodeGenerator::flushRegisters):
        (JSC::DFG::JITCodeGenerator::isFlushed):
        (JSC::DFG::JITCodeGenerator::setupTwoStubArgs):
        (JSC::DFG::JITCodeGenerator::setupStubArguments):
        (JSC::DFG::JITCodeGenerator::callOperation):
        (JSC::DFG::GPRResult::lockedResult):
        (JSC::DFG::FPRResult::lockedResult):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::fillNumericToDouble):
        (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGJITCompiler.h:
        * dfg/DFGNode.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::EntryLocation::EntryLocation):
        (JSC::DFG::NonSpeculativeJIT::valueToNumber):
        (JSC::DFG::NonSpeculativeJIT::valueToInt32):
        (JSC::DFG::NonSpeculativeJIT::numberToInt32):
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGNonSpeculativeJIT.h:
        (JSC::DFG::NonSpeculativeJIT::silentSpillAllRegisters):
        (JSC::DFG::NonSpeculativeJIT::silentFillAllRegisters):
        * dfg/DFGRegisterBank.h:
        (JSC::DFG::RegisterBank::iterator::regID):
        (JSC::DFG::RegisterBank::iterator::debugName):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculationCheck::SpeculationCheck):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:

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

        Revert "<http://webkit.org/b/59705> WTF::postTimer() leaks a CFRunLoopTimerRef every time it's called"

        This reverts commit r85195.  It was crashing DumpRenderTree on Lion.

        * wtf/mac/MainThreadMac.mm:
        (WTF::postTimer):

2011-04-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove WML
        https://bugs.webkit.org/show_bug.cgi?id=59678

        Remove the WML configuration option from the Mac build system.

        * Configurations/FeatureDefines.xcconfig:

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

        Unreviewed, rolling out r85233 and r85235.
        http://trac.webkit.org/changeset/85233
        http://trac.webkit.org/changeset/85235
        https://bugs.webkit.org/show_bug.cgi?id=59754

        Causes issues with jsc. (Requested by dave_levin on #webkit).

        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * jit/ExecutableAllocator.h:
        (JSC::ExecutablePool::ExecutablePool):
        * parser/SourceProvider.h:
        (JSC::SourceProvider::SourceProvider):
        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp):
        * wtf/CMakeLists.txt:
        * wtf/RefCounted.h:
        (WTF::RefCountedBase::ref):
        (WTF::RefCountedBase::hasOneRef):
        (WTF::RefCountedBase::refCount):
        (WTF::RefCountedBase::derefBase):
        * wtf/SizeLimits.cpp:
        * wtf/ThreadRestrictionVerifier.h: Removed.
        * wtf/text/CString.h:
        (WTF::CStringBuffer::CStringBuffer):

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

        Reviewed by Oliver Hunt.

        Bug 59740 - DFG JIT - Unify GPRReg & RegisterID

        Currently we use a mix of enum values throughout the DFG JIT to  represent
        gpr registers - the RegisterID provided by the MacroAssembler, and the
        GPRReg enum giving the sequential register set over which the RegisterBank
        allocates. Unify the two.

        Patch to unify FPRReg in a similar fashion will follow.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * dfg/DFGFPRInfo.h: Added.
        (JSC::DFG::next):
        (JSC::DFG::FPRBankInfo::toRegister):
        (JSC::DFG::FPRBankInfo::toIndex):
        * dfg/DFGGPRInfo.h: Added.
        (JSC::DFG::GPRInfo::toRegister):
        (JSC::DFG::GPRInfo::toIndex):
        (JSC::DFG::GPRInfo::debugName):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::fillInteger):
        (JSC::DFG::JITCodeGenerator::fillDouble):
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        (JSC::DFG::JITCodeGenerator::dump):
        (JSC::DFG::JITCodeGenerator::checkConsistency):
        (JSC::DFG::GPRTemporary::GPRTemporary):
        (JSC::DFG::FPRTemporary::FPRTemporary):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::boxDouble):
        (JSC::DFG::JITCodeGenerator::unboxDouble):
        (JSC::DFG::JITCodeGenerator::spill):
        (JSC::DFG::JITCodeGenerator::flushRegisters):
        (JSC::DFG::JITCodeGenerator::isFlushed):
        (JSC::DFG::JITCodeGenerator::bitOp):
        (JSC::DFG::JITCodeGenerator::shiftOp):
        (JSC::DFG::JITCodeGenerator::setupTwoStubArgs):
        (JSC::DFG::JITCodeGenerator::setupStubArguments):
        (JSC::DFG::JITCodeGenerator::callOperation):
        (JSC::DFG::IntegerOperand::gpr):
        (JSC::DFG::DoubleOperand::gpr):
        (JSC::DFG::GPRTemporary::gpr):
        (JSC::DFG::FPRTemporary::gpr):
        (JSC::DFG::GPRResult::lockedResult):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::fillNumericToDouble):
        (JSC::DFG::JITCompiler::fillInt32ToInteger):
        (JSC::DFG::JITCompiler::fillToJS):
        (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
        (JSC::DFG::JITCompiler::compileFunction):
        (JSC::DFG::JITCompiler::jitAssertIsInt32):
        (JSC::DFG::JITCompiler::jitAssertIsJSInt32):
        (JSC::DFG::JITCompiler::jitAssertIsJSNumber):
        (JSC::DFG::JITCompiler::jitAssertIsJSDouble):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::preserveReturnAddressAfterCall):
        (JSC::DFG::JITCompiler::restoreReturnAddressBeforeReturn):
        (JSC::DFG::JITCompiler::emitGetFromCallFrameHeaderPtr):
        (JSC::DFG::JITCompiler::emitPutToCallFrameHeader):
        (JSC::DFG::JITCompiler::emitPutImmediateToCallFrameHeader):
        (JSC::DFG::JITCompiler::addressForGlobalVar):
        (JSC::DFG::JITCompiler::addressFor):
        (JSC::DFG::JITCompiler::tagFor):
        (JSC::DFG::JITCompiler::payloadFor):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::EntryLocation::EntryLocation):
        (JSC::DFG::NonSpeculativeJIT::valueToNumber):
        (JSC::DFG::NonSpeculativeJIT::valueToInt32):
        (JSC::DFG::NonSpeculativeJIT::numberToInt32):
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGNonSpeculativeJIT.h:
        (JSC::DFG::NonSpeculativeJIT::silentSpillGPR):
        (JSC::DFG::NonSpeculativeJIT::silentSpillFPR):
        (JSC::DFG::NonSpeculativeJIT::silentFillGPR):
        (JSC::DFG::NonSpeculativeJIT::silentFillFPR):
        (JSC::DFG::NonSpeculativeJIT::silentSpillAllRegisters):
        (JSC::DFG::NonSpeculativeJIT::silentFillAllRegisters):
        * dfg/DFGRegisterBank.h:
        (JSC::DFG::RegisterBank::allocate):
        (JSC::DFG::RegisterBank::retain):
        (JSC::DFG::RegisterBank::release):
        (JSC::DFG::RegisterBank::lock):
        (JSC::DFG::RegisterBank::unlock):
        (JSC::DFG::RegisterBank::isLocked):
        (JSC::DFG::RegisterBank::name):
        (JSC::DFG::RegisterBank::iterator::name):
        (JSC::DFG::RegisterBank::iterator::isLocked):
        (JSC::DFG::RegisterBank::iterator::release):
        (JSC::DFG::RegisterBank::iterator::gpr):
        (JSC::DFG::RegisterBank::iterator::debugName):
        (JSC::DFG::RegisterBank::iterator::operator++):
        (JSC::DFG::RegisterBank::iterator::operator!=):
        (JSC::DFG::RegisterBank::iterator::index):
        (JSC::DFG::RegisterBank::iterator::iterator):
        (JSC::DFG::RegisterBank::begin):
        (JSC::DFG::RegisterBank::end):
        (JSC::DFG::RegisterBank::isLockedAtIndex):
        (JSC::DFG::RegisterBank::nameAtIndex):
        (JSC::DFG::RegisterBank::releaseAtIndex):
        (JSC::DFG::RegisterBank::allocateInternal):
        (JSC::DFG::RegisterBank::MapEntry::MapEntry):
        * dfg/DFGScoreBoard.h:
        (JSC::DFG::ScoreBoard::~ScoreBoard):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculationCheck::SpeculationCheck):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::SpeculativeJIT::initializeVariableTypes):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculateIntegerOperand::gpr):

2011-04-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Remove evil addressOfStructure() function
        https://bugs.webkit.org/show_bug.cgi?id=59739

        Remove the addressOfStructure function from JSCell, and update
        callsites to use the same logic as testPrototype()

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdProtoList):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdProtoList):
        * runtime/JSCell.h:

2011-04-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Clean up testPrototype()
        https://bugs.webkit.org/show_bug.cgi?id=59734

        Remove direct pointer to the inside of a GC object and just do
        the indirect load manually.  Doesn't effect sunspider but does
        clean up the code quite a bit, and simplifies the handling of
        GC values.

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

2011-04-28  David Levin  <levin@chromium.org>

        Build fix.

        * wtf/RefCounted.h: Fix inverted ifdef.

2011-04-07  David Levin  <levin@chromium.org>

        Reviewed by Darin Adler.

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

        * GNUmakefile.list.am: Added new files to the build.
        * JavaScriptCore.gypi: Ditto.
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto.
        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
        * jit/ExecutableAllocator.h:
        (JSC::ExecutablePool::ExecutablePool): Turned off checks for this
        due to not being able to figure out what was guarding it (bug 58091).
        * parser/SourceProvider.h:
        (JSC::SourceProvider::SourceProvider): Ditto.
        * runtime/RegExp.cpp:
        (JSC::RegExp::RegExp): Ditto.
        * wtf/CMakeLists.txt: Added new files to the build.
        * wtf/ThreadRestrictionVerifier.h: Added.
        Everything is done in the header to avoid the issue with exports
        that are only useful in debug but still needing to export them.
        * wtf/RefCounted.h:
        (WTF::RefCountedBase::ref): Added checks using the non thread safe verifier.
        and filed bug 58171 about making it stricter.
        (WTF::RefCountedBase::hasOneRef): Ditto.
        (WTF::RefCountedBase::refCount): Ditto.
        (WTF::RefCountedBase::setMutexForVerifier): Expose a way to change the checks to be based
        on a mutex. This is in the header to avoid adding more exports from JavaScriptCore.
        (WTF::RefCountedBase::deprecatedTurnOffVerifier): Temporary way to turn off verification.
        Filed bug 58174 to remove this method.
        (WTF::RefCountedBase::derefBase):
        * wtf/SizeLimits.cpp: Adjusted the debug size check for RefCounted.
        * wtf/text/CString.h:
        (WTF::CStringBuffer::CStringBuffer): Turned off checks for this while a fix is being
        done in Chromium's test_shell (bug 58093).

2011-04-28  Xan Lopez  <xlopez@igalia.com>

        Unreviewed attempt to fix the build.

        * GNUmakefile.am: add -lpthread.

2011-04-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Only need a single implementation of testPrototype
        https://bugs.webkit.org/show_bug.cgi?id=59724

        Remove excess copy of identical testPrototype() code

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::testPrototype):
        * jit/JITPropertyAccess32_64.cpp:

2011-04-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] Split JSC and WebCore builds
        https://bugs.webkit.org/show_bug.cgi?id=19428

        Build JavaScriptCore as a libtool shared library instead of a
        private convenience library.

        * GNUmakefile.am: define new jsc library and adapt to new name for
        javascriptcore target.
        * GNUmakefile.list.am: ditto.

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

        <http://webkit.org/b/59705> WTF::postTimer() leaks a CFRunLoopTimerRef every time it's called

        Reviewed by Simon Fraser.

        * wtf/mac/MainThreadMac.mm:
        (WTF::postTimer): Use RetainPtr to plug the leak.

2011-04-27  Sam Weinig  <sam@webkit.org>

        Reviewed by David Kilzer.

        Add way to install testapi in production builds
        https://bugs.webkit.org/show_bug.cgi?id=59674

        * Configurations/TestAPI.xcconfig: Copied from Configurations/JavaScriptCore.xcconfig.
        Add configuration file for TestAPI. In addition to name, we now specify an install path
        and allow SKIP_INSTALL to be overridden by setting FORCE_TOOL_INSTALL.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        Remove in-project build settings and add missing configuration files. Added missing CompilerVersion.xcconfig
        file.

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

        Reviewed by David Levin.

        Enable strict OwnPtrs for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=59666

        * wtf/OwnPtr.h:

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

        Reviewed by Geoffrey Garen.

        Add ability to remove keys from weakmap API
        https://bugs.webkit.org/show_bug.cgi?id=59645

        Add JSWeakObjectMapRemove API

        * API/JSWeakObjectMapRefPrivate.cpp:
        * API/JSWeakObjectMapRefPrivate.h:
        * JavaScriptCore.exp:

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

        Reviewed by David Levin.

        Enable strict mode for OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59428

        This patch enables strict mode for OwnPtr on PLATFORM(MAC) only.

        * wtf/OwnPtr.h:

2011-04-27  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Remove Android build system
        https://bugs.webkit.org/show_bug.cgi?id=48111

        This is to avoid the maintenance burden until the Android port is
        fully upstreamed.

        * Android.mk: Removed.
        * Android.v8.wtf.mk: Removed.

2011-04-27  Mark Rowe  <mrowe@apple.com>

        Fix 32-bit build after r85036.

        * wtf/Platform.h: USE(PLUGIN_HOST_PROCESS) is only true for 64-bit.

2011-04-27  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r85036.

        Readd non-dead code.

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

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

        Reviewed by Kenneth Russell.

        OwnPtr assignment operator should be private
        https://bugs.webkit.org/show_bug.cgi?id=59487

        Unfortunately we can't remove the copy constructor because of some
        detail about gcc.  (The issue is documented in a comment already.)

        * wtf/OwnPtr.h:

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

        Unreviewed, rolling out r84977.
        http://trac.webkit.org/changeset/84977
        https://bugs.webkit.org/show_bug.cgi?id=59568

        caused crashes on the SL WK2 bots (Requested by jessieberlin
        on #webkit).

        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::call):
        (JSC::MacroAssemblerX86_64::tailRecursiveCall):
        (JSC::MacroAssemblerX86_64::makeTailRecursiveCall):

2011-04-26  Kevin Ollivier  <kevino@theolliviers.com>

        Rubberstamped by Eric Seidel.

        Enable waf to be used to build other ports
        https://bugs.webkit.org/show_bug.cgi?id=58213

        * wscript:

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

        Reviewed by David Hyatt.

        Remove Datagrid from the tree
        https://bugs.webkit.org/show_bug.cgi?id=59543

        * Configurations/FeatureDefines.xcconfig:
        Remove feature.

2011-04-26  Adrienne Walker  <enne@google.com>

        Reviewed by Geoffrey Garen.

        Fix incorrect use of OwnPtr<T*> in GCActivityCallback
        https://bugs.webkit.org/show_bug.cgi?id=59559

        * runtime/GCActivityCallback.h:

2011-04-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Daniel Bates.

        Unused but set variable warning in MacroAssembelX86_64
        https://bugs.webkit.org/show_bug.cgi?id=59482

        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::call): do not declare the label
        variable if we are not going to use it.
        (JSC::MacroAssemblerX86_64::tailRecursiveCall): ditto.
        (JSC::MacroAssemblerX86_64::makeTailRecursiveCall): ditto.

2011-04-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        Choose the compiler based on the Xcode version for Snow Leopard debug builds.

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

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

        Reviewed by Oliver Hunt.

        Nixed special finalizer handling for WebCore strings
        https://bugs.webkit.org/show_bug.cgi?id=59425
        
        SunSpider reports no change.
        
        Not needed anymore, since weak handles have finalizers.

        * runtime/JSString.cpp:
        (JSC::JSString::resolveRope):
        (JSC::JSString::resolveRopeSlowCase):
        (JSC::JSString::outOfMemory):
        (JSC::JSString::substringFromRope):
        (JSC::JSString::replaceCharacter): Updated for removal of union.

        * runtime/JSString.h:
        (JSC::RopeBuilder::JSString):
        (JSC::RopeBuilder::~JSString):
        (JSC::RopeBuilder::appendStringInConstruct):
        (JSC::RopeBuilder::appendValueInConstructAndIncrementLength): No need for
        union or special constructor anymore.

2011-04-26  Gabor Loki  <loki@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Speeding up SVG filters with multicore (SMP) support
        https://bugs.webkit.org/show_bug.cgi?id=43903

        Some SVG filters execute a huge number of pixel manipulations, which
        cannot be sped up by graphics accelerators, since their algorithm is
        too complex. Using the power of Symmetric Multi Processing (SMP) we
        can split up a task to smaller (data independent) tasks, which can be
        executed independently.

        The ParallelJobs framework provides a simple way for distributed
        programming. The framework is based on WebKit's threading infrastructure,
        Open Multi-Processing's (OpenMP) API, and libdispatch API.

        * GNUmakefile.list.am:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/ParallelJobs.h: Added.
        (WTF::ParallelJobs::ParallelJobs):
        (WTF::ParallelJobs::numberOfJobs):
        (WTF::ParallelJobs::parameterForJob):
        (WTF::ParallelJobs::executeJobs):
        * wtf/ParallelJobsGeneric.cpp: Added.
        (WTF::ParallelEnvironment::ThreadPrivate::tryLockFor):
        (WTF::ParallelEnvironment::ThreadPrivate::executeJob):
        (WTF::ParallelEnvironment::ThreadPrivate::waitForFinish):
        (WTF::ParallelEnvironment::ThreadPrivate::workerThread):
        * wtf/ParallelJobsGeneric.h: Added.
        (WTF::ParallelEnvironment::ParallelEnvironment):
        (WTF::ParallelEnvironment::numberOfJobs):
        (WTF::ParallelEnvironment::parameterForJob):
        (WTF::ParallelEnvironment::executeJobs):
        (WTF::ParallelEnvironment::ThreadPrivate::ThreadPrivate):
        (WTF::ParallelEnvironment::ThreadPrivate::create):
        * wtf/ParallelJobsLibdispatch.h: Added.
        (WTF::ParallelEnvironment::ParallelEnvironment):
        (WTF::ParallelEnvironment::numberOfJobs):
        (WTF::ParallelEnvironment::parameterForJob):
        (WTF::ParallelEnvironment::executeJobs):
        * wtf/ParallelJobsOpenMP.h: Added.
        (WTF::ParallelEnvironment::ParallelEnvironment):
        (WTF::ParallelEnvironment::numberOfJobs):
        (WTF::ParallelEnvironment::parameterForJob):
        (WTF::ParallelEnvironment::executeJobs):
        * wtf/Platform.h:
        * wtf/wtf.pri:

2011-04-26  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Turn off make built-in implicit rules for derived sources makefile
        https://bugs.webkit.org/show_bug.cgi?id=59418
        
        We don't use any of make's built-in implicit rules, turning them off
        speeds up parsing of the makefile.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * gyp/generate-derived-sources.sh:

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

        Reviewed by Oliver Hunt.

        Custom prototypes on DOM objects don't persist after garbage collection
        https://bugs.webkit.org/show_bug.cgi?id=59412
        
        SunSpider reports no change.
        
        The hasCustomProperties() check didn't check for a custom prototype.

        * runtime/JSObject.h:
        (JSC::JSObject::hasCustomProperties): Changed to delegate to Structure
        because it is the "truth" about an object's pedigree.

        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        * runtime/Structure.h:
        (JSC::Structure::didTransition): Track whether a Structure has ever
        transitioned for any reason. If so, we have to assume that the object
        holding it is custom in some way.

2011-04-25  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=59405
        DFG JIT - add type speculation for integer & array types, for vars & args.

        If a var or argument is used as the base for a GetByVal or PutByVal access
        we are speculating that it is of type Array (we only generate code on the
        speculative path to perform array accesses). By typing the var or args slot
        as Array, and checking on entry to the function (in the case of args), and
        each time the local is written to, we can avoid a type check at each point
        the array is accessed. This will typically hoist type checks out of loops.

        Similarly, any local that is incremented or decremented, or is the input or
        output or a bitwise operator, is likely to be an integer. By typing the
        local as int32 we can avoid speculation checks on access, and tagging when
        writing to the slot. All accesses can become 32bit instead of 64.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::set):
        (JSC::DFG::ByteCodeParser::predictArray):
        (JSC::DFG::ByteCodeParser::predictInt32):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGraph.h:
        (JSC::DFG::PredictionSlot::PredictionSlot):
        (JSC::DFG::Graph::Graph):
        (JSC::DFG::Graph::predict):
        (JSC::DFG::Graph::getPrediction):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::tagFor):
        (JSC::DFG::JITCompiler::payloadFor):
        * dfg/DFGNode.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        (JSC::DFG::SpeculativeJIT::checkArgumentTypes):
        (JSC::DFG::SpeculativeJIT::initializeVariableTypes):
        * dfg/DFGSpeculativeJIT.h:
        * runtime/Executable.cpp:
        (JSC::tryDFGCompile):

2011-04-25  David Levin  <levin@chromium.org>

        Reviewed by James Robinson.

        Fix OwnPtr strict mode violation in MessageQueue.h
        https://bugs.webkit.org/show_bug.cgi?id=59400

        * wtf/MessageQueue.h:
        (WTF::::waitForMessage):
        (WTF::::waitForMessageFilteredWithTimeout):
        (WTF::::tryGetMessage):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        JavaScriptCore should play nice strict OwnPtrs
        https://bugs.webkit.org/show_bug.cgi?id=59401

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parse):
        * heap/Heap.cpp:
        (JSC::TypeCounter::TypeCounter):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::JITThunks):
        * parser/JSParser.cpp:
        (JSC::JSParser::Scope::Scope):
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::GenerationState::addParenthesesTail):

2011-04-25  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * wtf/ListHashSet.h:

2011-04-25  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 59370 - DFG JIT - fix leak of BlocksBlocks
        (put the blocks immediately into an OwnPtr).

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parse):

2011-04-25  James Robinson  <jamesr@chromium.org>

        Reviewed by David Levin.

        Fix strict OwnPtr violations in ListHashSet and RenderLayerCompositor
        https://bugs.webkit.org/show_bug.cgi?id=59353

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

2011-04-25  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        Fix PassOwnPtr issues in Structure and JSGlobalData.cpp
        https://bugs.webkit.org/show_bug.cgi?id=59347

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/Structure.cpp:
        (JSC::Structure::copyPropertyTable):
        (JSC::Structure::createPropertyMap):
        * runtime/Structure.h:

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

        Reviewed by Geoffrey Garen.

        Make ClassInfo required when creating a Structure
        https://bugs.webkit.org/show_bug.cgi?id=59340

        Add ClassInfo to all those types which currently don't
        have it, and add an assertion to Structure::create to
        ensure that the provided classInfo is not null.

        * runtime/Executable.h:
        (JSC::EvalExecutable::createStructure):
        (JSC::ProgramExecutable::createStructure):
        (JSC::FunctionExecutable::createStructure):
        * runtime/GetterSetter.cpp:
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::createStructure):
        * runtime/JSAPIValueWrapper.cpp:
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::createStructure):
        * runtime/JSCell.cpp:
        * runtime/JSCell.h:
        * runtime/JSString.cpp:
        * runtime/JSString.h:
        (JSC::RopeBuilder::createStructure):
        * runtime/Structure.h:
        (JSC::Structure::create):
        (JSC::JSCell::createDummyStructure):

2011-04-25  David Levin  <levin@chromium.org>

        Reviewed by Adam Barth.

        PropertyMapHashTable.h should use adoptPtr instead of implicit conversions to PassRefPtr.
        https://bugs.webkit.org/show_bug.cgi?id=59342

        This patch is to prepare for the strict OwnPtr hack-a-thon.

        * runtime/PropertyMapHashTable.h:
        (JSC::PropertyTable::copy):

2011-04-25  Thouraya ANDOLSI  <thouraya.andolsi@st.com>

        Reviewed by Gavin Barraclough.

        Rationalize MacroAssembler branch methods
        https://bugs.webkit.org/show_bug.cgi?id=58950

        split out the 'Condition' enum into 'RelationalCondition' and 'ResultCondition' 
        and apply related changes (only for SH4 platforms).

        * assembler/MacroAssemblerSH4.cpp:
        * assembler/MacroAssemblerSH4.h:
        (JSC::MacroAssemblerSH4::compare32):
        (JSC::MacroAssemblerSH4::branch32WithUnalignedHalfWords):
        (JSC::MacroAssemblerSH4::branchDouble):
        (JSC::MacroAssemblerSH4::branch32):
        (JSC::MacroAssemblerSH4::branchTest8):
        (JSC::MacroAssemblerSH4::branch8):
        (JSC::MacroAssemblerSH4::branchTruncateDoubleToInt32):
        (JSC::MacroAssemblerSH4::test8):
        (JSC::MacroAssemblerSH4::branch16):
        (JSC::MacroAssemblerSH4::branchTest32):
        (JSC::MacroAssemblerSH4::branchAdd32):
        (JSC::MacroAssemblerSH4::branchMul32):
        (JSC::MacroAssemblerSH4::branchSub32):
        (JSC::MacroAssemblerSH4::branchOr32):
        (JSC::MacroAssemblerSH4::branchConvertDoubleToInt32):
        (JSC::MacroAssemblerSH4::branchPtrWithPatch):
        (JSC::MacroAssemblerSH4::SH4Condition):
        * assembler/SH4Assembler.h:
        (JSC::SH4Assembler::cmpEqImmR0):

2011-04-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        PropertyMapHashTable should work with strict OwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=59337

        This patch is in preparation for the strict OwnPtr hack-a-thon.

        * runtime/PropertyMapHashTable.h:
        (JSC::PropertyTable::PropertyTable):
        (JSC::PropertyTable::addDeletedOffset):

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

        Reviewed by Sam Weinig.

        Nixed MarkStack::deprecatedAppend, since it has no clients left.

        * heap/MarkStack.h:

2011-04-23  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 59287 - DFG JIT - Handle temporaries as vars, allowing support for ?:

        SetLocals to temporaries will only be generated if they are used within other
        blocks, due to the SSA based DCE.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::get):
        (JSC::DFG::ByteCodeParser::set):
        (JSC::DFG::ByteCodeParser::getLocal):
        (JSC::DFG::ByteCodeParser::setLocal):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::processPhiStack):
        (JSC::DFG::ByteCodeParser::allocateVirtualRegisters):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGGraph.h:
        (JSC::DFG::BasicBlock::BasicBlock):

2011-04-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig & Geoff Garen.

        Bug 59266 - DFG JIT - Add SSA style DCE

        This works by making GetLocal nodes reference SetLocal nodes from prior blocks,
        via intermediate Phi nodes. Whenever we add a GetLocal to the graph, also add a
        matching child Phi, and add the Phi to a work queue to add references to prior
        definitions once we have the full CFG & can determine predecessors. This process
        is iterative, inserting new phis into predecessors as necessary.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getVariable):
        (JSC::DFG::ByteCodeParser::setVariable):
        (JSC::DFG::ByteCodeParser::getArgument):
        (JSC::DFG::ByteCodeParser::setArgument):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::processWorkQueue):
        (JSC::DFG::ByteCodeParser::allocateVirtualRegisters):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        (JSC::DFG::Graph::refChildren):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::ref):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::ref):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGScoreBoard.h:
        (JSC::DFG::ScoreBoard::~ScoreBoard):
        (JSC::DFG::ScoreBoard::dump):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-04-22  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Adam Barth.

        Add missing default constructors for HashMap iterator specializations.
        https://bugs.webkit.org/show_bug.cgi?id=59250

        * wtf/HashIterators.h:
        * wtf/HashTable.h:
        (WTF::HashTableConstIterator::HashTableConstIterator): Added cast
        to help compiler find the function template.

2011-04-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 59262 - DFG JIT - reduce size of VariableRecord

        We never need both the get & set node, only the most recent
        (which is always a set, if both exist).

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::getVariable):
        (JSC::DFG::ByteCodeParser::setVariable):
        (JSC::DFG::ByteCodeParser::getArgument):
        (JSC::DFG::ByteCodeParser::setArgument):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGraph.h:
        (JSC::DFG::VariableRecord::VariableRecord):

2011-04-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoffrey Garen.

        Bug 59254 - DFG JIT - retain VariableRecords for args/var in all basic blocks,
        such that this information is available for DCE.  Also, since this enlarges the
        size of BasicBlock, make Graph hold a vector of pointers to basic blocks, not a
        vector of blocks.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::get):
        (JSC::DFG::ByteCodeParser::set):
        (JSC::DFG::ByteCodeParser::getVariable):
        (JSC::DFG::ByteCodeParser::setVariable):
        (JSC::DFG::ByteCodeParser::getArgument):
        (JSC::DFG::ByteCodeParser::setArgument):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::setupPredecessors):
        (JSC::DFG::ByteCodeParser::allocateVirtualRegisters):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        (JSC::DFG::VariableRecord::VariableRecord):
        (JSC::DFG::BasicBlock::BasicBlock):
        (JSC::DFG::BasicBlock::getBytecodeBegin):
        (JSC::DFG::Graph::blockIndexForBytecodeOffset):
        (JSC::DFG::Graph::blockForBytecodeOffset):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):

2011-04-22  Gavin Barraclough  <barraclough@apple.com>

        Errk, build fix.

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-04-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Quick cleanup to SpeculativeJIT/NonSpeculativeJIT compile loop,
        move out the call to checkConsistency().

        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::SpeculativeJIT):
        (JSC::DFG::SpeculativeJIT::terminateSpeculativeExecution):

2011-04-21  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Adam Barth.

        Provide default constructors for HashMap iterators.
        https://bugs.webkit.org/show_bug.cgi?id=59151

        These will be used to implement an iterator over EventTarget's
        listeners.

        * wtf/HashTable.h:
        (WTF::HashTableConstIteratorAdapter::HashTableConstIteratorAdapter):
        (WTF::HashTableIteratorAdapter::HashTableIteratorAdapter):

2011-04-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 59232 - DFG JIT - Add predecessor links to BasicBlocks

        These will be necessary for DCE support.
        Also factor allocateVirtualRegisters out into its own method.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::setupPredecessors):
        (JSC::DFG::ByteCodeParser::allocateVirtualRegisters):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::blockForBytecodeOffset):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::isTerminal):

2011-04-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Object.create creates uncachable objects
        https://bugs.webkit.org/show_bug.cgi?id=59164

        Use the prototype object's inheritorID, as we
        should always have done

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::nullPrototypeObjectStructure):
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorCreate):

2011-04-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 59222 - DFG JIT - don't allocate virtual registers to nodes with no result

        We currently allocate virtual registers to nodes which have no result - these are
        clearly unused, and may result in us allocating a larger than necessary stack frame.

        Encapsulate Node::virtualRegister such that we can ASSERT this is only called on
        nodes that have results, and improve the quality of output from the consistency check.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::ref):
        (JSC::DFG::Graph::deref):
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::fillInteger):
        (JSC::DFG::JITCodeGenerator::fillDouble):
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        (JSC::DFG::JITCodeGenerator::dump):
        (JSC::DFG::JITCodeGenerator::checkConsistency):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::canReuse):
        (JSC::DFG::JITCodeGenerator::isFilled):
        (JSC::DFG::JITCodeGenerator::isFilledDouble):
        (JSC::DFG::JITCodeGenerator::use):
        (JSC::DFG::JITCodeGenerator::integerResult):
        (JSC::DFG::JITCodeGenerator::noResult):
        (JSC::DFG::JITCodeGenerator::cellResult):
        (JSC::DFG::JITCodeGenerator::jsValueResult):
        (JSC::DFG::JITCodeGenerator::doubleResult):
        (JSC::DFG::JITCodeGenerator::initConstantInfo):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::fillNumericToDouble):
        (JSC::DFG::JITCompiler::fillInt32ToInteger):
        (JSC::DFG::JITCompiler::fillToJS):
        (JSC::DFG::JITCompiler::jumpFromSpeculativeToNonSpeculative):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::Node):
        (JSC::DFG::Node::hasResult):
        (JSC::DFG::Node::virtualRegister):
        (JSC::DFG::Node::setVirtualRegister):
        (JSC::DFG::Node::refCount):
        (JSC::DFG::Node::ref):
        (JSC::DFG::Node::deref):
        (JSC::DFG::Node::adjustedRefCount):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::isKnownInteger):
        (JSC::DFG::NonSpeculativeJIT::isKnownNumeric):
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGScoreBoard.h:
        (JSC::DFG::ScoreBoard::use):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::compile):

2011-04-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Gavin Barraclough and Oliver Hunt.

        Arrays should participate in global object forwarding fun
        https://bugs.webkit.org/show_bug.cgi?id=59215

        * runtime/JSGlobalObject.h:
        (JSC::constructEmptyArray):
        (JSC::constructArray):
        Add variants of constructArray that take a global object.

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

        Unreviewed, rolling out r84650 and r84654.
        http://trac.webkit.org/changeset/84650
        http://trac.webkit.org/changeset/84654
        https://bugs.webkit.org/show_bug.cgi?id=59218

        Broke Windows build (Requested by bweinstein on #webkit).

        * API/JSCallbackObjectFunctions.h:
        (JSC::::init):
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * heap/Handle.h:
        (JSC::HandleBase::operator!):
        (JSC::HandleBase::operator UnspecifiedBoolType*):
        (JSC::HandleTypes::getFromSlot):
        * heap/HandleHeap.cpp:
        (JSC::HandleHeap::markStrongHandles):
        (JSC::HandleHeap::markWeakHandles):
        (JSC::HandleHeap::finalizeWeakHandles):
        (JSC::HandleHeap::writeBarrier):
        (JSC::HandleHeap::protectedGlobalObjectCount):
        (JSC::HandleHeap::isValidWeakNode):
        * heap/HandleHeap.h:
        (JSC::HandleHeap::copyWeak):
        (JSC::HandleHeap::makeWeak):
        (JSC::HandleHeap::Node::slot):
        * heap/HandleStack.cpp:
        (JSC::HandleStack::mark):
        (JSC::HandleStack::grow):
        * heap/HandleStack.h:
        (JSC::HandleStack::zapTo):
        (JSC::HandleStack::push):
        * heap/Heap.cpp:
        (JSC::HandleHeap::protectedObjectTypeCounts):
        * heap/Local.h:
        (JSC::::set):
        * heap/Strong.h:
        (JSC::Strong::set):
        * heap/Weak.h:
        (JSC::Weak::set):
        * runtime/StructureTransitionTable.h:
        (JSC::StructureTransitionTable::singleTransition):
        (JSC::StructureTransitionTable::setSingleTransition):
        * runtime/WeakGCMap.h:
        (JSC::WeakGCMap::add):
        (JSC::WeakGCMap::set):
        * runtime/WriteBarrier.h:

2011-04-22  Brian Weinstein  <bweinstein@apple.com>

        Part of Windows build fix from r84650.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-04-22  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make it harder to use HandleSlot incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=59205

        Just add a little type fudging to make it harder to
        incorrectly assign through a HandleSlot.

        * API/JSCallbackObjectFunctions.h:
        (JSC::::init):
        * JavaScriptCore.exp:
        * heap/Handle.h:
        (JSC::HandleBase::operator!):
        (JSC::HandleBase::operator UnspecifiedBoolType*):
        (JSC::HandleTypes::getFromSlot):
        * heap/HandleHeap.cpp:
        (JSC::HandleHeap::markStrongHandles):
        (JSC::HandleHeap::markWeakHandles):
        (JSC::HandleHeap::finalizeWeakHandles):
        (JSC::HandleHeap::writeBarrier):
        (JSC::HandleHeap::protectedGlobalObjectCount):
        (JSC::HandleHeap::isValidWeakNode):
        * heap/HandleHeap.h:
        (JSC::HandleHeap::copyWeak):
        (JSC::HandleHeap::makeWeak):
        (JSC::HandleHeap::Node::slot):
        * heap/HandleStack.cpp:
        (JSC::HandleStack::mark):
        (JSC::HandleStack::grow):
        * heap/HandleStack.h:
        (JSC::HandleStack::zapTo):
        (JSC::HandleStack::push):
        * heap/Heap.cpp:
        (JSC::HandleHeap::protectedObjectTypeCounts):
        * heap/Local.h:
        (JSC::::set):
        * heap/Strong.h:
        (JSC::Strong::set):
        * heap/Weak.h:
        (JSC::Weak::set):
        * runtime/StructureTransitionTable.h:
        (JSC::StructureTransitionTable::singleTransition):
        (JSC::StructureTransitionTable::setSingleTransition):
        * runtime/WeakGCMap.h:
        (JSC::WeakGCMap::add):
        (JSC::WeakGCMap::set):
        * runtime/WriteBarrier.h:
        (JSC::OpaqueJSValue::toJSValue):
        (JSC::OpaqueJSValue::toJSValueRef):
        (JSC::OpaqueJSValue::fromJSValue):

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

        Unreviewed. Build fix for ENABLE(INTERPRETER) after r84556.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitAggregate):

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

        Unreviewed, rolling out r84583.
        http://trac.webkit.org/changeset/84583
        https://bugs.webkit.org/show_bug.cgi?id=59173

        "broke
        http://trac.webkit.org/export/84593/trunk/LayoutTests/fast/js
        /Object-create.html" (Requested by ggaren on #webkit).

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

2011-04-21  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Adam Roben.

        Add a feature define to allow <details> and <summary> to be disabled
        https://bugs.webkit.org/show_bug.cgi?id=59118
        <rdar://problem/9257045>

        * Configurations/FeatureDefines.xcconfig:

2011-04-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Object.create creates uncachable objects
        https://bugs.webkit.org/show_bug.cgi?id=59164

        Use the prototype object's inheritorID, as we
        should always have done

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

2011-04-21  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Start moving to a general visitor pattern for GC traversal
        https://bugs.webkit.org/show_bug.cgi?id=59141

        This is just a rename:
            markChildren -> visitChildren
            markAggregate -> visitAggregate
            markStack -> visitor
            MarkStack -> typedef'd to SlotVisitor

        * API/JSCallbackObject.h:
        (JSC::JSCallbackObjectData::visitChildren):
        (JSC::JSCallbackObjectData::JSPrivatePropertyMap::visitChildren):
        (JSC::JSCallbackObject::visitChildren):
        * JavaScriptCore.exp:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::visitStructures):
        (JSC::EvalCodeCache::visitAggregate):
        (JSC::CodeBlock::visitAggregate):
        * bytecode/CodeBlock.h:
        * bytecode/EvalCodeCache.h:
        * bytecode/Instruction.h:
        (JSC::PolymorphicAccessStructureList::visitAggregate):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::visitAggregate):
        * bytecode/StructureStubInfo.h:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::visitChildren):
        * debugger/DebuggerActivation.h:
        * heap/HandleHeap.cpp:
        (JSC::WeakHandleOwner::isReachableFromOpaqueRoots):
        (JSC::HandleHeap::markStrongHandles):
        (JSC::HandleHeap::markWeakHandles):
        * heap/HandleHeap.h:
        * heap/HandleStack.cpp:
        (JSC::HandleStack::mark):
        * heap/HandleStack.h:
        * heap/Heap.cpp:
        (JSC::Heap::markProtectedObjects):
        (JSC::Heap::markTempSortVectors):
        (JSC::Heap::markRoots):
        * heap/Heap.h:
        * heap/MarkStack.cpp:
        (JSC::MarkStack::visitChildren):
        (JSC::MarkStack::drain):
        * heap/MarkStack.h:
        (JSC::HeapRootVisitor::HeapRootVisitor):
        (JSC::HeapRootVisitor::mark):
        (JSC::HeapRootVisitor::visitor):
        * heap/MarkedSpace.h:
        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBuffer::markLists):
        * runtime/ArgList.h:
        * runtime/Arguments.cpp:
        (JSC::Arguments::visitChildren):
        * runtime/Arguments.h:
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::visitChildren):
        (JSC::ProgramExecutable::visitChildren):
        (JSC::FunctionExecutable::visitChildren):
        * runtime/Executable.h:
        * runtime/GetterSetter.cpp:
        (JSC::GetterSetter::visitChildren):
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::createStructure):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::createStructure):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::visitChildren):
        * runtime/JSActivation.h:
        * runtime/JSArray.cpp:
        (JSC::JSArray::visitChildren):
        * runtime/JSArray.h:
        (JSC::JSArray::visitDirect):
        * runtime/JSCell.h:
        (JSC::JSCell::JSCell::visitChildren):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::visitChildren):
        * runtime/JSFunction.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::visitIfNeeded):
        (JSC::JSGlobalObject::visitChildren):
        * runtime/JSGlobalObject.h:
        * runtime/JSONObject.cpp:
        * runtime/JSObject.cpp:
        (JSC::JSObject::visitChildren):
        * runtime/JSObject.h:
        (JSC::JSObject::visitDirect):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::visitChildren):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::createStructure):
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::visitChildren):
        * runtime/JSStaticScopeObject.h:
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::TypeInfo):
        (JSC::TypeInfo::overridesVisitChildren):
        * runtime/JSWrapperObject.cpp:
        (JSC::JSWrapperObject::visitChildren):
        * runtime/JSWrapperObject.h:
        * runtime/JSZombie.h:
        (JSC::JSZombie::visitChildren):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::visitChildren):
        * runtime/NativeErrorConstructor.h:
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::visitChildren):
        * runtime/RegExpObject.h:
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::visitChildren):
        * runtime/ScopeChain.h:
        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::visitChildren):
        * runtime/SmallStrings.h:
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
        (JSC::Structure::visitChildren):
        * runtime/Structure.h:
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::visitChildren):
        * runtime/StructureChain.h:
        (JSC::StructureChain::createStructure):

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

        Unreviewed, rolling out r84548.
        http://trac.webkit.org/changeset/84548
        https://bugs.webkit.org/show_bug.cgi?id=59144

        Broke chromium-win build (Requested by aklein on #webkit).

        * wtf/Platform.h:

2011-04-21  Adam Klein  <adamk@chromium.org>

        Reviewed by David Levin.

        [fileapi] Worker File API calls that create Blobs fail in debug builds due to random number generator thread assertion
        https://bugs.webkit.org/show_bug.cgi?id=55728

        Enable WTF_MULTIPLE_THREADS for Chromium.

        * wtf/Platform.h:

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

        Reviewed by Geoff Garen.

        JSString::resolveRope inefficient for common 2 fiber case
        https://bugs.webkit.org/show_bug.cgi?id=58994

        Split JSString::resolveRope into three routines.
        resolveRope allocates the new buffer and handles the 1 or 2
        fiber case with single level fibers.
        resolveRopeSlowCase handles the general case.
        outOfMemory handles the rare out of memory exception case.

        * runtime/JSString.cpp:
        (JSC::JSString::resolveRope):
        (JSC::JSString::resolveRopeSlowCase):
        (JSC::JSString::outOfMemory):
        * runtime/JSString.h:

2011-04-20  Adam Klein  <adamk@chromium.org>

        Reviewed by David Levin.

        Rename all uses of JSC_MULTIPLE_THREADS under wtf/... to WTF_MULTIPLE_THREADS
        https://bugs.webkit.org/show_bug.cgi?id=59040

        This will be used to fix https://bugs.webkit.org/show_bug.cgi?id=55728
        by enabling WTF_MULTIPLE_THREADS for Chromium.

        * wtf/CryptographicallyRandomNumber.cpp:
        (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomNumber):
        (WTF::ARC4Stream::ARC4RandomNumberGenerator::randomValues):
        * wtf/FastMalloc.cpp:
        * wtf/Platform.h:
        Enable WTF_MULTIPLE_THREADS whenever JSC_MULTIPLE_THREADS is enabled.
        * wtf/RandomNumber.cpp:
        (WTF::randomNumber):
        * wtf/RefCountedLeakCounter.cpp:
        (WTF::RefCountedLeakCounter::increment):
        (WTF::RefCountedLeakCounter::decrement):
        * wtf/dtoa.cpp:
        (WTF::pow5mult):

2011-04-20  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Geoff Garen

        Bug 59069 - DFG JIT - register allocate r8, r9, r10

        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::gprToRegisterID):

2011-04-20  Gavin Barraclough  <barraclough@apple.com>

        Build fix - revert accidental change.

        * wtf/Platform.h:

2011-04-20  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Add SAMPLING_FLAGS tool to DFG JIT.

        * bytecode/SamplingTool.h:
        (JSC::SamplingFlags::addressOfFlags):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::setSamplingFlag):
        (JSC::DFG::JITCompiler::clearSamplingFlag):
        * dfg/DFGJITCompiler.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::setSamplingFlag):
        (JSC::JIT::clearSamplingFlag):
        * wtf/Platform.h:

2011-04-20  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 59022 - DFG JIT - Optimize branch-on-relational-compare

        If a relational compare (< or <=) is immediately followed by a branch,
        we can combine the two, avoiding generation of a boolean into a register.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::branch32):
        (JSC::MacroAssemblerX86Common::invert):
        (JSC::MacroAssemblerX86Common::commute):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::adjustedRefCount):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compilePeepHoleBranch):
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::isJSConstantWithInt32Value):
        (JSC::DFG::SpeculativeJIT::detectPeepHoleBranch):

2011-04-20  Gavin Barraclough  <barraclough@apple.com>

        ARMv7 build fix II.

        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::softModulo):

2011-04-20  Gavin Barraclough  <barraclough@apple.com>

        ARMv7 build fix.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::test8):

2011-04-19  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Rationalize MacroAssembler branch methods
        https://bugs.webkit.org/show_bug.cgi?id=58950

        The MacroAssembler currently exposes x86's weird behaviour that the 'setcc'
        instruction only sets the low 8 bits of a register. Stop that.

        Having done so, to clarify remove the 'set32' prefix from test & compare
        instructions - these methods all now set a full 32/64 bit register (Ptr size).
        The size in the function name should indicate the amount of data being compared.

        Also split out the 'Condition' enum into 'RelationalCondition' and
        'ResultCondition'. The former is used in binary comparison, the latter is a unary
        condition check on the result of an operation.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::branchPtr):
        (JSC::MacroAssembler::branch32):
        (JSC::MacroAssembler::branch16):
        (JSC::MacroAssembler::branchTestPtr):
        (JSC::MacroAssembler::comparePtr):
        (JSC::MacroAssembler::branchAddPtr):
        (JSC::MacroAssembler::branchSubPtr):
        (JSC::MacroAssembler::branchTest8):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::branch8):
        (JSC::MacroAssemblerARM::branch32):
        (JSC::MacroAssemblerARM::branch32WithUnalignedHalfWords):
        (JSC::MacroAssemblerARM::branch16):
        (JSC::MacroAssemblerARM::branchTest8):
        (JSC::MacroAssemblerARM::branchTest32):
        (JSC::MacroAssemblerARM::branchAdd32):
        (JSC::MacroAssemblerARM::branchMul32):
        (JSC::MacroAssemblerARM::branchSub32):
        (JSC::MacroAssemblerARM::branchNeg32):
        (JSC::MacroAssemblerARM::branchOr32):
        (JSC::MacroAssemblerARM::compare32):
        (JSC::MacroAssemblerARM::test32):
        (JSC::MacroAssemblerARM::test8):
        (JSC::MacroAssemblerARM::branchPtrWithPatch):
        (JSC::MacroAssemblerARM::ARMCondition):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::branch32):
        (JSC::MacroAssemblerARMv7::branch32WithUnalignedHalfWords):
        (JSC::MacroAssemblerARMv7::branch16):
        (JSC::MacroAssemblerARMv7::branch8):
        (JSC::MacroAssemblerARMv7::branchTest32):
        (JSC::MacroAssemblerARMv7::branchTest8):
        (JSC::MacroAssemblerARMv7::branchAdd32):
        (JSC::MacroAssemblerARMv7::branchMul32):
        (JSC::MacroAssemblerARMv7::branchOr32):
        (JSC::MacroAssemblerARMv7::branchSub32):
        (JSC::MacroAssemblerARMv7::compare32):
        (JSC::MacroAssemblerARMv7::test32):
        (JSC::MacroAssemblerARMv7::test8):
        (JSC::MacroAssemblerARMv7::branchPtrWithPatch):
        (JSC::MacroAssemblerARMv7::makeBranch):
        (JSC::MacroAssemblerARMv7::armV7Condition):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::branch8):
        (JSC::MacroAssemblerMIPS::branch32):
        (JSC::MacroAssemblerMIPS::branch32WithUnalignedHalfWords):
        (JSC::MacroAssemblerMIPS::branch16):
        (JSC::MacroAssemblerMIPS::branchTest32):
        (JSC::MacroAssemblerMIPS::branchTest8):
        (JSC::MacroAssemblerMIPS::branchAdd32):
        (JSC::MacroAssemblerMIPS::branchMul32):
        (JSC::MacroAssemblerMIPS::branchSub32):
        (JSC::MacroAssemblerMIPS::branchOr32):
        (JSC::MacroAssemblerMIPS::compare32):
        (JSC::MacroAssemblerMIPS::test8):
        (JSC::MacroAssemblerMIPS::test32):
        (JSC::MacroAssemblerMIPS::branchPtrWithPatch):
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::branch32):
        (JSC::MacroAssemblerX86::branchPtrWithPatch):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::branch8):
        (JSC::MacroAssemblerX86Common::branch32):
        (JSC::MacroAssemblerX86Common::branch32WithUnalignedHalfWords):
        (JSC::MacroAssemblerX86Common::branch16):
        (JSC::MacroAssemblerX86Common::branchTest32):
        (JSC::MacroAssemblerX86Common::branchTest8):
        (JSC::MacroAssemblerX86Common::branchAdd32):
        (JSC::MacroAssemblerX86Common::branchMul32):
        (JSC::MacroAssemblerX86Common::branchSub32):
        (JSC::MacroAssemblerX86Common::branchNeg32):
        (JSC::MacroAssemblerX86Common::branchOr32):
        (JSC::MacroAssemblerX86Common::compare32):
        (JSC::MacroAssemblerX86Common::test8):
        (JSC::MacroAssemblerX86Common::test32):
        (JSC::MacroAssemblerX86Common::x86Condition):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::comparePtr):
        (JSC::MacroAssemblerX86_64::branchPtr):
        (JSC::MacroAssemblerX86_64::branchTestPtr):
        (JSC::MacroAssemblerX86_64::branchAddPtr):
        (JSC::MacroAssemblerX86_64::branchSubPtr):
        (JSC::MacroAssemblerX86_64::branchPtrWithPatch):
        (JSC::MacroAssemblerX86_64::branchTest8):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * 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):

2011-04-20  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Cleanup includepath adjustment for generated files
        https://bugs.webkit.org/show_bug.cgi?id=58869

        * JavaScriptCore.pri:  Add the directory of generated files to the include
        path with absolute path to make it valid in the final build step.

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

        Reviewed by Gavin Barraclough.

        Remove unneeded deprecated methods from MarkStack
        https://bugs.webkit.org/show_bug.cgi?id=58853

        Remove deprecated methods

        * heap/MarkStack.h:

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

        Things work best when the Xcode project refers to the file at a path that exists.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-04-19  Renata Hodovan  <reni@webkit.org>

        Reviewed by Eric Seidel.

        Move the alignment related macros in Vector.h to new Alignment.h.
        https://bugs.webkit.org/show_bug.cgi?id=56000

        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/Alignment.h: Added.
        * wtf/CMakeLists.txt:
        * wtf/Vector.h:

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

        Reviewed by Gavin Barraclough.

        Remove DeprecatedPtr
        https://bugs.webkit.org/show_bug.cgi?id=58718

        Remove the class an all functions that still exist to support it.

        * heap/MarkStack.h:
        (JSC::MarkStack::append):
        * runtime/JSValue.h:
        * runtime/WriteBarrier.h:

2011-04-19  Jungshik Shin  <jshin@chromium.org>

        Reviewed by David Levin

        Add U+FEFF (Zero width no-break space) to CharacterNames.h.
        It's added to the list of characters to treat as zero-width
        in WebCore.

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

        * wtf/unicode/CharacterNames.h:

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

        [Qt] REGRESSION(84176): http/tests/xmlhttprequest/event-listener-gc.html fails
        https://bugs.webkit.org/show_bug.cgi?id=58871

        Unreviewed, rolling out r84176, r84178, r84186, r84212 and r84231.
        http://trac.webkit.org/changeset/84176 (original patch)
        http://trac.webkit.org/changeset/84178 (original patch - part 2)
        http://trac.webkit.org/changeset/84186 (build fix)
        http://trac.webkit.org/changeset/84212
        http://trac.webkit.org/changeset/84231 (skip failing test)

        original bugs:
         - https://bugs.webkit.org/show_bug.cgi?id=58718
         - https://bugs.webkit.org/show_bug.cgi?id=58853

        * heap/MarkStack.h:
        (JSC::MarkStack::deprecatedAppendValues):
        (JSC::MarkStack::append):
        (JSC::MarkStack::deprecatedAppend):
        * runtime/JSValue.h:
        * runtime/WriteBarrier.h:
        (JSC::DeprecatedPtr::DeprecatedPtr):
        (JSC::DeprecatedPtr::get):
        (JSC::DeprecatedPtr::operator*):
        (JSC::DeprecatedPtr::operator->):
        (JSC::DeprecatedPtr::slot):
        (JSC::DeprecatedPtr::operator UnspecifiedBoolType*):
        (JSC::DeprecatedPtr::operator!):
        (JSC::operator==):

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

        Reviewed by Gavin Barraclough.

        Remove unneeded deprecated methods from MarkStack
        https://bugs.webkit.org/show_bug.cgi?id=58853

        Remove deprecated methods

        * heap/MarkStack.h:

2011-04-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam Roben.

        Off by one initialising repeat callframe
        https://bugs.webkit.org/show_bug.cgi?id=58838
        <rdar://problem/8756810>

        If the end of a callframe made for a repeat call landed on
        a page boundary the following page may not have been committed
        which means that the off by one could lead to a crash.  However
        it could only happen in this case and only on windows which is
        why it was so hard to repro.  Alas given the steps needed to
        reproduce are such that it's not really possible to make a
        testcase.

        This fix makes the code a little less squirrely by not trying
        to avoid the unnecessary initialisation of |this|.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::prepareForRepeatCall):

2011-04-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 58829 - DFG JIT - Optimize add/sub immediate, multiply.

        Add code generation for add/subtract instruction with immediate operands
        (where a child is a constant), and don't bail to non-speculative if an
        integer multiple results in a +0 result (only if it should be generating -0).

        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculativeJIT::isDoubleConstantWithInt32Value):

2011-04-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 58817 - DFG JIT - if speculative compilation fails, throw away code.

        If we detect a logical conflict, throw away generated code,
        and only compile through the NonSpeculativeJIT.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::rewindToLabel):
        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::rewindToOffset):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::branchAdd32):
        (JSC::MacroAssemblerX86Common::branchSub32):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::rewindToLabel):
        (JSC::X86Assembler::X86InstructionFormatter::rewindToLabel):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::linkSpeculationChecks):
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGNode.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
        (JSC::DFG::SpeculationCheckIndexIterator::SpeculationCheckIndexIterator):

2011-04-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Remove DeprecatedPtr
        https://bugs.webkit.org/show_bug.cgi?id=58718

        As simple as it sounds.

        * runtime/JSValue.h:
        * runtime/WriteBarrier.h:

2011-04-17  Cameron Zwarich  <zwarich@apple.com>

        Reviewed by Dan Bernstein.

        JSC no longer builds with Clang due to -Woverloaded-virtual warning
        https://bugs.webkit.org/show_bug.cgi?id=58760

        Rename Structure's specificValue overload of put to putSpecificValue to avoid
        Clang's warning for overloading a virtual function.

        * runtime/Structure.cpp:
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::addPropertyWithoutTransition):
        (JSC::Structure::putSpecificValue):
        * runtime/Structure.h:

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Remove WTF_PLATFORM_SGL
        https://bugs.webkit.org/show_bug.cgi?id=58743

        WTF_PLATFORM_SGL and PLATFORM(SGL) are not used in the code anywhere.

        * wtf/Platform.h:

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename PLATFORM(CA) to USE(CA)
        https://bugs.webkit.org/show_bug.cgi?id=58742

        * wtf/Platform.h:

2011-04-17  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename PLATFORM(CG) to USE(CG)
        https://bugs.webkit.org/show_bug.cgi?id=58729

        * wtf/Platform.h:

2011-04-16  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Rename PLATFORM(CAIRO) to USE(CAIRO)
        https://bugs.webkit.org/show_bug.cgi?id=55192

        * wtf/Platform.h:
        * wtf/gobject/GTypedefs.h:

2011-04-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r84067.
        http://trac.webkit.org/changeset/84067
        https://bugs.webkit.org/show_bug.cgi?id=58724

        qt build are failing. (Requested by loislo2 on #webkit).

        * heap/MarkStack.h:
        (JSC::MarkStack::append):
        * runtime/JSValue.h:
        * runtime/WriteBarrier.h:
        (JSC::DeprecatedPtr::DeprecatedPtr):
        (JSC::DeprecatedPtr::get):
        (JSC::DeprecatedPtr::operator*):
        (JSC::DeprecatedPtr::operator->):
        (JSC::DeprecatedPtr::slot):
        (JSC::DeprecatedPtr::operator UnspecifiedBoolType*):
        (JSC::DeprecatedPtr::operator!):
        (JSC::operator==):

2011-04-15  Shishir Agrawal  <shishir@chromium.org>

        Reviewed by James Robinson.

        Add a flag to guard Page Visibility API changes.
        https://bugs.webkit.org/show_bug.cgi?id=58464

        * Configurations/FeatureDefines.xcconfig:

2011-04-15  Gavin Barraclough  <barraclough@apple.com>

        Errrk! - build fix from !x86-64.

        * dfg/DFGNode.h:

2011-04-15  David Levin  <levin@chromium.org>

        Revert of r83974.

        JavaScriptCore shouldn't depend on ../ThirdParty/gtest/xcode/gtest.xcodeproj
        https://bugs.webkit.org/show_bug.cgi?id=58716

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/tests/RunAllWtfTests.cpp: Removed.
        * wtf/tests/StringTests.cpp: Removed.

2011-04-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Remove DeprecatedPtr
        https://bugs.webkit.org/show_bug.cgi?id=58718

        As simple as it sounds.

        * heap/MarkStack.h:
        (JSC::MarkStack::append):
        * runtime/JSValue.h:
        * runtime/WriteBarrier.h:

2011-04-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Add a simple tool to gather statistics on whether functions
        are completed through the new or old JIT.

        * dfg/DFGNode.h:
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):

2011-04-15  Oliver Hunt  <oliver@apple.com>

        GC allocate Structure
        https://bugs.webkit.org/show_bug.cgi?id=58483

        Rolling r83894 r83827 r83810 r83809 r83808 back in with
        a workaround for the gcc bug seen by the gtk bots

        * API/JSCallbackConstructor.cpp:
        (JSC::JSCallbackConstructor::JSCallbackConstructor):
        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::createStructure):
        * API/JSCallbackFunction.h:
        (JSC::JSCallbackFunction::createStructure):
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::createStructure):
        * API/JSCallbackObjectFunctions.h:
        (JSC::::JSCallbackObject):
        * API/JSContextRef.cpp:
        * JavaScriptCore.JSVALUE32_64only.exp:
        * JavaScriptCore.JSVALUE64only.exp:
        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::markStructures):
        (JSC::CodeBlock::markAggregate):
        * bytecode/CodeBlock.h:
        (JSC::MethodCallLinkInfo::setSeen):
        (JSC::GlobalResolveInfo::GlobalResolveInfo):
        * bytecode/Instruction.h:
        (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
        (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
        (JSC::PolymorphicAccessStructureList::markAggregate):
        (JSC::Instruction::Instruction):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::deref):
        (JSC::StructureStubInfo::markAggregate):
        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::initGetByIdSelf):
        (JSC::StructureStubInfo::initGetByIdProto):
        (JSC::StructureStubInfo::initGetByIdChain):
        (JSC::StructureStubInfo::initPutByIdTransition):
        (JSC::StructureStubInfo::initPutByIdReplace):
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::DebuggerActivation):
        * debugger/DebuggerActivation.h:
        (JSC::DebuggerActivation::createStructure):
        * heap/Handle.h:
        * heap/MarkStack.cpp:
        (JSC::MarkStack::markChildren):
        (JSC::MarkStack::drain):
        * heap/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock):
        (JSC::MarkedBlock::sweep):
        * heap/Strong.h:
        (JSC::Strong::Strong):
        (JSC::Strong::set):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolveGlobal):
        (JSC::Interpreter::resolveGlobalDynamic):
        (JSC::Interpreter::tryCachePutByID):
        (JSC::Interpreter::uncachePutByID):
        (JSC::Interpreter::tryCacheGetByID):
        (JSC::Interpreter::uncacheGetByID):
        (JSC::Interpreter::privateExecute):
        * jit/JIT.h:
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::patchMethodCallProto):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::patchMethodCallProto):
        (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/JSInterfaceJIT.h:
        (JSC::JSInterfaceJIT::storePtrWithWriteBarrier):
        * jsc.cpp:
        (cleanupGlobalData):
        * runtime/Arguments.h:
        (JSC::Arguments::createStructure):
        (JSC::Arguments::Arguments):
        (JSC::JSActivation::copyRegisters):
        * runtime/ArrayConstructor.cpp:
        (JSC::ArrayConstructor::ArrayConstructor):
        (JSC::constructArrayWithSizeQuirk):
        * runtime/ArrayConstructor.h:
        * runtime/ArrayPrototype.cpp:
        (JSC::ArrayPrototype::ArrayPrototype):
        (JSC::arrayProtoFuncSplice):
        * runtime/ArrayPrototype.h:
        (JSC::ArrayPrototype::createStructure):
        * runtime/BatchedTransitionOptimizer.h:
        (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
        * runtime/BooleanConstructor.cpp:
        (JSC::BooleanConstructor::BooleanConstructor):
        * runtime/BooleanConstructor.h:
        * runtime/BooleanObject.cpp:
        (JSC::BooleanObject::BooleanObject):
        * runtime/BooleanObject.h:
        (JSC::BooleanObject::createStructure):
        * runtime/BooleanPrototype.cpp:
        (JSC::BooleanPrototype::BooleanPrototype):
        * runtime/BooleanPrototype.h:
        * runtime/DateConstructor.cpp:
        (JSC::DateConstructor::DateConstructor):
        * runtime/DateConstructor.h:
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance):
        * runtime/DateInstance.h:
        (JSC::DateInstance::createStructure):
        * runtime/DatePrototype.cpp:
        (JSC::DatePrototype::DatePrototype):
        * runtime/DatePrototype.h:
        (JSC::DatePrototype::createStructure):
        * runtime/Error.cpp:
        (JSC::StrictModeTypeErrorFunction::StrictModeTypeErrorFunction):
        * runtime/ErrorConstructor.cpp:
        (JSC::ErrorConstructor::ErrorConstructor):
        * runtime/ErrorConstructor.h:
        * runtime/ErrorInstance.cpp:
        (JSC::ErrorInstance::ErrorInstance):
        (JSC::ErrorInstance::create):
        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::createStructure):
        * runtime/ErrorPrototype.cpp:
        (JSC::ErrorPrototype::ErrorPrototype):
        * runtime/ErrorPrototype.h:
        * runtime/ExceptionHelpers.cpp:
        (JSC::InterruptedExecutionError::InterruptedExecutionError):
        (JSC::TerminatedExecutionError::TerminatedExecutionError):
        * runtime/Executable.cpp:
        * runtime/Executable.h:
        (JSC::ExecutableBase::ExecutableBase):
        (JSC::ExecutableBase::createStructure):
        (JSC::NativeExecutable::createStructure):
        (JSC::NativeExecutable::NativeExecutable):
        (JSC::ScriptExecutable::ScriptExecutable):
        (JSC::EvalExecutable::createStructure):
        (JSC::ProgramExecutable::createStructure):
        (JSC::FunctionExecutable::createStructure):
        * runtime/FunctionConstructor.cpp:
        (JSC::FunctionConstructor::FunctionConstructor):
        * runtime/FunctionConstructor.h:
        * runtime/FunctionPrototype.cpp:
        (JSC::FunctionPrototype::FunctionPrototype):
        * runtime/FunctionPrototype.h:
        (JSC::FunctionPrototype::createStructure):
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::GetterSetter):
        (JSC::GetterSetter::createStructure):
        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreadingOnce):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::InternalFunction):
        * runtime/InternalFunction.h:
        (JSC::InternalFunction::createStructure):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::createStructure):
        (JSC::JSAPIValueWrapper::JSAPIValueWrapper):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::JSActivation):
        * runtime/JSActivation.h:
        (JSC::JSActivation::createStructure):
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        * runtime/JSArray.h:
        (JSC::JSArray::createStructure):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::JSByteArray):
        (JSC::JSByteArray::createStructure):
        * runtime/JSByteArray.h:
        (JSC::JSByteArray::JSByteArray):
        * runtime/JSCell.cpp:
        (JSC::isZombie):
        * runtime/JSCell.h:
        (JSC::JSCell::JSCell::JSCell):
        (JSC::JSCell::JSCell::addressOfStructure):
        (JSC::JSCell::JSCell::structure):
        (JSC::JSCell::JSCell::markChildren):
        (JSC::JSCell::JSValue::isZombie):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        * runtime/JSFunction.h:
        (JSC::JSFunction::createStructure):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::storeVPtrs):
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::clearBuiltinStructures):
        (JSC::JSGlobalData::createLeaked):
        * runtime/JSGlobalData.h:
        (JSC::allocateGlobalHandle):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::markChildren):
        (JSC::JSGlobalObject::copyGlobalsFrom):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObject):
        (JSC::JSGlobalObject::createStructure):
        (JSC::Structure::prototypeChain):
        (JSC::Structure::isValid):
        (JSC::constructEmptyArray):
        * runtime/JSNotAnObject.h:
        (JSC::JSNotAnObject::JSNotAnObject):
        (JSC::JSNotAnObject::createStructure):
        * runtime/JSONObject.cpp:
        (JSC::JSONObject::JSONObject):
        * runtime/JSONObject.h:
        (JSC::JSONObject::createStructure):
        * runtime/JSObject.cpp:
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::defineSetter):
        (JSC::JSObject::seal):
        (JSC::JSObject::freeze):
        (JSC::JSObject::preventExtensions):
        (JSC::JSObject::removeDirect):
        (JSC::JSObject::createInheritorID):
        * runtime/JSObject.h:
        (JSC::JSObject::createStructure):
        (JSC::JSObject::JSObject):
        (JSC::JSNonFinalObject::createStructure):
        (JSC::JSNonFinalObject::JSNonFinalObject):
        (JSC::JSFinalObject::create):
        (JSC::JSFinalObject::createStructure):
        (JSC::JSFinalObject::JSFinalObject):
        (JSC::constructEmptyObject):
        (JSC::createEmptyObjectStructure):
        (JSC::JSObject::~JSObject):
        (JSC::JSObject::setPrototype):
        (JSC::JSObject::setStructure):
        (JSC::JSObject::inheritorID):
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::transitionTo):
        (JSC::JSObject::markChildrenDirect):
        * runtime/JSObjectWithGlobalObject.cpp:
        (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
        * runtime/JSObjectWithGlobalObject.h:
        (JSC::JSObjectWithGlobalObject::createStructure):
        (JSC::JSObjectWithGlobalObject::JSObjectWithGlobalObject):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::JSPropertyNameIterator):
        (JSC::JSPropertyNameIterator::create):
        (JSC::JSPropertyNameIterator::get):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::createStructure):
        (JSC::JSPropertyNameIterator::setCachedStructure):
        (JSC::Structure::setEnumerationCache):
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::JSStaticScopeObject):
        (JSC::JSStaticScopeObject::createStructure):
        * runtime/JSString.h:
        (JSC::RopeBuilder::JSString):
        (JSC::RopeBuilder::createStructure):
        * runtime/JSType.h:
        * runtime/JSTypeInfo.h:
        (JSC::TypeInfo::TypeInfo):
        * runtime/JSValue.h:
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::createStructure):
        (JSC::JSVariableObject::JSVariableObject):
        (JSC::JSVariableObject::copyRegisterArray):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::createStructure):
        (JSC::JSWrapperObject::JSWrapperObject):
        * runtime/JSZombie.cpp:
        * runtime/JSZombie.h:
        (JSC::JSZombie::JSZombie):
        (JSC::JSZombie::createStructure):
        * runtime/MathObject.cpp:
        (JSC::MathObject::MathObject):
        * runtime/MathObject.h:
        (JSC::MathObject::createStructure):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        (JSC::NativeErrorConstructor::markChildren):
        (JSC::constructWithNativeErrorConstructor):
        * runtime/NativeErrorConstructor.h:
        (JSC::NativeErrorConstructor::createStructure):
        * runtime/NativeErrorPrototype.cpp:
        (JSC::NativeErrorPrototype::NativeErrorPrototype):
        * runtime/NativeErrorPrototype.h:
        * runtime/NumberConstructor.cpp:
        (JSC::NumberConstructor::NumberConstructor):
        * runtime/NumberConstructor.h:
        (JSC::NumberConstructor::createStructure):
        * runtime/NumberObject.cpp:
        (JSC::NumberObject::NumberObject):
        * runtime/NumberObject.h:
        (JSC::NumberObject::createStructure):
        * runtime/NumberPrototype.cpp:
        (JSC::NumberPrototype::NumberPrototype):
        * runtime/NumberPrototype.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        * runtime/ObjectConstructor.h:
        (JSC::ObjectConstructor::createStructure):
        * runtime/ObjectPrototype.cpp:
        (JSC::ObjectPrototype::ObjectPrototype):
        * runtime/ObjectPrototype.h:
        * runtime/PropertyMapHashTable.h:
        (JSC::PropertyTable::PropertyTable):
        * runtime/RegExpConstructor.cpp:
        (JSC::RegExpConstructor::RegExpConstructor):
        (JSC::RegExpMatchesArray::RegExpMatchesArray):
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::createStructure):
        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::RegExpObject):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::createStructure):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::RegExpPrototype):
        * runtime/RegExpPrototype.h:
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::ScopeChainNode):
        (JSC::ScopeChainNode::createStructure):
        * runtime/StrictEvalActivation.cpp:
        (JSC::StrictEvalActivation::StrictEvalActivation):
        * runtime/StringConstructor.cpp:
        (JSC::StringConstructor::StringConstructor):
        * runtime/StringConstructor.h:
        * runtime/StringObject.cpp:
        (JSC::StringObject::StringObject):
        * runtime/StringObject.h:
        (JSC::StringObject::createStructure):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
        (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
        * runtime/StringPrototype.cpp:
        (JSC::StringPrototype::StringPrototype):
        * runtime/StringPrototype.h:
        (JSC::StringPrototype::createStructure):
        * runtime/Structure.cpp:
        (JSC::StructureTransitionTable::remove):
        (JSC::StructureTransitionTable::add):
        (JSC::Structure::Structure):
        (JSC::Structure::~Structure):
        (JSC::Structure::materializePropertyMap):
        (JSC::Structure::addPropertyTransitionToExistingStructure):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::removePropertyTransition):
        (JSC::Structure::changePrototypeTransition):
        (JSC::Structure::despecifyFunctionTransition):
        (JSC::Structure::getterSetterTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::toCacheableDictionaryTransition):
        (JSC::Structure::toUncacheableDictionaryTransition):
        (JSC::Structure::sealTransition):
        (JSC::Structure::freezeTransition):
        (JSC::Structure::preventExtensionsTransition):
        (JSC::Structure::flattenDictionaryStructure):
        (JSC::Structure::copyPropertyTable):
        (JSC::Structure::put):
        (JSC::Structure::markChildren):
        * runtime/Structure.h:
        (JSC::Structure::create):
        (JSC::Structure::setPrototypeWithoutTransition):
        (JSC::Structure::createStructure):
        (JSC::JSCell::createDummyStructure):
        (JSC::StructureTransitionTable::keyForWeakGCMapFinalizer):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::StructureChain):
        (JSC::StructureChain::markChildren):
        * runtime/StructureChain.h:
        (JSC::StructureChain::create):
        (JSC::StructureChain::head):
        (JSC::StructureChain::createStructure):
        * runtime/StructureTransitionTable.h:
        (JSC::StructureTransitionTable::WeakGCMapFinalizerCallback::finalizerContextFor):
        (JSC::StructureTransitionTable::WeakGCMapFinalizerCallback::keyForFinalizer):
        (JSC::StructureTransitionTable::~StructureTransitionTable):
        (JSC::StructureTransitionTable::slot):
        (JSC::StructureTransitionTable::setMap):
        (JSC::StructureTransitionTable::singleTransition):
        (JSC::StructureTransitionTable::clearSingleTransition):
        (JSC::StructureTransitionTable::setSingleTransition):
        * runtime/WeakGCMap.h:
        (JSC::DefaultWeakGCMapFinalizerCallback::finalizerContextFor):
        (JSC::DefaultWeakGCMapFinalizerCallback::keyForFinalizer):
        (JSC::WeakGCMap::contains):
        (JSC::WeakGCMap::find):
        (JSC::WeakGCMap::remove):
        (JSC::WeakGCMap::add):
        (JSC::WeakGCMap::set):
        (JSC::WeakGCMap::finalize):
        * runtime/WriteBarrier.h:
        (JSC::writeBarrier):
        (JSC::WriteBarrierBase::set):
        (JSC::WriteBarrierBase::operator*):
        (JSC::WriteBarrierBase::operator->):
        (JSC::WriteBarrierBase::setWithoutWriteBarrier):

2011-04-15  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Gavin Barraclough.

        Correctly prefix symbols. Since gcc 4.5.0, Windows x64 symbols
        are not prefixed by underscore anymore. This is consistent with
        what MSVC does.
        https://bugs.webkit.org/show_bug.cgi?id=58573

        * jit/JITStubs.cpp:

2011-04-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 58705 - DFG JIT Add support for flow control (branch, jump).

        Add support for control flow by breaking the CodeBlock up into multiple
        basic blocks, generating code for each basic block in turn through the
        speculative JIT & then the non-speculative JIT.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::setTemporary):
        (JSC::DFG::ByteCodeParser::addToGraph):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        (JSC::DFG::BasicBlock::BasicBlock):
        (JSC::DFG::BasicBlock::getBytecodeOffset):
        (JSC::DFG::Graph::blockIndexForBytecodeOffset):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::JITCodeGenerator):
        (JSC::DFG::JITCodeGenerator::addBranch):
        (JSC::DFG::JITCodeGenerator::linkBranches):
        (JSC::DFG::JITCodeGenerator::BranchRecord::BranchRecord):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::Node):
        (JSC::DFG::Node::isJump):
        (JSC::DFG::Node::isBranch):
        (JSC::DFG::Node::takenBytecodeOffset):
        (JSC::DFG::Node::notTakenBytecodeOffset):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGNonSpeculativeJIT.h:
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:

2011-04-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.

        Bug 58701 - DFG JIT - add GetLocal/SetLocal nodes

        Use these for both access to arguments & local variables, adds ability
        to set locals, such that values will persist between basic blocks.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::get):
        (JSC::DFG::ByteCodeParser::set):
        (JSC::DFG::ByteCodeParser::getVariable):
        (JSC::DFG::ByteCodeParser::setVariable):
        (JSC::DFG::ByteCodeParser::getArgument):
        (JSC::DFG::ByteCodeParser::setArgument):
        (JSC::DFG::ByteCodeParser::getThis):
        (JSC::DFG::ByteCodeParser::setThis):
        (JSC::DFG::ByteCodeParser::VariableRecord::VariableRecord):
        (JSC::DFG::ByteCodeParser::parseBlock):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        (JSC::DFG::Graph::derefChildren):
        * dfg/DFGGraph.h:
        (JSC::DFG::Graph::ref):
        (JSC::DFG::Graph::deref):
        * dfg/DFGNode.h:
        (JSC::DFG::Node::hasLocal):
        (JSC::DFG::Node::local):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-04-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 58696 - DFG JIT split handling of vars/temporaries

        Presently all callee registers are treated as having single block scope,
        since the DFG JIT can only compile single block functions. In order to
        expand the JIT to support control flow we will need to change to retaining
        locals (but not temporaries) across basic block boundaries.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::get):
        (JSC::DFG::ByteCodeParser::set):
        (JSC::DFG::ByteCodeParser::getVariable):
        (JSC::DFG::ByteCodeParser::setVariable):
        (JSC::DFG::ByteCodeParser::getTemporary):
        (JSC::DFG::ByteCodeParser::setTemporary):
        (JSC::DFG::ByteCodeParser::getArgument):
        (JSC::DFG::ByteCodeParser::getInt32Constant):
        (JSC::DFG::ByteCodeParser::getDoubleConstant):
        (JSC::DFG::ByteCodeParser::getJSConstant):
        (JSC::DFG::ByteCodeParser::constantUndefined):
        (JSC::DFG::ByteCodeParser::constantNull):
        (JSC::DFG::ByteCodeParser::one):
        (JSC::DFG::ByteCodeParser::parseBlock):
        (JSC::DFG::ByteCodeParser::parse):
        (JSC::DFG::parse):
        * dfg/DFGNode.h:
        * dfg/DFGScoreBoard.h:
        (JSC::DFG::ScoreBoard::ScoreBoard):
        (JSC::DFG::ScoreBoard::~ScoreBoard):
        (JSC::DFG::ScoreBoard::allocate):
        (JSC::DFG::ScoreBoard::use):

2011-04-15  Michael Saboff  <msaboff@apple.com>

        Reviewed by Oliver Hunt.

        globalObject moved to JSObjectWithGlobalObject.cpp inhibits inlining
        https://bugs.webkit.org/show_bug.cgi?id=58677

        Moved JSObjectWithGlobalObject::globalObject() to 
        runtime/JSObjectWithGlobalObject.h to allow the compiler to inline
        it for a performance benefit.  An equivalent instance had been in
        a header file before r60057.

        * JavaScriptCore.exp:
        * runtime/JSObjectWithGlobalObject.cpp:
        * runtime/JSObjectWithGlobalObject.h:
        (JSC::JSObjectWithGlobalObject::globalObject):

2011-04-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make JSNodeFilterCondition handle its lifetime correctly
        https://bugs.webkit.org/show_bug.cgi?id=58622

        Add export

        * JavaScriptCore.exp:

2011-04-14  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        WebKit2: Password field input does not switch to ASCII-compatible source
        https://bugs.webkit.org/show_bug.cgi?id=58583
        <rdar://problem/9059651>

        * wtf/Platform.h: Removed WTF_USE_CARBON_SECURE_INPUT_MODE. It's now only used by Chromium,
        and shouldn't be enabled on any other platforms, so there is no reason to make it
        configurable via Platform.h.

2011-04-15  Dmitry Lomov  <dslomov@google.com>

        Reviewed by David Levin.

        Add a sample test case for GTest framework
        https://bugs.webkit.org/show_bug.cgi?id=58509

        Add an example of GTest testcase, complete with a runner, to JavaScriptCore.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/tests/RunAllWtfTests.cpp: Added.
        (main):
        * wtf/tests/StringTests.cpp: Added.

2011-04-15  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Renaming TRACK feature define to VIDEO_TRACK
        https://bugs.webkit.org/show_bug.cgi?id=53556

        * Configurations/FeatureDefines.xcconfig:

2011-04-14  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Geoffrey Garen.

        Hide DFG_JIT_RESTRICTIONS behind ARITHMETIC_OP() macro, and rename
        m_regressionGuard to m_parseFailed, such that it can be reused for
        other failure cases.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::parse):

2011-04-14  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoffrey Garen.

        Bug 58620 - DFG JIT - loading of arguments should not be lazy

        This optimization is overly simplistic. It only works because we never
        write out definitions to arguments (since we currently only compile
        single block functions). Revert this for now, we may want to reintroduce
        something like this again in the future, but it will need to be aware
        how to schedule definitions to arguments versus lazy loads that have not
        yet been performed.

        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::GenerationInfo::needsSpill):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::fillInteger):
        (JSC::DFG::JITCodeGenerator::fillDouble):
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::initConstantInfo):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::fillNumericToDouble):
        (JSC::DFG::JITCompiler::fillInt32ToInteger):
        (JSC::DFG::JITCompiler::fillToJS):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::isKnownInteger):
        (JSC::DFG::NonSpeculativeJIT::isKnownNumeric):
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateIntInternal):
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::compile):

2011-04-14  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoffrey Garen.

        Bug 58600 - DFG JIT bugs in ValueToInt, PutByVal

        The bug in PutByVal is that an operand is in JSValueOperand - when this
        locks an integer into a register it will always retag the value without
        checking if the register is already locked. This is a problem where the
        value being stored by a PutByVal is the same as the subscript.
        The subscript is locked into a register first, as a strict integer.
        Locking the value results in the subscript being modified.

        The bug in ValueToInt related to the function of sillentFillAllRegisters.
        The problem is that this method will restore all register values from
        prior to the call, overwriting the result of the call out. Allow a
        register to be passed to specifically be excluded from being preserved.

        * assembler/ARMAssembler.h:
        (JSC::ARMAssembler::debugOffset):
        * assembler/ARMv7Assembler.h:
        (JSC::ARMv7Assembler::ARMInstructionFormatter::debugOffset):
        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::debugOffset):
        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::debugOffset):
        * assembler/LinkBuffer.h:
        (JSC::LinkBuffer::debugAddress):
        * assembler/MIPSAssembler.h:
        (JSC::MIPSAssembler::debugOffset):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::orPtr):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::debugOffset):
        (JSC::X86Assembler::X86InstructionFormatter::debugOffset):
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parse):
        * dfg/DFGGenerationInfo.h:
        * dfg/DFGJITCodeGenerator.cpp:
        (JSC::DFG::JITCodeGenerator::fillJSValue):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::isConstant):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::isConstant):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::valueToNumber):
        (JSC::DFG::NonSpeculativeJIT::valueToInt32):
        (JSC::DFG::NonSpeculativeJIT::numberToInt32):
        (JSC::DFG::NonSpeculativeJIT::isKnownInteger):
        (JSC::DFG::NonSpeculativeJIT::isKnownNumeric):
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGNonSpeculativeJIT.h:
        (JSC::DFG::NonSpeculativeJIT::silentSpillGPR):
        (JSC::DFG::NonSpeculativeJIT::silentSpillFPR):
        (JSC::DFG::NonSpeculativeJIT::silentFillGPR):
        (JSC::DFG::NonSpeculativeJIT::silentFillFPR):
        (JSC::DFG::NonSpeculativeJIT::silentSpillAllRegisters):
        (JSC::DFG::NonSpeculativeJIT::silentFillAllRegisters):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):

2011-04-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Drain the mark stack while marking weak handles, not after.
        https://bugs.webkit.org/show_bug.cgi?id=58574

        Otherwise, items that would have caused more weak handle marking are
        processed after all weak handle marking has finished, and referenced
        weak handles get recycled.

        * heap/HandleHeap.cpp:
        (JSC::HandleHeap::markWeakHandles): Removed looping from here, since we
        want Heap::markRoots to be responsible for draining the mark stack.

        * heap/Heap.cpp:
        (JSC::Heap::markRoots): Moved looping to here, as explained above.
        
        For efficiency's sake, drain the mark stack before starting to mark weak
        handles. Otherwise, items drained while marking weak handles may force
        an extra trip through the weak handle list.

        For correctness's sake, drain the mark stack each time through the weak
        handle list. Otherwise, opaque roots that would make weak handles reachable
        are not discovered until after weak handle marking is over.

2011-04-14  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make protected object list in caches window reflect reality
        https://bugs.webkit.org/show_bug.cgi?id=58565

        Make sure the heap includes objects protected by Strong handles
        in its list of protected objects.

        * heap/HandleHeap.h:
        * heap/Heap.cpp:
        (JSC::HandleHeap::protectedObjectTypeCounts):

2011-04-14  Satish Sampath  <satish@chromium.org>

        Reviewed by Anders Carlsson.

        Don't emit RegExp tables for chromium where they are not used
        https://bugs.webkit.org/show_bug.cgi?id=58544

        * JavaScriptCore.gyp/JavaScriptCore.gyp:
        * create_regex_tables: Added the "--notables" command line argument.

2011-04-13  Geoffrey Garen  <ggaren@apple.com>

        Try to fix ASSERTs seen on Windows bots.

        * wtf/HashTable.h:
        (WTF::hashTableSwap): Force MSVC to use the right version of swap.

2011-04-13  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [CMAKE] Separate DerivedSources.
        https://bugs.webkit.org/show_bug.cgi?id=58427

        * CMakeLists.txt: Change DERIVED_SOURCES_DIR to DERIVED_SOURCES_JAVASCRIPTCORE_DIR.

2011-04-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Switched DOM wrappers to use HashMap of Weak<T> instead of WeakGCMap<T>
        https://bugs.webkit.org/show_bug.cgi?id=58482
        
        This will allow wrappers to make individual decisions about their lifetimes.

        * heap/HandleHeap.h:
        (JSC::HandleHeap::copyWeak): New function for copying a weak handle.
        It's wasn't previously possible to perform this operation using HandleHeap
        API because the HandleHeap doesn't expose its underlying Node structure.

        * heap/Local.h:
        (JSC::::set):
        * heap/Strong.h:
        (JSC::Strong::set): Added ASSERTs to verify that dead objects are not
        resurrected by placement into handles.

        (JSC::swap): Added a swap helper, so use of Strong<T> inside a hash table
        is efficient.

        * heap/Weak.h:
        (JSC::Weak::Weak): Fixed a bug where copying a weak pointer would not
        copy its weak callback and context.

        (JSC::Weak::operator=): Added an assignment operator, since the default
        C++ assignment operator did the wrong thing.

        (JSC::Weak::set): Added ASSERTs to verify that dead objects are not
        resurrected by placement into handles.

        (JSC::swap): Added a swap helper, so use of Strong<T> inside a hash table
        is efficient, and can be done without copying, which is illegal during
        the handle finalization phase.

2011-04-13  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make PropertyMapEntry use a WriteBarrier for specificValue
        https://bugs.webkit.org/show_bug.cgi?id=58407

        Make PropertyMapEntry use a WriteBarrier for specificValue, and then
        propagate the required JSGlobalData through all the methods it ends
        up being needed.

        * API/JSClassRef.cpp:
        (OpaqueJSClass::prototype):
        * API/JSContextRef.cpp:
        * API/JSObjectRef.cpp:
        (JSObjectMake):
        (JSObjectSetPrototype):
        * JavaScriptCore.exp:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * interpreter/Interpreter.cpp:
        (JSC::appendSourceToError):
        (JSC::Interpreter::tryCacheGetByID):
        (JSC::Interpreter::privateExecute):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/BatchedTransitionOptimizer.h:
        (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer):
        * runtime/InternalFunction.cpp:
        (JSC::InternalFunction::name):
        (JSC::InternalFunction::displayName):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::getOwnPropertySlot):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::name):
        (JSC::JSFunction::displayName):
        (JSC::JSFunction::getOwnPropertySlot):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::putWithAttributes):
        (JSC::JSGlobalObject::reset):
        (JSC::JSGlobalObject::resetPrototype):
        * runtime/JSGlobalObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::put):
        (JSC::JSObject::deleteProperty):
        (JSC::JSObject::defineGetter):
        (JSC::JSObject::defineSetter):
        (JSC::JSObject::lookupGetter):
        (JSC::JSObject::lookupSetter):
        (JSC::JSObject::getPropertySpecificValue):
        (JSC::JSObject::getOwnPropertyNames):
        (JSC::JSObject::seal):
        (JSC::JSObject::freeze):
        (JSC::JSObject::preventExtensions):
        (JSC::JSObject::removeDirect):
        (JSC::JSObject::getOwnPropertyDescriptor):
        (JSC::JSObject::defineOwnProperty):
        * runtime/JSObject.h:
        (JSC::JSObject::getDirect):
        (JSC::JSObject::getDirectLocation):
        (JSC::JSObject::isSealed):
        (JSC::JSObject::isFrozen):
        (JSC::JSObject::setPrototypeWithCycleCheck):
        (JSC::JSObject::setPrototype):
        (JSC::JSObject::inlineGetOwnPropertySlot):
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::putDirectWithoutTransition):
        (JSC::JSObject::putDirectFunctionWithoutTransition):
        * runtime/Lookup.cpp:
        (JSC::setUpStaticFunctionSlot):
        * runtime/ObjectConstructor.cpp:
        (JSC::objectConstructorCreate):
        (JSC::objectConstructorSeal):
        (JSC::objectConstructorFreeze):
        (JSC::objectConstructorPreventExtensions):
        (JSC::objectConstructorIsSealed):
        (JSC::objectConstructorIsFrozen):
        * runtime/Operations.h:
        (JSC::normalizePrototypeChain):
        * runtime/PropertyMapHashTable.h:
        (JSC::PropertyMapEntry::PropertyMapEntry):
        (JSC::PropertyTable::PropertyTable):
        (JSC::PropertyTable::copy):
        * runtime/Structure.cpp:
        (JSC::Structure::materializePropertyMap):
        (JSC::Structure::despecifyDictionaryFunction):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::removePropertyTransition):
        (JSC::Structure::changePrototypeTransition):
        (JSC::Structure::despecifyFunctionTransition):
        (JSC::Structure::getterSetterTransition):
        (JSC::Structure::toDictionaryTransition):
        (JSC::Structure::toCacheableDictionaryTransition):
        (JSC::Structure::toUncacheableDictionaryTransition):
        (JSC::Structure::sealTransition):
        (JSC::Structure::freezeTransition):
        (JSC::Structure::preventExtensionsTransition):
        (JSC::Structure::isSealed):
        (JSC::Structure::isFrozen):
        (JSC::Structure::addPropertyWithoutTransition):
        (JSC::Structure::removePropertyWithoutTransition):
        (JSC::Structure::copyPropertyTable):
        (JSC::Structure::get):
        (JSC::Structure::despecifyFunction):
        (JSC::Structure::despecifyAllFunctions):
        (JSC::Structure::put):
        (JSC::Structure::getPropertyNames):
        * runtime/Structure.h:
        (JSC::Structure::get):
        (JSC::Structure::materializePropertyMapIfNecessary):

2011-04-13  Paul Knight  <pknight@apple.com>

        Reviewed by Gavin Barraclough.

        BACKTRACE() macro should check for Debug configuration in macro, not WTFReportBacktrace definition
        https://bugs.webkit.org/show_bug.cgi?id=58405

        The BACKTRACE() macro requires JavaScriptCore be built with a Debug
        configuration in order for it to be enabled. Move the NDEBUG check to
        the header so it will be enabled when the calling framework or
        application is built with a Debug configuration, similar to how
        ASSERT() and friends work.

        * wtf/Assertions.cpp:
        * wtf/Assertions.h:

2011-04-12  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=58131

        Provide a workaround for an obscure Studio 12 compiler bug, which
        couldn't call src->~T() on a const T *src.

        * wtf/Vector.h:

2011-04-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=58395
        Exceptions thrown from property getters called from Array prototype functions can be missed

        This is caught by an ASSERT in the top of Interpreter::executeCall.
        Check for exceptions after accessing properties that could be getters.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncSort):
        (JSC::arrayProtoFuncFilter):
        (JSC::arrayProtoFuncMap):
        (JSC::arrayProtoFuncEvery):
        (JSC::arrayProtoFuncForEach):
        (JSC::arrayProtoFuncSome):
        (JSC::arrayProtoFuncReduce):
        (JSC::arrayProtoFuncReduceRight):
            - Add exception checks.

2011-04-12  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make API callback objects use weak handles to run their finalizers
        https://bugs.webkit.org/show_bug.cgi?id=58389

        Make the API object's private data struct act as a finalizer for
        an api object if the callback object has a API defined finalizer.

        * API/JSCallbackObject.cpp:
        (JSC::JSCallbackObjectData::finalize):
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        (JSC::::init):
        * heap/Handle.h:

2011-04-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Geoffrey Garen.

        Cleaned up hash traits, and added hash traits for handles
        https://bugs.webkit.org/show_bug.cgi?id=58381

        * heap/Handle.h:
        (JSC::HandleBase::swap):
        (JSC::Handle::Handle):
        (JSC::Handle::swap): Implemented swap, so we can rehash efficiently, and
        without creating new handles (which is not allowed during handle finalization).

        * heap/Strong.h:
        (JSC::Strong::swap): Use new SimpleClassHashTraits to avoid duplication.

        * heap/Weak.h:
        (JSC::Weak::isHashTableDeletedValue):
        (JSC::Weak::Weak):
        (JSC::Weak::swap):
        (JSC::Weak::hashTableDeletedValue): Ditto.

        * wtf/HashTraits.h:
        (WTF::SimpleClassHashTraits::constructDeletedValue):
        (WTF::SimpleClassHashTraits::isDeletedValue): Added SimpleClassHashTraits,
        which are analogous to SimpleClassVectorTraits, since they are used in a
        bunch of places.

        * wtf/RetainPtr.h: Use new SimpleClassHashTraits to avoid duplication.

        * wtf/text/StringHash.h: Use new SimpleClassHashTraits to avoid duplication.

2011-04-12  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Cleaned up some Vector traits, and added missing Vector traits for handles
        https://bugs.webkit.org/show_bug.cgi?id=58372

        * heap/Local.h: Inherit from SimpleClassVectorTraits to avoid duplication.

        * heap/Strong.h: Ditto.

        * heap/Weak.h: Ditto.

        * parser/JSParser.cpp: Fixed a traits error. No test case because this
        particular trait is not currently exercised by the parser.

        * runtime/UString.h: No need to override canInitializeWithMemset, since
        our base class sets it to true.

        * wtf/VectorTraits.h: Inherit from VectorTraitsBase to avoid duplication.

        * wtf/text/WTFString.h: No need to override canInitializeWithMemset, since
        our base class sets it to true.

2011-04-12  Thouraya ANDOLSI  <thouraya.andolsi@st.com>

        Reviewed by Eric Seidel.

        [Qt] Enable JIT build for SH4 platforms.
        https://bugs.webkit.org/show_bug.cgi?id=58317
        enable JIT build for QT backend  for SH4 platforms.

        * JavaScriptCore.pro:
        * wtf/Platform.h:

2011-04-11  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=58289

        Fix compilation on Solaris/Studio 12 C++ in wtf/FastMalloc.cpp,
        WTF::TCMalloc_PageHeap::runScavengerThread(void*) expected to return a value.

        * wtf/FastMalloc.cpp:
        (WTF::TCMalloc_PageHeap::runScavengerThread):

2011-04-11  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        * JavaScriptCore.xcodeproj/project.pbxproj: Headers used outside of JavaScriptCore need to be marked as private.

2011-04-11  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Setup ENABLE(TRACK) feature define
        https://bugs.webkit.org/show_bug.cgi?id=53556


        * Configurations/FeatureDefines.xcconfig:

2011-04-11  Geoffrey Garen  <ggaren@apple.com>

        Try to fix a few builds.
        
        Updated a few more build configurations for file moves.

        * CMakeListsWinCE.txt:

2011-04-11  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 58263 - Use EncodedValueDescriptor on both JSVALUE32_64, JSVALUE64

        The JSJITInterface already uses EncodedValueDescriptor to access the tag/payload
        separately on JSVALUE64, even though EncodedValueDescriptor is not used in
        JSVALUE64's implementation of JSValue. Remove the separate definition for m_ptr
        on X86_64. Using the union allows us to remove a layer of makeImmediate()/
        immedaiteValue() methods.

        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitTagAsBoolImmediate):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_not):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_get_pnames):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emitSlow_op_not):
        * runtime/JSCell.h:
        * runtime/JSValue.h:
        * runtime/JSValueInlineMethods.h:
        (JSC::JSValue::encode):
        (JSC::JSValue::decode):
        (JSC::JSValue::operator==):
        (JSC::JSValue::operator!=):
        (JSC::JSValue::JSValue):
        (JSC::JSValue::operator bool):
        (JSC::JSValue::asInt32):
        (JSC::JSValue::isUndefinedOrNull):
        (JSC::JSValue::isBoolean):
        (JSC::JSValue::isCell):
        (JSC::JSValue::isInt32):
        (JSC::JSValue::asDouble):
        (JSC::JSValue::isNumber):
        (JSC::JSValue::asCell):

2011-04-11  Geoffrey Garen  <ggaren@apple.com>

        Try to fix a few builds.
        
        Updated a few more build configurations for file moves.

        * CMakeListsEfl.txt:
        * wscript:

2011-04-11  Geoffrey Garen  <ggaren@apple.com>

        Build fix: Updated a file name.

        * CMakeLists.txt:

2011-04-11  Geoffrey Garen  <ggaren@apple.com>

        Rubber-stamped by Sam Weinig.
        
        Moved remaining heap implementation files to the heap folder.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/ConservativeRoots.cpp: Copied from runtime/ConservativeSet.cpp.
        * heap/ConservativeRoots.h: Copied from runtime/ConservativeSet.h.
        * heap/Handle.h:
        * heap/Heap.cpp:
        * heap/MachineStackMarker.cpp: Copied from runtime/MachineStackMarker.cpp.
        * heap/MachineStackMarker.h: Copied from runtime/MachineStackMarker.h.
        * heap/MarkStack.cpp: Copied from runtime/MarkStack.cpp.
        * heap/MarkStack.h: Copied from runtime/MarkStack.h.
        * heap/MarkStackPosix.cpp: Copied from runtime/MarkStackPosix.cpp.
        * heap/MarkStackSymbian.cpp: Copied from runtime/MarkStackSymbian.cpp.
        * heap/MarkStackWin.cpp: Copied from runtime/MarkStackWin.cpp.
        * heap/MarkedBlock.cpp: Copied from runtime/MarkedBlock.cpp.
        * heap/MarkedBlock.h: Copied from runtime/MarkedBlock.h.
        * heap/MarkedSpace.cpp: Copied from runtime/MarkedSpace.cpp.
        * heap/MarkedSpace.h: Copied from runtime/MarkedSpace.h.
        * interpreter/RegisterFile.cpp:
        * runtime/ConservativeSet.cpp: Removed.
        * runtime/ConservativeSet.h: Removed.
        * runtime/MachineStackMarker.cpp: Removed.
        * runtime/MachineStackMarker.h: Removed.
        * runtime/MarkStack.cpp: Removed.
        * runtime/MarkStack.h: Removed.
        * runtime/MarkStackPosix.cpp: Removed.
        * runtime/MarkStackSymbian.cpp: Removed.
        * runtime/MarkStackWin.cpp: Removed.
        * runtime/MarkedBlock.cpp: Removed.
        * runtime/MarkedBlock.h: Removed.
        * runtime/MarkedSpace.cpp: Removed.
        * runtime/MarkedSpace.h: Removed.

2011-04-11  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-04-09  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 58198 - Clean up JSValue implementation for JSVALUE64

        Remove JSNumberCell, JSImmediate, unify some methods between JSVALUE32_64/JSVALUE64

        JSNumberCell.h largely just contained the constructors for JSValue on JSVALUE64,
        which should not have been here.  JSImmediate mostly contained uncalled methods,
        along with the internal implementation of the JSValue constructors split unnecessarily
        across a number of layers of function calls. These could largely be merged back
        together. Many methods and constructors from JSVALUE32_64 and JSVALUE64 can by unified.

        The .cpp files were empty.

        Moving all these methods into JSValue.h seems to be a repro measurable regression, so
        I have kept these methods in a separate JSValueInlineMethods.h. Adding the 64-bit tag
        values as static const members of JSValue also measures as a repro regression, so I
        have made these #defines.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
            - Removed JSImmediate.h, JSNumberCell.h.
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitLoad):
            - Removed class JSImmediate.
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
            - Removed class JSImmediate.
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
            - Removed class JSImmediate.
        * jit/JITArithmetic.cpp:
        (JSC::JIT::compileBinaryArithOpSlowCase):
            - Removed class JSImmediate.
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitJumpIfJSCell):
        (JSC::JIT::emitJumpIfNotJSCell):
        (JSC::JIT::emitJumpIfImmediateInteger):
        (JSC::JIT::emitJumpIfNotImmediateInteger):
        (JSC::JIT::emitFastArithDeTagImmediate):
        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
        (JSC::JIT::emitFastArithReTagImmediate):
        (JSC::JIT::emitTagAsBoolImmediate):
            - Removed class JSImmediate.
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_not):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_get_pnames):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emitSlow_op_not):
            - Removed class JSImmediate.
        * jit/JSInterfaceJIT.h:
            - Removed class JSImmediate.
        * runtime/JSCell.h:
            - Removed JSImmediate.h, JSNumberCell.h.
        * runtime/JSImmediate.cpp: Removed.
        * runtime/JSImmediate.h: Removed.
        * runtime/JSNumberCell.cpp: Removed.
        * runtime/JSNumberCell.h: Removed.
            - Removed.
        * runtime/JSObject.h:
            - Removed JSImmediate.h, JSNumberCell.h.
        * runtime/JSString.h:
            - Removed JSImmediate.h, JSNumberCell.h.
        * runtime/JSValue.h:
            - Added tags for JSVALUE64, moved out some JSVALUE32_64 methods, unified with JSVALUE64.
        * runtime/JSValueInlineMethods.h: Added.
        (JSC::JSValue::toInt32):
        (JSC::JSValue::toUInt32):
        (JSC::JSValue::isUInt32):
        (JSC::JSValue::asUInt32):
        (JSC::JSValue::uncheckedGetNumber):
        (JSC::JSValue::toJSNumber):
        (JSC::jsNaN):
        (JSC::JSValue::getNumber):
        (JSC::JSValue::getBoolean):
        (JSC::JSValue::JSValue):
        (JSC::JSValue::encode):
        (JSC::JSValue::decode):
        (JSC::JSValue::operator bool):
        (JSC::JSValue::operator==):
        (JSC::JSValue::operator!=):
        (JSC::JSValue::isUndefined):
        (JSC::JSValue::isNull):
        (JSC::JSValue::isUndefinedOrNull):
        (JSC::JSValue::isCell):
        (JSC::JSValue::isInt32):
        (JSC::JSValue::isDouble):
        (JSC::JSValue::isTrue):
        (JSC::JSValue::isFalse):
        (JSC::JSValue::tag):
        (JSC::JSValue::payload):
        (JSC::JSValue::asInt32):
        (JSC::JSValue::asDouble):
        (JSC::JSValue::asCell):
        (JSC::JSValue::isNumber):
        (JSC::JSValue::isBoolean):
        (JSC::JSValue::makeImmediate):
        (JSC::JSValue::immediateValue):
        (JSC::reinterpretDoubleToIntptr):
        (JSC::reinterpretIntptrToDouble):
            - Methods moved here from JSImmediate.h/JSNumberCell.h/JSValue.h.
        * runtime/Operations.h:
            - Removed JSImmediate.h, JSNumberCell.h.
        * wtf/StdLibExtras.h:
            - Export bitwise_cast.

2011-04-11  Thouraya ANDOLSI  <thouraya.andolsi@st.com>

        Reviewed by Oliver Hunt.

        SH4 JIT SUPPORT.
        https://bugs.webkit.org/show_bug.cgi?id=44329

        Add JIT remaining part for SH4 platforms.

        * assembler/MacroAssemblerSH4.h:
        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        * jit/JITOpcodes32_64.cpp:
        * jit/JITPropertyAccess32_64.cpp:
        * jit/JITStubs.cpp:
        * jit/JITStubs.h:
        * jit/JSInterfaceJIT.h:

2011-04-10  Geoffrey Garen  <ggaren@apple.com>

        Rubber-stamped by Beth Dakin.

        Moved Heap.h and Heap.cpp to the heap folder, because anything less 
        would be uncivilized.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * heap/Heap.cpp: Copied from JavaScriptCore/runtime/Heap.cpp.
        * heap/Heap.h: Copied from JavaScriptCore/runtime/Heap.h.
        * runtime/Heap.cpp: Removed.
        * runtime/Heap.h: Removed.

2011-04-10  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Remove duplicated code from AtomicString::fromUTF8()
        https://bugs.webkit.org/show_bug.cgi?id=53711

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/text/AtomicString.cpp:
        (WTF::AtomicString::fromUTF8Internal):
        * wtf/text/AtomicString.h:
        (WTF::AtomicString::fromUTF8):
        * wtf/unicode/UTF8.cpp:
        (WTF::Unicode::calculateStringHashAndLengthFromUTF8):
        * wtf/unicode/UTF8.h:

2011-04-10  Maciej Stachowiak  <mjs@apple.com>

        Not reviewed.

        Fix build (at least on Lion) by adding some newish header files to
        PrivateHeaders.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-04-09  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Try recommitting some things svn left out of its last commit.

        * heap/Handle.h:
        (JSC::HandleBase::operator!):
        (JSC::HandleBase::HandleBase):
        (JSC::HandleBase::slot):
        (JSC::HandleBase::setSlot):
        (JSC::Handle::Handle):
        * heap/HandleHeap.cpp:
        (JSC::HandleHeap::markWeakHandles):
        (JSC::HandleHeap::finalizeWeakHandles):
        (JSC::HandleHeap::isValidWeakNode):
        * heap/HandleHeap.h:
        (JSC::HandleHeap::globalData):

2011-04-08  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        A few heap-related renames and file moves.
        
        WeakGCPtr<T> => Weak<T>
        Global<T> => Strong<T>
        collector/ => heap/
        collector/* => heap/*
        runtime/WeakGCPtr.h => heap/Weak.h
        
        (Eventually, even more files should move into the heap directory. Like
        Heap.h and Heap.cpp, for example.)

        * API/JSClassRef.h:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * GNUmakefile.list.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pri:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd:
        * JavaScriptCore.vcproj/jsc/jscCommon.vsprops:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/SamplingTool.h:
        * bytecompiler/BytecodeGenerator.h:
        * collector: Removed.
        * collector/handles: Removed.
        * collector/handles/Global.h: Removed.
        * collector/handles/Handle.h: Removed.
        * collector/handles/HandleHeap.cpp: Removed.
        * collector/handles/HandleHeap.h: Removed.
        * collector/handles/HandleStack.cpp: Removed.
        * collector/handles/HandleStack.h: Removed.
        * collector/handles/Local.h: Removed.
        * collector/handles/LocalScope.h: Removed.
        * heap: Copied from collector.
        * heap/Handle.h: Copied from collector/handles/Handle.h.
        * heap/HandleHeap.cpp: Copied from collector/handles/HandleHeap.cpp.
        * heap/HandleHeap.h: Copied from collector/handles/HandleHeap.h.
        * heap/HandleStack.cpp: Copied from collector/handles/HandleStack.cpp.
        * heap/HandleStack.h: Copied from collector/handles/HandleStack.h.
        * heap/Local.h: Copied from collector/handles/Local.h.
        * heap/LocalScope.h: Copied from collector/handles/LocalScope.h.
        * heap/Strong.h: Copied from collector/handles/Global.h.
        (JSC::Strong::Strong):
        (JSC::Strong::~Strong):
        (JSC::Strong::operator=):
        * heap/Weak.h: Copied from runtime/WeakGCPtr.h.
        (JSC::Weak::Weak):
        (JSC::Weak::~Weak):
        * heap/handles: Removed.
        * interpreter/RegisterFile.h:
        * jit/JITStubs.cpp:
        (JSC::JITThunks::hostFunctionStub):
        * jit/JITStubs.h:
        * runtime/Structure.h:
        * runtime/WeakGCPtr.h: Removed.

2011-04-08  Alpha Lam  <hclam@chromium.org>

        Unreviewed, rolling out r83335.
        http://trac.webkit.org/changeset/83335
        https://bugs.webkit.org/show_bug.cgi?id=53556

        GTK and QT bots are broken

        * Configurations/FeatureDefines.xcconfig:

2011-04-08  Gavin Barraclough  <barraclough@apple.com>

        Ooops, typo, build fix.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parse):

2011-04-08  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 58154 - Add support for comparison operators to the DFG JIT.

        Add support for <, <=, ==, ===, and also !.  Add support for all corresponding
        bytecode ops, including the not- and -null forms.  Initially add functionally
        correct support, we'll revisit the performance.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::constantNull):
        (JSC::DFG::ByteCodeParser::parse):
            - Add support for parsing of bytecode opcodes, 
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::callOperation):
            - Add new operation call types, return bool values.
        * dfg/DFGNode.h:
            - Add new node types.
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
            - Add code generation for new nodes.
        * dfg/DFGOperations.cpp:
        (JSC::DFG::operationCompareLess):
        (JSC::DFG::operationCompareLessEq):
        (JSC::DFG::operationCompareEq):
        (JSC::DFG::operationCompareStrictEq):
        (JSC::DFG::dfgConvertJSValueToBoolean):
        * dfg/DFGOperations.h:
            - Add operation callbacks to implement new ops.
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
            - Add code generation for new nodes.
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
            - Switched to a simpler <0 check, rather than relying on an internal value in JSImmediate.
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompilePatchGetArrayLength):
            - Switched to a simpler <0 check, rather than relying on an internal value in JSImmediate.
        * runtime/JSImmediate.h:
            - Make tag values public, rather than relying on a friend - this matches JSVALUE32_64.

2011-04-07  Anna Cavender  <annacc@chromium.org>

        Reviewed by Eric Carlson.

        Setup ENABLE(TRACK) feature define
        https://bugs.webkit.org/show_bug.cgi?id=53556


        * Configurations/FeatureDefines.xcconfig:

2011-04-07  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [WK2][Qt][GTK] Introduce common use flag for the shared UNIX domain socket IPC implementation
        https://bugs.webkit.org/show_bug.cgi?id=58030

        * wtf/Platform.h: Introduce USE(UNIX_DOMAIN_SOCKETS) for WebKit2.

2011-04-08  Adam Roben  <aroben@apple.com>

        Clean build fix

        * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd: Don't try to delete directories that
        don't exist. Also switched from del /s to rmdir /s, which has the benefit of deleting the
        directory itself in addition to the files it contains.

2011-04-07  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Some Handle<T> cleanup
        https://bugs.webkit.org/show_bug.cgi?id=58109

        * bytecode/SamplingTool.h: Sorted alphabetically because that's the
        WebKit style. Added a Global.h #include that was previously missing
        but harmless.

        * collector/handles/Global.h:
        (JSC::Global::Global): Added a null constructor. No need for a special
        tag, and the tag is incompatible with some data structures.
        
        (JSC::Global::isHashTableDeletedValue):
        (JSC::Global::~Global):
        (JSC::Global::set):
        (JSC::Global::operator=):
        (JSC::Global::clear):
        (JSC::Global::hashTableDeletedValue): Reordered constructors to be near
        each other.

        (JSC::Global::setWithWriteBarrier): Renamed internalSet to
        setWithWriteBarrier for clarity, and funneled more code into using set
        and setWithWriteBarrier to reduce duplication.

        * collector/handles/Handle.h:
        (JSC::HandleBase::operator!):
        (JSC::HandleBase::HandleBase): Removed isEmpty(), since we already have
        boolean and ! operators.

        (JSC::HandleBase::slot):
        (JSC::HandleBase::setSlot):
        (JSC::Handle::Handle): Added general support for null Handles. This was
        previously outlawed by ASSERTs, but our code has grown to support and
        rely on null Handles.
        
        * collector/handles/HandleHeap.cpp:
        (JSC::HandleHeap::markWeakHandles):
        (JSC::HandleHeap::finalizeWeakHandles):
        (JSC::HandleHeap::isValidWeakNode): Migrated from isValidWeakHandle,
        and beefed this up a bit.

        * collector/handles/HandleHeap.h:
        (JSC::HandleHeap::globalData): Added accessor, used by some new set functions.

        * collector/handles/Local.h: Moved hash traits to the bottom of the file,
        since this file is about the Local class, not the traits.

        (JSC::::Local): Updated for removal of invalidate().

        (JSC::::operator): Deployed "using" to avoid a lot of this->
        template funny business.

        (JSC::::setWithSlotCheck): Renamed from internalSet, more specific now.

        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::RegisterFile): Updated to use null constructor.

        * jit/JITStubs.cpp:
        (JSC::JITThunks::hostFunctionStub):

        * runtime/JSPropertyNameIterator.h:
        (JSC::Structure::setEnumerationCache):
        * runtime/Structure.h: Removed clearEnumerationCache
        because it was an unused holdover from when the enumeration cache was
        not a handle.

        * runtime/WeakGCMap.h:
        (JSC::WeakGCMap::set): Finish initializing our handle before putting it
        in the table. This seemed more logical, and at one point was required
        to avoid triggering an ASSERT.

        * runtime/WeakGCPtr.h: Inherit from Handle instead of rolling our own
        handle-like behavior, to avoid duplication.

        (JSC::WeakGCPtr::WeakGCPtr):
        (JSC::WeakGCPtr::~WeakGCPtr):
        (JSC::WeakGCPtr::get):
        (JSC::WeakGCPtr::clear):
        (JSC::WeakGCPtr::set):
        (JSC::WeakGCPtr::setWithWriteBarrier): Removed duplicate code and
        standardized on Handle idioms.

2011-04-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Martin Robinson.

        Refactor Gtk build system to separate list of files
        https://bugs.webkit.org/show_bug.cgi?id=58090

        This is the first step towards generating part of the GTK build system
        using GYP.  In the first iteration, our plan is to just generate the
        list of files.  This patch is the first step, which is to separate out
        the part of JavaScriptCore build system that we intend to generate from
        the rest of the build system.

        * GNUmakefile.am:
        * GNUmakefile.list.am: Added.

2011-04-07  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Gavin Barraclough.

        Mapping booleans the same way as integers
        https://bugs.webkit.org/show_bug.cgi?id=56913

        Instead of having a seperate tag field for booleans,
        the logical values are stored in the payload field
        (for JSValue32_64 representation).

        1.007x speedup on SunSpider.

        * jit/JIT.h:
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitStoreBool):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emit_op_not):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emitSlow_op_jfalse):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emitSlow_op_jtrue):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_eq):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emit_op_neq):
        (JSC::JIT::emitSlow_op_neq):
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        * jit/JSInterfaceJIT.h:
        * runtime/JSValue.h:
        (JSC::JSValue::JSValue):
        (JSC::JSValue::isTrue):
        (JSC::JSValue::isFalse):
        (JSC::JSValue::getBoolean):

2011-04-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add stub support for generating Gtk build system from gyp
        https://bugs.webkit.org/show_bug.cgi?id=58086

        This does not produce a buildable JavaScriptCore, but it
        does allow running gyp/configure --port=gtk and having
        it generate a gtk.Makefile which we can use for testing
        the rest of the plumbing.

        * gyp/gtk.gyp: Added.

2011-04-07  Andrew Scherkus  <scherkus@chromium.org>

        Revert ENABLE_TRACK patch due to compile failures.

        * Configurations/FeatureDefines.xcconfig:

2011-04-07  Adam Barth  <abarth@webkit.org>

        Fix whitespace in GNUmakefile.am.

        * GNUmakefile.am:

2011-04-07  Gavin Barraclough  <barraclough@apple.com>

        Fix a couple of typos in comments that Darin spotted.

        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_not):
        * runtime/JSImmediate.h:

2011-04-06  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoff Garen.
        Bug 58057 - Store boolean payload in low bit of JSImmediate

        And remove some uncalled functions from JSImmediate.h

        * jit/JITInlineMethods.h:
        (JSC::JIT::emitTagAsBoolImmediate):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_not):
        * runtime/JSImmediate.h:
        (JSC::JSImmediate::makeInt):
        (JSC::JSImmediate::makeBool):
        (JSC::JSImmediate::intValue):
        (JSC::JSImmediate::boolValue):
        (JSC::JSImmediate::asInt32):
        (JSC::JSImmediate::toDouble):
        (JSC::JSValue::asInt32):
        (JSC::JSValue::isUInt32):
        (JSC::JSValue::asUInt32):

2011-04-07  Liang Qi  <liang.qi@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt][Symbian] Enable webkit build with GCCE on Symbian.
        https://bugs.webkit.org/show_bug.cgi?id=57841

        * wtf/MathExtras.h: GCCE compiler doesn't support those std static functions.

2011-04-06  Dai Mikurube  <dmikurube@chromium.org>

        Reviewed by David Levin.

        Add QUOTA build flag for unified quota API
        https://bugs.webkit.org/show_bug.cgi?id=57918

        * Configurations/FeatureDefines.xcconfig: Added QUOTA build flag

2011-04-06  Kevin Ollivier  <kevino@theolliviers.com>
        
        Reviewed by Darin Adler.
        
        Make sure JS_EXPORT_PRIVATE is an empty define when we aren't using the export macros.
        
        https://bugs.webkit.org/show_bug.cgi?id=27551

        * config.h:

2011-04-06  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Stop JSObject::isUsingInlineStorage() from using the structure
        https://bugs.webkit.org/show_bug.cgi?id=57986

        Make the isUsingInlineStorage() implementation just look at
        whether the property storage is inside the object.

        * runtime/JSObject.h:
        (JSC::JSObject::isUsingInlineStorage):
        (JSC::JSObject::JSObject):

2011-04-06  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Geoff Garen.

        Update comments documenting JSVALUE64/JSVALUE32_64 JSValue representations.

        * runtime/JSImmediate.h:
        * runtime/JSValue.h:

2011-04-06  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        cmake: Fix build for ARMv7

        * CMakeLists.txt: add missing file.

2011-04-06  Liang Qi  <liang.qi@nokia.com>

        Reviewed by Benjamin Poulain.

        Correct a include file name.
        https://bugs.webkit.org/show_bug.cgi?id=57839

        * wtf/PageAllocatorSymbian.h: It should be case sensitive. This fix 
        builds on Unix hosts.

2011-04-06  Adam Roben  <aroben@apple.com>

        Build fix after r83056

        * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd: Added property svn:executable.

2011-04-06  Adam Roben  <aroben@apple.com>

        Move JavaScriptCoreGenerated's file-copying logic out to a new script

        Hopefully this will make it easier to modify this logic in the future. I also made the
        script much quieter than the old logic, since it didn't seem helpful to see long lists of
        filenames during the copying phase.

        If we like this new style, we could copy it for our other projects.

        Fixes <http://webkit.org/b/57950> JavaScriptCoreGenerated's file-copying logic is hard to
        modify and noisy

        Reviewed by Steve Falkenburg.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Moved logic to copy
        files from here...
        * JavaScriptCore.vcproj/JavaScriptCore/copy-files.cmd: ...to here. (Added.)

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Added copy-files.cmd
        for convenience.

2011-04-05  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Who likes export files? I do!

2011-04-05  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Introduced the concept of opaque roots, in preparation for marking the DOM with them
        https://bugs.webkit.org/show_bug.cgi?id=57903

        * JavaScriptCore.exp: Who likes export files? I do!

        * collector/handles/HandleHeap.cpp:
        (JSC::isValidWeakHandle): Factored out a helper function for ASSERTs.

        (JSC::WeakHandleOwner::~WeakHandleOwner): Moved from header to avoid
        weak linkage problems.

        (JSC::WeakHandleOwner::isReachableFromOpaqueRoots): New callback.
        Currently unused.

        (JSC::WeakHandleOwner::finalize): Switched from pure virtual to a
        default empty implementation, since not all clients necessarily want
        or need non-trivial finalizers.

        (JSC::HandleHeap::markWeakHandles): Split updateWeakHandles into two
        passes. The first pass marks all reachable weak handles. The second pass
        finalizes all unreachable weak handles. This must be two passes because
        we don't know the set of finalizable weak handles until we're done
        marking all weak handles.

        (JSC::HandleHeap::finalizeWeakHandles): Use new helper function.

        * collector/handles/HandleHeap.h: Ditto.

        * runtime/Heap.cpp: 
        (JSC::Heap::destroy):
        (JSC::Heap::markRoots):
        (JSC::Heap::reset): Split out handle marking from handle finalization.

        * runtime/MarkStack.cpp:
        (JSC::MarkStack::reset):
        * runtime/MarkStack.h:
        (JSC::MarkStack::addOpaqueRoot):
        (JSC::MarkStack::containsOpaqueRoot):
        (JSC::MarkStack::opaqueRootCount):
        (JSC::HeapRootMarker::markStack): New helper functions for managing the
        set of opaque roots.

        * runtime/WeakGCMap.h:
        (JSC::WeakGCMap::finalize): Renamed to match parent class declaration.

2011-04-05  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Darin Adler.

        Build fix for YarrParser.h
        https://bugs.webkit.org/show_bug.cgi?id=57822

        * yarr/YarrParser.h:
        (JSC::Yarr::Parser::CharacterClassParserDelegate::CharacterClassParserDelegate):

2011-04-05  Steve Falkenburg  <sfalken@apple.com>

        Follow-up Windows build fix.
        Don't skip react-to-vsprops-changes.py for all production builds,
        only those initiated via JavaScriptCore.make.

        * JavaScriptCore.vcproj/JavaScriptCore.make:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:

2011-04-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r82849): 85,000+ JSC-related leaks seen on SnowLeopard Intel Leaks
        https://bugs.webkit.org/show_bug.cgi?id=57857

        Whoops, accidentally removed a deref().

        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::deref):

2011-04-05  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Add per-configuration vsprops files.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedCommon.vsprops: Removed inheritance from common.vsprops.
        Set production environment variable before calling make.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebug.vsprops: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugAll.vsprops: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedDebugCairoCFLite.vsprops: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedProduction.vsprops: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedRelease.vsprops: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedReleaseCairoCFLite.vsprops: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGeneratedReleasePGO.vsprops: Added.

2011-04-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make caches window show more info about non-jsobject GC values
        https://bugs.webkit.org/show_bug.cgi?id=57874

        Add ClassInfo to the various internal JS types that currently
        don't have any, and make the text for caches window show the
        classname for non-JSObject instances.

        * runtime/Executable.cpp:
        * runtime/Executable.h:
        (JSC::ExecutableBase::createStructure):
        (JSC::NativeExecutable::createStructure):
        (JSC::NativeExecutable::NativeExecutable):
        (JSC::EvalExecutable::createStructure):
        (JSC::ProgramExecutable::createStructure):
        (JSC::FunctionExecutable::createStructure):
        * runtime/Heap.cpp:
        (JSC::TypeCounter::typeName):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/ScopeChain.cpp:
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::createStructure):
        * runtime/StructureChain.cpp:
        * runtime/StructureChain.h:
        (JSC::StructureChain::createStructure):

2011-04-05  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Andreas Kling.

        Cleanup StringConcatenate
        https://bugs.webkit.org/show_bug.cgi?id=57836

        Don't use PassRefPtr in local variables, properly store in RefPtrs and release on return.
        Add a makeString() variant taking 9 arguments, needed by a follow-up patch.

        * wtf/text/StringConcatenate.h:
        (WTF::tryMakeString):
        (WTF::makeString):

2011-04-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r82876.
        http://trac.webkit.org/changeset/82876
        https://bugs.webkit.org/show_bug.cgi?id=57816

        Caused a lot of test crashes (Requested by tkent on #webkit).

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * wtf/FastMalloc.cpp:
        (WTF::tryFastMalloc):
        (WTF::fastMalloc):
        (WTF::tryFastCalloc):
        (WTF::fastCalloc):
        (WTF::fastFree):
        (WTF::tryFastRealloc):
        (WTF::fastRealloc):
        (WTF::fastMallocSize):
        (WTF::TCMalloc_PageHeap::isScavengerSuspended):
        (WTF::TCMalloc_PageHeap::scheduleScavenger):
        (WTF::TCMalloc_PageHeap::suspendScavenger):
        (WTF::TCMalloc_PageHeap::signalScavenger):
        (WTF::TCMallocStats::malloc):
        (WTF::TCMallocStats::free):
        (WTF::TCMallocStats::fastCalloc):
        (WTF::TCMallocStats::tryFastCalloc):
        (WTF::TCMallocStats::calloc):
        (WTF::TCMallocStats::fastRealloc):
        (WTF::TCMallocStats::tryFastRealloc):
        (WTF::TCMallocStats::realloc):
        (WTF::TCMallocStats::fastMallocSize):
        * wtf/FastMalloc.h:
        (WTF::Internal::fastMallocMatchValidationType):
        (WTF::Internal::fastMallocMatchValidationValue):
        (WTF::Internal::setFastMallocMatchValidationType):
        (WTF::fastMallocMatchValidateFree):
        * wtf/Platform.h:

2011-04-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by Antti Koivisto.

        Stop JSCell.h from including Structure.h
        https://bugs.webkit.org/show_bug.cgi?id=57809

        * runtime/GetterSetter.h:
        * runtime/JSAPIValueWrapper.h:
        * runtime/JSCell.h:
        (JSC::JSCell::JSValue::toThisObject):
        * runtime/JSString.h:
        * runtime/ScopeChain.h:
        * runtime/Structure.h:
        (JSC::JSCell::isObject):
        (JSC::JSCell::isString):
        (JSC::JSCell::classInfo):
        (JSC::JSCell::createDummyStructure):
        (JSC::JSValue::needsThisConversion):
        (JSC::MarkStack::internalAppend):
        * runtime/StructureChain.h:

2011-04-04  Oliver Hunt  <oliver@apple.com>

        Fix clang build.

        * wtf/FastMalloc.cpp:
        (WTF::fastMalloc):
        (WTF::fastCalloc):
        (WTF::fastRealloc):

2011-04-04  Oliver Hunt  <oliver@apple.com>

        Remove accidental change to Platform.h

        * wtf/Platform.h:

2011-04-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Fixed a weak-handle-related leak in RegisterFile
        https://bugs.webkit.org/show_bug.cgi?id=57793

        * interpreter/RegisterFile.cpp: Nixed leaky GlobalObjectNotifier.
        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::GlobalObjectOwner::finalize):
        (JSC::RegisterFile::RegisterFile): Replaced GlobalObjectNotifier with
        a per-RegisterFile weak handle owner, which does not leak.

        * runtime/WeakGCPtr.h:
        (JSC::WeakGCPtr::set): Allow set() to take a context argument, since
        RegisterFile now needs this. (Seems like it was an accidental omission
        all along.)

2011-04-04  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make malloc validation useful
        https://bugs.webkit.org/show_bug.cgi?id=57502

        This patch changes FAST_MALLOC_MATCH_VALIDATION with a general
        corruption check that tags the beginning and end of all allocations
        to check for write overflows and overwrites the contents of
        memory on free in order to (hopefully) show up use-after-free issues
        sooner.

        We also turn it on by default for debug builds.

        * JavaScriptCore.exp:
        * wtf/FastMalloc.cpp:
        (WTF::tryFastMalloc):
        (WTF::fastMalloc):
        (WTF::tryFastCalloc):
        (WTF::fastCalloc):
        (WTF::fastFree):
        (WTF::tryFastRealloc):
        (WTF::fastRealloc):
        (WTF::TCMalloc_PageHeap::isScavengerSuspended):
        (WTF::TCMalloc_PageHeap::scheduleScavenger):
        (WTF::TCMalloc_PageHeap::suspendScavenger):
        (WTF::TCMalloc_PageHeap::signalScavenger):
        (WTF::TCMallocStats::malloc):
        (WTF::TCMallocStats::free):
        (WTF::TCMallocStats::fastCalloc):
        (WTF::TCMallocStats::tryFastCalloc):
        (WTF::TCMallocStats::calloc):
        (WTF::TCMallocStats::fastRealloc):
        (WTF::TCMallocStats::tryFastRealloc):
        (WTF::TCMallocStats::realloc):
        * wtf/FastMalloc.h:
        (WTF::Internal::fastMallocValidationHeader):
        (WTF::Internal::fastMallocValidationSuffix):
        (WTF::Internal::fastMallocMatchValidationType):
        (WTF::Internal::setFastMallocMatchValidationType):
        (WTF::fastMallocMatchValidateFree):
        (WTF::fastMallocValidate):
        * wtf/Platform.h:

2011-04-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Renamed clearWeakPointers => updateWeakHandles and removed misleading comment
        https://bugs.webkit.org/show_bug.cgi?id=57790

        * collector/handles/HandleHeap.cpp:
        (JSC::HandleHeap::updateWeakHandles): Updated for rename.

        * collector/handles/HandleHeap.h: Removed comment claiming that this
        function should only be called during teardown, because it's actually
        called after every GC pass.

        * runtime/Heap.cpp:
        (JSC::Heap::destroy):
        (JSC::Heap::markRoots): Updated for rename.

2011-04-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Standardized handling of handles for immediate values
        https://bugs.webkit.org/show_bug.cgi?id=57788

        * collector/handles/HandleHeap.cpp:
        (JSC::HandleHeap::clearWeakPointers): Don't check for null or non-cell
        values here, because our write barrier guarantees that such values are
        not in the weak list.

        (JSC::HandleHeap::writeBarrier): Standardized on checking for null before
        checking for cell, and on using early return instead of if/else.

        * collector/handles/HandleHeap.h:
        (JSC::HandleHeap::deallocate):
        (JSC::HandleHeap::makeWeak): Ditto.

2011-04-04  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Removed a redundant variable from HandleHeap
        https://bugs.webkit.org/show_bug.cgi?id=57786
        
        Forgot to commit the file that actually removes the data member!
        
        * collector/handles/HandleHeap.h:

2011-04-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed a redundant variable from HandleHeap
        https://bugs.webkit.org/show_bug.cgi?id=57786
        
        We don't need a specific variable to indicate that we're in the middle
        of the finalization phase, since m_nextToFinalize already does this.

        * collector/handles/HandleHeap.cpp:
        (JSC::HandleHeap::HandleHeap):
        (JSC::HandleHeap::clearWeakPointers):
        (JSC::HandleHeap::writeBarrier):

2011-04-04  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Renamed Finalizer => WeakHandleOwner (in preparation for adding a reachability callback)
        https://bugs.webkit.org/show_bug.cgi?id=57775
        
        Also renamed noFinalizer => emptyWeakOwner, since this is really an
        optimization for a weak owner with empty callbacks.

        * collector/handles/HandleHeap.cpp:
        (JSC::HandleHeap::clearWeakPointers): Updated for renames. Removed
        redundant initialization of m_nextToFinalize. Moved deletion check inside
        weak owner check, since the weak owner can't delete the node if there is
        no weak owner!

        * collector/handles/HandleHeap.h:
        (JSC::WeakHandleOwner::~WeakHandleOwner):
        (JSC::HandleHeap::makeWeak): Updated for renames.

        (JSC::HandleHeap::hasWeakOwner): Changed getFinalizer to hasWeakOwner,
        to clarify this function's role in assertions.

        (JSC::HandleHeap::Node::Node):
        (JSC::HandleHeap::Node::makeWeak):
        (JSC::HandleHeap::Node::isWeak):
        (JSC::HandleHeap::Node::weakOwner):
        (JSC::HandleHeap::Node::weakOwnerContext):
        (JSC::HandleHeap::Node::emptyWeakOwner):
        * interpreter/RegisterFile.cpp:
        (JSC::RegisterFile::globalObjectCollectedNotifier):
        * interpreter/RegisterFile.h:
        * runtime/WeakGCMap.h:
        * runtime/WeakGCPtr.h:
        (JSC::WeakGCPtr::WeakGCPtr):
        (JSC::WeakGCPtr::set): Updated for renames.

2011-04-04  Oliver Hunt  <oliver@apple.com>

        Fix WinCE build.

        * bytecode/Instruction.h:
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::tryCachePutByID):
        (JSC::Interpreter::tryCacheGetByID):

2011-04-04  Adam Roben  <aroben@apple.com>

        Delete mt.dep files when doing a clean build due to .vsprops file changes

        Apparently this is yet another file that Visual Studio can't figure out it needs to rebuild.

        Fixes <http://webkit.org/b/57777> r82850 failed to build on Windows Debug (Build)

        Reviewed by Brian Weinstein.

        * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py:
        (main): Added dep to the list of extensions we look for when choosing files to delete.

2011-04-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make StructureChain GC allocated
        https://bugs.webkit.org/show_bug.cgi?id=56695

        Make StructureChain GC allocated, and make the various owners
        mark it correctly.

        * JavaScriptCore.exp:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::derefStructures):
        (JSC::CodeBlock::refStructures):
        (JSC::CodeBlock::markAggregate):
        * bytecode/Instruction.h:
        (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
        (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
        (JSC::PolymorphicAccessStructureList::derefStructures):
        (JSC::PolymorphicAccessStructureList::markAggregate):
        (JSC::Instruction::Instruction):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::deref):
        (JSC::StructureStubInfo::markAggregate):
        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::initGetByIdChain):
        (JSC::StructureStubInfo::initPutByIdTransition):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
        * collector/handles/Handle.h:
        (JSC::HandleConverter::operator->):
        (JSC::HandleConverter::operator*):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jneq_ptr):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_jneq_ptr):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompileGetByIdChainList):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::privateCompileGetByIdChainList):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::tryCachePutByID):
        (JSC::JITThunks::tryCacheGetByID):
        (JSC::getPolymorphicAccessStructureListSlot):
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSCell.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::markIfNeeded):
        * runtime/JSGlobalObject.h:
        (JSC::Structure::prototypeChain):
        * runtime/JSObject.h:
        (JSC::JSObject::putDirectInternal):
        (JSC::JSObject::markChildrenDirect):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::create):
        (JSC::JSPropertyNameIterator::get):
        (JSC::JSPropertyNameIterator::markChildren):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::setCachedPrototypeChain):
        * runtime/JSZombie.cpp:
        (JSC::JSZombie::leakedZombieStructure):
        * runtime/JSZombie.h:
        * runtime/MarkStack.h:
        (JSC::MarkStack::append):
        * runtime/MarkedBlock.cpp:
        (JSC::MarkedBlock::sweep):
        * runtime/Structure.cpp:
        (JSC::Structure::addPropertyTransition):
        * runtime/Structure.h:
        (JSC::Structure::markAggregate):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::StructureChain):
        (JSC::StructureChain::~StructureChain):
        (JSC::StructureChain::markChildren):
        * runtime/StructureChain.h:
        (JSC::StructureChain::create):
        (JSC::StructureChain::createStructure):
        * runtime/WriteBarrier.h:
        (JSC::WriteBarrierBase::get):
        (JSC::WriteBarrierBase::operator*):
        (JSC::WriteBarrierBase::operator->):

2011-04-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed some complexity from HandleHeap
        https://bugs.webkit.org/show_bug.cgi?id=57650
        
        Eliminated pointer-tagging flags.
        
        Tied being weak to having a finalizer (or at least a finalizer sentinel).

        * collector/handles/HandleHeap.cpp:
        (JSC::HandleHeap::clearWeakPointers): Removed the special self-destroying
        flag. It was unused. If we bring it back, we'll probably use a shared
        autodeallocating finalizer instead.

        * collector/handles/HandleHeap.h:
        (JSC::HandleHeap::makeWeak): makeWeak and adding a finalizer are now
        a single, atomic operation -- this makes the relationship between
        finalizers and weak pointers clearer, and impossible to get wrong.

        (JSC::HandleHeap::Node::Node):
        (JSC::HandleHeap::Node::handleHeap): No more flags.

        (JSC::HandleHeap::Node::makeWeak):
        (JSC::HandleHeap::Node::isWeak): Ditto above. We use a special sentienl
        value in the finalizer slot to indicate that a handle is weak but doesn't
        require an external function call for finalization.

2011-04-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed WeakGCMap::deprecatedRemove because it was deprecated and unused
        https://bugs.webkit.org/show_bug.cgi?id=57648

        * runtime/WeakGCMap.h:

2011-04-01  Adam Roben  <aroben@apple.com>

        Maintain the invariant that Lexer::m_current is set to -1 when at the end of the code buffer

        Covered by existing tests.

        Fixes <http://webkit.org/b/56699>.

        Reviewed by Oliver Hunt.

        * parser/Lexer.h:
        (JSC::Lexer::setOffset): Copied code from Lexer::shift to update m_current, because
        supposedly the idiom that function uses is fast.

2011-03-31  Thouraya ANDOLSI  <thouraya.andolsi@st.com>

        Reviewed by Oliver Hunt.

        SH4 JIT SUPPORT.
        https://bugs.webkit.org/show_bug.cgi?id=44329

        Add YARR support for SH4 platforms (disabled by default).

        * GNUmakefile.am:
        * assembler/MacroAssembler.h:
        * assembler/MacroAssemblerSH4.cpp: Added.
        * assembler/MacroAssemblerSH4.h: Added.
        * assembler/SH4Assembler.h: Added.
        * yarr/YarrJIT.cpp:

2011-03-30  Adam Roben  <aroben@apple.com>

        Clean build fix

        * JavaScriptCore.vcproj/JavaScriptCore.sln: Serialized project dependencies so projects
        don't try to build in parallel (which doesn't mesh with our buildfailed mechanism).

2011-03-30  Oliver Hunt  <oliver@apple.com>

        Rollout r82500

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::derefStructures):
        (JSC::CodeBlock::refStructures):
        (JSC::CodeBlock::markAggregate):
        * bytecode/Instruction.h:
        (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
        (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
        (JSC::PolymorphicAccessStructureList::derefStructures):
        (JSC::Instruction::Instruction):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::deref):
        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::initGetByIdChain):
        (JSC::StructureStubInfo::initPutByIdTransition):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jneq_ptr):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_jneq_ptr):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompileGetByIdChainList):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::privateCompileGetByIdChainList):
        * jit/JITStubs.cpp:
        (JSC::getPolymorphicAccessStructureListSlot):
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSCell.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::markIfNeeded):
        * runtime/JSGlobalObject.h:
        (JSC::Structure::prototypeChain):
        * runtime/JSObject.h:
        (JSC::JSObject::markChildrenDirect):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::create):
        (JSC::JSPropertyNameIterator::get):
        (JSC::JSPropertyNameIterator::markChildren):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::setCachedPrototypeChain):
        * runtime/MarkStack.h:
        (JSC::MarkStack::append):
        * runtime/Structure.h:
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::StructureChain):
        * runtime/StructureChain.h:
        (JSC::StructureChain::create):

2011-03-29  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Use the Accelerate vImage vectorized (un)premultiplyImageData functions for ImageBufferCG

        https://bugs.webkit.org/show_bug.cgi?id=53134

        * wtf/Platform.h: Added in WTF flag for using the Accelerate framework

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Share most vsprops between Release and Production builds in releaseproduction.vsprops
        https://bugs.webkit.org/show_bug.cgi?id=57508

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreProduction.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreRelease.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseCairoCFLite.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGOOptimize.vsprops:
        * JavaScriptCore.vcproj/WTF/WTFProduction.vsprops:
        * JavaScriptCore.vcproj/WTF/WTFRelease.vsprops:
        * JavaScriptCore.vcproj/WTF/WTFReleaseCairoCFLite.vsprops:
        * JavaScriptCore.vcproj/WTF/WTFReleasePGO.vsprops:
        * JavaScriptCore.vcproj/jsc/jscProduction.vsprops:
        * JavaScriptCore.vcproj/jsc/jscRelease.vsprops:
        * JavaScriptCore.vcproj/jsc/jscReleaseCairoCFLite.vsprops:
        * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops:
        * JavaScriptCore.vcproj/testapi/testapiProduction.vsprops:
        * JavaScriptCore.vcproj/testapi/testapiRelease.vsprops:
        * JavaScriptCore.vcproj/testapi/testapiReleaseCairoCFLite.vsprops:

2011-03-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adam Roben.

        Explicitly prevent testapi and minidom from being installed rather than relying
        on Xcode's current behavior of not installing if INSTALL_PATH is not explicitly
        set at the target level.

        <rdar://problem/9206357>

        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-03-30  Timur Iskhodzhanov  <timurrrr@google.com>

        Reviewed by Alexey Proskuryakov.

        Add some dynamic annotations to JavaScriptCore/wtf
        https://bugs.webkit.org/show_bug.cgi?id=53747

        By using these annotations we can improve the precision of finding
        WebKit errors using dynamic analysis tools like ThreadSanitizer and Valgrind.
        These annotations don't affect the compiled binaries unless USE(DYNAMIC_ANNOTATIONS) is "1".

        These files don't add new functionality, so don't need extra tests.

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/DynamicAnnotations.cpp: Added.
        (WTFAnnotateBenignRaceSized):
        (WTFAnnotateHappensBefore):
        (WTFAnnotateHappensAfter):
        * wtf/DynamicAnnotations.h: Added.
        * wtf/ThreadSafeRefCounted.h:
        (WTF::ThreadSafeRefCountedBase::derefBase):
        * wtf/text/StringStatics.cpp:
        (WTF::StringImpl::empty):

2011-03-30  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make StructureChain GC allocated
        https://bugs.webkit.org/show_bug.cgi?id=56695

        Make StructureChain GC allocated, and make the various owners
        mark it correctly.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::derefStructures):
        (JSC::CodeBlock::refStructures):
        (JSC::CodeBlock::markAggregate):
        * bytecode/Instruction.h:
        (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set):
        (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList):
        (JSC::PolymorphicAccessStructureList::derefStructures):
        (JSC::PolymorphicAccessStructureList::markAggregate):
        (JSC::Instruction::Instruction):
        * bytecode/StructureStubInfo.cpp:
        (JSC::StructureStubInfo::deref):
        (JSC::StructureStubInfo::markAggregate):
        * bytecode/StructureStubInfo.h:
        (JSC::StructureStubInfo::initGetByIdChain):
        (JSC::StructureStubInfo::initPutByIdTransition):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_jneq_ptr):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_jneq_ptr):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompileGetByIdChainList):
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::privateCompileGetByIdChainList):
        * jit/JITStubs.cpp:
        (JSC::getPolymorphicAccessStructureListSlot):
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/JSCell.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::markIfNeeded):
        * runtime/JSGlobalObject.h:
        (JSC::Structure::prototypeChain):
        * runtime/JSObject.h:
        (JSC::JSObject::markChildrenDirect):
        * runtime/JSPropertyNameIterator.cpp:
        (JSC::JSPropertyNameIterator::create):
        (JSC::JSPropertyNameIterator::get):
        (JSC::JSPropertyNameIterator::markChildren):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::setCachedPrototypeChain):
        * runtime/MarkStack.h:
        (JSC::MarkStack::append):
        * runtime/Structure.h:
        (JSC::Structure::cachedPrototypeChainSlot):
        * runtime/StructureChain.cpp:
        (JSC::StructureChain::StructureChain):
        * runtime/StructureChain.h:
        (JSC::StructureChain::create):
        (JSC::StructureChain::createStructure):

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Update Windows production build logic for new production configurations
        https://bugs.webkit.org/show_bug.cgi?id=57494

        * JavaScriptCore.vcproj/JavaScriptCore.make:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreProduction.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGOOptimize.vsprops:
        * JavaScriptCore.vcproj/WTF/WTFProduction.vsprops:
        * JavaScriptCore.vcproj/WTF/WTFReleasePGO.vsprops:
        * JavaScriptCore.vcproj/jsc/jscProduction.vsprops:
        * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops:
        * JavaScriptCore.vcproj/testapi/testapiProduction.vsprops:

2011-03-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Rename Windows configuration Release_LTCG to Production for clarity
        https://bugs.webkit.org/show_bug.cgi?id=57465

        * JavaScriptCore.vcproj/JavaScriptCore.sln:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreProduction.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseLTCG.vsprops.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseLTCG.vsprops: Removed.
        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.vcproj/WTF/WTFProduction.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/WTF/WTFReleaseLTCG.vsprops.
        * JavaScriptCore.vcproj/WTF/WTFReleaseLTCG.vsprops: Removed.
        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
        * JavaScriptCore.vcproj/jsc/jscProduction.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/jsc/jscReleaseLTCG.vsprops.
        * JavaScriptCore.vcproj/jsc/jscReleaseLTCG.vsprops: Removed.
        * JavaScriptCore.vcproj/testapi/testapi.vcproj:
        * JavaScriptCore.vcproj/testapi/testapiProduction.vsprops: Copied from Source/JavaScriptCore/JavaScriptCore.vcproj/testapi/testapiReleaseLTCG.vsprops.
        * JavaScriptCore.vcproj/testapi/testapiReleaseLTCG.vsprops: Removed.

2011-03-30  Zoltan Herczeg  <zherczeg@inf.u-szeged.hu>

        Reviewed by Maciej Stachowiak.

        Add the NEXT_OPCODE() macro to the DFG-JIT parser
        https://bugs.webkit.org/show_bug.cgi?id=57322

        In JavaScriptCore we use macros to jump to the next opcode
        (both in interpreter and JIT). This macro is added to the
        DFG-JIT parser as well.

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::parse):

2011-03-29  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        ~25% regression on v8-splay in the SunSpider harness
        https://bugs.webkit.org/show_bug.cgi?id=56128
        
        I'm not sure if this is the root cause of the regression Stephanie
        measured, but it seems to get us back to previous v8-splay times.
        
        SunSpider reports no change. v8-splay says 41% faster.

        * runtime/Heap.cpp:
        (JSC::Heap::reset): Make marking proportional to 1X the size of the heap,
        not .5X the size of the heap. When the heap is large, this makes a big
        difference. (Our old heap growth policy matched this. You can see by
        looking at resizeBlocks in revisions prior to r77699.)

2011-03-29  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Use per-configuration vsprops in JavaScriptCore to avoid WebKitVSPropsRedirectionDir removal by MSVC IDE
        https://bugs.webkit.org/show_bug.cgi?id=57350
        
        Visual Studio's IDE was removing instances of $(WebKitVSPropsRedirectionDir) from
        InheritedPropertySheet rules in our vcproj files when the vcproj was edited from within
        the IDE. To avoid this, add a separate vsprops file for each project configuration that
        contains the required inherited property sheets.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebug.vsprops: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebugAll.vsprops: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreDebugCairoCFLite.vsprops: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreRelease.vsprops: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseCairoCFLite.vsprops: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleaseLTCG.vsprops: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGO.vsprops: Added.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreReleasePGOOptimize.vsprops: Added.
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.vcproj/WTF/WTFDebug.vsprops: Added.
        * JavaScriptCore.vcproj/WTF/WTFDebugAll.vsprops: Added.
        * JavaScriptCore.vcproj/WTF/WTFDebugCairoCFLite.vsprops: Added.
        * JavaScriptCore.vcproj/WTF/WTFRelease.vsprops: Added.
        * JavaScriptCore.vcproj/WTF/WTFReleaseCairoCFLite.vsprops: Added.
        * JavaScriptCore.vcproj/WTF/WTFReleaseLTCG.vsprops: Added.
        * JavaScriptCore.vcproj/WTF/WTFReleasePGO.vsprops: Added.
        * JavaScriptCore.vcproj/jsc/jsc.vcproj:
        * JavaScriptCore.vcproj/jsc/jscDebug.vsprops: Added.
        * JavaScriptCore.vcproj/jsc/jscDebugAll.vsprops: Added.
        * JavaScriptCore.vcproj/jsc/jscDebugCairoCFLite.vsprops: Added.
        * JavaScriptCore.vcproj/jsc/jscRelease.vsprops: Added.
        * JavaScriptCore.vcproj/jsc/jscReleaseCairoCFLite.vsprops: Added.
        * JavaScriptCore.vcproj/jsc/jscReleaseLTCG.vsprops: Added.
        * JavaScriptCore.vcproj/jsc/jscReleasePGO.vsprops: Added.
        * JavaScriptCore.vcproj/testapi/testapi.vcproj:
        * JavaScriptCore.vcproj/testapi/testapiDebug.vsprops: Added.
        * JavaScriptCore.vcproj/testapi/testapiDebugAll.vsprops: Added.
        * JavaScriptCore.vcproj/testapi/testapiDebugCairoCFLite.vsprops: Added.
        * JavaScriptCore.vcproj/testapi/testapiRelease.vsprops: Added.
        * JavaScriptCore.vcproj/testapi/testapiReleaseCairoCFLite.vsprops: Added.
        * JavaScriptCore.vcproj/testapi/testapiReleaseLTCG.vsprops: Added.

2011-03-29  Oliver Hunt  <oliver@apple.com>

        Reviewed by Eric Seidel.

        REGRESSION(r82173): Causes assertion and test failures in run-javascriptcore-tests on Windows (Requested by aroben on #webkit).
        https://bugs.webkit.org/show_bug.cgi?id=57333

        constructDate now takes the global object explicitly as it may be called
        by functions other than the constructor itself.

        * API/JSObjectRef.cpp:
        (JSObjectMakeDate):
        * runtime/DateConstructor.cpp:
        (JSC::constructDate):
        (JSC::constructWithDateConstructor):
        * runtime/DateConstructor.h:

2011-03-29  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Benjamin Poulain.

        https://bugs.webkit.org/show_bug.cgi?id=41953

        Fix compile error on Solaris 10/Sun Studio 12 CC emanating from MathExtras.h

        * wtf/MathExtras.h:

2011-03-29  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57231
        Add conditional for SUNCC supporting alignment macros

        Compile fix for Solaris 10/Sun Studio 12 CC

        * wtf/Vector.h:

2011-03-29  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=57256

        Fix crash on misaligned reads on Solaris 10/Sparc

        * wtf/text/AtomicString.cpp:
        (WTF::equal):

2011-03-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        instanceof Array test fails when using iframes
        https://bugs.webkit.org/show_bug.cgi?id=17250

        This is a problem with all built in constructors, the use of
        lexicalGlobalObject rather than the constructors own 
        global object reference means that a builtin will always use
        the prototype from the lexical global object rather than that
        of the constructors origin.

        * API/JSObjectRef.cpp:
        (JSObjectMakeFunction):
        (JSObjectMakeRegExp):
        * JavaScriptCore.exp:
        * runtime/ArrayConstructor.cpp:
        (JSC::constructArrayWithSizeQuirk):
        * runtime/BooleanConstructor.cpp:
        (JSC::constructBoolean):
        (JSC::constructBooleanFromImmediateBoolean):
        * runtime/BooleanConstructor.h:
        * runtime/DateConstructor.cpp:
        (JSC::constructDate):
        * runtime/DateInstance.cpp:
        * runtime/DateInstance.h:
        * runtime/ErrorConstructor.cpp:
        (JSC::constructWithErrorConstructor):
        (JSC::callErrorConstructor):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructWithFunctionConstructor):
        (JSC::callFunctionConstructor):
        (JSC::constructFunction):
        * runtime/FunctionConstructor.h:
        * runtime/JSCell.cpp:
        (JSC::JSCell::getOwnPropertySlot):
        (JSC::JSCell::put):
        (JSC::JSCell::deleteProperty):
        (JSC::JSCell::toThisObject):
        (JSC::JSCell::toObject):
        * runtime/JSCell.h:
        (JSC::JSCell::JSValue::toObject):
        * runtime/JSNotAnObject.cpp:
        (JSC::JSNotAnObject::toObject):
        * runtime/JSNotAnObject.h:
        * runtime/JSObject.cpp:
        (JSC::JSObject::toObject):
        * runtime/JSObject.h:
        * runtime/JSString.cpp:
        (JSC::StringObject::create):
        (JSC::JSString::toObject):
        (JSC::JSString::toThisObject):
        * runtime/JSString.h:
        * runtime/JSValue.cpp:
        (JSC::JSValue::toObjectSlowCase):
        (JSC::JSValue::toThisObjectSlowCase):
        (JSC::JSValue::synthesizeObject):
        * runtime/JSValue.h:
        * runtime/NumberConstructor.cpp:
        (JSC::constructWithNumberConstructor):
        * runtime/NumberObject.cpp:
        (JSC::constructNumber):
        * runtime/NumberObject.h:
        * runtime/ObjectConstructor.cpp:
        (JSC::constructObject):
        (JSC::constructWithObjectConstructor):
        (JSC::callObjectConstructor):
        * runtime/RegExpConstructor.cpp:
        (JSC::constructRegExp):
        (JSC::constructWithRegExpConstructor):
        (JSC::callRegExpConstructor):
        * runtime/RegExpConstructor.h:
        * runtime/StringConstructor.cpp:
        (JSC::constructWithStringConstructor):
        * runtime/StringObject.h:

2011-03-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        REGRESSION [r78794-r79249] Allocation of memory is slow when number of active objects is large
        https://bugs.webkit.org/show_bug.cgi?id=56823
        
        Partial fix for most of the problem. (TOT still shows a regression, though.)

        * runtime/Heap.cpp:
        (JSC::Heap::reportExtraMemoryCostSlowCase): Use highWaterMark(), instead of
        capacity(), since capacity() is O(n) relative to the size of the heap.

        In limited circumstances, capacity() is also worse than highWaterMark()
        for measuring extra cost relative to heap size, since capacity() only
        measures the *current* capacity of the heap, but the heap will grow if
        necessary to attain highWaterMark().

2011-03-28  Oliver Hunt  <oliver@apple.com>

        REGRESSION(r82130): It made all tests crash (Requested by Ossy on #webkit).
        https://bugs.webkit.org/show_bug.cgi?id=57251

        Build fix, had remnant of another patch in r82130

        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::privateCompileGetByIdChainList):

2011-03-27  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Add additional immediate types to allow us to distinguish the source of a JIT immediate
        https://bugs.webkit.org/show_bug.cgi?id=57190

        Allow us to distinguish whether a JIT immediate is a value that we
        control (TrustedImm32 and TrustedImmPtr) vs. ones that can be controlled
        or influenced by code we are compiling.  Currently we do nothing with this
        information -- this change is large and mechanical but would obscure any
        logic changes that we would have made.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::TrustedImmPtr::TrustedImmPtr):
        (JSC::AbstractMacroAssembler::ImmPtr::ImmPtr):
        (JSC::AbstractMacroAssembler::TrustedImm32::TrustedImm32):
        (JSC::AbstractMacroAssembler::Imm32::Imm32):
        * assembler/MacroAssembler.h:
        (JSC::MacroAssembler::pop):
        (JSC::MacroAssembler::poke):
        (JSC::MacroAssembler::branchPtr):
        (JSC::MacroAssembler::branch32):
        (JSC::MacroAssembler::addPtr):
        (JSC::MacroAssembler::andPtr):
        (JSC::MacroAssembler::orPtr):
        (JSC::MacroAssembler::subPtr):
        (JSC::MacroAssembler::xorPtr):
        (JSC::MacroAssembler::setPtr):
        (JSC::MacroAssembler::storePtr):
        (JSC::MacroAssembler::branchTestPtr):
        (JSC::MacroAssembler::branchSubPtr):
        (JSC::MacroAssembler::branchTest8):
        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::add32):
        (JSC::MacroAssemblerARM::and32):
        (JSC::MacroAssemblerARM::lshift32):
        (JSC::MacroAssemblerARM::mul32):
        (JSC::MacroAssemblerARM::or32):
        (JSC::MacroAssemblerARM::rshift32):
        (JSC::MacroAssemblerARM::urshift32):
        (JSC::MacroAssemblerARM::sub32):
        (JSC::MacroAssemblerARM::xor32):
        (JSC::MacroAssemblerARM::store32):
        (JSC::MacroAssemblerARM::push):
        (JSC::MacroAssemblerARM::move):
        (JSC::MacroAssemblerARM::branch8):
        (JSC::MacroAssemblerARM::branch32):
        (JSC::MacroAssemblerARM::branch32WithUnalignedHalfWords):
        (JSC::MacroAssemblerARM::branch16):
        (JSC::MacroAssemblerARM::branchTest8):
        (JSC::MacroAssemblerARM::branchTest32):
        (JSC::MacroAssemblerARM::branchAdd32):
        (JSC::MacroAssemblerARM::branchMul32):
        (JSC::MacroAssemblerARM::branchSub32):
        (JSC::MacroAssemblerARM::set32Compare32):
        (JSC::MacroAssemblerARM::set8Compare32):
        (JSC::MacroAssemblerARM::set32Test32):
        (JSC::MacroAssemblerARM::set32Test8):
        (JSC::MacroAssemblerARM::moveWithPatch):
        (JSC::MacroAssemblerARM::branchPtrWithPatch):
        (JSC::MacroAssemblerARM::storePtrWithPatch):
        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::add32):
        (JSC::MacroAssemblerARMv7::and32):
        (JSC::MacroAssemblerARMv7::lshift32):
        (JSC::MacroAssemblerARMv7::mul32):
        (JSC::MacroAssemblerARMv7::or32):
        (JSC::MacroAssemblerARMv7::rshift32):
        (JSC::MacroAssemblerARMv7::urshift32):
        (JSC::MacroAssemblerARMv7::sub32):
        (JSC::MacroAssemblerARMv7::xor32):
        (JSC::MacroAssemblerARMv7::load32):
        (JSC::MacroAssemblerARMv7::load32WithAddressOffsetPatch):
        (JSC::MacroAssemblerARMv7::load16):
        (JSC::MacroAssemblerARMv7::store32WithAddressOffsetPatch):
        (JSC::MacroAssemblerARMv7::store32):
        (JSC::MacroAssemblerARMv7::loadDouble):
        (JSC::MacroAssemblerARMv7::storeDouble):
        (JSC::MacroAssemblerARMv7::push):
        (JSC::MacroAssemblerARMv7::move):
        (JSC::MacroAssemblerARMv7::compare32):
        (JSC::MacroAssemblerARMv7::test32):
        (JSC::MacroAssemblerARMv7::branch32):
        (JSC::MacroAssemblerARMv7::branch32WithUnalignedHalfWords):
        (JSC::MacroAssemblerARMv7::branch16):
        (JSC::MacroAssemblerARMv7::branch8):
        (JSC::MacroAssemblerARMv7::branchTest32):
        (JSC::MacroAssemblerARMv7::branchTest8):
        (JSC::MacroAssemblerARMv7::branchAdd32):
        (JSC::MacroAssemblerARMv7::branchMul32):
        (JSC::MacroAssemblerARMv7::branchSub32):
        (JSC::MacroAssemblerARMv7::nearCall):
        (JSC::MacroAssemblerARMv7::call):
        (JSC::MacroAssemblerARMv7::set32Compare32):
        (JSC::MacroAssemblerARMv7::set8Compare32):
        (JSC::MacroAssemblerARMv7::set32Test32):
        (JSC::MacroAssemblerARMv7::set32Test8):
        (JSC::MacroAssemblerARMv7::moveWithPatch):
        (JSC::MacroAssemblerARMv7::branchPtrWithPatch):
        (JSC::MacroAssemblerARMv7::storePtrWithPatch):
        (JSC::MacroAssemblerARMv7::tailRecursiveCall):
        (JSC::MacroAssemblerARMv7::makeJump):
        (JSC::MacroAssemblerARMv7::makeBranch):
        (JSC::MacroAssemblerARMv7::setupArmAddress):
        (JSC::MacroAssemblerARMv7::makeBaseIndexBase):
        (JSC::MacroAssemblerARMv7::moveFixedWidthEncoding):
        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::add32):
        (JSC::MacroAssemblerMIPS::and32):
        (JSC::MacroAssemblerMIPS::lshift32):
        (JSC::MacroAssemblerMIPS::mul32):
        (JSC::MacroAssemblerMIPS::or32):
        (JSC::MacroAssemblerMIPS::rshift32):
        (JSC::MacroAssemblerMIPS::urshift32):
        (JSC::MacroAssemblerMIPS::sub32):
        (JSC::MacroAssemblerMIPS::xor32):
        (JSC::MacroAssemblerMIPS::load32):
        (JSC::MacroAssemblerMIPS::load32WithAddressOffsetPatch):
        (JSC::MacroAssemblerMIPS::store32WithAddressOffsetPatch):
        (JSC::MacroAssemblerMIPS::store32):
        (JSC::MacroAssemblerMIPS::push):
        (JSC::MacroAssemblerMIPS::move):
        (JSC::MacroAssemblerMIPS::branch8):
        (JSC::MacroAssemblerMIPS::branch32):
        (JSC::MacroAssemblerMIPS::branch32WithUnalignedHalfWords):
        (JSC::MacroAssemblerMIPS::branch16):
        (JSC::MacroAssemblerMIPS::branchTest32):
        (JSC::MacroAssemblerMIPS::branchTest8):
        (JSC::MacroAssemblerMIPS::branchAdd32):
        (JSC::MacroAssemblerMIPS::branchMul32):
        (JSC::MacroAssemblerMIPS::branchSub32):
        (JSC::MacroAssemblerMIPS::set8Compare32):
        (JSC::MacroAssemblerMIPS::set32Compare32):
        (JSC::MacroAssemblerMIPS::set32Test8):
        (JSC::MacroAssemblerMIPS::set32Test32):
        (JSC::MacroAssemblerMIPS::moveWithPatch):
        (JSC::MacroAssemblerMIPS::branchPtrWithPatch):
        (JSC::MacroAssemblerMIPS::storePtrWithPatch):
        (JSC::MacroAssemblerMIPS::tailRecursiveCall):
        (JSC::MacroAssemblerMIPS::loadDouble):
        (JSC::MacroAssemblerMIPS::storeDouble):
        (JSC::MacroAssemblerMIPS::branchTruncateDoubleToInt32):
        * assembler/MacroAssemblerX86.h:
        (JSC::MacroAssemblerX86::add32):
        (JSC::MacroAssemblerX86::addWithCarry32):
        (JSC::MacroAssemblerX86::and32):
        (JSC::MacroAssemblerX86::or32):
        (JSC::MacroAssemblerX86::sub32):
        (JSC::MacroAssemblerX86::store32):
        (JSC::MacroAssemblerX86::branch32):
        (JSC::MacroAssemblerX86::moveWithPatch):
        (JSC::MacroAssemblerX86::branchPtrWithPatch):
        (JSC::MacroAssemblerX86::storePtrWithPatch):
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::add32):
        (JSC::MacroAssemblerX86Common::and32):
        (JSC::MacroAssemblerX86Common::lshift32):
        (JSC::MacroAssemblerX86Common::mul32):
        (JSC::MacroAssemblerX86Common::or32):
        (JSC::MacroAssemblerX86Common::rshift32):
        (JSC::MacroAssemblerX86Common::urshift32):
        (JSC::MacroAssemblerX86Common::sub32):
        (JSC::MacroAssemblerX86Common::xor32):
        (JSC::MacroAssemblerX86Common::store32):
        (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32):
        (JSC::MacroAssemblerX86Common::push):
        (JSC::MacroAssemblerX86Common::move):
        (JSC::MacroAssemblerX86Common::branch8):
        (JSC::MacroAssemblerX86Common::branch32):
        (JSC::MacroAssemblerX86Common::branch32WithUnalignedHalfWords):
        (JSC::MacroAssemblerX86Common::branch16):
        (JSC::MacroAssemblerX86Common::branchTest32):
        (JSC::MacroAssemblerX86Common::branchTest8):
        (JSC::MacroAssemblerX86Common::branchAdd32):
        (JSC::MacroAssemblerX86Common::branchMul32):
        (JSC::MacroAssemblerX86Common::branchSub32):
        (JSC::MacroAssemblerX86Common::set8Compare32):
        (JSC::MacroAssemblerX86Common::set32Compare32):
        (JSC::MacroAssemblerX86Common::set32Test8):
        (JSC::MacroAssemblerX86Common::set32Test32):
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::add32):
        (JSC::MacroAssemblerX86_64::and32):
        (JSC::MacroAssemblerX86_64::or32):
        (JSC::MacroAssemblerX86_64::sub32):
        (JSC::MacroAssemblerX86_64::loadDouble):
        (JSC::MacroAssemblerX86_64::addDouble):
        (JSC::MacroAssemblerX86_64::convertInt32ToDouble):
        (JSC::MacroAssemblerX86_64::store32):
        (JSC::MacroAssemblerX86_64::call):
        (JSC::MacroAssemblerX86_64::tailRecursiveCall):
        (JSC::MacroAssemblerX86_64::makeTailRecursiveCall):
        (JSC::MacroAssemblerX86_64::addPtr):
        (JSC::MacroAssemblerX86_64::andPtr):
        (JSC::MacroAssemblerX86_64::orPtr):
        (JSC::MacroAssemblerX86_64::subPtr):
        (JSC::MacroAssemblerX86_64::xorPtr):
        (JSC::MacroAssemblerX86_64::storePtr):
        (JSC::MacroAssemblerX86_64::setPtr):
        (JSC::MacroAssemblerX86_64::branchPtr):
        (JSC::MacroAssemblerX86_64::branchTestPtr):
        (JSC::MacroAssemblerX86_64::branchSubPtr):
        (JSC::MacroAssemblerX86_64::moveWithPatch):
        (JSC::MacroAssemblerX86_64::branchPtrWithPatch):
        (JSC::MacroAssemblerX86_64::storePtrWithPatch):
        (JSC::MacroAssemblerX86_64::branchTest8):
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::callOperation):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::jitAssertIsInt32):
        (JSC::DFG::JITCompiler::emitCount):
        * dfg/DFGJITCompiler.h:
        (JSC::DFG::JITCompiler::emitPutImmediateToCallFrameHeader):
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::fillSpeculateCell):
        (JSC::DFG::SpeculativeJIT::compile):
        * jit/JIT.cpp:
        (JSC::JIT::emitTimeoutCheck):
        (JSC::JIT::privateCompile):
        * jit/JIT.h:
        * jit/JITArithmetic.cpp:
        (JSC::JIT::emit_op_urshift):
        (JSC::JIT::emitSlow_op_urshift):
        (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):
        * jit/JITArithmetic32_64.cpp:
        (JSC::JIT::emit_op_negate):
        (JSC::JIT::emit_op_jnless):
        (JSC::JIT::emit_op_jless):
        (JSC::JIT::emit_op_jlesseq):
        (JSC::JIT::emit_op_lshift):
        (JSC::JIT::emitRightShift):
        (JSC::JIT::emitRightShiftSlowCase):
        (JSC::JIT::emit_op_bitand):
        (JSC::JIT::emit_op_bitor):
        (JSC::JIT::emit_op_bitxor):
        (JSC::JIT::emit_op_bitnot):
        (JSC::JIT::emit_op_post_inc):
        (JSC::JIT::emit_op_post_dec):
        (JSC::JIT::emitSlow_op_post_dec):
        (JSC::JIT::emit_op_pre_inc):
        (JSC::JIT::emit_op_pre_dec):
        (JSC::JIT::emit_op_add):
        (JSC::JIT::emitAdd32Constant):
        (JSC::JIT::emit_op_sub):
        (JSC::JIT::emitSub32Constant):
        (JSC::JIT::emitBinaryDoubleOp):
        (JSC::JIT::emit_op_mul):
        (JSC::JIT::emitSlow_op_mul):
        (JSC::JIT::emit_op_div):
        (JSC::JIT::emit_op_mod):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::emit_op_ret_object_or_this):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitPutCellToCallFrameHeader):
        (JSC::JIT::emitPutIntToCallFrameHeader):
        (JSC::JIT::emitPutImmediateToCallFrameHeader):
        (JSC::JIT::emitLoadCharacterString):
        (JSC::JIT::restoreArgumentReferenceForTrampoline):
        (JSC::JIT::checkStructure):
        (JSC::JIT::setSamplingFlag):
        (JSC::JIT::clearSamplingFlag):
        (JSC::JIT::emitCount):
        (JSC::JIT::sampleInstruction):
        (JSC::JIT::sampleCodeBlock):
        (JSC::JIT::emitStoreInt32):
        (JSC::JIT::emitStoreCell):
        (JSC::JIT::emitStoreBool):
        (JSC::JIT::emitJumpSlowCaseIfNotJSCell):
        (JSC::JIT::emitInitRegister):
        (JSC::JIT::emitJumpIfJSCell):
        (JSC::JIT::emitJumpIfNotJSCell):
        (JSC::JIT::emitJumpIfImmediateInteger):
        (JSC::JIT::emitJumpIfNotImmediateInteger):
        (JSC::JIT::emitFastArithDeTagImmediate):
        (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero):
        (JSC::JIT::emitFastArithReTagImmediate):
        (JSC::JIT::emitTagAsBoolImmediate):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::privateCompileCTINativeCall):
        (JSC::JIT::emit_op_check_has_instance):
        (JSC::JIT::emit_op_instanceof):
        (JSC::JIT::emit_op_ret_object_or_this):
        (JSC::JIT::emit_op_resolve):
        (JSC::JIT::emit_op_to_primitive):
        (JSC::JIT::emit_op_resolve_base):
        (JSC::JIT::emit_op_ensure_property_exists):
        (JSC::JIT::emit_op_resolve_skip):
        (JSC::JIT::emit_op_resolve_global):
        (JSC::JIT::emitSlow_op_resolve_global):
        (JSC::JIT::emit_op_not):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_jsr):
        (JSC::JIT::emit_op_resolve_with_base):
        (JSC::JIT::emit_op_new_func_exp):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emit_op_get_pnames):
        (JSC::JIT::emit_op_next_pname):
        (JSC::JIT::emit_op_to_jsnumber):
        (JSC::JIT::emit_op_push_new_scope):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emit_op_init_lazy_reg):
        (JSC::JIT::emit_op_convert_this):
        (JSC::JIT::emit_op_convert_this_strict):
        (JSC::JIT::emitSlow_op_not):
        (JSC::JIT::emitSlow_op_neq):
        (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_resolve_global_dynamic):
        (JSC::JIT::emit_op_new_regexp):
        (JSC::JIT::emit_op_load_varargs):
        (JSC::JIT::emitSlow_op_load_varargs):
        (JSC::JIT::emit_op_new_func):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTIMachineTrampolines):
        (JSC::JIT::privateCompileCTINativeCall):
        (JSC::JIT::emit_op_loop_if_lesseq):
        (JSC::JIT::emit_op_check_has_instance):
        (JSC::JIT::emit_op_instanceof):
        (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_tear_off_arguments):
        (JSC::JIT::emit_op_resolve):
        (JSC::JIT::emit_op_to_primitive):
        (JSC::JIT::emit_op_resolve_base):
        (JSC::JIT::emit_op_ensure_property_exists):
        (JSC::JIT::emit_op_resolve_skip):
        (JSC::JIT::emit_op_resolve_global):
        (JSC::JIT::emitSlow_op_resolve_global):
        (JSC::JIT::emit_op_not):
        (JSC::JIT::emit_op_jfalse):
        (JSC::JIT::emit_op_jtrue):
        (JSC::JIT::emit_op_jeq_null):
        (JSC::JIT::emit_op_jneq_null):
        (JSC::JIT::emit_op_jneq_ptr):
        (JSC::JIT::emit_op_jsr):
        (JSC::JIT::emit_op_eq):
        (JSC::JIT::emitSlow_op_eq):
        (JSC::JIT::emit_op_neq):
        (JSC::JIT::emitSlow_op_neq):
        (JSC::JIT::compileOpStrictEq):
        (JSC::JIT::emit_op_eq_null):
        (JSC::JIT::emit_op_neq_null):
        (JSC::JIT::emit_op_resolve_with_base):
        (JSC::JIT::emit_op_new_func_exp):
        (JSC::JIT::emit_op_get_pnames):
        (JSC::JIT::emit_op_next_pname):
        (JSC::JIT::emit_op_to_jsnumber):
        (JSC::JIT::emit_op_push_new_scope):
        (JSC::JIT::emit_op_catch):
        (JSC::JIT::emit_op_create_activation):
        (JSC::JIT::emit_op_create_arguments):
        (JSC::JIT::emit_op_convert_this):
        (JSC::JIT::emit_op_convert_this_strict):
        (JSC::JIT::emit_op_get_arguments_length):
        (JSC::JIT::emitSlow_op_get_arguments_length):
        (JSC::JIT::emit_op_get_argument_by_val):
        (JSC::JIT::softModulo):
        * jit/JITPropertyAccess.cpp:
        (JSC::JIT::stringGetByValStubGenerator):
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_get_by_pname):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::emit_op_put_by_index):
        (JSC::JIT::emit_op_put_getter):
        (JSC::JIT::emit_op_put_setter):
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::testPrototype):
        (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::emit_op_put_getter):
        (JSC::JIT::emit_op_put_setter):
        (JSC::JIT::emit_op_del_by_id):
        (JSC::JIT::emit_op_get_by_id):
        (JSC::JIT::emit_op_put_by_id):
        (JSC::JIT::emit_op_method_check):
        (JSC::JIT::stringGetByValStubGenerator):
        (JSC::JIT::emit_op_get_by_val):
        (JSC::JIT::emitSlow_op_get_by_val):
        (JSC::JIT::emit_op_put_by_val):
        (JSC::JIT::compileGetByIdHotPath):
        (JSC::JIT::compileGetByIdSlowCase):
        (JSC::JIT::emitSlow_op_put_by_id):
        (JSC::JIT::testPrototype):
        (JSC::JIT::privateCompilePutByIdTransition):
        (JSC::JIT::privateCompilePatchGetArrayLength):
        (JSC::JIT::privateCompileGetByIdProto):
        (JSC::JIT::privateCompileGetByIdSelfList):
        (JSC::JIT::privateCompileGetByIdProtoList):
        (JSC::JIT::privateCompileGetByIdChainList):
        (JSC::JIT::privateCompileGetByIdChain):
        (JSC::JIT::emit_op_get_by_pname):
        * jit/JITStubCall.h:
        (JSC::JITStubCall::addArgument):
        * jit/JITStubs.cpp:
        (JSC::getPolymorphicAccessStructureListSlot):
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JSInterfaceJIT.h:
        (JSC::JSInterfaceJIT::emitJumpIfNotJSCell):
        (JSC::JSInterfaceJIT::emitLoadInt32):
        (JSC::JSInterfaceJIT::emitLoadDouble):
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::SpecializedThunkJIT):
        (JSC::SpecializedThunkJIT::loadJSStringArgument):
        (JSC::SpecializedThunkJIT::tagReturnAsInt32):
        (JSC::SpecializedThunkJIT::tagReturnAsJSCell):
        * jit/ThunkGenerators.cpp:
        (JSC::charToString):
        (JSC::powThunkGenerator):
        * yarr/YarrJIT.cpp:
        (JSC::Yarr::YarrGenerator::matchCharacterClass):
        (JSC::Yarr::YarrGenerator::storeToFrame):
        (JSC::Yarr::YarrGenerator::storeToFrameWithPatch):
        (JSC::Yarr::YarrGenerator::ParenthesesTail::generateCode):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterSingle):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterFixed):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterGreedy):
        (JSC::Yarr::YarrGenerator::generatePatternCharacterNonGreedy):
        (JSC::Yarr::YarrGenerator::generateCharacterClassFixed):
        (JSC::Yarr::YarrGenerator::generateCharacterClassGreedy):
        (JSC::Yarr::YarrGenerator::generateCharacterClassNonGreedy):
        (JSC::Yarr::YarrGenerator::generateParenthesesSingle):
        (JSC::Yarr::YarrGenerator::generateDisjunction):

2011-03-28  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Fix the linking of jsc with MinGW after r81963.

        * jsc.pro: add -l and remove the lib suffix.

2011-03-27  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=57170  Fix last elements
        in an enum to remove a trailing comma. Sun Studio 12 CC errors out.

        Compile fix only, no actual code change.

        * wtf/MessageQueue.h:

2011-03-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Allow defineOwnProperty to work on DOMObjects
        https://bugs.webkit.org/show_bug.cgi?id=57129

        Fix a couple of places where we uses getter()/setter() rather
        than [gs]etterPresent().

        * runtime/JSObject.cpp:
        (JSC::JSObject::defineOwnProperty):

2011-03-25  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Crash when paused at a breakpoint caused by inaccurate Activation records.
        https://bugs.webkit.org/show_bug.cgi?id=57120

        * runtime/JSActivation.cpp:
        (JSC::JSActivation::symbolTableGet):
        (JSC::JSActivation::symbolTablePut):
        (JSC::JSActivation::getOwnPropertyNames):
        (JSC::JSActivation::symbolTablePutWithAttributes):

2011-03-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Crash in debugger beneath MarkStack::drain @ me.com, ibm.com
        https://bugs.webkit.org/show_bug.cgi?id=57080
        <rdar://problem/8525907>

        The crash was caused by changes in the executable after recompilation.

        The fix is for the activation to copy the data it needs instead of
        relying on the data in the executable.
        
        SunSpider and v8 report no change.

        * runtime/Arguments.h:
        (JSC::JSActivation::copyRegisters): Use our own data members instead of
        reading data out of the executable.

        * runtime/JSActivation.cpp:
        (JSC::JSActivation::JSActivation): Initialize our data members.

        (JSC::JSActivation::markChildren):
        (JSC::JSActivation::symbolTableGet):
        (JSC::JSActivation::symbolTablePut):
        (JSC::JSActivation::getOwnPropertyNames):
        (JSC::JSActivation::symbolTablePutWithAttributes):
        (JSC::JSActivation::isDynamicScope):
        (JSC::JSActivation::argumentsGetter): Use our own data members instead of
        reading data out of the executable.

        * runtime/JSActivation.h: Added new data members to track data previously
        tracked by the executable. Since I've removed the executable pointer,
        on a 64bit system, I've only made activations bigger by an int.

2011-03-25  David Kilzer  <ddkilzer@apple.com>

        Remove duplicate entry from JavaScriptCore.exp

        JSC::createStackOverflowError(JSC::ExecState*) was originally
        exported in r60057, then duplicated in r60392.

        * JavaScriptCore.exp: Removed duplicate entry.

2011-03-25  Jarred Nicholls  <jarred@sencha.com>

        Reviewed by Ariya Hidayat.

        [Qt] MSVC Build Error - need to link advapi32.lib for jsc.exe
        https://bugs.webkit.org/show_bug.cgi?id=56098

        Need to link advapi32.lib for jsc.exe since wtf/OSRandomSource.cpp uses the Win32 Crypto API

        * jsc.pro:

2011-03-24  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Darin Adler.

        Introduce WTF HexNumber.h
        https://bugs.webkit.org/show_bug.cgi?id=56099

        Introduce a set of functions that ease converting from a bye or a number to a hex string,
        replacing several of these conversions and String::format("%x") usages all over WebCore.

        * GNUmakefile.am: Add HexNumber.h to build.
        * JavaScriptCore.exp: Export StringBuilder::reserveCapacity.
        * JavaScriptCore.gypi: Add HexNumber.h to build.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export StringBuilder::reserveCapacity.
        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add HexNumber.h to build.
        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
        * wtf/CMakeLists.txt: Ditto.
        * wtf/HexNumber.h: Added.
        (WTF::Internal::hexDigitsForMode): Internal helper.
        (WTF::appendByteAsHex): Free function, that appends a byte as hex string into a destination.
        (WTF::placeByteAsHex): Ditto, but places the result using *foo++ = '..' or foo[index++] = '..'
        (WTF::appendUnsignedAsHex): Free function, that appends a number as hex string into a destination.

2011-03-24  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix take 2: Add new symobl.
        
        (I should have used the EWS bots for this!)

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-03-24  Geoffrey Garen  <ggaren@apple.com>

        Windows build fix take 1: Removed old symobl.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-03-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Ensure that all compilation takes place within a dynamic global object scope
        https://bugs.webkit.org/show_bug.cgi?id=57054
        <rdar://problem/9083011>        

        Otherwise, entry to the global object scope might throw away the code
        we just compiled, causing a crash.

        * JavaScriptCore.exp: Updated for signature change.

        * debugger/Debugger.cpp:
        (JSC::evaluateInGlobalCallFrame):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate): Removed explicit compilation calls
        here because (a) they took place outside a dynamic global object scope
        and (b) they were redundant.

        * interpreter/CachedCall.h:
        (JSC::CachedCall::CachedCall): Updated for signature change.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct): Declare our dynamic global object
        scope earlier, to ensure that compilation takes place within it.

        * runtime/Completion.cpp:
        (JSC::evaluate): Removed explicit compilation calls here because (a)
        they took place outside a dynamic global object scope and (b) they were
        redundant.

        * runtime/Executable.h:
        (JSC::EvalExecutable::compile):
        (JSC::ProgramExecutable::compile):
        (JSC::FunctionExecutable::compileForCall):
        (JSC::FunctionExecutable::compileForConstruct): Added an ASSERT to
        verify our new invariant that all compilation takes place within a
        dynamic global object scope.

        * runtime/JSGlobalObject.cpp:
        (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope):
        * runtime/JSGlobalObject.h: Changed the signature of DynamicGlobalObjectScope
        to require a JSGlobalData instead of an ExecState* since it is often
        easier to provide the former, and the latter was not necessary.

2011-03-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        REGRESSION (r79987-r80210): Crash in JSWeakObjectMapClear
        https://bugs.webkit.org/show_bug.cgi?id=55671

        This is no longer necessary, and it seems that with the new weakmap
        model it's simply unsafe, so this reduces it to a no-op. 

        * API/JSWeakObjectMapRefPrivate.cpp:

2011-03-24  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=20302
        Correct implementation of signbit on Solaris

        * wtf/MathExtras.h:
        (signbit):

2011-03-23  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7959320> Threads that use APIs above the BSD layer must be registered with the Obj-C GC.

        * wtf/ThreadingPthreads.cpp:
        (WTF::initializeCurrentThreadInternal):

2011-03-23  Mark Rowe  <mrowe@apple.com>

        Stop setting OTHER_OPTIONS in JavaScriptCore's Makefile.

        It's not necessary to pass "-target All" as xcodebuild always builds the
        first target in the project unless otherwise specified. The presence of
        that option also breaks "make clean" since that results in both the
        -target and -alltargets options being passed to xcodebuild.

        * Makefile:

2011-03-23  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: bring back Vector::contains that was removed as a part of roll back.

        * wtf/Vector.h:
        (WTF::::contains):

2011-03-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81686.
        http://trac.webkit.org/changeset/81686
        https://bugs.webkit.org/show_bug.cgi?id=56914

        Breaks webkit_tests in Chromium again. (Requested by pfeldman
        on #webkit).

        * wtf/Vector.h:

2011-03-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        JavaScriptCore GYP build should work on a case-sensitive file system
        https://bugs.webkit.org/show_bug.cgi?id=56911

        The issue is that there are two UString.h headers, one named UString.h
        and one named ustring.h.  This patch excludes ustring.h from the header
        map to avoid confusion.  While I was editing this part of the GYP file,
        I cleaned up the exclude rules to be more modern.

        * gyp/JavaScriptCore.gyp:

2011-03-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        REGRESSION (r78382): No scripts appear in the Web Inspector's Scripts
        panel on Windows, and many inspector regression tests are failing
        https://bugs.webkit.org/show_bug.cgi?id=54490
        
        The bug was caused by two different classes using the same name (Recompiler).

        * debugger/Debugger.cpp:
        * runtime/JSGlobalData.cpp:
        (WTF::Recompiler::operator()): Put Recompiler in an anonymous namespace,
        so our two recompilers' inline functions don't stomp each other at
        link time.

2011-03-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Mark Rowe.

        Remove USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER.
        <rdar://problem/8944718> 

        * DerivedSources.make:
        Remove generation of USE_WK_SCROLLBAR_PAINTER_AND_CONTROLLER.

2011-03-22  Gabor Loki  <loki@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Add DFG module to build system (disabled by default).
        https://bugs.webkit.org/show_bug.cgi?id=56845

        * JavaScriptCore.pri:
        * JavaScriptCore.pro:

2011-03-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add support to build-webkit for building with gyp-generated project files
        https://bugs.webkit.org/show_bug.cgi?id=56877

        Found a couple missing Private headers while trying to make WebCore build.

        * JavaScriptCore.gypi:

2011-03-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make it possible to build JavaScriptCore and WebCore gyp builds outside of Source
        https://bugs.webkit.org/show_bug.cgi?id=56867

        This should make it possible to build the gyp-generated JavaScriptCore.xcodeproj
        from a JavaScriptCore directory outside of Source.

        * gyp/JavaScriptCore.gyp:
        * gyp/run-if-exists.sh: Added.
        * gyp/update-info-plist.sh: Added.

2011-03-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add Profiling Configuration to JavaScriptCore gyp build
        https://bugs.webkit.org/show_bug.cgi?id=56862

        It appears this is identical to Release, but I suspect
        there is someone/thing who uses the Profiling target
        so we're adding it for completeness.

        * gyp/JavaScriptCore.gyp:

2011-03-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove os_win32_files variable from the GYP build
        https://bugs.webkit.org/show_bug.cgi?id=56804

        Now that our understanding of GYP is sufficiently advanced, we don't
        need os_win32_files any more.  (Turns out Eric was right, as he always
        is.)

        * JavaScriptCore.gypi:

2011-03-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        GYP build of JavaScriptCore should be able to link from an empty WebKitBuild directory
        https://bugs.webkit.org/show_bug.cgi?id=56803

        Previously, we thought we should generate the derived source files in
        the shared intermediate build products directory, but there are
        assumptions built into other parts of the Mac build system that the
        derived source files will be generated in a particular subdirectory of
        the build products directory.

        This patch is a partial revert of the change that moved the derived
        source files to the shared intermediate directory.  After this patch,
        the GYP build can build JavaScriptCore without help from the main
        normal build system.

        * JavaScriptCore.gypi:
        * gyp/JavaScriptCore.gyp:
        * gyp/generate-derived-sources.sh:
        * gyp/generate-dtrace-header.sh:

2011-03-22  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by David Levin.

        Adding a contains method to Vector.
        https://bugs.webkit.org/show_bug.cgi?id=55859

        * wtf/Vector.h:
        (WTF::Vector::contains):

2011-03-22  Gabor Loki  <loki@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Fix a bunch of typos in DFG.
        https://bugs.webkit.org/show_bug.cgi?id=56813

        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::parse):
        * dfg/DFGGenerationInfo.h:
        (JSC::DFG::GenerationInfo::setSpilled):
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
        * dfg/DFGGraph.h:
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::setupStubArguments):
        * dfg/DFGJITCompiler.cpp:
        (JSC::DFG::JITCompiler::compileFunction):
        * dfg/DFGJITCompiler.h:
        * dfg/DFGNode.h:
        * dfg/DFGNonSpeculativeJIT.h:
        * dfg/DFGOperations.h:
        * dfg/DFGRegisterBank.h:
        (JSC::DFG::RegisterBank::allocate):
        * dfg/DFGScoreBoard.h:
        (JSC::DFG::ScoreBoard::~ScoreBoard):
        (JSC::DFG::ScoreBoard::allocate):
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:

2011-03-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Production configuration in GYP isn&apos;t set up correctly
        https://bugs.webkit.org/show_bug.cgi?id=56786

        Update JavaScriptCore.gyp with information mined from
        JavaScriptCore.xcodeproj.

        * JavaScriptCore.gypi:
        * gyp/JavaScriptCore.gyp:

2011-03-22  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        REGRESSION(r80096): Number type input unexpectedly rounds fractional values
        https://bugs.webkit.org/show_bug.cgi?id=56367

        Introduce clampToInteger(unsigned).
        
        * wtf/MathExtras.h:
        (clampToInteger): Added.

2011-03-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        GYP build should not have include paths that point within the source tree
        https://bugs.webkit.org/show_bug.cgi?id=56788

        Turns out we don't need these include paths anymore now that we have
        header maps working properly.

        * gyp/JavaScriptCore.gyp:
            - Also, remove jsc.cpp from the excluded list because it's not part
              of the jsc_files variable instead of the javascriptcore_files
              variable.

2011-03-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Solve the Assertions.cpp / -Wno-missing-format-attribute mystery
        https://bugs.webkit.org/show_bug.cgi?id=56780

        The reason we couldn't resolve this warning in the GYP build was that
        the normal build disables this warning specifically for this file.
        This patch takes the same approach as the previous patch to
        WebCoreObjCExtras.mm in that it uses a pragma to suppress the warning
        (rather than a build system configuration).

        * JavaScriptCore.xcodeproj/project.pbxproj:
            - Remove the special-case for this file.
        * gyp/JavaScriptCore.gyp:
            - Remove the work-around for this issue.
        * wtf/Assertions.cpp:
            - Add a pragma disabling this warning for this file.

2011-03-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        WebCore GYP build shouldn't crash on startup
        https://bugs.webkit.org/show_bug.cgi?id=56776

        Debug builds shouldn't define NDEBUG.  This same logic exists in the
        project.pbxproj file.

        * gyp/JavaScriptCore.gyp:

2011-03-21  Robert Kroeger  <rjkroege@chromium.org>

        Reviewed by Antonio Gomes.

        Flag to enable/disable a GestureReocognizer framework

        https://bugs.webkit.org/show_bug.cgi?id=49345

        * wtf/Platform.h:

2011-03-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add new files to JavaScriptCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=56766

        * JavaScriptCore.gypi:

2011-03-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r81377.
        http://trac.webkit.org/changeset/81377
        https://bugs.webkit.org/show_bug.cgi?id=56765

        WebPageSerializerTest.MultipleFrames is broken (Requested by
        simonjam on #webkit).

        * wtf/Vector.h:

2011-03-21  Gabor Loki  <loki@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Extend constant pool to be able to store 16 bit instructions with a constant
        https://bugs.webkit.org/show_bug.cgi?id=46796

        The putShortWithConstantInt function inserts a 16 bit instruction which
        refers a 32 bits constant or literal. This is a vital function for those
        target which loads a PC relative value with a 16 bit instruction (like
        Thumb-2 instruction set and SH4 architecture).

        * assembler/AssemblerBuffer.h:
        (JSC::AssemblerBuffer::putIntegral):
        (JSC::AssemblerBuffer::putIntegralUnchecked):
        * assembler/AssemblerBufferWithConstantPool.h:

2011-03-21  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK distcheck build fix.

        * GNUmakefile.am:

2011-03-20  Bill Budge  <bbudge@chromium.org>

        Reviewed by Adam Barth.

        Rename ThreadSafeShared to ThreadSafeRefCounted
        https://bugs.webkit.org/show_bug.cgi?id=56714

        No new tests. Exposes no new functionality.

        * API/JSClassRef.h:
        * API/OpaqueJSString.h:
        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/Atomics.h:
        * wtf/CMakeLists.txt:
        * wtf/CrossThreadRefCounted.h:
        (WTF::CrossThreadRefCounted::CrossThreadRefCounted):
        (WTF::::crossThreadCopy):
        * wtf/ThreadSafeRefCounted.h: Copied from wtf/ThreadSafeShared.h.
        (WTF::ThreadSafeRefCountedBase::ThreadSafeRefCountedBase):
        (WTF::ThreadSafeRefCountedBase::ref):
        (WTF::ThreadSafeRefCountedBase::refCount):
        (WTF::ThreadSafeRefCountedBase::derefBase):
        (WTF::ThreadSafeRefCounted::ThreadSafeRefCounted):
        * wtf/ThreadSafeShared.h: Removed.
        * wtf/Threading.h:

2011-03-19  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Remove StringImpl::computeHash()
        https://bugs.webkit.org/show_bug.cgi?id=49894

        Replace remainig StringImpl::computeHash with StringImpl::computeHashStringHasher.

        * wtf/text/AtomicString.cpp:
        (WTF::CStringTranslator::hash):
        (WTF::UCharBufferTranslator::hash):
        (WTF::HashAndCharactersTranslator::hash):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::setHash):
        (WTF::StringImpl::hash):

2011-03-19  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Rename WTF::StringHasher methods
        https://bugs.webkit.org/show_bug.cgi?id=53532

        Rename createHash to computeHash and createBlobHash to hashMemory.
        Also add a using WTF::StringHasher in the header file.

        * profiler/CallIdentifier.h:
        (JSC::CallIdentifier::Hash::hash):
        * runtime/Identifier.cpp:
        (JSC::IdentifierCStringTranslator::hash):
        (JSC::IdentifierUCharBufferTranslator::hash):
        * wtf/StringHasher.h:
        (WTF::StringHasher::computeHash):
        (WTF::StringHasher::hashMemory):
        * wtf/text/StringHash.h:
        (WTF::CaseFoldingHash::hash):
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::computeHash):
        * wtf/unicode/UTF8.cpp:
        (WTF::Unicode::calculateStringHashAndLengthFromUTF8Internal):

2011-03-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        [GTK] JSC crashes in 32bit Release bots after r80743
        https://bugs.webkit.org/show_bug.cgi?id=56180
        
        The crash was caused by referencing GC memory from a GC destructor. This
        is not safe because destruction time / order is not guaranteed.

        * profiler/ProfileGenerator.cpp:
        (JSC::ProfileGenerator::create):
        (JSC::ProfileGenerator::ProfileGenerator):
        (JSC::ProfileGenerator::willExecute):
        (JSC::ProfileGenerator::didExecute):
        * profiler/ProfileGenerator.h:
        (JSC::ProfileGenerator::origin): Made ExecState* the first argument,
        to match the rest of this class and JSC.
        
        Use a JSGlobalObject* instead of an ExecState* with an indirect reference
        to a JSGlobalObject* to track our origin. This is simpler and more
        efficient, and it removes the destruction order dependency that was causing
        our crash.

        * profiler/Profiler.cpp:
        (JSC::Profiler::startProfiling): Updated for change to JSGlobalObject*.
        (JSC::Profiler::stopProfiling): New function for stopping all profiles
        for a given global object. This is more straight-forward than multiplexing
        through the old function.

        (JSC::dispatchFunctionToProfiles): Updated for change to JSGlobalObject*.
        * profiler/Profiler.h: Ditto.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::~JSGlobalObject): Ditto.

2011-03-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        1 Structure leaked beneath JSGlobalData::storeVPtrs()
        https://bugs.webkit.org/show_bug.cgi?id=56595

        * runtime/Executable.cpp:
        (JSC::EvalExecutable::EvalExecutable):
        (JSC::ProgramExecutable::ProgramExecutable):
        (JSC::FunctionExecutable::FunctionExecutable):
        * runtime/Executable.h:
        (JSC::ExecutableBase::ExecutableBase):
        (JSC::NativeExecutable::NativeExecutable):
        (JSC::VPtrHackExecutable::VPtrHackExecutable):
        (JSC::ScriptExecutable::ScriptExecutable): Use a raw pointer instead of
        PassRefPtr, like JSString does, since JSGlobalData owns the singleton
        exectuable structure.

2011-03-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Mark Rowe.

        Fixed some string leaks seen on the buildbot
        https://bugs.webkit.org/show_bug.cgi?id=56619

        * runtime/PropertyMapHashTable.h:
        (JSC::PropertyTable::~PropertyTable): DEref!

2011-03-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Crash in  JSC::MarkStack::drain Under Stress
        https://bugs.webkit.org/show_bug.cgi?id=56470

        We perform a number of gc allocations while when
        we are setting up new globals in a piece of global
        code.  We do this by adding new properties to the
        symbol table, and then expanding the storage to fit
        at the end.

        If a GC happens during this time we will report an
        incorrect size for the global object's symbol table
        storage.

        This patch corrects this by growing the storage size
        before we starting adding entries to the symbol table.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::resizeRegisters):

2011-03-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        1 Structure leaked beneath JSGlobalData::storeVPtrs()
        https://bugs.webkit.org/show_bug.cgi?id=56595

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::storeVPtrs): Take local ownership of the Structure
        we're using, since the Executable is not designed to own the Structure.

2011-03-17  Gavin Barraclough  <barraclough@apple.com>

        Rubber Stamped by Sam Weinig.

        Add missing register-register branchTest8 to MacroAssemblerX86Common/X86Assembler.

        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::branchTest8):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::testb_rr):

2011-03-17  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 56603 - DFG JIT related cleanup
        Move node generation out to separate function, move binarySearch algorithm out
        to StdLibExtras, fix Graph::dump() to print comma between non-node children,
        even if there are no node children.

        * bytecode/CodeBlock.h:
        (JSC::getCallReturnOffset):
        (JSC::CodeBlock::getStubInfo):
        (JSC::CodeBlock::getCallLinkInfo):
        (JSC::CodeBlock::getMethodCallLinkInfo):
        (JSC::CodeBlock::bytecodeOffset):
            - Move binaryChop to binarySearch in StdLibExtras
        * dfg/DFGByteCodeParser.cpp:
        (JSC::DFG::ByteCodeParser::ByteCodeParser):
        (JSC::DFG::ByteCodeParser::parse):
        (JSC::DFG::parse):
            - Make m_noArithmetic a member, initialize m_currentIndex in the constructor.
        * dfg/DFGByteCodeParser.h:
            - Change parse() to not take a start index (always 0).
        * dfg/DFGGraph.cpp:
        (JSC::DFG::Graph::dump):
            - Fix Graph::dump() to print comma between non-node children, even if there are no node children.
        * dfg/DFGJITCodeGenerator.h:
        (JSC::DFG::JITCodeGenerator::JITCodeGenerator):
            - Initialize m_compileIndex in constructor.
        * dfg/DFGNonSpeculativeJIT.cpp:
        (JSC::DFG::NonSpeculativeJIT::compile):
        * dfg/DFGNonSpeculativeJIT.h:
            - Spilt out compilation of individual node.
        * dfg/DFGOperations.cpp:
        (JSC::DFG::operationConvertThis):
        * dfg/DFGOperations.h:
            - Cleanup parameter name.
        * dfg/DFGSpeculativeJIT.cpp:
        (JSC::DFG::SpeculativeJIT::compile):
        * dfg/DFGSpeculativeJIT.h:
            - Spilt out compilation of individual node.
        * runtime/Executable.cpp:
        (JSC::tryDFGCompile):
            - Change parse() to not take a start index (always 0).
        * wtf/StdLibExtras.h:
        (WTF::binarySearch):
            - Move binaryChop to binarySearch in StdLibExtras

2011-03-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Geoffrey Garen.

        Fix clang build.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::storeVPtrs):

2011-03-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        1 Structure leaked beneath JSGlobalData::storeVPtrs()
        https://bugs.webkit.org/show_bug.cgi?id=56595

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::storeVPtrs): Now that we have an executable, we need
        to explicitly run its destructor.

2011-03-17  Jeff Miller  <jeffm@apple.com>

        Use a consistent set of file patterns in the svn:ignore property for all .xcodeproj directories, specifically:
        
        *.mode*
        *.pbxuser
        *.perspective*
        project.xcworkspace
        xcuserdata

        * JavaScriptCore.xcodeproj: Modified property svn:ignore.

2011-03-17  Gavin Barraclough  <barraclough@apple.com>

        Reverting r81197, breaks JIT + INTERPRETER build.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset):
        (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addPropertyAccessInstruction):
        (JSC::CodeBlock::addGlobalResolveInstruction):
        (JSC::CodeBlock::addStructureStubInfo):
        * bytecode/Opcode.h:
        * bytecode/StructureStubInfo.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitResolve):
        (JSC::BytecodeGenerator::emitResolveWithBase):
        (JSC::BytecodeGenerator::emitGetById):
        (JSC::BytecodeGenerator::emitPutById):
        (JSC::BytecodeGenerator::emitDirectPutById):
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitConstruct):
        (JSC::BytecodeGenerator::emitCatch):

2011-03-17  Ben Taylor  <bentaylor.solx86@gmail.com>

        Reviewed by Alexey Proskuryakov.

        Add a COMPILER(SUNCC) define for Sun Studio 12. 
        https://bugs.webkit.org/show_bug.cgi?56444
        derived from patch 1 of 16 originally from https://bugs.webkit.org/show_bug.cgi?id=24932

        * wtf/Platform.h:

2011-03-17  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by David Levin.

        Adding a contains method to Vector.
        https://bugs.webkit.org/show_bug.cgi?id=55859

        * wtf/Vector.h:
        (WTF::::operator):
        (WTF::::contains):

2011-03-17  Patrick Gansterer  <paroga@webkit.org>

        Fix the interpreter build.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute): Added globalData to inheritorID().

2011-03-16  Sam Weinig  <sam@webkit.org>

        Fix the interpreter build.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::resolve):
        (JSC::Interpreter::resolveSkip):
        (JSC::Interpreter::resolveGlobal):
        (JSC::Interpreter::resolveGlobalDynamic):
        (JSC::Interpreter::resolveBaseAndProperty):
        (JSC::Interpreter::privateExecute):
        Remove .get()s.

2011-03-16  Adam Barth  <abarth@webkit.org>

        Reviewed by James Robinson.

        Remove USE(BUILTIN_UTF8_CODEC)
        https://bugs.webkit.org/show_bug.cgi?id=56508

        We added this recently when we were unsure about the stability of the
        built-in UTF-8 codec.  However, the codec seems to be stable, so we
        don't need the macro.

        * wtf/Platform.h:

2011-03-16  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        Make JIT build for ARM Thumb-2 with RVCT
        https://bugs.webkit.org/show_bug.cgi?id=56440

        Derived from a patch by Dave Tapuska.

        Also, modify the RVCT stub template to indicate that it preserves 8 byte stack alignment.

        * jit/JITStubs.cpp:

2011-03-16  Chao-ying Fu  <fu@mips.com>

        Reviewed by Darin Adler.

        Fix MIPS build with const *void
        https://bugs.webkit.org/show_bug.cgi?id=56513

        * assembler/MacroAssemblerMIPS.h:
        (JSC::MacroAssemblerMIPS::load32):
        (JSC::MacroAssemblerMIPS::store32):

2011-03-16  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Remove unnecessary caller tracking shenanigans from CodeBlock
        https://bugs.webkit.org/show_bug.cgi?id=56483

        This removes some leftover cruft from when we made CodeBlock
        mark its callees.  Removing it gives us a 0.7% progression,
        reducing the overall regression to ~1.3%.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::shrinkToFit):
        * bytecode/CodeBlock.h:
        (JSC::CallLinkInfo::CallLinkInfo):
        * jit/JIT.cpp:
        (JSC::JIT::linkCall):
        (JSC::JIT::linkConstruct):

2011-03-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make Structure creation require a JSGlobalData
        https://bugs.webkit.org/show_bug.cgi?id=56438

        Mechanical change to make Structure::create require JSGlobalData&, and
        require all users to provide the globalData.

        * API/JSCallbackConstructor.h:
        (JSC::JSCallbackConstructor::createStructure):
        * API/JSCallbackFunction.h:
        (JSC::JSCallbackFunction::createStructure):
        * API/JSCallbackObject.h:
        (JSC::JSCallbackObject::createStructure):
        * API/JSContextRef.cpp:
        * JavaScriptCore.exp:
        * debugger/DebuggerActivation.cpp:
        (JSC::DebuggerActivation::DebuggerActivation):
        * debugger/DebuggerActivation.h:
        (JSC::DebuggerActivation::createStructure):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jsc.cpp:
        (GlobalObject::GlobalObject):
        (functionRun):
        (jscmain):
        * runtime/Arguments.h:
        (JSC::Arguments::createStructure):
        * runtime/ArrayPrototype.h:
        (JSC::ArrayPrototype::createStructure):
        * runtime/BooleanObject.h:
        (JSC::BooleanObject::createStructure):
        * runtime/DateInstance.h:
        (JSC::DateInstance::createStructure):
        * runtime/DatePrototype.h:
        (JSC::DatePrototype::createStructure):
        * runtime/ErrorInstance.h:
        (JSC::ErrorInstance::createStructure):
        * runtime/Executable.h:
        (JSC::ExecutableBase::createStructure):
        (JSC::EvalExecutable::createStructure):
        (JSC::ProgramExecutable::createStructure):
        (JSC::FunctionExecutable::createStructure):
        * runtime/FunctionPrototype.h:
        (JSC::FunctionPrototype::createStructure):
        * runtime/GetterSetter.h:
        (JSC::GetterSetter::createStructure):
        * runtime/InternalFunction.h:
        (JSC::InternalFunction::createStructure):
        * runtime/JSAPIValueWrapper.h:
        (JSC::JSAPIValueWrapper::createStructure):
        * runtime/JSActivation.h:
        (JSC::JSActivation::createStructure):
        * runtime/JSArray.cpp:
        (JSC::JSArray::JSArray):
        * runtime/JSArray.h:
        (JSC::JSArray::createStructure):
        * runtime/JSByteArray.cpp:
        (JSC::JSByteArray::createStructure):
        * runtime/JSByteArray.h:
        (JSC::JSByteArray::JSByteArray):
        * runtime/JSCell.h:
        (JSC::JSCell::JSCell::createDummyStructure):
        * runtime/JSFunction.h:
        (JSC::JSFunction::createStructure):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::storeVPtrs):
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObject):
        (JSC::JSGlobalObject::createStructure):
        * runtime/JSNotAnObject.h:
        (JSC::JSNotAnObject::createStructure):
        * runtime/JSONObject.h:
        (JSC::JSONObject::createStructure):
        * runtime/JSObject.cpp:
        (JSC::JSObject::createInheritorID):
        * runtime/JSObject.h:
        (JSC::JSObject::createStructure):
        (JSC::JSNonFinalObject::createStructure):
        (JSC::JSFinalObject::createStructure):
        (JSC::createEmptyObjectStructure):
        (JSC::JSObject::inheritorID):
        * runtime/JSObjectWithGlobalObject.h:
        (JSC::JSObjectWithGlobalObject::createStructure):
        * runtime/JSPropertyNameIterator.h:
        (JSC::JSPropertyNameIterator::createStructure):
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::createStructure):
        * runtime/JSString.h:
        (JSC::RopeBuilder::createStructure):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::createStructure):
        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::createStructure):
        * runtime/JSZombie.h:
        (JSC::JSZombie::createStructure):
        * runtime/MathObject.h:
        (JSC::MathObject::createStructure):
        * runtime/NativeErrorConstructor.cpp:
        (JSC::NativeErrorConstructor::NativeErrorConstructor):
        * runtime/NativeErrorConstructor.h:
        (JSC::NativeErrorConstructor::createStructure):
        * runtime/NumberConstructor.h:
        (JSC::NumberConstructor::createStructure):
        * runtime/NumberObject.h:
        (JSC::NumberObject::createStructure):
        * runtime/ObjectConstructor.h:
        (JSC::ObjectConstructor::createStructure):
        * runtime/RegExpConstructor.h:
        (JSC::RegExpConstructor::createStructure):
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::createStructure):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::createStructure):
        * runtime/StringObject.h:
        (JSC::StringObject::createStructure):
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        (JSC::StringObjectThatMasqueradesAsUndefined::createStructure):
        * runtime/StringPrototype.h:
        (JSC::StringPrototype::createStructure):
        * runtime/Structure.h:
        (JSC::Structure::create):

2011-03-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Some conservative root gathering cleanup
        https://bugs.webkit.org/show_bug.cgi?id=56447
        
        SunSpider says 0.5% - 1.8% faster.

        * interpreter/RegisterFile.cpp:
        (JSC::RegisterFile::gatherConservativeRoots):
        * interpreter/RegisterFile.h: New helper function for doing the
        conservative gathering of the register file. It's still conservative,
        since the register file may contain uninitialized values, but it's
        moving-safe, because it only visits values tagged as pointers, so there's
        no risk of mistaking an integer for a pointer and accidentally changing it.

        * runtime/ConservativeSet.cpp:
        (JSC::ConservativeRoots::add):
        * runtime/ConservativeSet.h: Added a single-value add function, used above.

        * runtime/Heap.cpp:
        (JSC::Heap::markRoots): Separated machine stack conservative roots from
        register file conservative roots because machine stack roots must be
        pinned, but register file roots need not be pinned.
        
        Adopted new interface for passing the current stack extent to the machine
        stack root gathering routine. This allows us to exclude marking-related
        data structures on the stack, and thus avoid double-marking the set of
        machine roots.

        * runtime/MachineStackMarker.cpp:
        (JSC::MachineThreads::gatherFromCurrentThread):
        (JSC::MachineThreads::gatherConservativeRoots):
        * runtime/MachineStackMarker.h: Added new interface, described above.

        * runtime/MarkedBlock.h:
        (JSC::MarkedBlock::firstAtom):
        * wtf/StdLibExtras.h:
        (WTF::roundUpToMultipleOf): Moved roundUpToMultipleOf so it could be used
        by MachineStacks.

2011-03-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        A little bit of MarkStack cleanup
        https://bugs.webkit.org/show_bug.cgi?id=56443
        
        Moved MarkStack functions into MarkStack.h/.cpp.
        
        SunSpider reports no change.

        * runtime/JSArray.h:
        * runtime/JSCell.h: Moved from here...
        * runtime/MarkStack.cpp:
        (JSC::MarkStack::markChildren):
        (JSC::MarkStack::drain): ...to here. Also, no need to inline drain. It's
        a huge function, and not called many times.

        * runtime/MarkStack.h:
        (JSC::MarkStack::~MarkStack): Moved near constructor, per style guide.
        (JSC::MarkStack::append):
        (JSC::MarkStack::deprecatedAppend):
        (JSC::MarkStack::internalAppend): Moved to here.

2011-03-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed another deprecatedAppend
        https://bugs.webkit.org/show_bug.cgi?id=56429

        * collector/handles/HandleHeap.cpp:
        (JSC::HandleHeap::markStrongHandles):
        * collector/handles/HandleHeap.h: Use HeapRootMarker, since handles are
        marked directly by the Heap.

        * runtime/Heap.cpp:
        (JSC::Heap::markRoots): Ditto.

2011-03-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed some more deprecated / unsafe append
        https://bugs.webkit.org/show_bug.cgi?id=56428

        * collector/handles/HandleStack.cpp:
        (JSC::HandleStack::mark):
        * collector/handles/HandleStack.h: Mark the handle stack using a HeapRoot
        marker, since it's a heap root.
        
        * runtime/ArgList.cpp:
        (JSC::MarkedArgumentBuffer::markLists):
        (JSC::MarkedArgumentBuffer::slowAppend):
        * runtime/ArgList.h: Ditto.

        * runtime/Heap.cpp:
        (JSC::Heap::markRoots): Added a mark call for marking the handle stack.
        It seems like Oliver forgot this in his last patch. (!)

        * runtime/MarkStack.h: Removed appendSlots, since it would allow an
        object to embed JSValues directly instead of using WriteBarrier.

        (JSC::MarkStack::append): Added a private append for a list of values.

        (JSC::HeapRootMarker::mark): Access to the above.

2011-03-15  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed a few more deprecatedAppends, and removed HeapRoot<T>
        https://bugs.webkit.org/show_bug.cgi?id=56422
        
        Added HeapRootMarker, a privileged class for marking direct heap roots
        that are iterated during each garbage collection. This is easier to use
        and more reliable than HeapRoot<T>, so I've removed HeapRoot<T>.

        * debugger/Debugger.cpp:
        (JSC::evaluateInGlobalCallFrame):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate):
        * interpreter/CallFrame.h:
        (JSC::ExecState::exception):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/Completion.cpp:
        (JSC::evaluate): exception is no longer a HeapRoot<T>, so no need to
        call .get() on it.

        * runtime/Heap.cpp:
        (JSC::Heap::markProtectedObjects):
        (JSC::Heap::markTempSortVectors):
        (JSC::Heap::markRoots):
        * runtime/Heap.h: Updated to use HeapRootMarker.

        * runtime/JSCell.h:
        (JSC::JSCell::MarkStack::append): Added private functions for
        HeapRootMarker to use.

        * runtime/JSGlobalData.h: exception is no longer a HeapRoot<T>.

        * runtime/MarkStack.h:
        (JSC::HeapRootMarker::HeapRootMarker):
        (JSC::HeapRootMarker::mark): Added private functions for
        HeapRootMarker to use.

        * runtime/SmallStrings.cpp:
        (JSC::SmallStrings::markChildren): Updated to use HeapRootMarker.

        * runtime/SmallStrings.h:
        (JSC::SmallStrings::emptyString):
        (JSC::SmallStrings::singleCharacterString):
        (JSC::SmallStrings::singleCharacterStrings): Updated to use HeapRootMarker.

        * runtime/WriteBarrier.h: Removed HeapRoot<T>.

2011-03-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Made the global object moving-GC-safe
        https://bugs.webkit.org/show_bug.cgi?id=56348
        
        SunSpider reports no change.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::markChildren): Removed a dubious comment that
        suggested we do not need to visit all our references during GC, since
        that is not true in a moving GC.

        Re-sorted data members by type, removed one duplicate, and added back
        the one missing mark I found.

        * runtime/JSGlobalObject.h: Re-sorted data members by type.

2011-03-15  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Introduce Local<T> to allow us to start moving to precise marking of locals
        https://bugs.webkit.org/show_bug.cgi?id=56394

        Introduce a new handle type, Local<T> and a scoping mechanism
        LocalScope to allow us to start moving towards precise marking
        of temporaries and local variables.

        We also start to use the new Local<> type in the JSON stringifier
        so that we can have some coverage of their behaviour in the initial
        checkin.

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.pro:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * collector/handles/Handle.h:
        (JSC::::asObject):
        * collector/handles/HandleStack.cpp: Added.
        (JSC::HandleStack::HandleStack):
        (JSC::HandleStack::mark):
        (JSC::HandleStack::grow):
        * collector/handles/HandleStack.h: Added.
        (JSC::HandleStack::enterScope):
        (JSC::HandleStack::zapTo):
        (JSC::HandleStack::leaveScope):
        (JSC::HandleStack::push):
        * collector/handles/Local.h: Added.
        (JSC::Local::internalSet):
        (JSC::::Local):
        (JSC::::operator):
        (JSC::LocalStack::LocalStack):
        (JSC::LocalStack::peek):
        (JSC::LocalStack::pop):
        (JSC::LocalStack::push):
        (JSC::LocalStack::isEmpty):
        (JSC::LocalStack::size):
        * collector/handles/LocalScope.h: Added.
        (JSC::LocalScope::LocalScope):
        (JSC::LocalScope::~LocalScope):
        (JSC::LocalScope::release):
        * runtime/Heap.cpp:
        (JSC::Heap::markRoots):
        * runtime/Heap.h:
        (JSC::Heap::allocateLocalHandle):
        (JSC::Heap::handleStack):
        * runtime/JSCell.h:
        (JSC::JSCell::::getString):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::allocateLocalHandle):
        * runtime/JSONObject.cpp:
        (JSC::Stringifier::Stringifier):
        (JSC::Stringifier::stringify):
        (JSC::Stringifier::appendStringifiedValue):
        (JSC::Stringifier::Holder::Holder):
        (JSC::Walker::Walker):
        (JSC::Walker::walk):
        (JSC::JSONProtoFuncParse):
        (JSC::JSONProtoFuncStringify):
        (JSC::JSONStringify):
        * runtime/JSONObject.h:
        * runtime/MarkStack.h:
        (JSC::MarkStack::appendValues):
        (JSC::MarkStack::appendSlots):

2011-03-15  Gavin Barraclough  <barraclough@apple.com>

        Rubber Stamped by Sam Weinig.

        Bug 56420 - Remove ENABLE(JIT) code from ByteCompiler
        Some methods have unnecessary differences in name/arguments for interpreter/JIT.

        * bytecode/CodeBlock.cpp:
        * bytecode/CodeBlock.h:
        (JSC::HandlerInfo::HandlerInfo):
        (JSC::CodeBlock::addPropertyAccessInfo):
        (JSC::CodeBlock::addGlobalResolveInfo):
        (JSC::CodeBlock::addCallLinkInfo):
        (JSC::CodeBlock::globalResolveInfo):
        * bytecode/Opcode.h:
        * bytecode/StructureStubInfo.h:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::emitResolve):
        (JSC::BytecodeGenerator::emitResolveWithBase):
        (JSC::BytecodeGenerator::emitGetById):
        (JSC::BytecodeGenerator::emitPutById):
        (JSC::BytecodeGenerator::emitDirectPutById):
        (JSC::BytecodeGenerator::emitCall):
        (JSC::BytecodeGenerator::emitConstruct):
        (JSC::BytecodeGenerator::emitCatch):

2011-03-15  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Fix broken assert in new code.

        * dfg/DFGAliasTracker.h:
        (JSC::DFG::AliasTracker::recordPutByVal):
            - recordPutByVal is called for both PutByVal & PutByValAlias.

2011-03-15  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig.

        Removed redundant code from BytecodeGenerator.

        * bytecompiler/BytecodeGenerator.cpp:
        * bytecompiler/BytecodeGenerator.h:
            - delete uncalled code missed when reparsing was removed.

2011-03-15  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Introduce WTF_USE_EXPORT_MACROS, which will allow us to put shared library import/export
        info into the headers rather than in export symbol definition files, but disable it on 
        all platforms initially so we can deal with port build issues one port at a time.
        
        https://bugs.webkit.org/show_bug.cgi?id=27551

        * API/JSBase.h:
        * config.h:
        * wtf/Assertions.h:
        * wtf/ExportMacros.h: Added.
        * wtf/Platform.h:

2011-03-14  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed build fix.

        Buildfix when JIT is not enabled after r81079
        https://bugs.webkit.org/show_bug.cgi?id=56361

        * runtime/Executable.cpp:

2011-03-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Made the global object moving-GC-safe
        https://bugs.webkit.org/show_bug.cgi?id=56348
        
        SunSpider reports no change.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::markChildren): Removed a dubious comment that
        suggested we do not need to visit all our references during GC, since
        that is not true in a moving GC.

        Re-sorted data members by type, removed one duplicate, and added back
        the one missing mark I found.

        * runtime/JSGlobalObject.h: Re-sorted data members by type.

2011-03-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Made JSWrapperObject and subclasses moving-GC-safe
        https://bugs.webkit.org/show_bug.cgi?id=56346
        
        SunSpider reports no change.

        * runtime/BooleanObject.cpp:
        (JSC::BooleanObject::BooleanObject):
        * runtime/DateInstance.cpp:
        (JSC::DateInstance::DateInstance): No more need for JSGlobalData, since
        we don't initialize the wrapped value in our constructor.

        * runtime/DateInstance.h: Don't set the OverridesMarkChildren flag because
        we do not in fact override markChildren.

        * runtime/DatePrototype.h: Declare an anonymous slot, since wrapper object
        no longer does so for us. Also added an ASSERT to catch a latent bug,
        where DatePrototype stomped on its base class's anonymous slot. Hard-coded
        anonymous slots are a plague on our code. This doesn't cause any problems
        in our existing code since the base class never reads the anonymous slot
        it declares, but it caused crashes when I tried to start using the slot
        in an initial version of this patch.

        * runtime/JSWrapperObject.h:
        (JSC::JSWrapperObject::JSWrapperObject):
        (JSC::JSWrapperObject::internalValue):
        (JSC::JSWrapperObject::setInternalValue): Resolved a problem where
        our internal value was stored in two places: an anonymous slot, and a
        data member which was not always visited during GC. Now, we only use the
        data member, and we always visit it. (Instead of relying on certain
        subclasses to set the OverridesMarkChildren bit, we set it ourselves.)

        * runtime/NumberObject.cpp:
        (JSC::NumberObject::NumberObject): No more need for JSGlobalData, since
        we don't initialize the wrapped value in our constructor.

        * runtime/NumberObject.h: Removed meaningless declaration.

        * runtime/StringObject.cpp:
        (JSC::StringObject::StringObject): No more need for JSGlobalData, since
        we don't initialize the wrapped value in our constructor.

        * runtime/StringObject.h: Don't set the OverridesMarkChildren flag because
        we do not in fact override markChildren.

        * runtime/StringPrototype.h: Declare an anonymous slot, since wrapper object
        no longer does so for us. Also added an ASSERT to catch a latent bug,
        where DatePrototype stomped on its base class's anonymous slot. Hard-coded
        anonymous slots are a plague on our code.

2011-03-14  Michael Saboff  <msaboff@apple.com>

        Reviewed by Gavin Barraclough.

        Look-ahead assertions with back references don’t work as expected
        https://bugs.webkit.org/show_bug.cgi?id=56082

        Changed parentheses assertion processing to temporarily back out the 
        number of known characters after the assertion while processing the 
        assertion.  This was done so that assertions don't fail due to 
        checking the number of required characters as additional to the 
        rest of the express since assertions don't "consume" input.
        Added a byte code to uncheck characters to support the change.

        * yarr/YarrInterpreter.cpp:
        (JSC::Yarr::Interpreter::matchDisjunction):
        (JSC::Yarr::ByteCompiler::uncheckInput):
        (JSC::Yarr::ByteCompiler::emitDisjunction):
        * yarr/YarrInterpreter.h:
        (JSC::Yarr::ByteTerm::UncheckInput):

2011-03-14  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Warning that round/roundf functions are already defined when compiled with RVCT 4 on symbian.
        https://bugs.webkit.org/show_bug.cgi?id=56133

        Add condition to not compile webkit internal math round functions on RVCT compiler versions 
        from 3.0.0 because they are already defined in compiler math library.

        * wtf/MathExtras.h:

2011-03-14  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Geoffrey Garen & Oliver Hunt.

        Bug 56284 - Add a dataflow intermediate representation for use in JIT generation.

        The JSC JIT presently generates code directly from the bytecode used by the interpreter.
        This is not an optimal intermediate representation for JIT code generation, since it does
        not capture liveness information of values, and provides little opportunity to perform
        any static analysis for even primitive types. The JIT currently generates two code paths,
        a fast path handling common cases, and a slower path handling less common operand types.
        However the slow path jumps back into the fast path, meaning that information arising
        from the earlier type checks cannot be propagated to later operations.

        This patch adds:
            * a dataflow intermediate representation capable of describing a single basic block
              of operations,
            * a mechanism to convert a simple, single-block bytecode functions to the new IR,
            * and a JIT code generator capable of generating code from this representation.

        The JIT generates two code paths, with the slower path not reentering the fast path
        mid-block, allowing speculative optimizations to be made on the hot path, with type
        information arising from these speculative decisions able to be propagated through the
        dataflow. Code generation of both speculative and non-speculative paths exploits the type
        and liveness information represented in the dataflow graph to attempt to avoid redundant
        boxing and type-checking of values, and to remove unnecessary spills of temporary values
        to the RegisterFile.

        The dataflow JIT currently can only support a subset of bytecode operations, limited to
        arithmetic, bit-ops, and basic property access. Functions that cannot be compiled by the
        dataflow JIT will be run using the existing JIT. The coverage of the dataflow JIT will be
        expanded to include, control-flow, function calls, and then the long-tail of remaining
        bytecode instructions. The JIT presently only support JSVALUE64, and as a consequence of
        this only supports x86-64.

        The status of the dataflow JIT is currently work-in-progress. Limitations of the present
        JIT code generation may cause performance regressions, particularly:
            * the policy to only generate arithmetic code on the speculative path using integer
              instructions, never using floating point.
            * the policy to only generate arithmetic code on the non-speculative path using
              floating point instructions, never using integer.
            * always generating JSValue adds on the non-speculative path as a call out to a
              C-function, never handling this in JIT code.
            * always assuming by-Value property accesses on the speculative path to be array
              accesses.
            * generating all by-Value property accesses from the non-speculative path as a call
              out to a C-function.
            * generating all by-Indentifer property accesses as a call out to a C-function.
        Due to these regressions, the code is landed in a state where it is disabled in most
        cases by the ENABLE_DFG_JIT_RESTRICTIONS guard in Platform.h. As these regressions are
        addressed, the JIT will be allowed to trigger in more cases.

        * JavaScriptCore.xcodeproj/project.pbxproj:
            - Added new files to Xcode project.
        * dfg: Added.
            - Added directory for new code.
        * dfg/DFGByteCodeParser.cpp: Added.
        * dfg/DFGByteCodeParser.h: Added.
            - Contruct a DFG::Graph representation from a bytecode CodeBlock.
        * dfg/DFGGenerationInfo.h: Added.
            - Track type & register information for VirtualRegisters during JIT code generation.
        * dfg/DFGGraph.cpp: Added.
        * dfg/DFGGraph.h: Added.
            - Dataflow graph intermediate representation for code generation.
        * dfg/DFGJITCodeGenerator.cpp: Added.
        * dfg/DFGJITCodeGenerator.h: Added.
            - Base class for SpeculativeJIT & NonSpeculativeJIT to share common functionality.
        * dfg/DFGJITCompiler.cpp: Added.
        * dfg/DFGJITCompiler.h: Added.
            - Class responsible for driving code generation of speculativeJIT & non-speculative
              code paths from the dataflow graph.
        * dfg/DFGNonSpeculativeJIT.cpp: Added.
        * dfg/DFGNonSpeculativeJIT.h: Added.
            - Used to generate the non-speculative code path, this make no assumptions
              about operand types.
        * dfg/DFGOperations.cpp: Added.
        * dfg/DFGOperations.h: Added.
            - Helper functions called from the JIT generated code.
        * dfg/DFGRegisterBank.h: Added.
            - Used to track contents of physical registers during JIT code generation.
        * dfg/DFGSpeculativeJIT.cpp: Added.
        * dfg/DFGSpeculativeJIT.h: Added.
            - Used to generate the speculative code path, this make assumptions about
              operand types to enable optimization.
        * runtime/Executable.cpp:
            - Add code to attempt to use the DFG JIT to compile a function, with fallback
              to the existing JIT.
        * wtf/Platform.h:
            - Added compile guards to enable the DFG JIT.

2011-03-14  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed more cases of DeprecatedPtr (exception, SmallStrings)
        https://bugs.webkit.org/show_bug.cgi?id=56332

        * runtime/Identifier.cpp:
        (JSC::Identifier::add):
        (JSC::Identifier::addSlowCase): Use a variable instead of a hard-coded
        constant, to make this code less brittle.

        * runtime/JSGlobalData.h: Use HeapRoot instead of DeprecatedPtr because
        this reference is owned and managed directly by the heap.

        * runtime/JSString.cpp:
        (JSC::JSString::substringFromRope):
        * runtime/JSString.h:
        (JSC::jsSingleCharacterString):
        (JSC::jsSingleCharacterSubstring):
        (JSC::jsString):
        (JSC::jsStringWithFinalizer):
        (JSC::jsSubstring):
        (JSC::jsOwnedString): Use a variable instead of a hard-coded
        constant, to make this code less brittle.

        * runtime/SmallStrings.cpp:
        (JSC::SmallStringsStorage::rep):
        (JSC::SmallStringsStorage::SmallStringsStorage):
        (JSC::SmallStrings::SmallStrings):
        (JSC::SmallStrings::markChildren):
        (JSC::SmallStrings::clear):
        (JSC::SmallStrings::count): Use a variable instead of a hard-coded
        constant, to make this code less brittle.

        * runtime/SmallStrings.h:
        (JSC::SmallStrings::singleCharacterString): Use HeapRoot instead of
        DeprecatedPtr because these references are owned and managed directly by
        the heap.
        
        Stop using FixedArray because we only want a very limited set
        of classes to be able to use HeapRoot. (Replaced with manual ASSERTs.)

        * runtime/WriteBarrier.h:
        (JSC::operator==):
        (JSC::WriteBarrier::WriteBarrier):
        (JSC::HeapRoot::HeapRoot):
        (JSC::HeapRoot::operator=): Added HeapRoot, which is allowed to set
        without write barrier because we assume all HeapRoots are scanned during
        all GC passes.

2011-03-14  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben and Gavin Barraclough.

        FileSystemWin.cpp needs listDirectory() implementation
        https://bugs.webkit.org/show_bug.cgi?id=56331
        <rdar://problem/9126635>
        
        Give StringConcatenate the ability to deal with const UChar*'s as a String type to append.

        * wtf/text/StringConcatenate.h:

2011-03-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Oliver Hunt.

        <http://webkit.org/b/56304> REGRESSION(r80892): 100,000+ leaks seen on the build bot

        * API/JSClassRef.cpp:
        (OpaqueJSClass::OpaqueJSClass): Don't leak any existing entry for the given name if
        the class definition contains duplicates. This also removes what look to be leaks
        of the StringImpl instances that are used as keys: the HashMap key type is a RefPtr
        which retains / releases the instances at the appropriate time, so explicitly calling
        ref is not necessary.

2011-03-14  Oliver Hunt  <oliver@apple.com>

        Fix windows build

        * jit/JSInterfaceJIT.h:
        (JSC::JSInterfaceJIT::emitLoadInt32):
        (JSC::JSInterfaceJIT::tagFor):
        (JSC::JSInterfaceJIT::payloadFor):
        (JSC::JSInterfaceJIT::intPayloadFor):
        (JSC::JSInterfaceJIT::intTagFor):
        (JSC::JSInterfaceJIT::addressFor):

2011-03-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Ensure all values are correctly tagged in the registerfile
        https://bugs.webkit.org/show_bug.cgi?id=56214

        This patch makes sure that all JSCell pointers written to
        the registerfile are correctly tagged as JSCells, and replaces
        raw int usage with the immediate representation.

        For performance, register pressure, and general saneness reasons
        I've added abstractions for reading and writing the tag
        and payload of integer registers directly for the JSVALUE64
        encoding.

        * interpreter/Register.h:
        (JSC::Register::withInt):
        (JSC::Register::withCallee):
        (JSC::Register::operator=):
        (JSC::Register::i):
        (JSC::Register::activation):
        (JSC::Register::function):
        (JSC::Register::propertyNameIterator):
        (JSC::Register::scopeChain):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCall):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitPutToCallFrameHeader):
        (JSC::JIT::emitPutCellToCallFrameHeader):
        (JSC::JIT::emitPutIntToCallFrameHeader):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTINativeCall):
        (JSC::JIT::emit_op_get_pnames):
        (JSC::JIT::emit_op_next_pname):
        (JSC::JIT::emit_op_load_varargs):
        (JSC::JIT::emitSlow_op_load_varargs):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTINativeCall):
        (JSC::JIT::emit_op_get_pnames):
        (JSC::JIT::emit_op_next_pname):
        * jit/JSInterfaceJIT.h:
        (JSC::JSInterfaceJIT::intPayloadFor):
        (JSC::JSInterfaceJIT::intTagFor):
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::returnJSValue):
        (JSC::SpecializedThunkJIT::returnDouble):
        (JSC::SpecializedThunkJIT::returnInt32):
        (JSC::SpecializedThunkJIT::returnJSCell):

2011-03-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        A few Heap-related renames (sans file moves, which should come next)
        https://bugs.webkit.org/show_bug.cgi?id=56283
        
        ConservativeSet => ConservativeRoots. "Set" was misleading, since items
        are not uniqued. Also, "Roots" is more specific about what's in the set.
        
        MachineStackMarker => MachineThreads. "Threads" is more descriptive of
        the fact that this class maintains a set of all threads using JSC.
        "Stack" was misleading, since this class traverses stacks and registers.
        "Mark" was misleading, since this class doesn't mark anything anymore.
        
        registerThread => addCurrentThread. "Current" is more specific.
        unregisterThread => removeCurrentThread. "Current" is more specific.
        
        "currentThreadRegistrar" => threadSpecific. The only point of this data
        structure is to register a thread-specific destructor with a pointer to
        this.
        
        "mark...Conservatively" => "gather". "Mark" is not true, since these
        functions don't mark anything. "Conservatively" is redundant, since they
        take "ConservativeRoots" as an argument.

        * API/APIShims.h:
        (JSC::APIEntryShimWithoutLock::APIEntryShimWithoutLock):
        * JavaScriptCore.exp:
        * runtime/ConservativeSet.cpp:
        (JSC::ConservativeRoots::grow):
        (JSC::ConservativeRoots::add):
        * runtime/ConservativeSet.h:
        (JSC::ConservativeRoots::ConservativeRoots):
        (JSC::ConservativeRoots::~ConservativeRoots):
        (JSC::ConservativeRoots::size):
        (JSC::ConservativeRoots::roots):
        * runtime/Heap.cpp:
        (JSC::Heap::Heap):
        (JSC::Heap::markRoots):
        * runtime/Heap.h:
        (JSC::Heap::machineThreads):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::makeUsableFromMultipleThreads):
        * runtime/MachineStackMarker.cpp:
        (JSC::MachineThreads::MachineThreads):
        (JSC::MachineThreads::~MachineThreads):
        (JSC::MachineThreads::makeUsableFromMultipleThreads):
        (JSC::MachineThreads::addCurrentThread):
        (JSC::MachineThreads::removeThread):
        (JSC::MachineThreads::removeCurrentThread):
        (JSC::MachineThreads::gatherFromCurrentThreadInternal):
        (JSC::MachineThreads::gatherFromCurrentThread):
        (JSC::MachineThreads::gatherFromOtherThread):
        (JSC::MachineThreads::gatherConservativeRoots):
        * runtime/MachineStackMarker.h:
        * runtime/MarkStack.h:
        (JSC::MarkStack::append):

2011-03-13  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX for armv7 after r80969

        Bug 56270 - The JIT 'friend's many classes in JSC; start unwinding this.
        <https://bugs.webkit.org/show_bug.cgi?id=56270>

        * assembler/MacroAssemblerARMv7.h:
        (JSC::MacroAssemblerARMv7::load32): Made void* address argument
        const.
        (JSC::MacroAssemblerARMv7::store32): Ditto.

2011-03-13  Geoffrey Garen  <ggaren@apple.com>

        Not reviewed.

        Try to fix the Mac build.

        * JavaScriptCore.xcodeproj/project.pbxproj: Make sure to forward
        ConervativeSet.h, since it's now visible when compiling other projects.

2011-03-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed another case of DeprecatedPtr (ConservativeSet)
        https://bugs.webkit.org/show_bug.cgi?id=56281
        
        The ConservativeSet is an internal data structure used during marking,
        so direct pointers are fine.

        * runtime/ConservativeSet.cpp:
        (JSC::ConservativeSet::grow):
        * runtime/ConservativeSet.h: Added some accessors, for use by MarkStack::append.
        (JSC::ConservativeSet::~ConservativeSet): Fixed a typo where we calculated
        the size of the set based on sizeof(DeprecatedPtr<T>*) instead of
        sizeof(DeprecatedPtr<T>). I'm not sure if this had real-world implications or not.
        (JSC::ConservativeSet::size):
        (JSC::ConservativeSet::set): Use direct pointers, as stated above. 

        * runtime/Heap.cpp:
        (JSC::Heap::markRoots):
        * runtime/MarkStack.h:
        (JSC::MarkStack::append): Created a special case of append for
        ConservativeSet. I didn't want to add back a generic "append JSCell*"
        function, since other class might start using that wrong. (In the end,
        this function might go away, since the Heap will want to do something
        slightly more interesting with the conservative set, but this is OK for
        now.)

2011-03-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed another case of DeprecatedPtr (PutPropertySlot)
        https://bugs.webkit.org/show_bug.cgi?id=56278

        * runtime/PutPropertySlot.h:
        (JSC::PutPropertySlot::setExistingProperty):
        (JSC::PutPropertySlot::setNewProperty):
        (JSC::PutPropertySlot::base): Direct pointer is fine for PutPropertySlot,
        since it's a stack-allocated temporary.

2011-03-13  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Removed one case of DeprecatedPtr (ScopeChainIterator)
        https://bugs.webkit.org/show_bug.cgi?id=56277

        * runtime/ScopeChain.h: Direct pointer is fine for ScopeChainIterator,
        since it's a stack-allocated temporary.

2011-03-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 56273 - Add three operand forms to MacroAssember operations.

        Adding for X86(_64) for now, should be rolled out to other backends as necessary.
        These may allow more efficient code generation in some cases, avoiding the need
        for unnecessary register-register move instructions.

        * assembler/AbstractMacroAssembler.h:
        (JSC::AbstractMacroAssembler::Jump::link):
        (JSC::AbstractMacroAssembler::Jump::linkTo):
            - marked these methods const.
        (JSC::AbstractMacroAssembler::Jump::isSet):
            - add a method to check whether a Jump object has been set to
              reference an instruction, or is in a null, unset state. 
        * assembler/MacroAssemblerCodeRef.h:
        (JSC::FunctionPtr::FunctionPtr):
            - add non-explicit constructor, for FunctionPtr's to C/C++ functions.
        * assembler/MacroAssemblerX86Common.h:
        (JSC::MacroAssemblerX86Common::and32):
        (JSC::MacroAssemblerX86Common::lshift32):
        (JSC::MacroAssemblerX86Common::or32):
        (JSC::MacroAssemblerX86Common::rshift32):
        (JSC::MacroAssemblerX86Common::urshift32):
        (JSC::MacroAssemblerX86Common::xor32):
        (JSC::MacroAssemblerX86Common::moveDouble):
        (JSC::MacroAssemblerX86Common::addDouble):
        (JSC::MacroAssemblerX86Common::divDouble):
        (JSC::MacroAssemblerX86Common::subDouble):
        (JSC::MacroAssemblerX86Common::mulDouble):
        (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32):
        (JSC::MacroAssemblerX86Common::branchTest32):
        (JSC::MacroAssemblerX86Common::branchTest8):
        (JSC::MacroAssemblerX86Common::branchAdd32):
        (JSC::MacroAssemblerX86Common::branchMul32):
        (JSC::MacroAssemblerX86Common::branchSub32):
            - add three operand forms of these instructions.
        * assembler/MacroAssemblerX86_64.h:
        (JSC::MacroAssemblerX86_64::addDouble):
        (JSC::MacroAssemblerX86_64::convertInt32ToDouble):
        (JSC::MacroAssemblerX86_64::loadPtr):
        (JSC::MacroAssemblerX86_64::branchTestPtr):
        * assembler/X86Assembler.h:
        (JSC::X86Assembler::JmpSrc::isSet):
            - add a method to check whether a JmpSrc object has been set to
              reference an instruction, or is in a null, unset state. 
        (JSC::X86Assembler::movsd_rr):
            - added FP register-register move.
        (JSC::X86Assembler::linkJump):
            - Add an assert to check jumps aren't linked more than once.
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitLoadInt32ToDouble):
            - load integers to the FPU via regsiters on x86-64.

2011-03-13  Gavin Barraclough  <barraclough@apple.com>

        ARM build fix.

        * assembler/MacroAssemblerARM.h:
        (JSC::MacroAssemblerARM::load32):

2011-03-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 56270 - The JIT 'friend's many classes in JSC; start unwinding this.

        The JIT need to 'friend' other classes in order to be able to calculate offsets
        of various properties, or the absolute addresses of members within specific objects,
        in order to JIT generate code that will access members within the class when run.

        Instead of using friends in these cases, switch to providing specific accessor
        methods to provide this information.  In the case of offsets, these can be static
        functions, and in the case of pointers to members within a specific object these can
        be const methods returning pointers to const values, to prevent clients from
        modifying values otherwise encapsulated within classes.

        * bytecode/SamplingTool.h:
        * interpreter/Register.h:
        * interpreter/RegisterFile.h:
        * runtime/JSArray.h:
        * runtime/JSCell.h:
        * runtime/JSTypeInfo.h:
        * runtime/JSVariableObject.h:
        * runtime/Structure.h:
        * wtf/RefCounted.h:
            - Change these classes to no longer friend the JIT, add accessors for member offsets.
        * jit/JIT.cpp:
        * jit/JITCall32_64.cpp:
        * jit/JITInlineMethods.h:
        * jit/JITOpcodes.cpp:
        * jit/JITOpcodes32_64.cpp:
        * jit/JITPropertyAccess.cpp:
        * jit/JITPropertyAccess32_64.cpp:
            - Change the JIT to use class accessors, rather than taking object ofsets directly.
        * assembler/AbstractMacroAssembler.h:
        * assembler/MacroAssemblerX86_64.h:
        * assembler/X86Assembler.h:
            - Since the accessors for objects members return const pointers to retain encapsulation,
              methods generating code with absolute addresses must be able to handle const pointers
              (the JIT doesn't write to these values, do dies treat the pointer to value as const
              from within the C++ code of the JIT, if not at runtime!).

2011-03-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80919.
        http://trac.webkit.org/changeset/80919
        https://bugs.webkit.org/show_bug.cgi?id=56251

        all windows bots failed to compile this change (Requested by
        loislo on #webkit).

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecode/StructureStubInfo.cpp:
        * interpreter/Register.h:
        (JSC::Register::withInt):
        (JSC::Register::withCallee):
        (JSC::Register::operator=):
        (JSC::Register::i):
        (JSC::Register::activation):
        (JSC::Register::function):
        (JSC::Register::propertyNameIterator):
        (JSC::Register::scopeChain):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCall):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitPutToCallFrameHeader):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTINativeCall):
        (JSC::JIT::emit_op_get_pnames):
        (JSC::JIT::emit_op_next_pname):
        (JSC::JIT::emit_op_load_varargs):
        (JSC::JIT::emitSlow_op_load_varargs):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTINativeCall):
        (JSC::JIT::emit_op_get_pnames):
        (JSC::JIT::emit_op_next_pname):
        * jit/JSInterfaceJIT.h:
        (JSC::JSInterfaceJIT::payloadFor):
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::returnJSValue):
        (JSC::SpecializedThunkJIT::returnDouble):
        (JSC::SpecializedThunkJIT::returnInt32):
        (JSC::SpecializedThunkJIT::returnJSCell):
        * runtime/ArgList.cpp:
        * runtime/DateConversion.cpp:
        * runtime/GCActivityCallbackCF.cpp:
        * runtime/Identifier.cpp:
        * runtime/JSActivation.h:
        (JSC::asActivation):
        * runtime/JSLock.cpp:
        * runtime/JSNumberCell.cpp:
        * runtime/JSObject.h:
        * runtime/JSPropertyNameIterator.h:
        * runtime/JSValue.h:
        * runtime/JSZombie.cpp:
        * runtime/MarkedBlock.cpp:
        * runtime/MarkedSpace.cpp:
        * runtime/PropertyNameArray.cpp:
        * runtime/ScopeChain.h:
        (JSC::ExecState::globalThisValue):
        * wtf/DateMath.cpp:

2011-03-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Ensure all values are correctly tagged in the registerfile
        https://bugs.webkit.org/show_bug.cgi?id=56214

        This patch makes sure that all JSCell pointers written to
        the registerfile are correctly tagged as JSCells, and replaces
        raw int usage with the immediate representation.

        For performance, register pressure, and general saneness reasons
        I've added abstractions for reading and writing the tag
        and payload of integer registers directly for the JSVALUE64
        encoding.

        * interpreter/Register.h:
        (JSC::Register::withInt):
        (JSC::Register::withCallee):
        (JSC::Register::operator=):
        (JSC::Register::i):
        (JSC::Register::activation):
        (JSC::Register::function):
        (JSC::Register::propertyNameIterator):
        (JSC::Register::scopeChain):
        * jit/JIT.h:
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCall):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::compileOpCallVarargs):
        (JSC::JIT::compileOpCall):
        (JSC::JIT::compileOpCallSlowCase):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitPutToCallFrameHeader):
        (JSC::JIT::emitPutCellToCallFrameHeader):
        (JSC::JIT::emitPutIntToCallFrameHeader):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::privateCompileCTINativeCall):
        (JSC::JIT::emit_op_get_pnames):
        (JSC::JIT::emit_op_next_pname):
        (JSC::JIT::emit_op_load_varargs):
        (JSC::JIT::emitSlow_op_load_varargs):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::privateCompileCTINativeCall):
        (JSC::JIT::emit_op_get_pnames):
        (JSC::JIT::emit_op_next_pname):
        * jit/JSInterfaceJIT.h:
        (JSC::JSInterfaceJIT::intPayloadFor):
        (JSC::JSInterfaceJIT::intTagFor):
        * jit/SpecializedThunkJIT.h:
        (JSC::SpecializedThunkJIT::returnJSValue):
        (JSC::SpecializedThunkJIT::returnDouble):
        (JSC::SpecializedThunkJIT::returnInt32):
        (JSC::SpecializedThunkJIT::returnJSCell):

2011-03-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Introduce project_dir variable and make paths a whole lot saner. Ok, a little bit saner.
        https://bugs.webkit.org/show_bug.cgi?id=56231

        * JavaScriptCore.gypi: Added project_dir variable.
        * gyp/JavaScriptCore.gyp: Changed to use project_dir, rather than DEPTH/JavaScriptCore.
        * gyp/generate-dtrace-header.sh: Changed to use project_dir.

2011-03-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        Start using derived sources correctly and link minidom with JavaScriptCore gyp project.
        https://bugs.webkit.org/show_bug.cgi?id=56217

        * gyp/JavaScriptCore.gyp: Added derived source files and passing of shared directory
            to the scripts.
        * gyp/generate-derived-sources.sh: Changed to use passed directory.
        * gyp/generate-dtrace-header.sh: Ditto.

2011-03-11  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8955589> Adopt AVFoundation media back end on Lion.

        No new tests, existing media tests cover this.

        * JavaScriptCore.exp: Export cancelCallOnMainThread
        * wtf/Platform.h: Define WTF_USE_AVFOUNDATION.

2011-03-11  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        Tweak dylib paths and add dtrace header generation action to JavaScriptCore gyp project.
        https://bugs.webkit.org/show_bug.cgi?id=56207

        * JavaScriptCore.gypi: Added Tracing.d to the sources.
        * gyp/generate-dtrace-header.sh: Added.
        * gyp/JavaScriptCore.gyp: Updated dylib paths (now the project can see them),
            and added DTrace header generating step.

2011-03-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Fix allocation of native function with a cached thunk
        https://bugs.webkit.org/show_bug.cgi?id=56127

        Fix this race condition found while fixing zombies.

        * collector/handles/HandleHeap.cpp:
        (JSC::HandleHeap::clearWeakPointers):
        * runtime/Heap.cpp:
        (JSC::Heap::reset):
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::markChildren):
        * runtime/JSValue.h:
        (JSC::JSValue::decode):
        * runtime/JSZombie.cpp:
        (JSC::JSZombie::leakedZombieStructure):
        * runtime/JSZombie.h:
        (JSC::JSZombie::createStructure):
        * runtime/MarkedBlock.cpp:

2011-03-10  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Andreas Kling.

        [Qt] fast/workers/stress-js-execution.html is crashing on Qt bot (intermittently)
        https://bugs.webkit.org/show_bug.cgi?id=33008

        Defining WTF_USE_PTHREAD_BASED_QT=1 for platforms where QThread uses pthread internally.
        Symbian is excluded because pthread_kill does not work on it. Mac is excluded because
        it has its own ways to do JSC threading.

        Defining WTF_USE_PTHREADS inside MachineStackMarker.cpp if USE(PTHREAD_BASED_QT) is true.

        * runtime/MachineStackMarker.cpp:
        * wtf/Platform.h:

2011-03-10  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 56077 - ES5 conformance issues with RegExp.prototype

        There are three issues causing test failures in sputnik.

        (1) lastIndex should be converted at the point it is used, not the point it is set (this is visible if valueOf is overridden).
        (2) The 'length' property of the test/exec functions should be 1.
        (3) If no input is specified, the input to test()/exec() is "undefined" (i.e. ToString(undefined)) - not RegExp.input.

        * runtime/RegExpObject.cpp:
        (JSC::RegExpObject::markChildren):
            - Added to mark lastIndex
        (JSC::regExpObjectLastIndex):
        (JSC::setRegExpObjectLastIndex):
            - lastIndex is now stored as a JSValue.
        (JSC::RegExpObject::match):
            - Use accessor methods to get/set lastIndex, add fast case for isUInt32 (don't convert to double).
        * runtime/RegExpObject.h:
        (JSC::RegExpObject::setLastIndex):
        (JSC::RegExpObject::setLastIndex):
            - Set lastIndex, either from a size_t or a JSValue.
        (JSC::RegExpObject::getLastIndex):
            - Get lastIndex.
        (JSC::RegExpObject::RegExpObjectData::RegExpObjectData):
            - Initialize as a JSValue.
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::RegExpPrototype):
            - Add test/exec properties with length 1.
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):
            - Do not read RegExp.input if none is provided.
        * tests/mozilla/js1_2/regexp/RegExp_input.js:
        * tests/mozilla/js1_2/regexp/RegExp_input_as_array.js:
            - Update these tests (they relied on non-ES5 behaviour).

2011-03-10  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Rolled back in 80277 and 80280 with event handler layout test failures fixed.
        https://bugs.webkit.org/show_bug.cgi?id=55653        

        The failures were caused by a last minute typo: assigning to currentEvent
        instead of m_currentEvent.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecompiler/BytecodeGenerator.cpp:
        * jit/JITOpcodes.cpp:
        * jit/JITOpcodes32_64.cpp:
        * runtime/Arguments.h:
        * runtime/JSActivation.cpp:
        * runtime/JSActivation.h:
        * runtime/JSCell.h:
        * runtime/JSGlobalObject.cpp:
        * runtime/JSGlobalObject.h:
        * runtime/JSObject.cpp:
        * runtime/JSStaticScopeObject.cpp:
        * runtime/JSStaticScopeObject.h:
        * runtime/JSVariableObject.h:
        * runtime/MarkedSpace.cpp:
        * runtime/MarkedSpace.h:

2011-03-09  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        jquery/manipulation.html fails after r80598
        https://bugs.webkit.org/show_bug.cgi?id=56019

        When linking a call, codeblock now takes ownership of the linked function
        This removes the need for unlinking, and thus the incorrectness that was
        showing up in these tests.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::~CodeBlock):
        (JSC::CodeBlock::markAggregate):
        * bytecode/CodeBlock.h:
        (JSC::CallLinkInfo::CallLinkInfo):
        (JSC::CallLinkInfo::setUnlinked):
        (JSC::CodeBlock::addCaller):
        * jit/JIT.cpp:
        (JSC::JIT::privateCompile):
        (JSC::JIT::linkCall):
        (JSC::JIT::linkConstruct):
        * jit/JIT.h:
        * runtime/Executable.cpp:
        * runtime/Executable.h:

2011-03-09  Daniel Bates  <dbates@rim.com>

        Attempt to fix the WinCE build after changeset 80684 <http://trac.webkit.org/changeset/80684>
        (Bug #56041<https://bugs.webkit.org/show_bug.cgi?id=56041>).

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute): Substitute variable callFrame for exec in call to createSyntaxError().

2011-03-09  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 56041 - RexExp constructor should only accept flags "gim"
        Fix for issues introduced in r80667.

        Invalid flags to a RegExp literal are a late syntax error!

        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::addRegExp):
            - Pass a PassRefPtr<RegExp>
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::addRegExp):
        (JSC::BytecodeGenerator::emitNewRegExp):
        * bytecompiler/BytecodeGenerator.h:
            - Pass a PassRefPtr<RegExp>
        * bytecompiler/NodesCodegen.cpp:
        (JSC::RegExpNode::emitBytecode):
            - Should not be ASSERTing that the flags are valid - this is a late(er) error.
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
            - Need to check for error from RegExp constructor.
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
            - Need to check for error from RegExp constructor.
        * runtime/RegExp.h:
        (JSC::RegExp::isValid):
            - Make isValid check that the regexp was created with valid flags.
        * runtime/RegExpKey.h:
            - Since we'll not create RegExp objects with invalid flags, separate out the deleted value.

2011-03-09  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix part 2.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-03-09  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix part 1.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-03-09  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Darin Adler.

        Bug 56041 - RexExp constructor should only accept flags "gim"
        We also should be passing the flags around as a bitfield rather than a string,
        and should not have redundant, incompatible code for converting the string to a bitfield!

        * JavaScriptCore.exp:
        * bytecompiler/NodesCodegen.cpp:
        (JSC::RegExpNode::emitBytecode):
            - Need to parse flags string to enum.
        * runtime/RegExp.cpp:
        (JSC::regExpFlags):
        (JSC::RegExp::RegExp):
        (JSC::RegExp::create):
            - Add method to parse flags string to enum, change constructor/create args to take enum.
        * runtime/RegExp.h:
        (JSC::RegExp::global):
        (JSC::RegExp::ignoreCase):
        (JSC::RegExp::multiline):
            - Change to use new enum values.
        * runtime/RegExpCache.cpp:
        (JSC::RegExpCache::lookupOrCreate):
        (JSC::RegExpCache::create):
        * runtime/RegExpCache.h:
            - Changed to use regExpFlags enum instead of int/const UString&.
        * runtime/RegExpConstructor.cpp:
        (JSC::constructRegExp):
            - Add use new enum parsing, check for error.
        * runtime/RegExpKey.h:
        (JSC::RegExpKey::RegExpKey):
        * runtime/RegExpPrototype.cpp:
        (JSC::RegExpPrototype::RegExpPrototype):
            - Pass NoFlags value instead of empty string.
        (JSC::regExpProtoFuncCompile):
            - Add use new enum parsing, check for error.
        * runtime/StringPrototype.cpp:
        (JSC::stringProtoFuncMatch):
        (JSC::stringProtoFuncSearch):
            - Pass NoFlags value instead of empty string.

2011-03-08  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig

        Bug 55994 - Functions on Array.prototype should check length first.
        These methods are designed to work on generic objects too, and if 'length'
        is a getter that throws an exception, ensure this is correctly thrown
        (even if other exceptions would be thrown, too).

        Make the length check the first thing we do.
        This change shows a progression on SunSpider on my machine, but this is likely bogus.

        * runtime/ArrayPrototype.cpp:
        (JSC::arrayProtoFuncToString):
        (JSC::arrayProtoFuncToLocaleString):
        (JSC::arrayProtoFuncJoin):
        (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):

2011-03-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make CodeBlock GC write barrier safe
        https://bugs.webkit.org/show_bug.cgi?id=55910

        In order to make CodeBlock WriteBarrier safe it was necessary
        to make it have a single GC owner, and for that reason I have
        made ExecutableBase a GC allocated object.  This required
        updating their creation routines as well as all sites that hold
        a reference to them.  GC objects that held Executable's have been
        converted to WriteBarriers, and all other sites now use Global<>.

        As an added benefit this gets rid of JSGlobalData's list of
        GlobalCodeBlocks.

        Perf testing shows a 0.5% progression on v8, vs. a 0.3% regression
        on SunSpider.  Given none of the tests that show regressions
        demonstrate a regression on their own, and sampling shows up nothing.
        I suspect we're just getting one or two additional gc passes at
        the end of the run.

        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::dump):
        (JSC::CodeBlock::CodeBlock):
        (JSC::EvalCodeCache::markAggregate):
        (JSC::CodeBlock::markAggregate):
        * bytecode/CodeBlock.h:
        (JSC::CodeBlock::ownerExecutable):
        (JSC::CodeBlock::addConstant):
        (JSC::CodeBlock::constantRegister):
        (JSC::CodeBlock::getConstant):
        (JSC::CodeBlock::addFunctionDecl):
        (JSC::CodeBlock::addFunctionExpr):
        (JSC::GlobalCodeBlock::GlobalCodeBlock):
        (JSC::ExecState::r):
        * bytecode/EvalCodeCache.h:
        (JSC::EvalCodeCache::get):
        * bytecode/SamplingTool.h:
        (JSC::ScriptSampleRecord::ScriptSampleRecord):
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::addConstantValue):
        (JSC::BytecodeGenerator::emitEqualityOp):
        * bytecompiler/BytecodeGenerator.h:
        (JSC::BytecodeGenerator::makeFunction):
        * debugger/Debugger.cpp:
        (JSC::evaluateInGlobalCallFrame):
        * debugger/DebuggerCallFrame.cpp:
        (JSC::DebuggerCallFrame::evaluate):
        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::callEval):
        * jit/JITInlineMethods.h:
        (JSC::JIT::emitLoadDouble):
        (JSC::JIT::emitLoadInt32ToDouble):
        * jit/JITStubs.cpp:
        (JSC::JITThunks::JITThunks):
        (JSC::JITThunks::hostFunctionStub):
        (JSC::JITThunks::clearHostFunctionStubs):
        * jit/JITStubs.h:
        * runtime/Completion.cpp:
        (JSC::checkSyntax):
        (JSC::evaluate):
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::EvalExecutable):
        (JSC::ProgramExecutable::ProgramExecutable):
        (JSC::FunctionExecutable::FunctionExecutable):
        (JSC::FunctionExecutable::~FunctionExecutable):
        (JSC::EvalExecutable::markChildren):
        (JSC::ProgramExecutable::markChildren):
        (JSC::FunctionExecutable::markChildren):
        (JSC::FunctionExecutable::fromGlobalCode):
        * runtime/Executable.h:
        (JSC::ExecutableBase::ExecutableBase):
        (JSC::ExecutableBase::createStructure):
        (JSC::NativeExecutable::create):
        (JSC::NativeExecutable::NativeExecutable):
        (JSC::VPtrHackExecutable::VPtrHackExecutable):
        (JSC::ScriptExecutable::ScriptExecutable):
        (JSC::EvalExecutable::create):
        (JSC::EvalExecutable::createStructure):
        (JSC::ProgramExecutable::create):
        (JSC::ProgramExecutable::createStructure):
        (JSC::FunctionExecutable::create):
        (JSC::FunctionExecutable::createStructure):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        * runtime/Heap.cpp:
        (JSC::Heap::destroy):
        (JSC::Heap::markRoots):
        * runtime/Heap.h:
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::JSActivation):
        (JSC::JSActivation::markChildren):
        * runtime/JSActivation.h:
        (JSC::JSActivation::JSActivationData::JSActivationData):
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::~JSFunction):
        (JSC::JSFunction::markChildren):
        * runtime/JSFunction.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::storeVPtrs):
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::getHostFunction):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * runtime/JSObject.cpp:
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::markChildren):
        * runtime/JSStaticScopeObject.h:
        (JSC::JSStaticScopeObject::JSStaticScopeObjectData::JSStaticScopeObjectData):
        (JSC::JSStaticScopeObject::JSStaticScopeObject):
        * runtime/JSZombie.cpp:
        (JSC::JSZombie::leakedZombieStructure):
        * runtime/JSZombie.h:
        (JSC::JSZombie::createStructure):
        * runtime/MarkedSpace.h:

2011-03-07  Andy Estes  <aestes@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION (r79060): Timestamp is missing from tweets in twitter.
        https://bugs.webkit.org/show_bug.cgi?id=55228

        A change to the date parser to handle the case where the year is
        specified before the time zone inadvertently started accepting strings
        such as '+0000' as valid years. Those strings actually represent time
        zones in an offset of hours and minutes from UTC, not years.

        * wtf/DateMath.cpp:
        (WTF::parseDateFromNullTerminatedCharacters): If the current character
        in dateString is '+' or '-', do not try to parse the next token as a
        year.

2011-03-06  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        Add SHA-1 for new WebSocket protocol
        https://bugs.webkit.org/show_bug.cgi?id=55039

        The code is based on Chromium's portable SHA-1 implementation
        (src/base/sha1_portable.cc). Modifications were made in order
        to make the code comply with WebKit coding style.

        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * wtf/CMakeLists.txt:
        * wtf/MD5.cpp:
        (WTF::MD5::MD5):
        * wtf/SHA1.cpp: Added.
        (WTF::testSHA1): This function will be run the first time SHA1
        constructor is called. This function computes a few hash values
        and checks the results in debug builds. However, constructor is
        probably not a good place to run these tests, so we need to find
        a good place for it (bug 55853).
        (WTF::expectSHA1):
        (WTF::f):
        (WTF::k):
        (WTF::rotateLeft):
        (WTF::SHA1::SHA1):
        (WTF::SHA1::addBytes):
        (WTF::SHA1::computeHash):
        (WTF::SHA1::finalize):
        (WTF::SHA1::processBlock):
        (WTF::SHA1::reset):
        * wtf/SHA1.h: Added.
        (WTF::SHA1::addBytes):
        * wtf/wtf.pri:

2011-03-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add Derived Sources to WebCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=55813

        Rename the action to be friendlier.

        * gyp/JavaScriptCore.gyp:

2011-03-04  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Need symbian version of cryptographicallyRandomValuesFromOS
        https://bugs.webkit.org/show_bug.cgi?id=55782

        Implement Symbian version of cryptographicallyRandomValuesFromOS

        * wtf/OSRandomSource.cpp:
        (WTF::cryptographicallyRandomValuesFromOS):

2011-03-04  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Cameron Zwarich.

        Bug 55815 - Should throw an exception from JSObject::defineOwnProperty if !isExtensible().

        * runtime/JSObject.cpp:
        (JSC::JSObject::defineOwnProperty):
            Add missing check.

2011-03-04  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by olliej.

        Bug 54945 - The web page hangs towards the end of page load in Interpreter enabled javascript code in the latest webkit trunk.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::privateExecute):
            (1) don't infinite loop.
            (2) goto 1.

2011-03-04  Gavin Barraclough  <barraclough@apple.com>

        cmake build fix.

        * CMakeLists.txt:

2011-03-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add Copy Files step to JavaScriptCore GYP build for apitest and minidom
        https://bugs.webkit.org/show_bug.cgi?id=55798

        * JavaScriptCore.gypi:
        * gyp/JavaScriptCore.gyp:

2011-03-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Remove unneeded round-trips through ../Source in the Chromium GYP build
        https://bugs.webkit.org/show_bug.cgi?id=55795

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2011-03-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Use target_defaults to reduce boilerplate in GYP build system
        https://bugs.webkit.org/show_bug.cgi?id=55790

        Instead of setting up the configuration in each target, just defer to
        target_defaults.  Also, removed a define that was redundant with the
        xcconfig.

        * gyp/JavaScriptCore.gyp:

2011-03-03  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 55736 - Implement seal/freeze/preventExtensions for normal object types.
        Provide basic functionallity from section 15.2.4 of ECMA-262.
        This support will need expanding to cover arrays, too.

        Shows a 0.5% progression on SunSpidey, this seems to be due to changing
        ObjectConstructor to use a static table.

        * DerivedSources.make:
        * JavaScriptCore.exp:
        * interpreter/CallFrame.h:
        (JSC::ExecState::objectConstructorTable):
            Add a static table for ObjectConstructor.
        * runtime/CommonIdentifiers.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        (JSC::JSGlobalData::~JSGlobalData):
            Add a static table for ObjectConstructor.
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::reset):
            Add a static table for ObjectConstructor.
        * runtime/JSObject.cpp:
        (JSC::JSObject::seal):
        (JSC::JSObject::freeze):
        (JSC::JSObject::preventExtensions):
            Transition the object's structure.
        (JSC::JSObject::defineOwnProperty):
            Check isExtensible.
        * runtime/JSObject.h:
        (JSC::JSObject::isSealed):
        (JSC::JSObject::isFrozen):
        (JSC::JSObject::isExtensible):
            These wrap method on structure.
        (JSC::JSObject::putDirectInternal):
            Check isExtensible.
        * runtime/ObjectConstructor.cpp:
        (JSC::ObjectConstructor::ObjectConstructor):
        (JSC::ObjectConstructor::getOwnPropertySlot):
        (JSC::ObjectConstructor::getOwnPropertyDescriptor):
            Change ObjectConstructor to use a static table.
        (JSC::objectConstructorSeal):
        (JSC::objectConstructorFreeze):
        (JSC::objectConstructorPreventExtensions):
        (JSC::objectConstructorIsSealed):
        (JSC::objectConstructorIsFrozen):
        (JSC::objectConstructorIsExtensible):
            Add new methods on Object.
        * runtime/ObjectConstructor.h:
        (JSC::ObjectConstructor::createStructure):
        * runtime/Structure.cpp:
        (JSC::Structure::Structure):
            init/propagate  m_preventExtensions
        (JSC::Structure::sealTransition):
        (JSC::Structure::freezeTransition):
        (JSC::Structure::preventExtensionsTransition):
            transition the structure, materializing the property map, setting m_preventExtensions & changing attributes.
        (JSC::Structure::isSealed):
        (JSC::Structure::isFrozen):
            check attributes to detect if object is sealed/frozen.
        * runtime/Structure.h:
        (JSC::Structure::isExtensible):
            checks the m_preventExtensions flag.

2011-03-04  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Jon Honeycutt.

        Adopt VersionStamper tool for Windows WebKit DLLs
        https://bugs.webkit.org/show_bug.cgi?id=55784
        <rdar://problem/9021273>
        
        We now use a tool to stamp the version number onto the Apple WebKit DLLs
        during the post-build step.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc: Removed.
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePostBuild.cmd:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCorePreBuild.cmd:

2011-03-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        JavaScriptCore GYP build should use a header map
        https://bugs.webkit.org/show_bug.cgi?id=55712

        This patch moves the os-win32 files into their own variable so that we
        can use a header map in the Apple Mac Xcode build.  The problem is that
        the header map searches the whole project rather than just the files
        included in a given target.  Another solution to this problem is to
        make GYP smarter about filtering out what files are added to the
        project file.

        * JavaScriptCore.gypi:
        * gyp/JavaScriptCore.gyp:

2011-03-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Remove LOOSE_PASS_OWN_ARRAY_PTR from PassOwnArrayPtr.h
        https://bugs.webkit.org/show_bug.cgi?id=55554

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::copyGlobalsTo): Pass nullptr instead of 0.
        (JSC::JSGlobalObject::resizeRegisters): Ditto; also use OwnArrayPtr instead of a raw pointer.
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::addStaticGlobals): Ditto.
        * wtf/PassOwnArrayPtr.h: Removed #define LOOSE_PASS_OWN_ARRAY_PTR
        (WTF::PassOwnArrayPtr::PassOwnArrayPtr): Added a constructor that takes nullptr_t.

2011-03-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add jsc to JavaScriptCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=55711

        * JavaScriptCore.gypi:
            - Move jsc.cpp into jsc_files because it's really part of the jsc
              target.
        * JavaScriptCore.xcodeproj/project.pbxproj:
            - Remove extraneous files from the normal jsc build.  I probably
              added these by mistake at some point.
        * gyp/JavaScriptCore.gyp:
            - Add the jsc target to the GYP file.

2011-03-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add testapi to JavaScriptCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=55707

        The new testapi target is slightly incomplete.  There's a resource
        copying step that we don't quite have yet.

        This patch also cleans up some of the configuration issues in
        JavaScriptCore.xcodeproj.  It seems kind of wordy to repeat these for
        each target.  I suspect there's a more compact way of defining the
        configurations, but this removes the "Default" configuration, which is
        progress.

        * JavaScriptCore.gypi:
        * gyp/JavaScriptCore.gyp:

2011-03-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Teach JavaScriptCore GYP build about private headers
        https://bugs.webkit.org/show_bug.cgi?id=55532

        This patch distinguishes between public and private framework headers
        so that public headers are copied into the Headers directory and
        private headers are copied into the PrivateHeaders directory.

        * gyp/JavaScriptCore.gyp:

2011-03-03  Geoffrey Garen  <ggaren@apple.com>

        Rolled out 80277 and 80280 because they caused event handler layout test
        failures.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecompiler/BytecodeGenerator.cpp:
        * jit/JITOpcodes.cpp:
        * jit/JITOpcodes32_64.cpp:
        * runtime/Arguments.h:
        * runtime/JSActivation.cpp:
        * runtime/JSActivation.h:
        * runtime/JSCell.h:
        * runtime/JSGlobalObject.cpp:
        * runtime/JSGlobalObject.h:
        * runtime/JSObject.cpp:
        * runtime/JSStaticScopeObject.cpp:
        * runtime/JSStaticScopeObject.h:
        * runtime/JSVariableObject.h:
        * runtime/MarkedSpace.cpp:
        * runtime/MarkedSpace.h:

2011-03-03  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix. Alter order of headers included to make sure windows.h
        is configured by wx, and skip Posix implementation file we don't use on Win.

        * wscript:
        * wtf/wx/StringWx.cpp:

2011-03-03  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        JSVariableObject needs to use WriteBarrier for symboltable property storage
        https://bugs.webkit.org/show_bug.cgi?id=55698

        Replace the direct usage of Register in JSVariableObject (and descendents)
        with WriteBarrier.  This requires updating the Arguments object to use
        WriteBarrier as well.

        * interpreter/Interpreter.cpp:
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::privateExecute):
        (JSC::Interpreter::retrieveArguments):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * runtime/ArgList.h:
        (JSC::MarkedArgumentBuffer::initialize):
        * runtime/Arguments.cpp:
        (JSC::Arguments::markChildren):
        (JSC::Arguments::copyToRegisters):
        (JSC::Arguments::fillArgList):
        (JSC::Arguments::getOwnPropertySlot):
        (JSC::Arguments::getOwnPropertyDescriptor):
        (JSC::Arguments::put):
        * runtime/Arguments.h:
        (JSC::Arguments::setActivation):
        (JSC::Arguments::Arguments):
        (JSC::Arguments::copyRegisters):
        (JSC::JSActivation::copyRegisters):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::markChildren):
        (JSC::JSActivation::symbolTableGet):
        (JSC::JSActivation::symbolTablePut):
        (JSC::JSActivation::symbolTablePutWithAttributes):
        (JSC::JSActivation::put):
        (JSC::JSActivation::putWithAttributes):
        (JSC::JSActivation::argumentsGetter):
        * runtime/JSActivation.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::put):
        (JSC::JSGlobalObject::putWithAttributes):
        (JSC::JSGlobalObject::markChildren):
        (JSC::JSGlobalObject::copyGlobalsFrom):
        (JSC::JSGlobalObject::copyGlobalsTo):
        (JSC::JSGlobalObject::resizeRegisters):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::setRegisters):
        (JSC::JSGlobalObject::addStaticGlobals):
        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::put):
        (JSC::JSStaticScopeObject::putWithAttributes):
        * runtime/JSVariableObject.cpp:
        (JSC::JSVariableObject::symbolTableGet):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::registerAt):
        (JSC::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
        (JSC::JSVariableObject::symbolTableGet):
        (JSC::JSVariableObject::symbolTablePut):
        (JSC::JSVariableObject::symbolTablePutWithAttributes):
        (JSC::JSVariableObject::copyRegisterArray):
        (JSC::JSVariableObject::setRegisters):

2011-03-03  Geoffrey Garen  <ggaren@apple.com>

        Try to fix Windows build.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed obsolete symbol.

        * runtime/JSStaticScopeObject.cpp:
        (JSC::JSStaticScopeObject::getOwnPropertySlot): Don't mark this function
        inline -- it's virtual.

2011-03-02  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Moved all variable object storage inline -- upping the object size limit to 1K
        https://bugs.webkit.org/show_bug.cgi?id=55653

        * JavaScriptCore.exp:
        * bytecompiler/BytecodeGenerator.cpp:
        * jit/JITOpcodes.cpp:
        * runtime/Arguments.h:
        * runtime/JSActivation.h: Removed out-of-line storage. Changed d-> to m_.

        * runtime/JSCell.h:
        (JSC::JSCell::MarkedSpace::sizeClassFor): Added an imprecise size class
        to accomodate objects up to 1K.

        * runtime/JSGlobalObject.cpp:
        * runtime/JSGlobalObject.h: Removed out-of-line storage. Changed d-> to m_.

        * runtime/JSObject.cpp: Don't ASSERT that JSFinalObject fills the maximum
        object size, since it doesn't anymore.

        * runtime/JSStaticScopeObject.cpp:
        * runtime/JSStaticScopeObject.h:
        * runtime/JSVariableObject.h: Removed out-of-line storage. Changed d-> to m_.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::reset):
        * runtime/MarkedSpace.h: Added an imprecise size class to accomodate objects up to 1K.

2011-03-03  Timothy Hatcher  <timothy@apple.com>

        Make APIShims usable from WebCore.

        Reviewed by Oliver Hunt.

        * ForwardingHeaders/JavaScriptCore/APIShims.h: Added.
        * GNUmakefile.am:
        * JavaScriptCore.exp:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-03-03  Peter Varga  <pvarga@webkit.org>

        Reviewed by Oliver Hunt.

        Begin Characters Optimization Causes YARR Interpreter Errors
        https://bugs.webkit.org/show_bug.cgi?id=55479

        The addBeginTerm function is removed because it doesn't correctly handle those
        cases when an "invalid" term has been
        collected (e.g. CharacterClass). Move the removed function to the
        setupAlternativeBeginTerms method's switch-case
        where the non-allowed cases are correctly handled.

        Reenable the Beginning Character Optimization in the YARR Interpreter again.

        * yarr/YarrPattern.cpp:
        (JSC::Yarr::YarrPatternConstructor::setupAlternativeBeginTerms):
        (JSC::Yarr::YarrPattern::compile):

2011-03-02  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Adam Roben.

        WebKit2: Use CFNetwork Sessions API.
        https://bugs.webkit.org/show_bug.cgi?id=55435

        Add the ability to create a Private Browsing storage session.

        * wtf/Platform.h:
        Add a new #define for using CF Storage Sessions.

2011-03-02  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Remove "register slot" concept from PropertySlot
        https://bugs.webkit.org/show_bug.cgi?id=55621

        PropertySlot had already stopped storing Register "slots"
        so this patch is simply removing that api entirely.
        This exposed a problem in the ProgramNode constructor for
        BytecodeGenerator where it reads from the registerfile
        before it has initialised it.

        This bug wasn't a problem before as we were merely testing
        for property existence rather than the actual value, and
        used to work because setRegisterSlot didn't check that the
        provided slot contained an initialised value.

        To get around this issue we now use symbolTableHasProperty
        to do the symbol table check without trying to read the
        RegisterFile.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator):
        * runtime/Arguments.cpp:
        (JSC::Arguments::getOwnPropertySlot):
        * runtime/JSActivation.cpp:
        (JSC::JSActivation::symbolTableGet):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::symbolTableHasProperty):
        * runtime/JSVariableObject.h:
        (JSC::JSVariableObject::symbolTableGet):
        * runtime/PropertySlot.h:

2011-03-02  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Add feature define for data transfer items
        https://bugs.webkit.org/show_bug.cgi?id=55510

        * Configurations/FeatureDefines.xcconfig:
        * wtf/Platform.h:

2011-03-02  Adam Roben  <aroben@apple.com>

        Delete old .res files whenever any .vsprops file changes

        Prospective fix for <http://webkit.org/b/55599> r80079 caused incremental Windows builds to
        fail

        Reviewed by Tony Chang.

        * JavaScriptCore.vcproj/JavaScriptCore/react-to-vsprops-changes.py:
        (main): Restructured code to loop over a set of file extensions, deleting any old files that
        have that extension. Now deletes .res files, too. (We previously deleted any file matching
        *.manifest*, but that turned out to just be the union of *.manifest and *.res.)

2011-03-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Teach JavaScriptCore GYP build how to build minidom
        https://bugs.webkit.org/show_bug.cgi?id=55536

        * JavaScriptCore.gypi:
        * gyp/JavaScriptCore.gyp:

2011-03-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        JavaScriptCore GYP build should copy some headers into the target framework
        https://bugs.webkit.org/show_bug.cgi?id=55524

        After this patch, all the framework headers are exported as public
        headers.  We need to teach GYP how to handle private headers.

        I struggled to determine how to store the information about whether a
        header was public, private, or project (i.e., not exported).
        Generally, the GYPI should just list the files, but it seemed siliy to
        have an almost duplicated list of files in the GYP file itself.  If
        this design doesn't scale, we might have to revisit it in the future.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:
        * JavaScriptCore.gypi:
        * gyp/JavaScriptCore.gyp:

2011-03-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r80079.
        http://trac.webkit.org/changeset/80079
        https://bugs.webkit.org/show_bug.cgi?id=55547

        "Broke the Win debug build?" (Requested by dcheng on #webkit).

        * wtf/Platform.h:

2011-03-01  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by David Levin.

        Add feature define for data transfer items
        https://bugs.webkit.org/show_bug.cgi?id=55510

        * wtf/Platform.h:

2011-03-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Joseph Pecoraro.

        Misaligned memory access in CloneDeserializer on all ARM arch.
        https://bugs.webkit.org/show_bug.cgi?id=48742

        Add a CPU class for architectures that need aligned addresses
        for memory access.

        * wtf/Platform.h:

2011-03-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Add pre- and post-build actions for JavaScriptCore GYP build
        https://bugs.webkit.org/show_bug.cgi?id=55507

        After this patch, we have all the steps for building the main
        JavaScriptCore framework except the "copy headers" step, which I'll do
        next.

        * gyp/JavaScriptCore.gyp:

2011-03-01  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Rolled back in r79627 now that the underlying cause for it crashing is fixed.
        https://bugs.webkit.org/show_bug.cgi?id=55159

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/Heap.cpp:
        (JSC::Heap::allocateSlowCase):
        * runtime/Heap.h:
        * runtime/JSCell.h:
        (JSC::JSCell::MarkedSpace::sizeClassFor):
        (JSC::JSCell::Heap::allocate):
        (JSC::JSCell::JSCell::operator new):
        * runtime/MarkedBlock.h:
        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::allocateBlock):
        (JSC::MarkedSpace::reset):
        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::SizeClass::SizeClass):

2011-03-01  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Replace two script phases that do nothing but copy files with copy files build phases.

        This speeds up the build by a few seconds on high-end Mac Pros.

        * JavaScriptCore.xcodeproj/project.pbxproj:

2011-03-01  David Kilzer  <ddkilzer@apple.com>

        Spring cleaning!

        Rubber-stamped by Mark Rowe.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        (Copy Into Framework): Remove "set -x" and its comment.

2011-03-01  Michael Saboff  <msaboff@apple.com>

        Reviewed by Darin Adler.

        TinyMCE not working in nightlies
        https://bugs.webkit.org/show_bug.cgi?id=54978

        Disabling setupBeginChars() to temporarily work arround the test 
        failure.  Filed https://bugs.webkit.org/show_bug.cgi?id=55479
        to track fixing the issue.

        * yarr/YarrPattern.cpp:
        (JSC::Yarr::YarrPattern::compile):

2011-02-23  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Viewport parsing no longer accepts "1.0;" value as valid.
        https://bugs.webkit.org/show_bug.cgi?id=53705

        Include a didReadNumber parameter to String -> float / double
        conversion functions. This way, if the "ok" boolean out
        parameter is false, you can check to see if there in fact
        was a valid number parsed with garbage at the end. Examples
        of that would be parsing "123x456" would have ok = false,
        but didReadNumber = true.

        * JavaScriptCore.exp:
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::toDouble):
        (WTF::StringImpl::toFloat):
        * wtf/text/StringImpl.h:
        * wtf/text/WTFString.cpp:
        (WTF::String::toDouble):
        (WTF::String::toFloat):
        (WTF::charactersToDouble):
        (WTF::charactersToFloat):
        * wtf/text/WTFString.h:

2011-02-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Gavin Barraclough.

        Past-the-end writes in VM exceptions (caused crashes in r79627)
        https://bugs.webkit.org/show_bug.cgi?id=55448
        
        Some exceptions had the wrong structures, so they misoverestimated their
        inline storage sizes.

        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData): Use the right structure.

        * runtime/JSObject.h:
        (JSC::JSNonFinalObject::JSNonFinalObject):
        (JSC::JSFinalObject::JSFinalObject): ASSERT that our structure capacity
        is correct to verify this doesn't happen again.

2011-03-01  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt] Clean up the project files and move common options to WebKit.pri.

        * JavaScriptCore.pri: Move options also needed in WebCore into WebKit.pri.
        * JavaScriptCore.pro: Deduplicate options.
        * jsc.pro: Ditto.

2011-03-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Teach JavaScriptCore GYP build about DEPTH
        https://bugs.webkit.org/show_bug.cgi?id=55425

        In addition to teaching the JavaScriptCore GYP build about DEPTH, this
        change overrides the GCC warning configuration to disable a warning
        that's causing probems in Assertions.cpp.  With that warning disabled,
        JavaScriptCore builds again.

        * gyp/JavaScriptCore.gyp:

2011-02-28  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-02-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79948.
        http://trac.webkit.org/changeset/79948
        https://bugs.webkit.org/show_bug.cgi?id=55439

        "caused crashes on the SL release bot" (Requested by ggaren on
        #webkit).

        * runtime/JSGlobalData.h:
        * runtime/WriteBarrier.h:

2011-02-28  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-02-28  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig & Darin Adler.

        Bug 55423 - Clean up property tables in Structure

        Encapsulate, reduce duplication of table search code,
        and reduce the size of the tables (remove the index,
        just maintain the tables in the correct order).

        Shows a 0.5% - 1% progression on sunspider.

        * JavaScriptCore.exp:
        * runtime/PropertyMapHashTable.h:
        (JSC::isPowerOf2):
        (JSC::nextPowerOf2):
            bit ops used to calculate table size.
        (JSC::PropertyMapEntry::PropertyMapEntry):
        (JSC::PropertyTable::ordered_iterator::operator++):
        (JSC::PropertyTable::ordered_iterator::operator==):
        (JSC::PropertyTable::ordered_iterator::operator!=):
        (JSC::PropertyTable::ordered_iterator::operator*):
        (JSC::PropertyTable::ordered_iterator::operator->):
        (JSC::PropertyTable::ordered_iterator::ordered_iterator):
            implementation of the iterator types
        (JSC::PropertyTable::PropertyTable):
        (JSC::PropertyTable::~PropertyTable):
            constructors take an initial capacity for the table,
            a table to copy, or both.
        (JSC::PropertyTable::begin):
        (JSC::PropertyTable::end):
            create in-order iterators.
        (JSC::PropertyTable::find):
            search the hash table
        (JSC::PropertyTable::add):
            add a value to the hash table
        (JSC::PropertyTable::remove):
            remove a value from the hash table
        (JSC::PropertyTable::size):
        (JSC::PropertyTable::isEmpty):
            accessors.
        (JSC::PropertyTable::propertyStorageSize):
        (JSC::PropertyTable::clearDeletedOffsets):
        (JSC::PropertyTable::hasDeletedOffset):
        (JSC::PropertyTable::getDeletedOffset):
        (JSC::PropertyTable::addDeletedOffset):
            cache deleted (available) offsets in the property storage array.
        (JSC::PropertyTable::copy):
            take a copy of the PropertyTable, potentially expanding the capacity.
        (JSC::PropertyTable::sizeInMemory):
            used for DEBUG build statistics
        (JSC::PropertyTable::reinsert):
        (JSC::PropertyTable::rehash):
        (JSC::PropertyTable::tableCapacity):
        (JSC::PropertyTable::deletedEntryIndex):
        (JSC::PropertyTable::skipDeletedEntries):
        (JSC::PropertyTable::table):
        (JSC::PropertyTable::usedCount):
        (JSC::PropertyTable::dataSize):
        (JSC::PropertyTable::sizeForCapacity):
        (JSC::PropertyTable::canInsert):
            these methods provide internal implementation.
        * runtime/Structure.cpp:
        (JSC::Structure::dumpStatistics):
        (JSC::Structure::~Structure):
        (JSC::Structure::materializePropertyMap):
        (JSC::Structure::despecifyDictionaryFunction):
        (JSC::Structure::addPropertyTransition):
        (JSC::Structure::flattenDictionaryStructure):
        (JSC::Structure::copyPropertyTable):
        (JSC::Structure::get):
        (JSC::Structure::despecifyFunction):
        (JSC::Structure::despecifyAllFunctions):
        (JSC::Structure::put):
        (JSC::Structure::remove):
        (JSC::Structure::createPropertyMap):
        (JSC::Structure::getPropertyNames):
        (JSC::PropertyTable::checkConsistency):
        (JSC::Structure::checkConsistency):
            factored out code to PropertyMapHashTable.h
        * runtime/Structure.h:
        (JSC::Structure::propertyStorageSize):
        (JSC::Structure::isEmpty):
        (JSC::Structure::get):
            factored out code to PropertyMapHashTable.h

2011-02-28  Xan Lopez  <xlopez@igalia.com>

        Another fix build :(

        Fix typo.

        * runtime/MachineStackMarker.cpp:
        (JSC::freePlatformThreadRegisters):

2011-02-28  Xan Lopez  <xlopez@igalia.com>

        Unreviewed build fix for Snow Leopard.

        * runtime/MachineStackMarker.cpp:
        (JSC::freePlatformThreadRegisters):

2011-02-28  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed, fix SnowLeopard compilation after r79952.

        * runtime/MachineStackMarker.cpp:
        (JSC::freePlatformThreadRegisters):

2011-02-28  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <http://webkit.org/b/55430> OwnArrayPtr.h's LOOSE_OWN_ARRAY_PTR results in link errors.

        * wtf/OwnArrayPtr.h:
        (WTF::::set): Implement OwnArrayPtr::set.

2011-02-28  Martin Zoubek  <martin.zoubek@acision.com> and Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        Multithread support for JSC on UNIX
        https://bugs.webkit.org/show_bug.cgi?id=26838

        Implement suspendThread() and resumeThread() for systems with
        pthread.h using thread signal handler.

        * runtime/MachineStackMarker.cpp:
        (JSC::pthreadSignalHandlerSuspendResume):
        (JSC::MachineStackMarker::Thread::Thread):
        (JSC::getCurrentPlatformThread):
        (JSC::suspendThread):
        (JSC::resumeThread):
        (JSC::getPlatformThreadRegisters):
        (JSC::otherThreadStackPointer):
        (JSC::freePlatformThreadRegisters):
        (JSC::MachineStackMarker::markOtherThreadConservatively):
        * wtf/Platform.h: Added Gtk port to use
        ENABLE_JSC_MULTIPLE_THREADS.

2011-02-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Stop using DeprecatedPtr for the global exception slot
        https://bugs.webkit.org/show_bug.cgi?id=55424

        Create GCRootPtr to signify that the exception slot is
        a gcroot, and so is exempt from the usual writebarrier
        restrictions.

        * runtime/JSGlobalData.h:
        * runtime/WriteBarrier.h:
        (JSC::GCRootPtr::GCRootPtr):
        (JSC::GCRootPtr::operator=):

2011-02-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Use more xcconfig files in JavaScriptCore gyp build
        https://bugs.webkit.org/show_bug.cgi?id=55391

        The GYP experts tell me that we have have a total of two xcconfig
        files: one for the xcodeproj as a whole and one for each target.  This
        patch uses that technique to re-use the existing xcconfig files and
        eliminate the duplication.

        Technically, this patch introduces some build errors because the
        xcconfig files assume that the xcodeproj file is one level higher in
        the directory hierarchy.  Specifically, the xcodeproj file can no
        longer find the Info.plist or the prefix header.  I plan to fix that in
        a subsequent patch.

        Also, this patch introduces the Release and Production configurations,
        which should work correctly now.

        * gyp/JavaScriptCore.gyp:

2011-02-28  Jon Honeycutt  <jhoneycutt@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        Add symbol to export.

2011-02-28  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make ScopeChainNode GC allocated
        https://bugs.webkit.org/show_bug.cgi?id=55283

        Simplify lifetime and other issues with the scopechain
        by making it gc allocated.  This allows us to simplify
        function exit and unwinding, as well as making the
        current iterative refcounting go away.

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * bytecode/CodeBlock.cpp:
        (JSC::CodeBlock::createActivation):
        * bytecode/StructureStubInfo.cpp:
        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::generate):
        (JSC::BytecodeGenerator::BytecodeGenerator):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall):
        (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply):
        * bytecompiler/BytecodeGenerator.h:
        * debugger/Debugger.cpp:
        (JSC::Recompiler::operator()):
        * debugger/DebuggerCallFrame.h:
        (JSC::DebuggerCallFrame::scopeChain):
        * interpreter/CachedCall.h:
        (JSC::CachedCall::CachedCall):
        * interpreter/CallFrame.h:
        * interpreter/Interpreter.cpp:
        (JSC::depth):
        (JSC::Interpreter::unwindCallFrame):
        (JSC::Interpreter::throwException):
        (JSC::Interpreter::execute):
        (JSC::Interpreter::executeCall):
        (JSC::Interpreter::executeConstruct):
        (JSC::Interpreter::privateExecute):
        * jit/JITCall.cpp:
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::compileOpCall):
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCallInitializeCallFrame):
        (JSC::JIT::emit_op_ret):
        (JSC::JIT::emit_op_ret_object_or_this):
        (JSC::JIT::compileOpCall):
        * jit/JITOpcodes.cpp:
        (JSC::JIT::emit_op_end):
        (JSC::JIT::emit_op_ret):
        (JSC::JIT::emit_op_ret_object_or_this):
        * jit/JITOpcodes32_64.cpp:
        (JSC::JIT::emit_op_end):
        * jit/JITStubs.cpp:
        (JSC::DEFINE_STUB_FUNCTION):
        * jit/JITStubs.h:
        * runtime/ArgList.cpp:
        * runtime/Completion.cpp:
        (JSC::evaluate):
        * runtime/Completion.h:
        * runtime/DateConversion.cpp:
        * runtime/Executable.cpp:
        (JSC::EvalExecutable::compileInternal):
        (JSC::ProgramExecutable::compileInternal):
        (JSC::FunctionExecutable::compileForCallInternal):
        (JSC::FunctionExecutable::compileForConstructInternal):
        * runtime/FunctionConstructor.cpp:
        (JSC::constructFunction):
        * runtime/GCActivityCallbackCF.cpp:
        * runtime/Identifier.cpp:
        * runtime/JSCell.h:
        * runtime/JSChunk.cpp: Added.
        * runtime/JSChunk.h: Added.
        * runtime/JSFunction.cpp:
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::markChildren):
        (JSC::JSFunction::getCallData):
        (JSC::JSFunction::getOwnPropertySlot):
        (JSC::JSFunction::getConstructData):
        * runtime/JSFunction.h:
        (JSC::JSFunction::scope):
        (JSC::JSFunction::setScope):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::init):
        (JSC::JSGlobalObject::markChildren):
        * runtime/JSGlobalObject.h:
        (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
        (JSC::JSGlobalObject::globalScopeChain):
        * runtime/JSGlobalObjectFunctions.cpp:
        (JSC::globalFuncEval):
        * runtime/JSLock.cpp:
        * runtime/JSNumberCell.cpp:
        * runtime/JSZombie.cpp:
        * runtime/MarkedBlock.cpp:
        * runtime/MarkedSpace.cpp:
        * runtime/PropertyNameArray.cpp:
        * runtime/ScopeChain.cpp:
        (JSC::ScopeChainNode::print):
        (JSC::ScopeChainNode::localDepth):
        (JSC::ScopeChainNode::markChildren):
        * runtime/ScopeChain.h:
        (JSC::ScopeChainNode::ScopeChainNode):
        (JSC::ScopeChainNode::createStructure):
        (JSC::ScopeChainNode::push):
        (JSC::ScopeChainNode::pop):
        (JSC::ScopeChainIterator::ScopeChainIterator):
        (JSC::ScopeChainIterator::operator*):
        (JSC::ScopeChainIterator::operator->):
        (JSC::ScopeChainIterator::operator++):
        (JSC::ScopeChainNode::begin):
        (JSC::ScopeChainNode::end):
        (JSC::ExecState::globalData):
        (JSC::ExecState::lexicalGlobalObject):
        (JSC::ExecState::globalThisValue):
        * runtime/ScopeChainMark.h:
        * wtf/DateMath.cpp:

2011-02-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement WTF::randomNumber in terms of WTF::cryptographicallyRandomNumber when possible
        https://bugs.webkit.org/show_bug.cgi?id=55326

        Currently, randomNumber does a bunch of platform-specific work that to
        get a cryptographic randomness when available.  Instead, we should use
        cryptographicallyRandomNumber, which abstracts this work.
        Unfortunately, we can't remove all of the WTF::randomNumber
        implementation because not every port has access to cryptographically
        random numbers.

        * wtf/RandomNumber.cpp:
        (WTF::randomNumber):

2011-02-27  Benjamin Poulain  <ikipou@gmail.com>

        Reviewed by Darin Adler.

        Eliminate DeprecatedPtrList from RenderBlock
        https://bugs.webkit.org/show_bug.cgi?id=54972

        Add methods find() and contains() using an adaptor to ListHashSet.
        Those method are like the one of HashSet, they allow to find objects
        based on a different key than the one used to define the set.

        Add convenience methods for direct access to the head and tail of the list.
        Those methods are providing similar API/behavior as Vector.

        * wtf/ListHashSet.h:
        (WTF::::first):
        (WTF::::last):
        (WTF::::removeLast):
        (WTF::ListHashSetTranslatorAdapter::hash):
        (WTF::ListHashSetTranslatorAdapter::equal):
        (WTF::::find):
        (WTF::::contains):

2011-02-26  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Add support for DragonFly BSD
        https://bugs.webkit.org/show_bug.cgi?id=54407

        DragonFly BSD is based on FreeBSD, so handle it like FreeBSD.

        * wtf/Platform.h:

2011-02-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        JavaScriptCore should use the xcconfig file instead of importing that information into GYP
        https://bugs.webkit.org/show_bug.cgi?id=55282

        Technically, this breaks the build because I had removed one of the
        warnings in this config file, but this change seems like an
        improvement.

        * gyp/JavaScriptCore.gyp:

2011-02-26  Thouraya ANDOLSI  <thouraya.andolsi@st.com>

        Reviewed by Nikolas Zimmermann.

        SH4 JIT SUPPORT
        https://bugs.webkit.org/show_bug.cgi?id=44329

        Provide an ExecutableAllocater::cacheFlush() implementation for
        Linux/SH4.

        * jit/ExecutableAllocator.h:
        (JSC::ExecutableAllocator::cacheFlush):

2011-02-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79627.
        http://trac.webkit.org/changeset/79627
        https://bugs.webkit.org/show_bug.cgi?id=55274

        broke worker tests (Requested by olliej on #webkit).

        * JavaScriptCore.exp:
        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:
        * runtime/Heap.cpp:
        (JSC::Heap::allocate):
        * runtime/Heap.h:
        * runtime/JSCell.h:
        (JSC::JSCell::JSCell::operator new):
        (JSC::JSCell::MarkedSpace::sizeClassFor):
        (JSC::JSCell::MarkedSpace::allocate):
        * runtime/MarkedBlock.h:
        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::allocateBlock):
        (JSC::MarkedSpace::reset):
        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::SizeClass::SizeClass):

2011-02-25  Michael Saboff  <msaboff@apple.com>

        Reviewed by Darin Adler.

        Leak in JSParser::Scope of ScopeLabelInfo Vector
        https://bugs.webkit.org/show_bug.cgi?id=55249

        Changed m_labels to be an OwnPtr<>.  Added VectorTraits
        and Scope copy constructor to support this change.

        * parser/JSParser.cpp:
        (JSC::JSParser::Scope::~Scope):

2011-02-25  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Adam Barth.

        WebSocket uses insecure random numbers
        https://bugs.webkit.org/show_bug.cgi?id=54714

        * JavaScriptCore.exp: Export WTF::cryptographicallyRandomNumber()

2011-02-25  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Move timeBeginPeriod into OS(WINDOWS) section
        https://bugs.webkit.org/show_bug.cgi?id=55247

        * jsc.cpp:
        (main): timeBeginPeriod is available on all Windows versions and not compiler specific.

2011-02-25  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed WinCE build fix for r79695.

        * jsc.cpp:
        (main): SetErrorMode isn't available on WinCE.

2011-02-25  Adam Roben  <aroben@apple.com>

        Work around Cygwin's crash-suppression behavior

        Cygwin calls ::SetErrorMode(SEM_FAILCRITICALERRORS), which any processes it launches will
        inherit. This is bad for testing/debugging, as it causes the post-mortem debugger not to be
        invoked. (Cygwin does this because it makes crashes more UNIX-y.) We reset the error mode
        when our test apps launch to work around Cygwin's behavior.

        Fixes <http://webkit.org/b/55222> Test apps crash silently (without invoking post-mortem
        debugger) when launched from Cygwin 1.7

        Reviewed by Darin Adler.

        * API/tests/testapi.c: Added a now-needed #include.
        (main):
        * jsc.cpp:
        (main):
        Call ::SetErrorMode(0) to undo Cygwin's folly.

        * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: Define NOMINMAX like many of our
        other projects do so that windows.h won't define min/max macros that interfere with
        std::numeric_limits<T>::min/max.

2011-02-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add GYP project for JavaScriptCore
        https://bugs.webkit.org/show_bug.cgi?id=55027

        Again, this GYP files is very rough, but it succeeds in building
        JavaScriptCore.  There's a lot more work to do here, especially in the
        area of sharing with JavaScriptGlue.gyp.  This patch is more of a
        checkpoint so that other folks can help out if they wish.

        * gyp: Added.
        * gyp/JavaScriptCore.gyp: Added.
        * gyp/generate-derived-sources.sh: Added.

2011-02-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add missing files to JavaScriptCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=55193

        I forgot to add mm files in my previous patch.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:
        * JavaScriptCore.gypi:

2011-02-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove unused parameter name in GCActivityCallback.cpp
        https://bugs.webkit.org/show_bug.cgi?id=55194

        This change is not strictly required for the GYP-based build system,
        but I noticed this error when working on the new build system.

        * runtime/GCActivityCallback.cpp:
        (JSC::DefaultGCActivityCallback::DefaultGCActivityCallback):

2011-02-24  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        Add a USE() macro to control use of the built-in UTF8 codec
        https://bugs.webkit.org/show_bug.cgi?id=55189

        Defaults USE(BUILTIN_UTF8_CODEC) to true for all platforms except chromium, which controls the flag via features.gypi.

        * wtf/Platform.h:

2011-02-24  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Variable-sized allocation (but still capped at 64 bytes)
        https://bugs.webkit.org/show_bug.cgi?id=55159
        
        SunSpider reports no change.

        * JavaScriptCore.exp: Some day, I hope not to have to edit this file.

        * runtime/Heap.cpp:
        (JSC::Heap::allocateSlowCase): Split allocation into a fast and slow
        case, so the fast case can inline size class selection and turn it into
        a compile-time constant.
        
        Changed the collect-on-every allocation debugging switch to collect only
        on every slow allocation, so you can still flip the switch without
        recompiling the world. This may also be preferable for debugging purposes,
        since collecting after every single allocation can be unusably slow,
        and can mask problems by running destructors early.

        * runtime/Heap.h: Ditto.

        * runtime/JSCell.h:
        (JSC::JSCell::MarkedSpace::sizeClassFor):
        (JSC::JSCell::Heap::allocate):
        (JSC::JSCell::JSCell::operator new): The inlining mentioned above.

        * runtime/MarkedBlock.h: Dropped the block size from 256KB to 16KB. With
        multiple size classes, allocating a full 256KB for the first allocation
        in a given class can be pathologically wasteful. (8KB, or 4KB Mac and
        8KB Windows, would be even better, but that seems to be a peformance
        regression for now.)
        
        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::allocateBlock):
        (JSC::MarkedSpace::reset): There's more than one size class now, and its
        cell size is not constant.

        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::SizeClass::SizeClass): Ditto.

2011-02-23  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Make WeakGCMap use new handle infrastructure
        https://bugs.webkit.org/show_bug.cgi?id=55100

        Remove old WeakGCMap implementation and move over to new handle
        based logic.

        This has a number of benefits, most notably it makes a WeakGCMap
        always reflect the true state of the world by as all entries are
        removed at the first gc cycle that makes them dead.  This allows
        us to get rid of code in a wide variety of objects where the only
        purpose was to remove themselves from maps.

        It also means that we no longer need to have special "unchecked"
        versions of any functions on WeakGCMap.  Alas in order to maintain
        compatibility with the JSWeakObjectMapClear API it is still
        necessary to have an api that resembles uncheckedRemove, this is
        now deprecatedRemove and will be dealt with in a later patch.

        In order to get correct semantics in WeakGCMap we need more
        contextual information in the finalizer, so we've added an
        abstract class based finaliser and a context parameter to the
        calls.

        The new an improved WeakGCMap also results in sigificantly more
        churn in the weak handle lists so exposed some potential problems
        during the post mark phase which have been rectified as well.

        * API/JSWeakObjectMapRefPrivate.cpp:
        * API/JSWeakObjectMapRefPrivate.h:
        * runtime/Heap.cpp:
        (JSC::Heap::globalObjectCount):
        (JSC::Heap::protectedGlobalObjectCount):
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * runtime/JSGlobalData.h:
        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::~JSGlobalObject):
        (JSC::JSGlobalObject::init):
        * runtime/WeakGCMap.h:
        (JSC::WeakGCMap::iterator::iterator):
        (JSC::WeakGCMap::iterator::get):
        (JSC::WeakGCMap::iterator::getSlot):
        (JSC::WeakGCMap::iterator::operator++):
        (JSC::WeakGCMap::iterator::operator==):
        (JSC::WeakGCMap::iterator::operator!=):
        (JSC::WeakGCMap::WeakGCMap):
        (JSC::WeakGCMap::isEmpty):
        (JSC::WeakGCMap::clear):
        (JSC::WeakGCMap::get):
        (JSC::WeakGCMap::getSlot):
        (JSC::WeakGCMap::set):
        (JSC::WeakGCMap::take):
        (JSC::WeakGCMap::size):
        (JSC::WeakGCMap::deprecatedRemove):
        (JSC::WeakGCMap::begin):
        (JSC::WeakGCMap::end):
        (JSC::WeakGCMap::~WeakGCMap):
        (JSC::WeakGCMap::finalize):
        * runtime/WeakGCPtr.h:
        (JSC::WeakGCPtr::WeakGCPtr):
        (JSC::WeakGCPtr::set):

2011-02-24  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Make weaklist processing deal with weak handles being removed during the iteration
        https://bugs.webkit.org/show_bug.cgi?id=55105

        It is possible for the handle heap to end up in a broken state if
        a handle's finalizer removes either the current or next handle
        to be visited during the post-gc cleanup.  This patch removes that
        problem by allowing the deallocate(Node*) routine to update the
        iterator if it is called during finalization.

        * collector/handles/HandleHeap.cpp:
        (JSC::HandleHeap::HandleHeap):
        (JSC::HandleHeap::updateAfterMark):
        (JSC::HandleHeap::clearWeakPointers):
        (JSC::HandleHeap::writeBarrier):
        (JSC::HandleHeap::protectedGlobalObjectCount):
        * collector/handles/HandleHeap.h:
        (JSC::Finalizer::~Finalizer):
        (JSC::HandleHeap::getFinalizer):
        (JSC::HandleHeap::deallocate):
        (JSC::HandleHeap::makeWeak):
        (JSC::HandleHeap::makeSelfDestroying):
        (JSC::HandleHeap::Node::Node):
        (JSC::HandleHeap::Node::setFinalizer):
        (JSC::HandleHeap::Node::finalizer):
        (JSC::HandleHeap::Node::finalizerContext):
        * interpreter/RegisterFile.cpp:
        (JSC::RegisterFile::setGlobalObject):
        (JSC::GlobalObjectNotifier::finalize):
        (JSC::RegisterFile::globalObjectCollectedNotifier):
        * interpreter/RegisterFile.h:
        (JSC::RegisterFile::RegisterFile):
        * runtime/Heap.cpp:
        (JSC::Heap::destroy):
        * runtime/WeakGCPtr.h:
        (JSC::WeakGCPtr::WeakGCPtr):
        (JSC::WeakGCPtr::set):

2011-02-24  Michael Saboff  <msaboff@apple.com>

        Reviewed by Oliver Hunt.

        PatternAlternative leaked in YarrPatternConstructor::atomParenthesesEnd()
        https://bugs.webkit.org/show_bug.cgi?id=55156

        Added code to delete unneeded PatternAlternative after it is removed
        from m_alternatives Vector.

        * yarr/YarrPattern.cpp:
        (JSC::Yarr::YarrPatternConstructor::atomParenthesesEnd):

2011-02-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Anders Carlsson.

        VectorBuffer should not call malloc(0)
        https://bugs.webkit.org/show_bug.cgi?id=55091

        Turns out the malloc() call which was so hot in:
        https://bugs.webkit.org/show_bug.cgi?id=55005
        was actually just malloc(0).

        We shouldn't be calling malloc(0) anyway, since there is no need to
        and it might actually do work on some systems.
        I believe on Mac it ends up taking the standard spinlocks (expensive)
        and the code on Brew actually does a malloc(1) instead.  Neither is desirable.

        * wtf/Vector.h:
        (WTF::VectorBufferBase::allocateBuffer):
        (WTF::VectorBufferBase::tryAllocateBuffer):

2011-02-24  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Remove obsolete PLATFORM(CI)
        https://bugs.webkit.org/show_bug.cgi?id=55082

        * wtf/Platform.h:

2011-02-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Remove the GFile GOwnPtr specialization
        https://bugs.webkit.org/show_bug.cgi?id=55154

        Remove the GFile specialization of GOwnPtr. It's sufficient to use GRefPtr
        to track GFiles since they are just regular reference-counted GObjects.

        * wtf/gobject/GOwnPtr.cpp: Remove GFile specialization.
        * wtf/gobject/GOwnPtr.h: Ditto.

2011-02-24  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Eric Seidel.

        Rename PLATFORM(SKIA) to USE(SKIA)
        https://bugs.webkit.org/show_bug.cgi?id=55090

        * wtf/Platform.h:

2011-02-24  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Remove pthreads dependecy for JSLock
        https://bugs.webkit.org/show_bug.cgi?id=54832

        JSLock is only needed to support an obsolete execution model where JavaScriptCore
        automatically protected against concurrent access from multiple threads.
        So it's safe to disable it on non-mac platforms where we don't have native pthreads.

        * runtime/JSLock.cpp:

2011-02-24  Chao-ying Fu  <fu@mips.com>

        Reviewed by Eric Seidel.

        Fix MIPS build with new patchOffsetPut/GetByIdPropertyMapOffset1/2 values
        https://bugs.webkit.org/show_bug.cgi?id=54997

        * jit/JIT.h:
        * jit/JITStubs.cpp:
        (JSC::JITThunks::JITThunks):

2011-02-24  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] MinGW build fails to link
        https://bugs.webkit.org/show_bug.cgi?id=55050

        Prepend the libraries of subcomponents instead of appending them
        to fix the library order according to the dependency of the libraries

        * JavaScriptCore.pri: rename addJavaScriptCore to prependJavaScriptCore
        * jsc.pro: ditto

2011-02-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Deque<T> should support inline capacity
        https://bugs.webkit.org/show_bug.cgi?id=55032

        The title says it all.  There are currently no places
        which use this code yet, however it's been tested in conjunction
        with code for bug 55005.

        This also adds an ASSERT that capacity is never 1.  If you were able
        to set the capacity equal to 1, the Deque would just get confused
        and happily append your item but still think it had size 0.

        * wtf/Deque.h:
        (WTF::DequeIterator::DequeIterator):
        (WTF::DequeConstIterator::DequeConstIterator):
        (WTF::DequeReverseIterator::DequeReverseIterator):
        (WTF::DequeConstReverseIterator::DequeConstReverseIterator):
        (WTF::::checkValidity):
        (WTF::::checkIndexValidity):
        (WTF::::invalidateIterators):
        (WTF::::Deque):
        (WTF::deleteAllValues):
        (WTF::::operator):
        (WTF::::destroyAll):
        (WTF::::~Deque):
        (WTF::::swap):
        (WTF::::clear):
        (WTF::::findIf):
        (WTF::::expandCapacityIfNeeded):
        (WTF::::expandCapacity):
        (WTF::::takeFirst):
        (WTF::::append):
        (WTF::::prepend):
        (WTF::::removeFirst):
        (WTF::::remove):
        (WTF::::addToIteratorsList):
        (WTF::::removeFromIteratorsList):
        (WTF::::DequeIteratorBase):
        (WTF::::~DequeIteratorBase):
        (WTF::::isEqual):
        (WTF::::increment):
        (WTF::::decrement):
        (WTF::::after):
        (WTF::::before):
        * wtf/Vector.h:

2011-02-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Ojan Vafai. 

        Add missing files to JavaScriptCore.gypi 
        https://bugs.webkit.org/show_bug.cgi?id=55020 

        gypi files are supposed to list every file under the sun.  This patch 
        adds some missing files and sorts the rest. 

        * JavaScriptCore.gypi: 

2011-02-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.

        Refactored MarkedSpace to operate in terms of size classes
        https://bugs.webkit.org/show_bug.cgi?id=55106
        
        SunSpider reports no change.

        * runtime/JSCell.h:
        (JSC::JSCell::MarkedSpace::sizeClassFor):
        (JSC::JSCell::MarkedSpace::allocate): Delegate allocation based on size
        class. Since these functions are inline, the compiler can constant fold
        them.

        * runtime/MarkedBlock.h:
        (JSC::MarkedBlock::cellSize):
        (JSC::MarkedBlock::size): Factored out a cellSize() helper.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::allocateBlock):
        (JSC::MarkedSpace::allocateFromSizeClass):
        (JSC::MarkedSpace::shrink):
        (JSC::MarkedSpace::reset):
        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::SizeClass::SizeClass):
        (JSC::MarkedSpace::SizeClass::reset): Changed to operate in terms of
        abstract SizeClass objects, which are independent linked lists of blocks
        of a certain size class, instead of a single m_heap object.

2011-02-23  Adam Barth  <abarth@webkit.org>

        Reviewed by James Robinson.

        [Chromium] Use WebKitClient for OSRandomSource instead of trying to talk to the file system in the sandbox
        https://bugs.webkit.org/show_bug.cgi?id=55093

        Exclude OSRandomSource.cpp from the Chromium build.  This function is
        implemented in WebKit/chromium/src instead.

        * JavaScriptCore.gyp/JavaScriptCore.gyp:

2011-02-23  Oliver Hunt  <oliver@apple.com>

        Roll out r64156 as it introduces incorrect behaviour.

        * runtime/JSByteArray.h:
        (JSC::JSByteArray::setIndex):

2011-02-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Moved the "nextAtom" allocation pointer into MarkedBlock for better encapsulation
        https://bugs.webkit.org/show_bug.cgi?id=55079
        
        SunSpider reports no change.

        * runtime/Heap.cpp:
        (JSC::Heap::reset): Moved Zombie sweeping here, up from MarkedSpace,
        since we want Heap to logically control MarkedSpace. MarkedSpace should
        never choose to sweep itself.

        * runtime/JSCell.h:
        (JSC::JSCell::MarkedBlock::allocate): Updated for nextAtom becoming a
        member of MarkedBlock. No need to reset nextAtom to firstAtom() when
        we reach the end of a block, since there's now an explicit reset pass
        during GC.

        * runtime/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock):
        * runtime/MarkedBlock.h:
        (JSC::MarkedBlock::reset): Added the nextAtom data member, and reordered
        some data members to improve cache locality.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::allocate):
        (JSC::MarkedSpace::reset):
        * runtime/MarkedSpace.h:
        (JSC::CollectorHeap::CollectorHeap): Removed nextAtom, and added an
        explicit reset pass.

2011-02-23  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r79428.
        http://trac.webkit.org/changeset/79428
        https://bugs.webkit.org/show_bug.cgi?id=54714

        Does not work in the Chromium sandbox

        * JavaScriptCore.exp:

2011-02-23  Adam Roben  <aroben@apple.com>

        Fix an off-by-one error in JSC::appendSourceToError

        Looks like this bug has been around since the code was first added in r35245.

        Fixes <http://webkit.org/b/55052> <rdar://problem/9043512> Crash in JSC::appendSourceToError
        when running fast/dom/objc-big-method-name.html on Windows with full page heap enabled

        Reviewed by Darin Adler.

        * interpreter/Interpreter.cpp:
        (JSC::appendSourceToError): When trimming whitespace off the end of the string, examine the
        character at stop-1 rather than at stop. At this point in the code, stop represents the
        index just past the end of the characters we care about, and can even be just past the end
        of the entire data buffer.

2011-02-23  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Darin Adler.
        
        Rolled back in r79367 with SnowLeopard Release bot crash fixed.
        https://bugs.webkit.org/show_bug.cgi?id=54999
        
        The crash was caused by failure to update the "nextBlock" pointer when
        removing a block from the list while shrinking. The fix is to update the
        "nextBlock" pointer.
        
        This crash was very rare because it only happened in cases where the very
        first block in the heap contained no marked cells.

2011-02-23  Dan Bernstein  <mitz@apple.com>

        Reviewed by Gavin Barraclough.

        Include frame numbers in backtraces.
        https://bugs.webkit.org/show_bug.cgi?id=55060

        * wtf/Assertions.cpp:

2011-02-23  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gavin Barraclough.

        latest jsc for armv7 crashes in sunspider tests
        https://bugs.webkit.org/show_bug.cgi?id=54667

        Update JIT offset values in ARMv7 after r78732. Fixes crashes in
        SunSpider and JavaScript tests.

        * jit/JIT.h: update values.

2011-02-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79418.
        http://trac.webkit.org/changeset/79418
        https://bugs.webkit.org/show_bug.cgi?id=55043

        "breaks shlib linux build" (Requested by morrita on #webkit).

        * JavaScriptCore.gyp/JavaScriptCore.gyp:
        * JavaScriptCore.gypi:

2011-02-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Use DEFINE_STATIC_LOCAL for ignoreSetMutex in Structure.cpp
        https://bugs.webkit.org/show_bug.cgi?id=54831

        * runtime/InitializeThreading.cpp:
        (JSC::initializeThreadingOnce):
        * runtime/Structure.cpp:
        (JSC::ignoreSetMutex):
        (JSC::Structure::Structure):
        (JSC::Structure::~Structure):
        (JSC::Structure::initializeThreading):
        * runtime/Structure.h:

2011-02-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Rename PLATFORM(CF) to USE(CF)
        https://bugs.webkit.org/show_bug.cgi?id=53540

        * runtime/DatePrototype.cpp:
        * runtime/GCActivityCallbackCF.cpp:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::JSGlobalData):
        * wtf/CurrentTime.cpp:
        * wtf/Platform.h:
        * wtf/text/AtomicString.h:
        * wtf/text/StringImpl.h:
        (WTF::StringImpl::computeHash):
        * wtf/text/WTFString.h:
        * wtf/unicode/icu/CollatorICU.cpp:
        (WTF::Collator::userDefault):

2011-02-23  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed build fix for Windows.

        WebSocket uses insecure random numbers
        https://bugs.webkit.org/show_bug.cgi?id=54714

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Export WTF::cryptographicallyRandomNumber()

2011-02-23  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Adam Barth.

        WebSocket uses insecure random numbers
        https://bugs.webkit.org/show_bug.cgi?id=54714

        * JavaScriptCore.exp: Export WTF::cryptographicallyRandomNumber()

2011-02-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Ojan Vafai.

        Add missing files to JavaScriptCore.gypi
        https://bugs.webkit.org/show_bug.cgi?id=55020

        gypi files are supposed to list every file under the sun.  This patch
        adds some missing files and sorts the rest.

        * JavaScriptCore.gypi:

2011-02-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79367.
        http://trac.webkit.org/changeset/79367
        https://bugs.webkit.org/show_bug.cgi?id=55012

        all layout tests are crashing on Snow Leopard (Requested by
        rniwa on #webkit).

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj:
        * runtime/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock):
        * runtime/MarkedBlock.h:
        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::destroy):
        (JSC::MarkedSpace::allocateBlock):
        (JSC::MarkedSpace::freeBlock):
        (JSC::MarkedSpace::allocate):
        (JSC::MarkedSpace::shrink):
        (JSC::MarkedSpace::reset):
        * runtime/MarkedSpace.h:
        (JSC::CollectorHeap::collectorBlock):
        * wtf/CMakeLists.txt:
        * wtf/DoublyLinkedList.h: Removed.

2011-02-22  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Manage MarkedBlocks in a linked list instead of a vector, so arbitrary removal is O(1)
        https://bugs.webkit.org/show_bug.cgi?id=54999
        
        SunSpider reports no change.

        * GNUmakefile.am:
        * JavaScriptCore.gypi:
        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
        * JavaScriptCore.xcodeproj/project.pbxproj: So many build systems, so little time.
        * wtf/CMakeLists.txt:

        * runtime/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock):
        * runtime/MarkedBlock.h:
        (JSC::MarkedBlock::setPrev):
        (JSC::MarkedBlock::setNext):
        (JSC::MarkedBlock::prev):
        (JSC::MarkedBlock::next): Added linked list data members and accessors.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::destroy):
        (JSC::MarkedSpace::allocateBlock): Stop using vector, since it doesn't exist anymore.

        (JSC::MarkedSpace::freeBlocks): New helper function for updating relevant
        data structures when freeing blocks.

        (JSC::MarkedSpace::allocate): Updated for nextBlock being a pointer and
        not a vector index.

        (JSC::MarkedSpace::shrink): Construct a temporary list of empties and
        then free them, to avoid modifying our hash table while iterating it.
        This wasn't a concern before because we were using indirect array
        indexing, not direct pointer indexing.

        (JSC::MarkedSpace::reset): Updated for nextBlock being a pointer and
        not a vector index.

        * runtime/MarkedSpace.h:
        (JSC::CollectorHeap::CollectorHeap): Changed data type from vector to linked list.

        * wtf/DoublyLinkedList.h: Added. New linked list class.
        (WTF::::DoublyLinkedList):
        (WTF::::isEmpty):
        (WTF::::head):
        (WTF::::append):
        (WTF::::remove):

2011-02-22  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-02-22  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 54988 - Re-create StructureTransitionTable class, encapsulate transition table

        The Structure class keeps a table of transitions to derived Structure types. Since
        this table commonly contains a single entry we employ an optimization where instead
        of holding a map, we may hold a pointer directly to a single instance of the mapped
        type. We use an additional bit of data to flag whether the pointer is currently
        pointing to a table of transitions, or a singleton transition. Previously we had
        commonly used a pattern of storing data in the low bits of pointers, but had moved
        away from this since it causes false leaks to be reported by the leaks tool. However
        in this case, the entries in the map are weak links - this pointer will never be
        responsible for keeping an object alive.  As such we can use this approach provided
        that the bit is set when a table is not in use (otherwise the table would appear to
        be leaked).

        Additionally, the transition table currently allows two entries to exist for a given
        key - one specialized to a particular value, and one not specialized. This is
        unnecessary, wasteful, and a little inconsistent. (If you create an entry for a
        specialized value, then a non-specialized entry, both will exist.  If you create an
        entry for a non-specialized value, then try to create a specialized entry, only a
        non-specialized form will be allowed.)

        This shows a small progression on v8.

        * JavaScriptCore.exp:
        * runtime/JSObject.h:
        (JSC::JSObject::putDirectInternal):
        * runtime/Structure.cpp:
        (JSC::StructureTransitionTable::contains):
        (JSC::StructureTransitionTable::get):
        (JSC::StructureTransitionTable::remove):
        (JSC::StructureTransitionTable::add):
        (JSC::Structure::dumpStatistics):
        (JSC::Structure::Structure):
        (JSC::Structure::~Structure):
        (JSC::Structure::addPropertyTransitionToExistingStructure):
        (JSC::Structure::addPropertyTransition):
        * runtime/Structure.h:
        (JSC::Structure::get):
        * runtime/StructureTransitionTable.h:
        (JSC::StructureTransitionTable::Hash::hash):
        (JSC::StructureTransitionTable::Hash::equal):
        (JSC::StructureTransitionTable::HashTraits::emptyValue):
        (JSC::StructureTransitionTable::HashTraits::constructDeletedValue):
        (JSC::StructureTransitionTable::HashTraits::isDeletedValue):
        (JSC::StructureTransitionTable::StructureTransitionTable):
        (JSC::StructureTransitionTable::~StructureTransitionTable):
        (JSC::StructureTransitionTable::isUsingSingleSlot):
        (JSC::StructureTransitionTable::map):
        (JSC::StructureTransitionTable::setMap):
        (JSC::StructureTransitionTable::singleTransition):
        (JSC::StructureTransitionTable::setSingleTransition):

2011-02-22  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Laszlo Gombos.

        [Qt] Redesign the build system
        https://bugs.webkit.org/show_bug.cgi?id=51339

        Part 2.

        Build WebCore as a static library, compile the WebKit API and WebKit2 API
        in a final step and link to WebKit2, WebCore and JSC libraries to fix
        linking issues resulting from stripped away symbols.

        * JavaScriptCore.pri: Remove the workaround.

2011-02-21  Adam Roben  <aroben@apple.com>

        Fix linker warning on Windows

        r79135 tried to export JSObject::s_info by adding it to JavaScriptCore.def. This is the
        obvious way (since it's how we export functions), but unfortunately it doesn't work correct.
        r79222 made us export it the right way (using the JS_EXPORTDATA macro), but forgot to remove
        it from JavaScriptCore.def. This caused us to get linker warnings about exporting the symbol
        multiple times.

        Rubber-stamped by Anders Carlsson.

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Removed JSObject::s_info.

2011-02-21  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        WebResourceCacheManager should be responsible for managing the CFURLCache as well
        as the WebCore memory cache.
        https://bugs.webkit.org/show_bug.cgi?id=54886
        Part of <rdar://problem/8971738>

        Add a new use flag for using the CFURLCache.

        * wtf/Platform.h:

2011-02-21  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gavin Barraclough.

        Use ASSERT_JIT_OFFSET in JITPropertyAccess32_64.cpp
        https://bugs.webkit.org/show_bug.cgi?id=54901

        * jit/JIT.h: swap actual and expected values in message, they were
        reversed.
        * jit/JITCall32_64.cpp:
        (JSC::JIT::compileOpCall): use ASSERT_JIT_OFFSET instead of
        a simple ASSERT.
        * jit/JITPropertyAccess32_64.cpp:
        (JSC::JIT::emit_op_method_check): ditto.
        (JSC::JIT::compileGetByIdHotPath): ditto.
        (JSC::JIT::compileGetByIdSlowCase): ditto.
        (JSC::JIT::emit_op_put_by_id): ditto.

2011-02-21  Gavin Barraclough  <barraclough@apple.com>

        Ruber stamped by Sam Weinig

        Bug 54899 - Math.LOG10E should be 0.4342944819032518
        This value is quoted in section 15.8.1.5 of the spec.

        * runtime/MathObject.cpp:
        (JSC::MathObject::MathObject):

2011-02-21  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 54894 - Make inheritance structure described by ClassInfo match C++ class hierarchy.

        The ClassInfo objects describe an inheritance hierarchy, with each ClassInfo instance
        containing a pointer to its parent class. These links should reflect the inheritance
        hierarchy of C++ classes below JSObject. For the large part it does, but in some cases
        entries in the C++ hierarchy are skipped over. This presently likely doesn't matter,
        since intervening C++ classes may not have ClassInfo - but would be a potential bug
        were ClassInfo were to be added.

        * API/JSCallbackConstructor.cpp:
        * API/JSCallbackFunction.cpp:
        * API/JSCallbackObjectFunctions.h:
        * runtime/Arguments.h:
        * runtime/ArrayPrototype.cpp:
        * runtime/BooleanObject.cpp:
        * runtime/DateInstance.cpp:
        * runtime/DatePrototype.cpp:
        * runtime/ErrorInstance.cpp:
        * runtime/InternalFunction.cpp:
        * runtime/JSActivation.cpp:
        * runtime/JSArray.cpp:
        * runtime/JSFunction.cpp:
        * runtime/JSONObject.cpp:
        * runtime/JSObject.h:
        * runtime/JSZombie.h:
        * runtime/MathObject.cpp:
        * runtime/NativeErrorConstructor.cpp:
        * runtime/NumberConstructor.cpp:
        * runtime/NumberObject.cpp:
        * runtime/RegExpConstructor.cpp:
        * runtime/RegExpObject.cpp:
        * runtime/StringObject.cpp:
        * runtime/StringPrototype.cpp:

2011-02-21  Adam Roben  <aroben@apple.com>

        Export JSObject::s_info from JavaScriptCore.dll

        This matches what we do for all other ClassInfo objects that WebCore needs access to.

        Fixes <http://webkit.org/b/54881> REGRESSION (r79132): Lots of tests crashing in
        JSCell::inherits on Windows

        Reviewed by Sam Weinig.

        * runtime/JSObject.h: Added JS_EXPORTDATA to s_info.

2011-02-21  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Andreas Kling.

        Switched to compiler based detection, where the error actually is.

        It is not the platform that needs the workaround, it is the compiler.

        QtWebKit fails to compile on Windows XP with msvc-2008
        https://bugs.webkit.org/show_bug.cgi?id=54746

        * bytecode/CodeBlock.h:
        * runtime/RegExpObject.h:

2011-02-20  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=54839
        Remove PrototypeFunction, NativeFunctionWrapper, and GlobalEvalFunction.

        Historically, Native functions used to be represented by PrototypeFunctions, however
        since introducing call optimizations to the JIT this has used JSFunctions for host
        calls too. At the point this change was made, the interpreter continued to use
        PrototypeFunctions, however since fallback from the JIT to interpreter was introduced
        the interpreter has had to be able to run using host functions represented using
        JSFunctions - leading to an unnecessary and redundant divergence in behaviour between 
        interpreter only builds, and situations where the JIT has fallen back to interpreting.

        NativeFunctionWrapper only existed to select between PrototypeFunction and JSFunction
        for wrappers for host functions, and as such can also be removed.

        GlobalEvalFunction is a redundant wrapper that happens to be derived from
        PrototypeFunction. It existed to hold a reference to the global object - but since all
        functions how derive from JSObjectWithGlobalObject, this no longer requires an
        additional class to provide this functionality.

        * JavaScriptCore.JSVALUE32_64only.exp:
        * JavaScriptCore.JSVALUE64only.exp:
        * JavaScriptCore.xcodeproj/project.pbxproj:
            Removed symbols / references to files.

        * runtime/GlobalEvalFunction.cpp: Removed.
        * runtime/GlobalEvalFunction.h: Removed.
        * runtime/NativeFunctionWrapper.h: Removed.
        * runtime/PrototypeFunction.cpp: Removed.
        * runtime/PrototypeFunction.h: Removed.
            Removed.

        * runtime/Executable.cpp:
        (JSC::NativeExecutable::~NativeExecutable):
        * runtime/Executable.h:
        (JSC::NativeExecutable::create):
        (JSC::NativeExecutable::NativeExecutable):
        (JSC::JSFunction::nativeFunction):
        * runtime/JSFunction.cpp:
        (JSC::callHostFunctionAsConstructor):
        (JSC::JSFunction::JSFunction):
        (JSC::JSFunction::getCallData):
        * runtime/JSFunction.h:
        * runtime/JSGlobalData.cpp:
        (JSC::JSGlobalData::getHostFunction):
        * runtime/JSGlobalData.h:
        (JSC::JSGlobalData::getCTIStub):
            Added interpreter-friendly constructors for NativeExecutables.

        * bytecompiler/BytecodeGenerator.cpp:
        * interpreter/Interpreter.cpp:
        * jit/JITStubs.cpp:
        * jsc.cpp:
        * runtime/ArrayConstructor.cpp:
        * runtime/BooleanPrototype.cpp:
        * runtime/BooleanPrototype.h:
        * runtime/CallData.h:
        * runtime/DateConstructor.cpp:
        * runtime/DateConstructor.h:
        * runtime/ErrorPrototype.cpp:
        * runtime/ErrorPrototype.h:
        * runtime/FunctionPrototype.cpp:
        * runtime/FunctionPrototype.h:
        * runtime/JSGlobalObject.cpp:
        * runtime/JSGlobalObject.h:
        * runtime/JSGlobalObjectFunctions.cpp:
        * runtime/Lookup.cpp:
        * runtime/NumberPrototype.cpp:
        * runtime/NumberPrototype.h:
        * runtime/ObjectConstructor.cpp:
        * runtime/ObjectConstructor.h:
        * runtime/ObjectPrototype.cpp:
        * runtime/ObjectPrototype.h:
        * runtime/RegExpPrototype.cpp:
        * runtime/RegExpPrototype.h:
        * runtime/SmallStrings.h:
        * runtime/StringConstructor.cpp:
        * runtime/StringConstructor.h:
            Removed use of redundant classes.

2011-02-19  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed build fix for Symbian.

        [Symbian] Revert the removal of linking 
        against hal after r79126.

        Dependency on the hal library can not be removed 
        as it is still used (e.g. in MarkStackSymbian.cpp).

        * JavaScriptCore.pri:

2011-02-19  Gavin Barraclough  <barraclough@apple.com>

        Interpreter build fix.

        * runtime/ArrayConstructor.cpp:
        * runtime/BooleanPrototype.cpp:
        * runtime/DateConstructor.cpp:
        * runtime/ErrorPrototype.cpp:
        * runtime/FunctionPrototype.cpp:
        * runtime/Lookup.cpp:
        * runtime/NumberPrototype.cpp:
        * runtime/ObjectConstructor.cpp:
        * runtime/ObjectPrototype.cpp:
        * runtime/RegExpPrototype.cpp:
        * runtime/StringConstructor.cpp:

2011-02-19  Gavin Barraclough  <barraclough@apple.com>

        Build fix!!

        * JavaScriptCore.exp:

2011-02-19  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix!!

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-02-19  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix!

        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def:

2011-02-19  Gavin Barraclough  <barraclough@apple.com>

        Build fix!

        * JavaScriptCore.exp:

2011-02-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 54786 - Devirtualize JSCell::classInfo()

        Instead of making a virtual function call, add a pointer to the ClassInfo
        onto Structure.

        This removes a virtual function call, and paves the way towards removing all
        the createStructure methods, and StructureFlags/AnonymousSlotCount properties
        (these should be able to move onto ClassInfo).

        Calls to Structure::create must now pass a pointer to the ClassInfo for the
        structure. All objects now have a ClassInfo pointer, non-object cell types
        still do not.

        Changes are most mechanical, involving three steps:
            * Remove virtual classInfo() methods.
            * Add &s_info parameter to calls to Structure::create.
            * Rename ClassInfo static members on classes from 'info' to 's_info',
              for consistency.

        * API/JSCallbackConstructor.cpp:
        * API/JSCallbackConstructor.h:
        * API/JSCallbackFunction.cpp:
        * API/JSCallbackFunction.h:
        * API/JSCallbackObject.cpp:
        * API/JSCallbackObject.h:
        * API/JSCallbackObjectFunctions.h:
        * API/JSObjectRef.cpp:
        * API/JSValueRef.cpp:
        * API/JSWeakObjectMapRefPrivate.cpp:
        * JavaScriptCore.exp:
        * debugger/Debugger.cpp:
        * debugger/DebuggerActivation.h:
        * debugger/DebuggerCallFrame.cpp:
        * interpreter/Interpreter.cpp:
        * jit/JITCall32_64.cpp:
        * jit/JITOpcodes.cpp:
        * jit/JITStubs.cpp:
        * profiler/Profiler.cpp:
        * runtime/Arguments.cpp:
        * runtime/Arguments.h:
        * runtime/ArrayConstructor.cpp:
        * runtime/ArrayPrototype.cpp:
        * runtime/ArrayPrototype.h:
        * runtime/BooleanObject.cpp:
        * runtime/BooleanObject.h:
        * runtime/BooleanPrototype.cpp:
        * runtime/DateConstructor.cpp:
        * runtime/DateInstance.cpp:
        * runtime/DateInstance.h:
        * runtime/DatePrototype.cpp:
        * runtime/DatePrototype.h:
        * runtime/ErrorInstance.cpp:
        * runtime/ErrorInstance.h:
        * runtime/ErrorPrototype.cpp:
        * runtime/FunctionPrototype.cpp:
        * runtime/FunctionPrototype.h:
        * runtime/GetterSetter.h:
        * runtime/GlobalEvalFunction.h:
        * runtime/InternalFunction.cpp:
        * runtime/InternalFunction.h:
        * runtime/JSAPIValueWrapper.h:
        * runtime/JSActivation.cpp:
        * runtime/JSActivation.h:
        * runtime/JSArray.cpp:
        * runtime/JSArray.h:
        * runtime/JSByteArray.cpp:
        * runtime/JSByteArray.h:
        * runtime/JSCell.cpp:
        * runtime/JSCell.h:
        * runtime/JSFunction.cpp:
        * runtime/JSFunction.h:
        * runtime/JSGlobalData.cpp:
        * runtime/JSGlobalObject.cpp:
        * runtime/JSGlobalObject.h:
        * runtime/JSNotAnObject.h:
        * runtime/JSONObject.cpp:
        * runtime/JSONObject.h:
        * runtime/JSObject.cpp:
        * runtime/JSObject.h:
        * runtime/JSObjectWithGlobalObject.h:
        * runtime/JSPropertyNameIterator.h:
        * runtime/JSStaticScopeObject.h:
        * runtime/JSString.h:
        * runtime/JSVariableObject.h:
        * runtime/JSWrapperObject.h:
        * runtime/JSZombie.cpp:
        * runtime/JSZombie.h:
        * runtime/Lookup.cpp:
        * runtime/MathObject.cpp:
        * runtime/MathObject.h:
        * runtime/NativeErrorConstructor.cpp:
        * runtime/NativeErrorConstructor.h:
        * runtime/NumberConstructor.cpp:
        * runtime/NumberConstructor.h:
        * runtime/NumberObject.cpp:
        * runtime/NumberObject.h:
        * runtime/NumberPrototype.cpp:
        * runtime/ObjectConstructor.cpp:
        * runtime/ObjectPrototype.cpp:
        * runtime/RegExpConstructor.cpp:
        * runtime/RegExpConstructor.h:
        * runtime/RegExpObject.cpp:
        * runtime/RegExpObject.h:
        * runtime/RegExpPrototype.cpp:
        * runtime/ScopeChain.cpp:
        * runtime/StringConstructor.cpp:
        * runtime/StringObject.cpp:
        * runtime/StringObject.h:
        * runtime/StringObjectThatMasqueradesAsUndefined.h:
        * runtime/StringPrototype.cpp:
        * runtime/StringPrototype.h:
        * runtime/Structure.cpp:
        * runtime/Structure.h:

2011-02-19  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/54808> Change jsc target to build directly into JavaScriptCore.framework/Resources/jsc

        Reviewed by Dan Bernstein.

        * Configurations/Base.xcconfig: Added
        JAVASCRIPTCORE_FRAMEWORKS_DIR variable.
        * Configurations/JavaScriptCore.xcconfig: Used
        JAVASCRIPTCORE_FRAMEWORKS_DIR to define INSTALL_PATH.
        * JavaScriptCore.xcodeproj/project.pbxproj: Set the INSTALL_PATH
        for Production configuration of jsc target.
        (Copy Into Framework): Removed old build phase.
        (Fix Framework Reference): Renamed build phase to "Copy Into
        Framework".  Added "set -x" call to make the script print the
        commands it is running.  Added code to exit early for Production
        builds since this was never intended for them.  Added code to
        copy jsc into the JavaScriptCore.framework/Resources directory.

2011-02-19  Siddharth Mathur  <siddharth.mathur@nokia.com>

        Reviewed by Laszlo Gombos.

        [Symbian] OSAllocator implementation for Symbian OS. 
        Manages both data and code region requests. V8 and Sunspider tested
        OK with interpreter. Not tested with JSC JIT yet as it has unrelated
        failures. Also no thread safety yet.
        https://bugs.webkit.org/show_bug.cgi?id=51128

        * JavaScriptCore.pri: removed HAL linkage
        * wtf/Bitmap.h:
        (WTF::::findRunOfZeros): find run of zeros in a bitmap. quick n dirty
        * wtf/OSAllocator.h:
        (WTF::OSAllocator::decommitAndRelease): decommit explicitly 
        * wtf/OSAllocatorSymbian.cpp: Impl. of OSAllocator interface 
        (WTF::allocateCodeChunk): utility for code chunks
        (WTF::deallocateCodeChunk): utility for code chunks
        (WTF::dataAllocatorInstance): getter for data allocator instance
        (WTF::OSAllocator::reserveUncommitted):
        (WTF::OSAllocator::releaseDecommitted):
        (WTF::OSAllocator::commit):
        (WTF::OSAllocator::decommit):
        (WTF::OSAllocator::reserveAndCommit):
        (WTF::PageAllocatorSymbian::PageAllocatorSymbian): maps requests 
        to one underlying Symbian chunk
        (WTF::PageAllocatorSymbian::~PageAllocatorSymbian):
        (WTF::PageAllocatorSymbian::reserve):
        (WTF::PageAllocatorSymbian::release):
        (WTF::PageAllocatorSymbian::commit):
        (WTF::PageAllocatorSymbian::decommit):
        (WTF::PageAllocatorSymbian::contains):
        * wtf/PageAllocatorSymbian.h: Added.
        (WTF::SymbianChunk::SymbianChunk): wrapper around RChunk  
        (WTF::SymbianChunk::~SymbianChunk):
        (WTF::SymbianChunk::contains):
        
2011-02-19  Yong Li  <yoli@rim.com>

        Reviewed by Eric Seidel.

        https://bugs.webkit.org/show_bug.cgi?id=54687
        When being built with armcc, "int" bit fields are treated as
        unsigned integers, which will fail the comparisons like "m_offset == -1".
        Using "signed" fixes the problem.

        * assembler/ARMAssembler.h:
        * assembler/ARMv7Assembler.h:

2011-02-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Made MarkedSpace block iteration size-class agnostic
        https://bugs.webkit.org/show_bug.cgi?id=54792
        
        SunSpider reports no change.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::clearMarks):
        (JSC::MarkedSpace::sweep):
        (JSC::MarkedSpace::objectCount):
        (JSC::MarkedSpace::size):
        (JSC::MarkedSpace::capacity):
        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::forEach): Iterate blocks in hashing order instead of
        size class list order. This is a much simpler convention in a world
        of many different size classes.

2011-02-18  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Andreas Kling.

        Added friend exception to Qt platform, which also compiles Windows.

        QtWebKit fails to compile on Windows XP with msvc-2008
        https://bugs.webkit.org/show_bug.cgi?id=54746

        * bytecode/CodeBlock.h:
        * runtime/RegExpObject.h:

2011-02-18  Geoffrey Garen  <ggaren@apple.com>

        (Rolled back in r79022 with crash fixed.)

        Reviewed by Sam Weinig.

        Use hashing instead of linear search in the conservative pointer test
        https://bugs.webkit.org/show_bug.cgi?id=54767
        
        SunSpider reports no change.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::destroy): No need to explicitly clear the blocks array,
        since freeBlock removes items for us.

        (JSC::MarkedSpace::freeBlock): Fixed a typo that always removed the last
        block from the block set instead of the block being freed. Changed to
        remove a block from our data structures before deallocating it, since
        this is slightly cleaner.

        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::contains): Variable-sized objects will use more,
        smaller blocks, so it's important for the contains check not to be O(n)
        in the number of blocks.

2011-02-18  chris reiss  <christopher.reiss@nokia.com>

        Reviewed by Andreas Kling.

        REGRESSION: Date.parse("Tue Nov 23 20:40:05 2010 GMT") returns NaN
        https://bugs.webkit.org/show_bug.cgi?id=49989

        updated test fast/js/script-tests/date-parse-test.js

        * wtf/DateMath.cpp:
        (WTF::parseDateFromNullTerminatedCharacters):

2011-02-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r79022.
        http://trac.webkit.org/changeset/79022
        https://bugs.webkit.org/show_bug.cgi?id=54775

        It broke the whole world (Requested by Ossy on #webkit).

        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::contains):

2011-02-18  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Dave Hyatt.

        Add support for dir=auto
        https://bugs.webkit.org/show_bug.cgi?id=50916

        Change defaultWritingDirection() to return if the writing direction
        was determined from a letter with strong directionality or not.

        * JavaScriptCore.exp:
        * JavaScriptCore.order:
        * wtf/text/StringImpl.cpp:
        (WTF::StringImpl::defaultWritingDirection):
        * wtf/text/StringImpl.h:
        * wtf/text/WTFString.h:
        (WTF::String::defaultWritingDirection):

2011-02-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Use hashing instead of linear search in the conservative pointer test
        https://bugs.webkit.org/show_bug.cgi?id=54767
        
        SunSpider reports no change.

        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::contains): Variable-sized objects will use more,
        smaller blocks, so it's important for the contains check not to be O(n)
        in the number of blocks.

2011-02-18  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Tightened some usage accounting code in MarkedSpace
        https://bugs.webkit.org/show_bug.cgi?id=54761
        
        SunSpider reports no change.

        * runtime/Heap.cpp:
        (JSC::Heap::Heap): Initialize the marked space high water mark on
        construction, instead of relying on some implicit subtleties to make
        not initializing it work out OK.

        * runtime/Heap.h: Fixed up includes.

        * runtime/MarkedBlock.h: Made firstAtom() static so clients can call it
        even without having allocated a block.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace): Don't pre-allocate a block, since this
        would be prohibitively expensive with multiple size classes.

        (JSC::MarkedSpace::allocateBlock):
        (JSC::MarkedSpace::freeBlock): Track allocated blocks in a hash set,
        since linear search in the contains check will be prohibitively
        expensive once we're using lots of smaller blocks.

        (JSC::MarkedSpace::allocate): Don't assume that we always have a block
        allocated, since we don't anymore. (See above.)

        (JSC::MarkedSpace::reset):
        * runtime/MarkedSpace.h: Updated for changes mentioned above.

2011-02-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Made object allocation secretly variable-sized (Shhhh!)
        https://bugs.webkit.org/show_bug.cgi?id=54721
        
        SunSpider reports no change.
        
        Internally, MarkedBlock now makes variable-sized allocations, even
        though MarkedSpace doesn't take advantage of this yet.

        * runtime/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock): No need to ASSERT that allocations are
        fixed-sized.

        * runtime/MarkedBlock.h: Shrunk the atom size so we can allocate things
        that are not multiples of 64 bytes.

2011-02-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Fixed some math errors when when using variable-sized cells
        https://bugs.webkit.org/show_bug.cgi?id=54717
        
        SunSpider reports no change.
        
        Computer Science Barbie says, "Math is not so hard afterall!"

        * runtime/JSCell.h:
        (JSC::JSCell::MarkedBlock::allocate): Round up when calculating the
        minimum number of atoms required for a cell, since rounding down
        will get you splinched.

        * runtime/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock):
        (JSC::MarkedBlock::sweep):
        * runtime/MarkedBlock.h:
        (JSC::MarkedBlock::forEach): Changed a bunch of != tests to < tests
        because m_endAtom is actually a fuzzy end -- iterating from firstAtom()
        may not hit m_endAtom exactly.

2011-02-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        A little more abstraction for MarkedSpace::contains
        https://bugs.webkit.org/show_bug.cgi?id=54715

        * runtime/MarkedBlock.h:
        (JSC::MarkedBlock::contains): Added a contains function, so MarkedSpace
        doesn't have to know how MarkedBlock tracks containment internally.

        * runtime/MarkedSpace.h:
        (JSC::MarkedSpace::contains): Call through to MarkedBlock to figure out
        if a cell that seems to be in a block is valid.

2011-02-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig.

        Removed the invariant that the last cell in a block is always marked
        https://bugs.webkit.org/show_bug.cgi?id=54713
        
        SunSpider reports no change.
        
        This adds one branch to allocation, but simplifies the mark invariant,
        especially in a world of variable-sized cells. Now, it really is true
        that any cell whose mark bit is set is a valid, live cell whose
        constructor has run and whose destructor has not run.

        * runtime/JSCell.h: 
        (JSC::JSCell::MarkedBlock::allocate): Changed this do-while into a while
        since we can no longer rely on a set mark bit to break out of this loop
        before it reaches the end of the block.

        * runtime/MarkedBlock.cpp:
        (JSC::MarkedBlock::MarkedBlock):
        (JSC::MarkedBlock::sweep): 
        * runtime/MarkedBlock.h:
        (JSC::MarkedBlock::isEmpty):
        (JSC::MarkedBlock::clearMarks):
        (JSC::MarkedBlock::markCount):
        (JSC::MarkedBlock::forEach): No need to set a special last mark bit.

2011-02-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r78856 and r78907.
        http://trac.webkit.org/changeset/78856
        http://trac.webkit.org/changeset/78907
        https://bugs.webkit.org/show_bug.cgi?id=54705

        These seem to break tests on 32-bit builds. (Requested by
        aroben on #webkit).

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * collector/handles/Global.h:
        (JSC::Global::internalSet):
        * collector/handles/Handle.h:
        (JSC::HandleTypes::getFromSlot):
        (JSC::HandleTypes::toJSValue):
        (JSC::HandleTypes::validateUpcast):
        (JSC::HandleConverter::operator->):
        (JSC::HandleConverter::operator*):
        (JSC::Handle::Handle):
        (JSC::Handle::get):
        * runtime/JSArray.cpp:
        (JSC::JSArray::sortNumeric):
        * runtime/JSObject.h:
        (JSC::JSObject::inlineGetOwnPropertySlot):
        * runtime/SlotAccessor.h: Removed.
        * runtime/WeakGCPtr.h:
        (JSC::WeakGCPtr::get):
        (JSC::WeakGCPtr::internalSet):
        * runtime/WriteBarrier.h:
        (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::WriteBarrierBase::setWithoutWriteBarrier):
        (JSC::WriteBarrier::WriteBarrier):

2011-02-17  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed.

        [Qt] Buildfix.

        * wtf/RetainPtr.h: Add missing PLATFORM(CF) guard.

2011-02-17  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Oliver Hunt.

        Made MarkedBlock variable-sized
        https://bugs.webkit.org/show_bug.cgi?id=54692
        
        SunSpider reports no change.
        
        Each MarkedBlock is now composed of a set of fixed-sized atoms, with one
        mark bit per atom. A given cell may be composed of one or more atoms.
        
        * runtime/Heap.cpp:
        (JSC::Heap::allocate): Made fixed-sizedness a property of MarkedSpace,
        bubbling it up from MarkedBlock, since MarkedBlock now supports variable-
        sizedness.

        * runtime/JSCell.h:
        (JSC::JSCell::MarkedBlock::allocate): Removed use of CELLS_PER_BLOCK and
        (implicit) one constants -- these quantities are not constant anymore.
        Updated for switch from cell to atom.

        * runtime/MarkedBlock.cpp:
        (JSC::MarkedBlock::create):
        (JSC::MarkedBlock::destroy):
        (JSC::MarkedBlock::MarkedBlock):
        (JSC::MarkedBlock::sweep):
        * runtime/MarkedBlock.h:
        (JSC::MarkedBlock::firstAtom):
        (JSC::MarkedBlock::atoms):
        (JSC::MarkedBlock::isAtomAligned):
        (JSC::MarkedBlock::blockFor):
        (JSC::MarkedBlock::isEmpty):
        (JSC::MarkedBlock::clearMarks):
        (JSC::MarkedBlock::size):
        (JSC::MarkedBlock::capacity):
        (JSC::MarkedBlock::atomNumber):
        (JSC::MarkedBlock::isMarked):
        (JSC::MarkedBlock::testAndSetMarked):
        (JSC::MarkedBlock::setMarked):
        (JSC::MarkedBlock::forEach): Same as above. Also removed use of CELL_SIZE
        and BLOCK_SIZE, and switched away from calling arbitrary pointers cells.

        * runtime/MarkedSpace.cpp:
        (JSC::MarkedSpace::MarkedSpace):
        (JSC::MarkedSpace::allocateBlock):
        (JSC::MarkedSpace::allocate):
        (JSC::MarkedSpace::reset):
        * runtime/MarkedSpace.h:
        (JSC::CollectorHeap::CollectorHeap):
        (JSC::MarkedSpace::contains): Updated for renames. Made fixed-sizedness
        a property of MarkedSpace.

2011-02-17  Oliver Hunt  <oliver@apple.com>

        Attempt to fix windows build

        * runtime/WriteBarrier.h:

2011-02-17  Oliver Hunt  <oliver@apple.com>

        Reviewed by Geoffrey Garen.

        Refactor WriteBarrier and DeprecatedPtr to have less code duplication.
        https://bugs.webkit.org/show_bug.cgi?id=54608

        Make use of the tricks used for Handle, et al to avoid duplicating all
        of the logic for DeprecatedPtr and WriteBarrier simply to support known
        vs. unknown types.

        * JavaScriptCore.xcodeproj/project.pbxproj:
        * collector/handles/Global.h:
        (JSC::Global::internalSet):
        * collector/handles/Handle.h:
        (JSC::Handle::Handle):
        (JSC::Handle::get):
        * runtime/JSArray.cpp:
        (JSC::JSArray::sortNumeric):
        * runtime/JSObject.h:
        (JSC::JSObject::inlineGetOwnPropertySlot):
        * runtime/SlotAccessor.h: Added.
        (JSC::SlotTypes::getFromBaseType):
        (JSC::SlotTypes::convertToBaseType):
        (JSC::SlotTypes::getFromSlot):
        (JSC::SlotTypes::toJSValue):
        (JSC::SlotTypes::validateUpcast):
        (JSC::SlotAccessor::operator->):
        (JSC::SlotAccessor::operator*):
        * runtime/WeakGCPtr.h:
        (JSC::WeakGCPtr::get):
        (JSC::WeakGCPtr::internalSet):
        * runtime/WriteBarrier.h:
        (JSC::DeprecatedPtr::DeprecatedPtr):
        (JSC::DeprecatedPtr::get):
        (JSC::DeprecatedPtr::slot):
        (JSC::DeprecatedPtr::operator=):
        (JSC::WriteBarrierTranslator::convertToStorage):
        (JSC::WriteBarrierTranslator::convertFromStorage):
        (JSC::WriteBarrierBase::set):
        (JSC::WriteBarrierBase::get):
        (JSC::WriteBarrierBase::clear):
        (JSC::WriteBarrierBase::slot):
        (JSC::WriteBarrierBase::operator UnspecifiedBoolType*):
        (JSC::WriteBarrierBase::operator!):
        (JSC::WriteBarrierBase::setWithoutWriteBarrier):
        (JSC::WriteBarrier::WriteBarrier):

2011-02-17  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Revert incorrect blind fix and restore previous working code.

        * wtf/wx/StringWx.cpp:
        (WTF::String::String):

2011-02-16  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Maciej Stachowiak.

        Intermittent crashes beneath MarkStack::drain
        https://bugs.webkit.org/show_bug.cgi?id=54614
        <rdar://problem/8971070>
        
        The crashes were caused by a GC happening after the global object's
        property table had grown (due to compilation), but before the properties
        had been fully initialized by program execution.

        * bytecompiler/BytecodeGenerator.cpp:
        (JSC::BytecodeGenerator::BytecodeGenerator): Explicitly resize the global
        object's register storage immediately, without waiting for program
        execution to do it for us. This ensures that the global object's count
        of global variables is consistent with the size of its global variable
        storage at all times, and it ensures that all global variables are
        properly initialized from the get-go.

        * runtime/JSGlobalObject.cpp:
        (JSC::JSGlobalObject::resizeRegisters):
        * runtime/JSGlobalObject.h: Added a helper function for growing the
        global object's register storage, and initializing new registers.

== Rolled over to ChangeLog-2011-02-16 ==
