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 ==
