JavaScriptCore/ChangeLog-2008-08-10
changeset 0 4f2f89ce4247
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/JavaScriptCore/ChangeLog-2008-08-10	Fri Sep 17 09:02:29 2010 +0300
@@ -0,0 +1,31482 @@
+2008-08-10  Jan Michael Alonzo  <jmalonzo@webkit.org>
+
+        Reviewed (and updated) by Alp Toker.
+
+        https://bugs.webkit.org/show_bug.cgi?id=16620
+        [GTK] Autotools make dist and make check support
+
+        Get make dist working.
+
+        Note that not all possible configurations have been tested yet.
+
+        * GNUmakefile.am:
+
+2008-08-09  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Sam Weinig.
+
+        Added same heap debug checks to more code paths.
+
+        * kjs/JSActivation.cpp:
+        (KJS::JSActivation::put):
+        (KJS::JSActivation::putWithAttributes):
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::putWithAttributes):
+        * kjs/JSObject.h:
+        (KJS::JSObject::putDirect):
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::symbolTablePut):
+        (KJS::JSVariableObject::symbolTablePutWithAttributes):
+
+2008-08-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Fix some style issues in the sampling tool.
+
+        * VM/SamplingTool.cpp:
+        (KJS::sleepForMicroseconds):
+        (KJS::SamplingTool::dump):
+
+2008-08-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Revision 35651, despite being a rather trivial change, introduced a
+        large regression on the regexp-dna SunSpider test. This regression
+        stemmed from an increase in the size of CodeBlock::dump(). There is
+        no reason for this method (and several related methods) to be compiled
+        in non-debug builds with the sampling tool disabled. This patch
+        conditionally compiles them, reversing the regression on SunSpider.
+
+        * JavaScriptCore.exp:
+        * VM/CodeBlock.cpp:
+        * VM/CodeBlock.h:
+        * VM/Machine.cpp:
+
+2008-08-08  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Bug 20330: JSCore crash loading any filehurricane media page
+        <https://bugs.webkit.org/show_bug.cgi?id=20330>
+
+        Fix a typo in the constant loading patch. Also, add a case for
+        op_unexpected_load to CodeBlock::dump().
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::addUnexpectedConstant):
+
+2008-08-08  Matt Lilek  <webkit@mattlilek.com>
+
+        Not reviewed, build fix.
+
+        * JavaScriptCore.exp:
+
+2008-08-08  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Cameron Zwarich.
+
+        Improve performance of arithmetic operators
+
+        Added a fast (non-virtual) mechanism to determine if a non-immediate JSValue*
+        is a JSNumberCell.  We then use this to allow improved specialisation in many
+        arithmetic operators.  SunSpider reports a 2.5% progression overall, with greater
+        than 10% progressions on a number of arithmetic heavy tests.
+
+        * VM/Machine.cpp:
+        (KJS::fastIsNumber):
+        (KJS::fastToInt32):
+        (KJS::fastToUInt32):
+        (KJS::jsLess):
+        (KJS::jsLessEq):
+        (KJS::jsAdd):
+        (KJS::Machine::privateExecute):
+        * kjs/JSNumberCell.h:
+        (KJS::JSNumberCell::fastToInt32):
+        (KJS::JSNumberCell::fastToUInt32):
+        * kjs/collector.cpp:
+        (KJS::allocateBlock):
+        (KJS::Heap::heapAllocate):
+        * kjs/collector.h:
+        (KJS::Heap::fastIsNumber):
+
+2008-08-06  Adam Roben  <aroben@apple.com>
+
+        Try to fix the Windows build bots
+
+        * API/JSBase.cpp: Touch this to force JSC to rebuild and re-copy the
+        WTF headers.
+
+2008-08-06  Tor Arne Vestbø  <tavestbo@trolltech.com>
+
+        Revert change 35595.
+
+        * wtf/RetainPtr.h:
+
+2008-08-06  Ariya Hidayat  <ariya.hidayat@trolltech.com>
+
+        Fix non-Mac build.
+
+        * wtf/RetainPtr.h: CoreFoundation only for PLATFORM(MAC)
+
+2008-08-06  Ariya Hidayat  <ariya.hidayat@trolltech.com>
+
+        Fix non-Mac build.
+
+        * wtf/RetainPtr.h: CoreFoundation only for PLATFORM(MAC)
+
+2008-08-06  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>
+
+        Reviewed by Darin. Landed by Cameron.
+
+        Bug 20272: typo in JavaScriptCore
+        <https://bugs.webkit.org/show_bug.cgi?id=20272>
+
+        Correct the documentation for op_not. (typo)
+        Fix #undef. (typo)
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-08-06  Cameron Zwarich  <cwzwarich@webkit.org>
+
+        Reviewed by Maciej.
+
+        Bug 20286: Load constants all at once instead of using op_load
+        <https://bugs.webkit.org/show_bug.cgi?id=20286>
+
+        Load constants all at once into temporary registers instead of using
+        individual instances of op_load.
+
+        This is a 2.6% speedup on SunSpider.
+
+        * JavaScriptCore.exp:
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        (KJS::CodeBlock::mark):
+        * VM/CodeBlock.h:
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::CodeGenerator):
+        (KJS::CodeGenerator::newTemporary):
+        (KJS::CodeGenerator::addConstant):
+        (KJS::CodeGenerator::addUnexpectedConstant):
+        (KJS::CodeGenerator::emitLoad):
+        (KJS::CodeGenerator::emitUnexpectedLoad):
+        (KJS::CodeGenerator::emitNewError):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::slideRegisterWindowForCall):
+        (KJS::Machine::unwindCallFrame):
+        (KJS::Machine::throwException):
+        (KJS::Machine::execute):
+        (KJS::Machine::privateExecute):
+        * VM/Machine.h:
+        * VM/Opcode.h:
+        * VM/RegisterID.h:
+        (KJS::RegisterID::RegisterID):
+        (KJS::RegisterID::makeConstant):
+        (KJS::RegisterID::isTemporary):
+        * kjs/NodeInfo.h:
+        * kjs/Parser.cpp:
+        (KJS::Parser::didFinishParsing):
+        * kjs/Parser.h:
+        (KJS::Parser::parse):
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::NullNode::emitCode):
+        (KJS::BooleanNode::emitCode):
+        (KJS::NumberNode::emitCode):
+        (KJS::StringNode::emitCode):
+        (KJS::ArrayNode::emitCode):
+        (KJS::DeleteResolveNode::emitCode):
+        (KJS::DeleteValueNode::emitCode):
+        (KJS::VoidNode::emitCode):
+        (KJS::ConstDeclNode::emitCodeSingle):
+        (KJS::ReturnNode::emitCode):
+        (KJS::ScopeNode::ScopeNode):
+        (KJS::ProgramNode::ProgramNode):
+        (KJS::ProgramNode::create):
+        (KJS::EvalNode::EvalNode):
+        (KJS::EvalNode::create):
+        (KJS::FunctionBodyNode::FunctionBodyNode):
+        (KJS::FunctionBodyNode::create):
+        (KJS::FunctionBodyNode::emitCode):
+        * kjs/nodes.h:
+        (KJS::ScopeNode::neededConstants):
+
+2008-08-05  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Cameron.
+
+        - add fast path for immediates to % operator, as we have for many other math ops
+        
+        This fixes handling for a 0 divisor relative to the last patch. Only an 0.2% speedup on SunSpider but
+        still a 1.4x win on Oliver's prime test.
+        
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-08-05  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Darin.
+
+        Bug 20293: Crash in JavaScript codegen for eval("const a;")
+        <https://bugs.webkit.org/show_bug.cgi?id=20293>
+
+        Correctly handle constant declarations in eval code with no initializer.
+
+        * kjs/nodes.cpp:
+        (KJS::ConstDeclNode::emitCodeSingle):
+
+2008-08-05  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Roll out r35555 because of correctness issues.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-08-05  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff.
+        
+        - add fast path for immediates to % operator, as we have for many other math ops
+        
+        0.6% speedup on SunSpider. 1.4x speedup on a prime testing torture test that Oliver whipped up.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-07-31  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Cameron Zwarich.
+
+        Bug 19359: JavaScriptCore behaves differently from FF2/3 and IE when handling context in catch statement
+        <https://bugs.webkit.org/show_bug.cgi?id=19359>
+
+        Make our catch behave like Firefox and IE, we do this by using a StaticScopeObject
+        instead of a generic JSObject for the scope node.  We still don't make use of the
+        fact that we have a static scope inside the catch block, so the internal performance
+        of the catch block is not improved, even though technically it would be possible to
+        do so.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitPushNewScope):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::createExceptionScope):
+        (KJS::Machine::privateExecute):
+        * VM/Machine.h:
+        * VM/Opcode.h:
+        * kjs/JSStaticScopeObject.cpp:
+        (KJS::JSStaticScopeObject::toThisObject):
+        (KJS::JSStaticScopeObject::put):
+        * kjs/JSStaticScopeObject.h:
+        * kjs/nodes.cpp:
+        (KJS::TryNode::emitCode):
+
+2008-08-02  Rob Gowin  <robg@gowin.net>
+
+        Reviewed by Eric Seidel.
+
+        Added JavaScriptCore/API/WebKitAvailability to list of files in
+        javascriptcore_h_api.
+
+        * GNUmakefile.am:
+
+2008-08-01  Alexey Proskuryakov  <ap@webkit.org>
+
+        Rubber-stamped by Maciej.
+
+        Remove JSGlobalData::DataInstance. It was only needed when we had per-thread JSGlobalData
+        instances.
+
+        * kjs/JSGlobalData.h:
+
+2008-07-31  Kevin Ollivier <kevino@theolliviers.com>
+
+        Second attempt at Windows/wx build fix. Instead of avoiding inclusion of windows.h,
+        use defines, etc. to avoid conflicts in each affected file. Also, change PLATFORM(WIN)
+        to PLATFORM(WIN_OS) so that other ports using Windows headers get the right impls.
+
+        * VM/SamplingTool.cpp:
+        * wtf/Threading.h:
+
+2008-07-31  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Adam.
+
+        Fix Windows build.
+        
+        * kjs/collector.h:
+        * wtf/FastMalloc.cpp:
+
+2008-07-31  Csaba Osztrogonac  <oszi@inf.u-szeged.hu>
+
+        Reviewed by Simon.
+
+        Bug 20170: [Qt] missing namespace defines in JavaScriptCore.pro
+        <https://bugs.webkit.org/show_bug.cgi?id=20170>
+
+        * JavaScriptCore.pro: Added missing define.
+
+2008-07-31  Alexey Proskuryakov  <ap@webkit.org>
+
+        Rubber-stamped by Maciej.
+
+        Eliminate JSLock (it was already disabled, removing the stub implementaion and all
+        call sites now).
+
+        * API/JSBase.cpp:
+        (JSEvaluateScript):
+        (JSCheckScriptSyntax):
+        (JSGarbageCollect):
+        * API/JSCallbackConstructor.cpp:
+        (KJS::constructJSCallback):
+        * API/JSCallbackFunction.cpp:
+        (KJS::JSCallbackFunction::call):
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::::init):
+        (KJS::::getOwnPropertySlot):
+        (KJS::::put):
+        (KJS::::deleteProperty):
+        (KJS::::construct):
+        (KJS::::hasInstance):
+        (KJS::::call):
+        (KJS::::getPropertyNames):
+        (KJS::::toNumber):
+        (KJS::::toString):
+        (KJS::::staticValueGetter):
+        (KJS::::callbackGetter):
+        * API/JSContextRef.cpp:
+        (JSGlobalContextCreateInGroup):
+        (JSGlobalContextRetain):
+        (JSGlobalContextRelease):
+        * API/JSObjectRef.cpp:
+        (JSObjectMake):
+        (JSObjectMakeFunctionWithCallback):
+        (JSObjectMakeConstructor):
+        (JSObjectMakeFunction):
+        (JSObjectHasProperty):
+        (JSObjectGetProperty):
+        (JSObjectSetProperty):
+        (JSObjectGetPropertyAtIndex):
+        (JSObjectSetPropertyAtIndex):
+        (JSObjectDeleteProperty):
+        (JSObjectCallAsFunction):
+        (JSObjectCallAsConstructor):
+        (JSObjectCopyPropertyNames):
+        (JSPropertyNameArrayRelease):
+        (JSPropertyNameAccumulatorAddName):
+        * API/JSStringRef.cpp:
+        (JSStringRelease):
+        * API/JSValueRef.cpp:
+        (JSValueIsEqual):
+        (JSValueIsInstanceOfConstructor):
+        (JSValueMakeNumber):
+        (JSValueMakeString):
+        (JSValueToNumber):
+        (JSValueToStringCopy):
+        (JSValueToObject):
+        (JSValueProtect):
+        (JSValueUnprotect):
+        * ForwardingHeaders/JavaScriptCore/JSLock.h: Removed.
+        * GNUmakefile.am:
+        * JavaScriptCore.exp:
+        * JavaScriptCore.order:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * kjs/AllInOneFile.cpp:
+        * kjs/JSGlobalData.cpp:
+        (KJS::JSGlobalData::JSGlobalData):
+        * kjs/JSGlobalData.h:
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::~JSGlobalObject):
+        (KJS::JSGlobalObject::init):
+        * kjs/JSLock.cpp: Removed.
+        * kjs/JSLock.h: Removed.
+        * kjs/Shell.cpp:
+        (functionGC):
+        (jscmain):
+        * kjs/collector.cpp:
+        (KJS::Heap::~Heap):
+        (KJS::Heap::heapAllocate):
+        (KJS::Heap::setGCProtectNeedsLocking):
+        (KJS::Heap::protect):
+        (KJS::Heap::unprotect):
+        (KJS::Heap::collect):
+        * kjs/identifier.cpp:
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::checkSyntax):
+        (KJS::Interpreter::evaluate):
+
+2008-07-31  Alexey Proskuryakov  <ap@webkit.org>
+
+        Rubber-stamped by Oliver Hunt.
+
+        Fix the Mac project to not display "test/" as part of file name for tests.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2008-07-31  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Alexey Proskuryakov.
+        
+        Rename USE(MULTIPLE_THREADS) to ENABLE(JSC_MULTIPLE_THREADS)
+        to better match the use/enable pattern (and better describe
+        the usage of the feature in question.)
+        
+        I also fixed a couple other ENABLE_ macros to be pre-processor
+        definition override-able to match the rest of the ENABLE_ macros
+        since it seems to be our convention that build systems can set
+        ENABLE_ macros in Makefiles.
+
+        * kjs/InitializeThreading.cpp:
+        (KJS::initializeThreadingOnce):
+        * kjs/JSGlobalData.cpp:
+        (KJS::JSGlobalData::JSGlobalData):
+        (KJS::JSGlobalData::~JSGlobalData):
+        * kjs/MathObject.cpp:
+        * kjs/collector.cpp:
+        (KJS::Heap::Heap):
+        (KJS::Heap::~Heap):
+        (KJS::allocateBlock):
+        (KJS::Heap::markStackObjectsConservatively):
+        * kjs/collector.h:
+        * kjs/dtoa.cpp:
+        (KJS::pow5mult):
+        (KJS::rv_alloc):
+        (KJS::freedtoa):
+        (KJS::dtoa):
+        * wtf/FastMalloc.cpp:
+        * wtf/Platform.h:
+        * wtf/RefCountedLeakCounter.cpp:
+
+2008-07-30  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Mark Rowe.
+        
+        Try to clean up our usage of USE(MULTIPLE_THREADS) vs. USE(PTHREADS) a little.
+        It looks like JSC assumes that if MULTIPLE_THREADS is defined, then pthreads will always be available
+        I'm not sure that's always the case for gtk, certainly not for Windows.  We should eventually go back
+        and fix wtf/Threading.h to cover all these cases some day.
+
+        * kjs/JSLock.cpp:
+        * kjs/collector.h:
+        * wtf/Platform.h:
+
+2008-07-30  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Oliver.
+        
+        MSVC warns when structs are called classes or vice versa.
+        Make all the source refer to JSGlobalData as a class.
+
+        * kjs/CommonIdentifiers.h:
+        * kjs/JSGlobalData.h:
+        * kjs/Parser.h:
+        * kjs/lexer.h:
+
+2008-07-30  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoff Garen.
+
+        Add consistency checks to UString to document and enforce its design.
+
+        * kjs/ustring.cpp:
+        (KJS::UString::Rep::create):
+        (KJS::UString::Rep::destroy):
+        (KJS::UString::Rep::checkConsistency):
+        (KJS::UString::expandCapacity):
+        (KJS::UString::expandPreCapacity):
+        (KJS::UString::UString):
+        (KJS::UString::spliceSubstringsWithSeparators):
+        (KJS::UString::append):
+        * kjs/ustring.h:
+        (KJS::UString::Rep::checkConsistency):
+
+2008-07-30  Gavin Barraclough  <barraclough@apple.com>
+
+        Reviewed by Geoff Garen.
+
+        Fixes for Windows and non-AllInOne file build with SamplingTool, plus review fixes.
+
+        * GNUmakefile.am:              Adding SamplingTool.cpp to build.
+        * JavaScriptCore.exp:          Export hooks to init & control SamplingTool.
+        * JavaScriptCore.pri:          Adding SamplingTool.cpp to build.
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Adding SamplingTool.cpp to build.
+        * JavaScriptCore.xcodeproj/project.pbxproj: Adding SamplingTool.cpp to build.
+        * JavaScriptCoreSources.bkl:   Adding SamplingTool.cpp to build.
+        * VM/Machine.cpp:              MACHINE_SAMPLING_callingNativeFunction renamed MACHINE_SAMPLING_callingHostFunction
+        * VM/Machine.h:
+        * VM/Opcode.cpp:               SamplingTool moved to SamplingTool.cpp/.h, opcodeNames generated from FOR_EACH_OPCODE_ID.
+        * VM/Opcode.h:
+        * VM/SamplingTool.cpp:         Added .cpp/.h for SamplingTool.
+        * VM/SamplingTool.h:
+        * kjs/Shell.cpp:               Switched SAMPLING_TOOL_ENABLED to ENABLE_SAMPLING_TOOL.
+        * wtf/Platform.h:              Added ENABLE_SAMPLING_TOOL config option.
+        * kjs/nodes.cpp:               Header include to fix non-AllInOne builds.
+
+2008-07-30  Ariya Hidayat  <ariya.hidayat@trolltech.com>
+
+        Reviewed by Alexey Proskuryakov.
+
+        Fix compilation without multi-threading support.
+
+        * kjs/collector.cpp:
+        (KJS::Heap::Heap):
+
+2008-07-30  Anders Carlsson  <andersca@apple.com>
+        
+        Add WebKitAvailability.h forwarding header.
+        
+        * ForwardingHeaders/JavaScriptCore/WebKitAvailability.h: Added.
+
+2008-07-30  Anders Carlsson  <andersca@apple.com>
+
+        Fix the else.
+        
+        * API/WebKitAvailability.h:
+
+2008-07-30  Anders Carlsson  <andersca@apple.com>
+
+        * API/WebKitAvailability.h:
+        Fix Windows (and other non-Mac builds).
+        
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        Add WebKitAvailability.h to the project.
+
+2008-07-30  Anders Carlsson  <andersca@apple.com>
+
+        One step closer towards fixing the Windows build.
+        
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
+        Make sure to copy WebKitAvailability.h
+
+2008-07-29  Gavin Barraclough  <barraclough@apple.com>
+
+        Reviewed by Geoff Garen.
+
+        Bug 20209: Atomize constant strings
+        <https://bugs.webkit.org/show_bug.cgi?id=20209>
+
+        Prevents significant performance degradation seen when a script contains multiple
+        identical strings that are used as keys to identify properties on objects.
+
+        No performance change on SunSpider.
+
+        * kjs/nodes.cpp: Atomize constant strings.
+
+2008-07-30  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Alexey Proskuryakov.
+
+        <rdar://problem/6111648> JavaScript exceptions fail if the scope chain includes the global object
+
+        In an attempt to remove the branch I just added to KJS::depth I
+        used the existence of a Variable Object at a point in the scope
+        chain as an indicator of function or global scope activation.
+        However this assumption results in incorrect behaviour if the
+        global object is injected into the scope chain with 'with'.
+
+        * VM/Machine.cpp:
+        (KJS::depth):
+
+2008-07-30  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoff Garen.
+
+        Don't call JSGarbageCollect() on a released context.
+
+        * API/testapi.c: (main):
+
+2008-07-29  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoff Garen.
+
+        Implement JSContextGroup APIs to make concurrent execution possible for
+        JavaScriptCore clients.
+
+        This changes the behavior of JSGlobalContextCreate(), so that it now uses a private context
+        group for each context, making JSlock implicit locking unnecessary.
+
+        * API/JSContextRef.h:
+        * API/JSContextRef.cpp:
+        (JSContextGroupCreate):
+        (JSContextGroupRetain):
+        (JSContextGroupRelease):
+        (JSGlobalContextCreate):
+        (JSGlobalContextCreateInGroup):
+        (JSGlobalContextRelease):
+        (JSContextGetGroup):
+        Added new methods. JSGlobalContextCreate() calls JSGlobalContextCreateInGroup() now.
+
+        * API/APICast.h: (toJS): (toRef): Added converters for JSContextGroupRef.
+        * API/JSBase.cpp: (JSGarbageCollect): JSGarbageCollect(0) is now a no-op, and the passed in
+        context is actually used.
+
+        * API/JSBase.h: Aded a typedef for JSContextGroupRef. Updated documentation for
+        JSGarbageCollect().
+
+        * JavaScriptCore.exp: Removed JSGlobalData::sharedInstance().
+
+        * kjs/JSGlobalData.cpp:
+        * kjs/JSGlobalData.h:
+        Removed support for JSGlobalData shared instance. JSGlobalData::isSharedInstance member
+        variable still remains, to be deleted in a followup patch.
+
+        * kjs/JSLock.cpp: (KJS::JSLock::JSLock): Disabled JSLock, to be deleted in a follow-up patch.
+        
+        * kjs/collector.cpp:
+        (KJS::Heap::markOtherThreadConservatively): Removed an assertion that referenced
+        JSGlobalData::sharedInstance.
+
+        * kjs/collector.h: Made Heap destructor public, so that JSContextRelease can use it.
+
+2008-07-29  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoff Garen.
+
+        Fix a leak of ThreadRegistrar objects.
+
+        As the heap is usually deleted when registered threads still exist, ThreadSpecific doesn't
+        have a chance to clean up per-thread object. Switched to native pthread calls, storing a
+        plain pointer that doesn't require cleanup.
+
+        * kjs/collector.cpp:
+        (KJS::PlatformThread::PlatformThread):
+        (KJS::Heap::Thread::Thread):
+        (KJS::Heap::Heap):
+        (KJS::Heap::~Heap):
+        (KJS::Heap::registerThread):
+        (KJS::Heap::unregisterThread):
+        * kjs/collector.h:
+
+2008-07-29  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Sam Weinig.
+
+        https://bugs.webkit.org/show_bug.cgi?id=20169
+        Memory allocated with fastMalloc is freed with delete
+
+        * VM/JSPropertyNameIterator.cpp:
+        (KJS::JSPropertyNameIterator::invalidate): Free the array properly.
+        (KJS::JSPropertyNameIterator::~JSPropertyNameIterator): Delete the array by calling
+        invalidate().
+
+2008-07-29  Mark Rowe  <mrowe@apple.com>
+
+        Attempt to fix the Qt build.
+
+        * wtf/ThreadingQt.cpp: Add the extra argument to createThread.
+
+2008-07-29  Adam Roben  <aroben@apple.com>
+
+        Change Vector::find to return an index instead of an iterator
+
+        Indices are more natural than iterators when working with Vector.
+
+        Reviewed by John Sullivan.
+
+        * wtf/Vector.h:
+        (WTF::Vector::find): Changed to iterate the Vector manually and return
+        the index of the found item, rather than an iterator. When the item
+        could not be found, we return WTF::notFound.
+
+2008-07-29  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        * wtf/ThreadingWin.cpp:
+        (WTF::setThreadName): Move a misplaced assertion to here...
+        (WTF::createThread): ...from here.
+
+2008-07-29  Adam Roben  <aroben@apple.com>
+
+        Add support for setting thread names on Windows
+
+        These thread names make it much easier to identify particular threads
+        in Visual Studio's Threads panel.
+
+        WTF::createThread now takes a const char* representing the thread's
+        name. On Windows, we throw a special exception to set this string as
+        the thread's name. Other platforms do nothing with this name for now.
+
+        Reviewed by Anders Carlsson.
+
+        * JavaScriptCore.exp: Export the new version of createThread that
+        takes 3 arguments (the old one continues to be exported for backward
+        compatibility).
+        * wtf/Threading.h: Add a threadName argument to createThread.
+
+        * wtf/ThreadingGtk.cpp:
+        (WTF::createThread):
+        * wtf/ThreadingNone.cpp:
+        (WTF::createThread):
+        Updated for function signature change.
+
+        * wtf/ThreadingPthreads.cpp:
+        (WTF::createThread): Updated for function signature change. We keep
+        around the old 2-argument version of createThread for backward
+        compatibility.
+
+        * wtf/ThreadingWin.cpp:
+        (WTF::setThreadName): Added. This function's implementation came from
+        MSDN.
+        (WTF::initializeThreading): Set the name of the main thread.
+        (WTF::createThread): Call setThreadName. We keep around the old
+        2-argument version of createThread for backward compatibility.
+
+2008-07-29  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Oliver Hunt.
+
+        Store UString::Rep::isStatic bit in identifierTable pointer instead of reportedCost for
+        slightly nicer code and a 0.5% SunSpider improvement.
+
+        * API/JSClassRef.cpp:
+        (OpaqueJSClass::~OpaqueJSClass):
+        (OpaqueJSClassContextData::OpaqueJSClassContextData):
+        * API/JSStringRef.cpp:
+        (JSStringRelease):
+        * kjs/PropertyNameArray.cpp:
+        (KJS::PropertyNameArray::add):
+        * kjs/identifier.cpp:
+        (KJS::IdentifierTable::~IdentifierTable):
+        (KJS::IdentifierTable::add):
+        (KJS::Identifier::addSlowCase):
+        (KJS::Identifier::remove):
+        * kjs/identifier.h:
+        (KJS::Identifier::add):
+        * kjs/ustring.cpp:
+        (KJS::):
+        (KJS::UString::Rep::create):
+        (KJS::UString::Rep::destroy):
+        * kjs/ustring.h:
+        (KJS::UString::Rep::identifierTable):
+        (KJS::UString::Rep::setIdentifierTable):
+        (KJS::UString::Rep::isStatic):
+        (KJS::UString::Rep::setStatic):
+        (KJS::UString::cost):
+
+2008-07-28  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Renamed "ConstructTypeNative" => "ConstructTypeHost".
+        
+2008-07-26  Mark Rowe  <mrowe@apple.com>
+
+        Speculative fix for the wx build.
+
+        * JavaScriptCoreSources.bkl:  Add JSStaticScopeObject.cpp to the list of source files.
+
+2008-07-25  Oliver Hunt  <oliver@apple.com>
+
+        RS=Cameron Zwarich.
+
+        Whoops, forgot to save style correction.
+
+        * kjs/JSStaticScopeObject.h:
+
+2008-07-25  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Cameron Zwarich.
+
+        Bug 19718: Named anonymous functions are slow accessing global variables
+        <https://bugs.webkit.org/show_bug.cgi?id=19718>
+
+        To fix this we switch over to an activation-like scope object for
+        on which we attach the function name property, and add logic to 
+        prevent cross scope assignment to read only properties.
+
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::findScopedProperty):
+        (KJS::CodeGenerator::emitResolve):
+        * VM/CodeGenerator.h:
+        * kjs/AllInOneFile.cpp:
+        * kjs/JSStaticScopeObject.cpp: Added.
+        (KJS::JSStaticScopeObject::putWithAttributes):
+        (KJS::JSStaticScopeObject::isDynamicScope):
+        (KJS::JSStaticScopeObject::~JSStaticScopeObject):
+        (KJS::JSStaticScopeObject::getOwnPropertySlot):
+        * kjs/JSStaticScopeObject.h: Added.
+        (KJS::JSStaticScopeObject::JSStaticScopeObjectData::JSStaticScopeObjectData):
+        (KJS::JSStaticScopeObject::JSStaticScopeObject):
+        * kjs/nodes.cpp:
+        (KJS::FunctionCallResolveNode::emitCode):
+        (KJS::PostfixResolveNode::emitCode):
+        (KJS::PrefixResolveNode::emitCode):
+        (KJS::ReadModifyResolveNode::emitCode):
+        (KJS::AssignResolveNode::emitCode):
+        (KJS::FuncExprNode::makeFunction):
+
+2008-07-25  kevino  <kevino@theolliviers.com>
+
+        wx build fix for Win.
+        
+        On wx/Win, including windows.h in Threading.h causes multiply-defined symbol errors
+        for libjpeg and wx, and also wx needs to include windows.h itself first for wx
+        includes to work right. So until we can find a better solution to this problem,
+        on wx, we work around the need to include windows.h here.
+
+        * wtf/Threading.h:
+
+2008-07-25  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        * JavaScriptCore.vcproj/testapi/testapi.vcproj: Add API/ to the
+        include path.
+
+2008-07-25  Simon Hausmann  <hausmann@webkit.org>
+
+        Fix the build of jsc on Qt/Windows, make sure os-win32 is in the
+        include search path (added by WebKit.pri).
+
+        * kjs/jsc.pro:
+
+2008-07-25  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Simon Hausmann.
+
+        Move JavaScriptCore API tests into a subdirectory of their own to avoid header name
+        conflicts and developer confusion.
+
+        * API/JSNode.c: Removed.
+        * API/JSNode.h: Removed.
+        * API/JSNodeList.c: Removed.
+        * API/JSNodeList.h: Removed.
+        * API/Node.c: Removed.
+        * API/Node.h: Removed.
+        * API/NodeList.c: Removed.
+        * API/NodeList.h: Removed.
+        * API/minidom.c: Removed.
+        * API/minidom.html: Removed.
+        * API/minidom.js: Removed.
+        * API/testapi.c: Removed.
+        * API/testapi.js: Removed.
+        * API/tests: Added.
+        * API/tests/JSNode.c: Copied from JavaScriptCore/API/JSNode.c.
+        * API/tests/JSNode.h: Copied from JavaScriptCore/API/JSNode.h.
+        * API/tests/JSNodeList.c: Copied from JavaScriptCore/API/JSNodeList.c.
+        * API/tests/JSNodeList.h: Copied from JavaScriptCore/API/JSNodeList.h.
+        * API/tests/Node.c: Copied from JavaScriptCore/API/Node.c.
+        * API/tests/Node.h: Copied from JavaScriptCore/API/Node.h.
+        * API/tests/NodeList.c: Copied from JavaScriptCore/API/NodeList.c.
+        * API/tests/NodeList.h: Copied from JavaScriptCore/API/NodeList.h.
+        * API/tests/minidom.c: Copied from JavaScriptCore/API/minidom.c.
+        * API/tests/minidom.html: Copied from JavaScriptCore/API/minidom.html.
+        * API/tests/minidom.js: Copied from JavaScriptCore/API/minidom.js.
+        * API/tests/testapi.c: Copied from JavaScriptCore/API/testapi.c.
+        * API/tests/testapi.js: Copied from JavaScriptCore/API/testapi.js.
+        * GNUmakefile.am:
+        * JavaScriptCore.vcproj/testapi/testapi.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2008-07-25  Simon Hausmann  <hausmann@webkit.org>
+
+        Prospective WX build fix, add JavaScriptCore/API to the include search
+        path.
+
+        * jscore.bkl:
+
+2008-07-25  Simon Hausmann  <hausmann@webkit.org>
+
+        Rubber-stamped by Lars.
+
+        Fix the build on Windows. operator new for ArgList is implemented using fastMalloc()
+        but operator delete was not implemented. Unfortunately MSVC decides to call/reference
+        the function, so a simple implementation using fastFree() fixes the build.
+
+        * kjs/ArgList.h:
+        (KJS::ArgList::operator delete):
+
+2008-07-25  Simon Hausmann  <hausmann@webkit.org>
+
+        Discussed with and rubber-stamped by Lars.
+
+        Fix the build system for the Qt port.
+
+        Recent JavaScriptCore changes require the addition of JavaScriptCore/API to the
+        include search path. With a build process that combines JavaScriptCore and
+        WebCore in one build process/Makefile the existance of
+        JavaScriptCore/API/Node.h and WebCore/dom/Node.h causes include conflicts.
+
+        This commit solves this by introducing a separate build of JavaScriptCore into
+        a static library.
+
+        As a result of the split-up a race-condition due to broken dependencies of
+        regular source files to header files of generated sources showed up very
+        frequently when doing parallel builds (which the buildbot does). This commit at
+        the same time tries to address the dependency problem by making the
+        addExtraCompiler() function also generate a pseudo extra compiler that
+        represents the header file output, so that qmake is aware of the creation of
+        the header file for dependency calculation.
+
+        At the same time I removed a lot of cruft from the pro files to ease maintenance.
+
+        * JavaScriptCore.pri:
+        * JavaScriptCore.pro: Added.
+        * kjs/jsc.pro:
+
+2008-07-24  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Fixed a strict aliasing violation, which caused hash tables with floating
+        point keys not to find items that were indeed in the tables
+        (intermittently, and only in release builds, of course).
+        
+        SunSpider reports no change.
+        
+        This bug doesn't seem to affect any existing code, but it causes obvious
+        crashes in some new code I'm working on.
+
+        * wtf/HashFunctions.h:
+        (WTF::FloatHash::hash): Use a union when punning between a float / double
+        and an unsigned (bucket of bits). With strict aliasing enabled, unions
+        are the only safe way to do this kind of type punning.
+
+        * wtf/HashTable.h: When rehashing, ASSERT that the item we just added to
+        the table is indeed in the table. In the buggy case described above, this
+        ASSERT fires.
+
+2008-07-24  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Alexey Proskuryakov.
+
+        Bug 20142: REGRESSION(r35245): /=/ weirdness
+        <https://bugs.webkit.org/show_bug.cgi?id=20142>
+
+        When adding all the meta data needed for exception error messages
+        I accidentally clobbered the handling of regex beginning with /=.
+
+        * kjs/grammar.y:
+
+2008-07-23  Alp Toker  <alp@nuanti.com>
+
+        Build fix after r35293: Add API/ to the include path.
+
+        * GNUmakefile.am:
+
+2008-07-23  Adam Roben  <aroben@apple.com>
+
+        Windows build fixes
+
+        Build fix after r35293:
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add API/
+        to the include path.
+
+        Build fix after r35305:
+
+        * VM/Machine.cpp:
+        * VM/Machine.h:
+        * VM/Opcode.cpp:
+        * VM/Opcode.h:
+        Completely compile out all sampler-related code when
+        SAMPLING_TOOL_ENABLED is 0. The sampler code can't be compiled 1) on
+        non-AllInOne configurations due to circular header dependencies, and
+        2) on platforms that don't have a usleep() function, such as Windows.
+
+2008-07-23  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff Garen and Sam Weinig.
+
+        Improve switch performance.
+
+        Improve switch performance by converting to a hashmap based jump
+        table to avoid the sequence of dispatches that would otherwise be
+        needed.  This results in a 9-19x performance win for string switches
+        based on ad hoc testing, and a 6x improvement for integer switch
+        statements.  SunSpider reports a 1.2% progression.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        (KJS::SimpleJumpTable::offsetForValue):
+        * VM/CodeBlock.h:
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::beginSwitch):
+        (KJS::prepareJumpTableForImmediateSwitch):
+        (KJS::prepareJumpTableForCharacterSwitch):
+        (KJS::prepareJumpTableForStringSwitch):
+        (KJS::CodeGenerator::endSwitch):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::offsetForStringSwitch):
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.cpp:
+        (KJS::):
+        * VM/Opcode.h:
+        * kjs/JSImmediate.h:
+        * kjs/nodes.cpp:
+        (KJS::):
+        (KJS::processClauseList):
+        (KJS::CaseBlockNode::tryOptimisedSwitch):
+        (KJS::CaseBlockNode::emitCodeForBlock):
+        * kjs/nodes.h:
+        (KJS::SwitchInfo::):
+
+2008-07-23  Gavin Barraclough  <barraclough@apple.com>
+
+        Reviewed by Geoff Garen.
+
+        Sampling tool to analyze cost of instruction execution and identify hot regions of JS code.
+        Enable Switches by setting SAMPLING_TOOL_ENABLED in Opcode.h.
+
+        * JavaScriptCore.exp: Export symbols for Shell.cpp.
+        * VM/Machine.cpp:     Added sampling hooks.
+        * VM/Machine.h:       Machine contains a pointer to a sampler, when sampling.
+        * VM/Opcode.cpp:      Tool implementation.
+        * VM/Opcode.h:        Tool declaration.
+        * kjs/Shell.cpp:      Initialize the sampler, if enabled.
+        * kjs/nodes.cpp:      Added sampling hooks.
+
+2008-07-23  Gabor Loki  <loki@inf.u-szeged.hu>
+
+        Bug 20097: [Qt] 20% Sunspider slow-down
+
+        <https://bugs.webkit.org/show_bug.cgi?id=20097>
+
+        Reviewed by Simon Hausmann.
+
+        * kjs/jsc.pro: Added missing NDEBUG define for release builds.
+
+2008-07-23  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoff Garen.
+
+        JSClassRef is created context-free, but gets infatuated with the first context it sees.
+
+        The implicit API contract is that JSClassRef can be used with any context on any thread.
+        This no longer worked, because UStrings in the class were turned into per-context
+        identifiers, and the cached JSObject prototype was tied to JSGlobalData, too.
+
+        * API/JSClassRef.h: Made a separate struct for context-dependent parts of OpaqueJSClass.
+        * API/JSClassRef.cpp:
+        (OpaqueJSClass::OpaqueJSClass): Updated for renames and changed member variable order.
+        (OpaqueJSClass::~OpaqueJSClass): Assert that string members are not identifiers.
+        (clearReferenceToPrototype): Update for the new reference location.
+        (OpaqueJSClassContextData::OpaqueJSClassContextData): Make a deep copy of all strings.
+        (OpaqueJSClass::contextData): Added a function that finds the per-context part of
+        OpaqueJSClass in JSGlobalData, or creates it if not found.
+        (OpaqueJSClass::className): Always make a deep copy. Callers of this function do not have
+        a way to access JSGlobalData, so a per-context copy could not be made.
+        (OpaqueJSClass::staticValues): Updated for new data location.
+        (OpaqueJSClass::staticFunctions): Ditto.
+        (OpaqueJSClass::prototype): Changed to take an internal type for consistency.
+
+        * kjs/JSGlobalData.cpp:
+        (KJS::JSGlobalData::JSGlobalData):
+        (KJS::JSGlobalData::~JSGlobalData):
+        * kjs/JSGlobalData.h:
+        Keep a HashMap to access per-context JSClass data given a pointr to the shared part.
+
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::::className):
+        (KJS::::getOwnPropertySlot):
+        (KJS::::put):
+        (KJS::::deleteProperty):
+        (KJS::::getPropertyNames):
+        (KJS::::staticValueGetter):
+        (KJS::::staticFunctionGetter):j
+        Use function accessors instead of accessing OpaqueJSClass members directly.
+
+        * API/JSContextRef.cpp: (JSGlobalContextCreate): Updated for the change in
+        OpaqueJSClass::prototype() argument type.
+
+        * API/JSObjectRef.cpp:
+        (JSObjectMake): Updated for the change in OpaqueJSClass::prototype() argument type.
+        (JSObjectMakeConstructor): Ditto.
+
+2008-07-23  Alexey Proskuryakov  <ap@webkit.org>
+
+        Build fix.
+
+        * kjs/ArgList.h: (KJS::ArgList::operator new): removed an extraneous "ArgList::" inside the
+        class definition.
+
+2008-07-22  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt and Sam Weinig.
+
+        Next step toward putting doubles in registers: Prepare the Register class
+        and its clients for registers that don't contain JSValue*s.
+        
+        This means a few things:
+        
+        1. Register::jsValue() clients, including ArgList clients, must now supply
+        an ExecState* when accessing an entry in an ArgList, in case the entry
+        will need to create a JSValue* on the fly.
+        
+        2. Register clients that definitely don't want to create a JSValue* on
+        the fly now use different APIs: getJSValue() for clients that know
+        the register contains a JSValue*, and v() for clients who just want a
+        void*.
+        
+        3. I had to change some headers around in order to resolve dependency
+        problems created by using a Register in the ArgList header.
+        
+        SunSpider reports no change.
+        
+2008-07-22  Gavin Barraclough  <barraclough@apple.com>
+
+        Reviewed by Alexey Proskuryakov.
+
+        Prevent integer overflow when reallocating storage vector for arrays.
+
+        Sunspider reports 1.005x as fast (no change expected).
+
+        * kjs/JSArray.cpp:
+
+2008-07-21  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        <rdar://problem/6091287> Revamp the handling of CFBundleShortVersionString to be fixed at the major component of the version number.
+
+        * Configurations/Version.xcconfig:
+        * Info.plist:
+
+2008-07-21  Adam Roben  <aroben@apple.com>
+
+        Add Vector::find
+
+        This is a convenience wrapper around std::find.
+
+        Reviewed by Anders Carlsson.
+
+        * wtf/Vector.h:
+
+2008-07-19  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Cameron Zwarich.
+
+        Bug 20104: Exception in tables/mozilla_expected_failures/bugs/bug92868_1.html includes the equals operator in the quoted expression
+        <https://bugs.webkit.org/show_bug.cgi?id=20104>
+
+        To make this correct we make the dot and bracket assign nodes emit the information to indicate
+        the failure range is the dot/bracket accessor.
+
+        * kjs/grammar.y:
+
+2008-07-18  Steve Falkenburg  <sfalken@apple.com>
+
+        Windows build fix.
+
+        * kjs/JSGlobalObjectFunctions.cpp:
+        (KJS::isStrWhiteSpace):
+
+2008-07-18  Steve Falkenburg  <sfalken@apple.com>
+
+        Windows build fix.
+
+        * kjs/nodes.h:
+        (KJS::ThrowableExpressionData::ThrowableExpressionData):
+
+2008-07-18  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Cameron Zwarich.
+
+        Bug 18774: SQUIRRELFISH: print meaningful error messages <https://bugs.webkit.org/show_bug.cgi?id=18774>
+        <rdar://problem/5769353> SQUIRRELFISH: JavaScript error messages are missing informative text
+
+        Add support for decent error messages in JavaScript.  This patch achieves this by providing
+        ensuring the common errors and exceptions have messages that provide the text of expression
+        that trigger the exception.  In addition it attaches a number of properties to the exception
+        object detailing where in the source the expression came from.
+
+        * JavaScriptCore.exp:
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::lineNumberForVPC):
+        (KJS::CodeBlock::expressionRangeForVPC): 
+            Function to recover the expression range for an instruction
+            that triggered an exception.
+        * VM/CodeBlock.h:
+        (KJS::ExpressionRangeInfo::):
+        (KJS::CodeBlock::CodeBlock):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitCall):
+        (KJS::CodeGenerator::emitCallEval):
+            Emit call needed to be modified so to place the expression range info internally,
+            as the CodeGenerator emits the arguments nodes itself, rather than the various call
+            nodes.
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::emitExpressionInfo):
+            Record the expression range info.
+        * VM/ExceptionHelpers.cpp:
+        (KJS::createErrorMessage):
+        (KJS::createInvalidParamError):
+        (KJS::createUndefinedVariableError):
+        (KJS::createNotAConstructorError):
+        (KJS::createNotAFunctionError):
+        (KJS::createNotAnObjectErrorStub):
+        (KJS::createNotAnObjectError):
+            Rewrite all the code for the error messages so that they make use of the newly available
+            information.
+        * VM/ExceptionHelpers.h:
+        * VM/Machine.cpp:
+        (KJS::isNotObject):  Now needs vPC and codeBlock
+        (KJS::Machine::throwException):
+            New logic to handle the NotAnObjectErrorStub and to handle the absurd "no default value" edge case
+        (KJS::Machine::privateExecute):
+        * VM/Machine.h:
+        * kjs/DebuggerCallFrame.cpp:
+        (KJS::DebuggerCallFrame::evaluate):
+        * kjs/Error.cpp:
+        (KJS::Error::create):
+        * kjs/Error.h:
+        * kjs/JSGlobalObjectFunctions.cpp:
+        * kjs/JSImmediate.cpp:
+        (KJS::JSImmediate::toObject):
+        (KJS::JSImmediate::prototype):
+            My changes to the JSNotAnObject constructor needed to be handled here.
+        * kjs/JSNotAnObject.h:
+        (KJS::JSNotAnObjectErrorStub::JSNotAnObjectErrorStub):
+        (KJS::JSNotAnObjectErrorStub::isNull):
+        (KJS::JSNotAnObjectErrorStub::isNotAnObjectErrorStub):
+            Added a JSNotAnObjectErrorStub class to ease the handling of toObject failure exceptions,
+            and potentially allow even more detailed error messages in future.
+        * kjs/JSObject.h:
+        * kjs/Parser.h:
+        (KJS::Parser::parse):
+        * kjs/SourceRange.h:
+        * kjs/grammar.y:
+            Large amounts of position propagation.
+        * kjs/lexer.cpp:
+        (KJS::Lexer::Lexer):
+        (KJS::Lexer::shift):
+        (KJS::Lexer::lex):
+            The lexer needed a few changes to be able to correctly track token character positions.
+        * kjs/lexer.h:
+        * kjs/nodes.cpp:
+        (KJS::ThrowableExpressionData::emitThrowError):
+        (KJS::StatementNode::StatementNode):
+        (KJS::ResolveNode::emitCode):
+        (KJS::BracketAccessorNode::emitCode):
+        (KJS::DotAccessorNode::emitCode):
+        (KJS::NewExprNode::emitCode):
+        (KJS::EvalFunctionCallNode::emitCode):
+        (KJS::FunctionCallValueNode::emitCode):
+        (KJS::FunctionCallResolveNode::emitCode):
+        (KJS::FunctionCallBracketNode::emitCode):
+        (KJS::FunctionCallDotNode::emitCode):
+        (KJS::PostfixResolveNode::emitCode):
+        (KJS::PostfixBracketNode::emitCode):
+        (KJS::PostfixDotNode::emitCode):
+        (KJS::DeleteResolveNode::emitCode):
+        (KJS::DeleteBracketNode::emitCode):
+        (KJS::DeleteDotNode::emitCode):
+        (KJS::PrefixResolveNode::emitCode):
+        (KJS::PrefixBracketNode::emitCode):
+        (KJS::PrefixDotNode::emitCode):
+        (KJS::ThrowableBinaryOpNode::emitCode):
+        (KJS::ReadModifyResolveNode::emitCode):
+        (KJS::AssignResolveNode::emitCode):
+        (KJS::AssignDotNode::emitCode):
+        (KJS::ReadModifyDotNode::emitCode):
+        (KJS::AssignBracketNode::emitCode):
+        (KJS::ReadModifyBracketNode::emitCode):
+        (KJS::ForInNode::ForInNode):
+        (KJS::ForInNode::emitCode):
+        (KJS::WithNode::emitCode):
+        (KJS::LabelNode::emitCode):
+        (KJS::ThrowNode::emitCode):
+        (KJS::ProgramNode::ProgramNode):
+        (KJS::ProgramNode::create):
+        (KJS::EvalNode::generateCode):
+        (KJS::FunctionBodyNode::create):
+        (KJS::FunctionBodyNode::generateCode):
+        (KJS::ProgramNode::generateCode):
+            All of these methods were handling the position information.  
+            Constructors and create methods were modified to store the information.
+            All the emitCall implementations listed needed to be updated to actually
+            record the position information we have so carefully collected.
+        * kjs/nodes.h:
+        (KJS::ThrowableExpressionData::ThrowableExpressionData):
+        (KJS::ThrowableExpressionData::setExceptionSourceRange):
+        (KJS::ThrowableExpressionData::divot):
+        (KJS::ThrowableExpressionData::startOffset):
+        (KJS::ThrowableExpressionData::endOffset):
+        (KJS::ThrowableSubExpressionData::ThrowableSubExpressionData):
+        (KJS::ThrowableSubExpressionData::setSubexpressionInfo):
+        (KJS::ThrowablePrefixedSubExpressionData::ThrowablePrefixedSubExpressionData):
+        (KJS::ThrowablePrefixedSubExpressionData::setSubexpressionInfo):
+            ThrowableExpressionData is just a uniform mechanism for storing the position
+            information.
+        (KJS::ResolveNode::):
+        (KJS::PrePostResolveNode::):
+        (KJS::ThrowableBinaryOpNode::):
+        (KJS::WithNode::):
+
+2008-07-18  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Cameron Zwarich.
+        
+        Three renames:
+        
+        "CallTypeNative" => "CallTypeHost"
+        "code" => "byteCode"
+        "generatedCode" => "generatedByteCode"
+
+2008-07-18  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Optimized <= for immediate number cases.
+        
+        SunSpider reports no overall change, but a 10% speedup on access-nsieve.
+
+2008-07-18  Mark Rowe  <mrowe@apple.com>
+
+        Rubber-stamped by Sam Weinig.
+
+        Fix some casts added in a previous build fix to match the style used
+        throughout WebKit.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::initializeCallFrame):
+        * VM/Register.h:
+        (KJS::Register::Register):
+
+2008-07-18  Landry Breuil  <landry@openbsd.org>
+
+        Bug 19975: [OpenBSD] Patches to enable build of WebKit
+
+        <https://bugs.webkit.org/show_bug.cgi?id=19975>
+
+        Reviewed by David Kilzer.
+
+        Support for OpenBSD, mostly threading and libm tweaks.
+
+        * kjs/collector.cpp: #include <pthread.h>
+        (KJS::currentThreadStackBase): use pthread_stackseg_np() to get stack base
+        * kjs/config.h: OpenBSD also provides <pthread_np.h>
+        * wtf/MathExtras.h: #include <sys/types.h> and <machine/ieee.h>
+        (isfinite), (signbit): as long as we don't have those functions provide fallback implementations
+        * wtf/Platform.h: Add support for PLATFORM(OPENBSD) and PLATFORM(SPARC64) macro
+
+2008-07-17  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Next step toward putting doubles in registers: Store constant pool
+        entries as registers, not JSValue*s.
+        
+        SunSpider reports no change.
+
+2008-07-17  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by John Sullivan and Oliver Hunt.
+        
+        A tiny bit of tidying in function call register allocation.
+        
+        This patch saves one register when invoking a function expression and/or
+        a new expression that is stored in a temporary.
+        
+        Since it's just one register, I can't make a testcase for it.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitCall): No need to ref the function we're calling
+        or its base. We'd like the call frame to overlap with them, if possible.
+        op_call will read the function and its base before writing the call frame,
+        so this is safe.
+
+        * kjs/nodes.cpp:
+        (KJS::NewExprNode::emitCode): No need to ref the function we're new-ing,
+        for the same reasons stated above.
+        
+        (KJS::FunctionCallValueNode::emitCode): ditto
+
+2008-07-17  Steve Falkenburg  <sfalken@apple.com>
+
+        Build fix.
+        
+        * kjs/InternalFunction.cpp:
+
+2008-07-17  Sam Weinig  <sam@webkit.org>
+
+        Roll out r35199 as it is causing failures on the PPC build.
+
+2008-07-17  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by David Kilzer.
+        
+        Fixed https://bugs.webkit.org/show_bug.cgi?id=20067
+        Support function.name (Firefox extension)
+        
+        Pretty straight-forward.
+
+2008-07-17  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Fixed <rdar://problem/6081636> Functions calls use more temporary
+        registers than necessary
+        
+        Holding a reference to the last statement result register caused each
+        successive statement to output its result to an even higher register.
+        
+        Happily, statements don't actually need to return a result register
+        at all. I hope to make this clearer in a future cleanup patch,
+        but this change will fix the major bug for now.
+
+        * kjs/nodes.cpp:
+        (KJS::statementListEmitCode):
+
+2008-07-17  Gavin Barraclough  <barraclough@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Merge pre&post dot nodes to simplify the parse tree.
+        Sunspider results show 0.6% progression (no performance change expected).
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        * kjs/nodes.h:
+        * kjs/nodes2string.cpp:
+
+2008-07-17  Gavin Barraclough  <barraclough@apple.com>
+
+        Reviewed by Cameron Zwarich.
+
+        Merge pre&post resolve nodes to simplify the parse tree.
+        Sunspider results show no performance change.
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        * kjs/nodes.h:
+        * kjs/nodes2string.cpp:
+
+2008-07-17  Gavin Barraclough  <barraclough@apple.com>
+
+        Reviewed by Cameron Zwarich.
+
+        Merge logical nodes to simplify the parse tree.
+        Sunspider results show 0.6% progression (no performance change expected).
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        * kjs/nodes.h:
+        * kjs/nodes2string.cpp:
+
+2008-07-17  Ariya Hidayat  <ariya.hidayat@trolltech.com>
+
+        Reviewed by Simon.
+
+        Fix MinGW build (broken in r35198) and simplify getLocalTime().
+
+        * kjs/DateMath.cpp:
+        (KJS::getLocalTime):
+
+2008-07-17  Gavin Barraclough  <barraclough@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Merge pre&post bracket nodes to simplify the parse tree.
+        Sunspider results show no performance change.
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        * kjs/nodes.h:
+        * kjs/nodes2string.cpp:
+
+2008-07-17  Ariya Hidayat  <ariya.hidayat@trolltech.com>
+
+        Reviewed by Simon.
+
+        Fix the 32-bit gcc builds, conversion from "long int" to Register is
+        ambiguous. Explicitly choose the intptr_t constructor.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::initializeCallFrame):
+        * VM/Register.h:
+        (KJS::Register::Register):
+
+2008-07-16  Mark Rowe  <mrowe@apple.com>
+
+        Rubber-stamped by Geoff Garen.
+
+        Fix JavaScript in 64-bit by using a pointer-sized integer
+        type in the Register union.  Also includes a rename of
+        the intType constant to IntType.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::initializeCallFrame):
+        * VM/Register.h:
+        (KJS::Register::):
+        (KJS::Register::Register):
+
+2008-07-17  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        First step toward putting doubles in registers: Turned Register into a
+        proper abstraction layer. It is no longer possible to cast a Register
+        to a JSValue*, or a Register& to a JSValue*&, or to access the union
+        inside a Register directly.
+        
+        SunSpider reports no change.
+        
+        In support of this change, I had to make the following mechanical changes
+        in a lot of places:
+        
+        1. Clients now use explicit accessors to read data out of Registers, and
+        implicit copy constructors to write data into registers.
+        
+        So, assignment that used to look like
+        
+            x.u.jsValue = y;
+        
+        now looks like
+        
+            x = y;
+            
+        And access that used to look like
+        
+            x = y.u.jsValue;
+        
+        now looks like
+        
+            x = y.jsValue();
+
+        2. I made generic flow control specific in opcodes that made their flow
+        control generic by treating a Register& as a JSValue*&. This had the
+        added benefit of removing some exception checking branches from immediate
+        number code.
+
+        3. I beefed up PropertySlot to support storing a Register* in a property
+        slot. For now, only JSVariableObject's symbolTableGet and symbolTablePut
+        use this functionality, but I expect more clients to use it in the future.
+        
+        4. I changed ArgList to be a buffer of Registers, not JSValue*'s, and I
+        changed ArgList iterator clients to iterate Registers, not JSValue*'s.
+
+2008-07-16  Ada Chan  <adachan@apple.com>
+
+        Fixed build.
+
+        * kjs/JSGlobalObject.cpp:
+
+2008-07-16  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Sam and Geoff.
+
+        <rdar://problem/5958840> Navigating to another page while profiler is
+        attached results in slow JavaScript for all time.
+
+        - The UNLIKELY keeps this from being a sunspider performance regression.
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::~JSGlobalObject): Stop the profiler associated
+        with this exec state.
+
+2008-07-16  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Steve Falkenburg.
+
+        Replace adopting UString constructor in favor of explicit
+        static adopt method.
+
+        * API/JSStringRefCF.cpp:
+        (JSStringCreateWithCFString):
+        * kjs/StringConstructor.cpp:
+        (KJS::stringFromCharCode):
+        * kjs/StringPrototype.cpp:
+        (KJS::stringProtoFuncToLowerCase):
+        (KJS::stringProtoFuncToUpperCase):
+        (KJS::stringProtoFuncToLocaleLowerCase):
+        (KJS::stringProtoFuncToLocaleUpperCase):
+        * kjs/ustring.cpp:
+        (KJS::UString::adopt):
+        * kjs/ustring.h:
+        (KJS::UString::UString):
+        (KJS::UString::~UString):
+
+2008-07-16  Ariya Hidayat  <ariya.hidayat@trolltech.com>
+
+        Reviewed by Simon.
+
+        http://trolltech.com/developer/task-tracker/index_html?method=entry&id=216179
+        Fix potential crash (on Qt for Windows port) when performing JavaScript date
+        conversion.
+
+        * kjs/DateMath.cpp:
+        (KJS::getLocalTime): For the Qt port, prefer to use Windows code, i.e.
+        localtime_s() instead of localtime() since the latter might crash (on Windows)
+        given a non-sensible, e.g. NaN, argument.
+
+2008-07-16  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Anders and Geoff.
+
+        https://bugs.webkit.org/show_bug.cgi?id=20023
+        Failed assertion in PropertyNameArray.cpp
+
+        This is already tested by testapi.
+
+        * API/JSObjectRef.cpp: (JSPropertyNameAccumulatorAddName): Add the string to identifier
+        table to appease PropertyNameArray.
+
+2008-07-16  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoff.
+
+        Dereference identifiers when deleting a hash table (fixes leaks with private JSGlobalData
+        objects).
+
+        * kjs/JSGlobalData.cpp: (KJS::JSGlobalData::~JSGlobalData):
+        * kjs/lookup.cpp: (KJS::HashTable::deleteTable):
+        * kjs/lookup.h:
+        * kjs/lexer.cpp: (KJS::Lexer::~Lexer)
+        HashTable cannot have a destructor, because check-for-global-initializers complains about
+        having a global constructor then.
+
+2008-07-16  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoff.
+
+        Check pthread_key_create return value.
+
+        This check was helpful when debugging a crash in run-webkit-tests --threaded that happened
+        because JSGlobalData objects were not deleted, and we were running out of pthread keys soon.
+        It also looks useful for production builds.
+
+        * wtf/ThreadSpecific.h: (WTF::::ThreadSpecific):
+
+2008-07-15  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Geoff.
+
+        Rename pageGroupIdentifier to profileGroup to keep mention of a
+        pageGroup out of JavaScriptCore.
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::init):
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::setProfileGroup):
+        (KJS::JSGlobalObject::profileGroup):
+        * profiler/ProfileGenerator.cpp:
+        (KJS::ProfileGenerator::create):
+        (KJS::ProfileGenerator::ProfileGenerator):
+        * profiler/ProfileGenerator.h:
+        (KJS::ProfileGenerator::profileGroup):
+        * profiler/Profiler.cpp:
+        (KJS::Profiler::startProfiling):
+        (KJS::dispatchFunctionToProfiles):
+        (KJS::Profiler::willExecute):
+        (KJS::Profiler::didExecute):
+
+2008-07-14  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Fix https://bugs.webkit.org/show_bug.cgi?id=20037
+        Bug 20037: GCC 4.2 build broken due to strict aliasing violation.
+
+        * kjs/ustring.cpp:
+        (KJS::UString::Rep::computeHash): Add a version of computeHash that takes a char* and explicit length.
+        * kjs/ustring.h:
+        * profiler/CallIdentifier.h:
+        (WTF::): Use new version of computeHash that takes a char* and explicit length to avoid unsafe aliasing.
+
+2008-07-14  David Hyatt  <hyatt@apple.com>
+
+        Fix a crashing bug in ListHashSet's -- operator.  Make sure that end() can be -- by special-casing the null
+        position.
+
+        Reviewed by Maciej
+
+        * wtf/ListHashSet.h:
+        (WTF::ListHashSetConstIterator::operator--):
+
+2008-07-14  David Hyatt  <hyatt@apple.com>
+
+        Buidl fix.  Make sure the second insertBefore method returns a value.
+
+        * wtf/ListHashSet.h:
+        (WTF::::insertBefore):
+
+2008-07-14  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added include/pthreads to the
+        include path.
+
+2008-07-14  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Kevin McCullough.
+
+        Make JSGlobalData refcounted in preparation to adding a way to create contexts that share
+        global data.
+
+        * JavaScriptCore.exp:
+        * kjs/JSGlobalData.cpp:
+        (KJS::JSGlobalData::create):
+        * kjs/JSGlobalData.h:
+        Made contructor private, and added a static create() method. Made the class inherit from
+        RefCounted.
+
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::globalData):
+        JSGlobalData is now owned by JSGlobalObject (except for the shared one, and the common
+        WebCore one, which are never deleted).
+
+        * kjs/Shell.cpp: (main): Create JSGlobalData with create() method.
+
+2008-07-14  Simon Hausmann  <hausmann@webkit.org>
+
+        Fix the single-threaded build.
+
+        * kjs/JSLock.cpp: Removed undeclared registerThread() function.
+        * kjs/collector.cpp:
+        (KJS::Heap::registerThread): Added dummy implementation.
+
+2008-07-14  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoff Garen.
+
+        Eliminate per-thread JavaScript global data instance support and make arbitrary
+        global data/global object combinations possible.
+
+        * kjs/collector.cpp:
+        (KJS::Heap::Heap): Store a JSGlobalData pointer instead of multiple pointers to its members.
+        This allows for going from any JS object to its associated global data, currently used in
+        JSGlobalObject constructor to initialize its JSGlobalData pointer.
+        (KJS::Heap::registerThread): Changed thread registration data to be per-heap. Previously,
+        only the shared heap could be used from multiple threads, so it was the only one that needed
+        thread registration, but now this can happen to any heap.
+        (KJS::Heap::unregisterThread): Ditto.
+        (KJS::Heap::markStackObjectsConservatively): Adapt for the above changes.
+        (KJS::Heap::setGCProtectNeedsLocking): Ditto.
+        (KJS::Heap::protect): Ditto.
+        (KJS::Heap::unprotect): Ditto.
+        (KJS::Heap::collect): Ditto.
+        (KJS::Heap::globalObjectCount): Use global object list associated with the current heap,
+        not the late per-thread one.
+        (KJS::Heap::protectedGlobalObjectCount): Ditto.
+
+        * kjs/collector.h:
+        (KJS::Heap::ThreadRegistrar): Added a helper object that unregisters a thread when it is
+        destroyed.
+
+        * kjs/JSLock.cpp:
+        (KJS::JSLock::JSLock):
+        * kjs/JSLock.h:
+        (KJS::JSLock::JSLock):
+        Don't use JSLock to implicitly register threads. I've added registerThread() calls to most
+        places that use JSLock - we cannot guarantee absolute safety unless we always mark all
+        threads in the process, but these implicit registration calls should cover reasonable usage
+        scenarios, I hope.
+
+        * API/JSBase.cpp:
+        (JSEvaluateScript): Explicitly register the current thread.
+        (JSCheckScriptSyntax): Explicitly register the current thread.
+        (JSGarbageCollect): Changed to use the passed in context. Unfortunately, this creates a race
+        condition for clients that pass an already released context to JSGarbageCollect - but it is
+        unlikely to create real life problems.
+        To maintain compatibility, the shared heap is collected if NULL is passed.
+
+        * API/JSContextRef.cpp:
+        (JSGlobalContextCreate): Use a new syntax for JSGlobalObject allocation.
+        (JSGlobalContextRetain): Register the thread.
+        (JSContextGetGlobalObject): Register the thread.
+
+        * API/JSObjectRef.cpp:
+        (JSObjectMake):
+        (JSObjectMakeFunctionWithCallback):
+        (JSObjectMakeConstructor):
+        (JSObjectMakeFunction):
+        (JSObjectHasProperty):
+        (JSObjectGetProperty):
+        (JSObjectSetProperty):
+        (JSObjectGetPropertyAtIndex):
+        (JSObjectSetPropertyAtIndex):
+        (JSObjectDeleteProperty):
+        (JSObjectCallAsFunction):
+        (JSObjectCallAsConstructor):
+        (JSObjectCopyPropertyNames):
+        (JSPropertyNameAccumulatorAddName):
+        * API/JSValueRef.cpp:
+        (JSValueIsEqual):
+        (JSValueIsInstanceOfConstructor):
+        (JSValueMakeNumber):
+        (JSValueMakeString):
+        (JSValueToNumber):
+        (JSValueToStringCopy):
+        (JSValueToObject):
+        (JSValueProtect):
+        (JSValueUnprotect):
+        Register the thread.
+
+        * API/JSStringRef.cpp: (JSStringRelease): Changed a comment to not mention per-thread contexts.
+
+        * API/JSStringRefCF.cpp: Removed an unnecessary include of JSLock.h.
+
+        * JavaScriptCore.exp: Export JSGlobalData constructor/destructor, now that anyone can have
+        their own instances. Adapt to other changes, too.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj: Made ThreadSpecific.h private, as it is now
+        included by collector.h and is thus needed in other projects.
+
+        * kjs/InitializeThreading.cpp: (KJS::initializeThreadingOnce): Don't initialize per-thread
+        global data, as it no longer exists.
+
+        * kjs/JSGlobalData.cpp:
+        (KJS::JSGlobalData::JSGlobalData):
+        (KJS::JSGlobalData::~JSGlobalData):
+        * kjs/JSGlobalData.h:
+        Removed support for per-thread instance. Made constructor and destructor public.
+
+        * kjs/JSGlobalObject.cpp: (KJS::JSGlobalObject::init): Get to now arbitrary  JSGlobalData
+        via the heap.
+        (KJS::JSGlobalObject::operator new): Changed ot take JSGlobalDatra pointer.
+        * kjs/JSGlobalObject.h:
+
+        * kjs/Shell.cpp:
+        (main):
+        (jscmain):
+        Changed to maintain a custom JSGlobalData pointer instead of a per-thread one.
+
+2008-07-13  Ada Chan  <adachan@apple.com>
+
+        Windows build fix: Add wtf/RefCountedLeakCounter to the project.
+
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+
+2008-07-12  Jan Michael Alonzo  <jmalonzo@webkit.org>
+
+        Gtk, Qt and Wx build fix: Add wtf/RefCountedLeakCounter in the
+        build scripts
+
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCoreSources.bkl:
+
+2008-07-11  Stephanie Lewis  <slewis@apple.com>
+
+        Reviewed by Darin Adler and Oliver Hunt.
+
+        Refactor RefCounting Leak counting code into a common class.
+
+        In order to export the symbols I needed to put the debug defines inside the function names
+        
+        Before we had a separate channel for each Logging each Leak type.  Since the leak channels were only used in one location, and only at quit for simplicity I combined them all into one leak channel.
+
+        * JavaScriptCore.exp:
+        * JavaScriptCore.xcodeproj/project.pbxproj: add new class
+        * kjs/nodes.cpp: remove old leak counting code
+        * wtf/RefCountedLeakCounter.cpp: Added. create a common leak counting class
+        * wtf/RefCountedLeakCounter.h: Added.
+
+2008-07-11  David Hyatt  <hyatt@apple.com>
+
+        Add an insertBefore method to ListHashSet to allow for insertions in the middle of the list (rather than just
+        at the end).
+
+        Reviewed by Anders
+
+        * wtf/ListHashSet.h:
+        (WTF::::insertBefore):
+        (WTF::::insertNodeBefore):
+
+2008-07-11  Sam Weinig  <sam@webkit.org>
+
+        Rubber-stamped by Darin Adler.
+
+        Move call function to CallData.cpp and construct to ConstructData.cpp.
+
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * kjs/AllInOneFile.cpp:
+        * kjs/CallData.cpp: Copied from kjs/JSValue.cpp.
+        * kjs/ConstructData.cpp: Copied from kjs/JSValue.cpp.
+        * kjs/JSValue.cpp:
+
+2008-07-10  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Define WEBKIT_VERSION_MIN_REQUIRED=WEBKIT_VERSION_LATEST when building WebKit to ensure that no symbols end up with the weak_import attribute.
+
+        * Configurations/Base.xcconfig:
+
+2008-07-10  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Fix the Tiger build by omitting annotations from methods declared in categories when using old versions of GCC.
+
+        * API/WebKitAvailability.h:
+
+2008-07-10  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Darin.
+
+        -Minor cleanup. Renamed callTree() to head() and no longer use m_head
+        directly but instead keep it private and access via a method().
+
+        * profiler/HeavyProfile.cpp:
+        (KJS::HeavyProfile::HeavyProfile):
+        (KJS::HeavyProfile::generateHeavyStructure):
+        (KJS::HeavyProfile::addNode):
+        * profiler/Profile.h:
+        (KJS::Profile::head):
+        * profiler/ProfileGenerator.cpp:
+        (KJS::ProfileGenerator::ProfileGenerator):
+
+2008-07-10  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Mark Rowe.
+
+        Eliminate CollectorHeapIntrospector.
+
+        CollectorHeapIntrospector was added primarily in the hopes to improve leaks tool output,
+        a result that it didn't deliver. Also, it helped by labeling JSC heap regions as reported by
+        vmmap tool, but at the same time, it made them mislabeled as malloc'd ones - the correct
+        way to label mapped regions is to use a VM tag.
+
+        So, it makes more sense to remove it completely than to make it work with multiple heaps.
+
+        * JavaScriptCore.exp:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/AllInOneFile.cpp:
+        * kjs/InitializeThreading.cpp:
+        (KJS::initializeThreading):
+        * kjs/collector.cpp:
+        * kjs/collector.h:
+        * kjs/CollectorHeapIntrospector.cpp: Removed.
+        * kjs/CollectorHeapIntrospector.h: Removed.
+
+2008-07-09  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Darin.
+
+        <rdar://problem/5951532> JSProfiler: Implement heavy (or bottom-up)
+        view (19228)
+        - Implemented the time and call count portionof heavy.  Now all that we
+        need is some UI.
+
+        * profiler/CallIdentifier.h: Removed an unused constructor.
+        * profiler/HeavyProfile.cpp: 
+        (KJS::HeavyProfile::HeavyProfile): Set the initial time of the head
+        node so that percentages work correctly.
+        (KJS::HeavyProfile::mergeProfiles): Sum the times and call count of
+        nodes being merged.
+        * profiler/ProfileNode.cpp: Set the intital values of time and call
+        count when copying ProfileNodes.
+        (KJS::ProfileNode::ProfileNode):
+
+2008-07-10  Jan Michael Alonzo  <jmalonzo@webkit.org>
+
+        Gtk build fix.
+
+        * GNUmakefile.am: Add HeavyProfile.cpp
+
+2008-07-09  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Geoff Garen.
+
+        Don't warn about deprecated functions in production builds.
+
+        * Configurations/Base.xcconfig:
+        * Configurations/DebugRelease.xcconfig:
+
+2008-07-09  Darin Adler  <darin@apple.com>
+
+        * JavaScriptCore.pri: Fix Qt build by adding HeavyProfile.cpp.
+
+2008-07-09  Kevin Ollivier  <kevino@theolliviers.com>
+
+        wx biuld fix. Add HeavyProfile.cpp to build files.
+
+        * JavaScriptCoreSources.bkl:
+
+2008-07-09  Kevin McCullough  <kmccullough@apple.com>
+
+        - Windows build fix.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2008-07-09  Kevin McCullough  <kmccullough@apple.com>
+
+        - Build fix.
+
+        * profiler/HeavyProfile.cpp:
+        (KJS::HeavyProfile::mergeProfiles):
+
+2008-07-09  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Geoff and Adam.
+
+        <rdar://problem/5951532> JSProfiler: Implement Bottom-Up view (19228)
+        - This is the plumbing for bottom-up, but does not include calculating
+        time, mostly because I'm still undclear about what the end result should
+        look like.
+        - This, obviously, does not include the UI to expose this in the
+        inspector yet.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * profiler/CallIdentifier.h:
+        (KJS::CallIdentifier::CallIdentifier):
+        (WTF::): Added HashTraits for CallIdentifiers to be used by a HashMap.
+        * profiler/HeavyProfile.cpp: Added.
+        (KJS::HeavyProfile::HeavyProfile):
+        (KJS::HeavyProfile::generateHeavyStructure):
+        (KJS::HeavyProfile::addNode):
+        (KJS::HeavyProfile::mergeProfiles):
+        (KJS::HeavyProfile::addAncestorsAsChildren):
+        * profiler/HeavyProfile.h: Added.
+        (KJS::HeavyProfile::create):
+        (KJS::HeavyProfile::heavyProfile):
+        (KJS::HeavyProfile::treeProfile):
+        * profiler/Profile.cpp: Removed old commented out includes.
+        * profiler/Profile.h: The m_head is needed by the HeavyProfile so it
+        is now protected as opposed to private.
+        * profiler/ProfileNode.cpp:
+        (KJS::ProfileNode::ProfileNode): Created a constructor to copy
+        ProfileNodes.
+        (KJS::ProfileNode::findChild): Added a null check to make HeavyProfile
+        children finding easier and avoid a potential crasher.
+        * profiler/ProfileNode.h: Mostly moved things around but also added some
+        functionality needed by HeavyProfile.
+        (KJS::ProfileNode::create):
+        (KJS::ProfileNode::functionName):
+        (KJS::ProfileNode::url):
+        (KJS::ProfileNode::lineNumber):
+        (KJS::ProfileNode::head):
+        (KJS::ProfileNode::setHead):
+        (KJS::ProfileNode::setNextSibling):
+        (KJS::ProfileNode::actualTotalTime):
+        (KJS::ProfileNode::actualSelfTime):
+        * profiler/TreeProfile.cpp: Implemented the ability to get a
+        HeavyProfile.
+        (KJS::TreeProfile::heavyProfile):
+        * profiler/TreeProfile.h:
+
+2008-07-08  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Added support for checking if an object has custom properties in its
+        property map. WebCore uses this to optimize marking DOM wrappers.
+
+2008-07-08  Simon Hausmann  <hausmann@webkit.org>
+
+        Prospective Gtk/Wx build fixes, add ProfileGenerator.cpp to the build.
+
+        * GNUmakefile.am:
+        * JavaScriptCoreSources.bkl:
+
+2008-07-08  Simon Hausmann  <hausmann@webkit.org>
+
+        Fix the Qt build, add ProfileGenerator.cpp to the build.
+
+        * JavaScriptCore.pri:
+
+2008-07-07  David Kilzer  <ddkilzer@apple.com>
+
+        releaseFastMallocFreeMemory() should always be defined
+
+        Reviewed by Darin.
+
+        * JavaScriptCore.exp: Changed to export C++ binding for
+        WTF::releaseFastMallocFreeMemory() instead of C binding for
+        releaseFastMallocFreeMemory().
+        * wtf/FastMalloc.cpp: Moved definitions of
+        releaseFastMallocFreeMemory() to be in the WTF namespace
+        regardless whether FORCE_SYSTEM_MALLOC is defined.
+        * wtf/FastMalloc.h: Moved releaseFastMallocFreeMemory() from
+        extern "C" binding to WTF::releaseFastMallocFreeMemory().
+
+2008-07-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Geoff.
+
+        Bug 19926: URL causes crash within a minute
+        <https://bugs.webkit.org/show_bug.cgi?id=19926>
+
+        Add a check that lastGlobalObject is non-null in Machine::execute()
+        before copying its globals to the current register file.
+
+        In theory, it is possible to make a test case for this, but it will
+        take a while to get it right.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+
+2008-07-07  Darin Adler  <darin@apple.com>
+
+        Rubber stamped by Adele.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): Fix a typo in a comment.
+
+2008-07-07  Steve Falkenburg  <sfalken@apple.com>
+
+        Build fixes.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.vcproj/testapi/testapi.vcproj:
+
+2008-07-07  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Darin.
+
+        When the profiler is running it gathers information and creates a
+        Profile.  After it finishes the Profile can be sorted and have other
+        data refinements run over it.  Both of these were done in the same class
+        before.  Now I split the gathering operations into a new class called
+        ProfileGenerator.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * profiler/Profile.cpp: Removed code related to the gather stage of a
+        Profile's creation.  
+        (KJS::Profile::create):
+        (KJS::Profile::Profile):
+        * profiler/Profile.h: Ditto.
+        (KJS::Profile::title):
+        (KJS::Profile::callTree):
+        (KJS::Profile::setHead):
+        * profiler/ProfileGenerator.cpp: Added. This is the class that will
+        handle the stage of creating a Profile.  Once the Profile is finished
+        being created, this class goes away.
+        (KJS::ProfileGenerator::create):
+        (KJS::ProfileGenerator::ProfileGenerator):
+        (KJS::ProfileGenerator::title):
+        (KJS::ProfileGenerator::willExecute):
+        (KJS::ProfileGenerator::didExecute):
+        (KJS::ProfileGenerator::stopProfiling):
+        (KJS::ProfileGenerator::didFinishAllExecution):
+        (KJS::ProfileGenerator::removeProfileStart):
+        (KJS::ProfileGenerator::removeProfileEnd):
+        * profiler/ProfileGenerator.h: Added.
+        (KJS::ProfileGenerator::profile):
+        (KJS::ProfileGenerator::originatingGlobalExec):
+        (KJS::ProfileGenerator::pageGroupIdentifier):
+        (KJS::ProfileGenerator::client):
+        (KJS::ProfileGenerator::stoppedProfiling):
+        * profiler/Profiler.cpp: Now operates with the ProfileGenerator instead
+        of the Profile.
+        (KJS::Profiler::startProfiling):
+        (KJS::Profiler::stopProfiling):
+        (KJS::Profiler::didFinishAllExecution): It is here that the Profile is
+        handed off to its client and the Profile Generator is no longer needed.
+        (KJS::dispatchFunctionToProfiles):
+        (KJS::Profiler::willExecute):
+        (KJS::Profiler::didExecute):
+        * profiler/Profiler.h: Cleaned up the includes and subsequently the
+        forward declarations.  Also use the new ProfileGenerator.
+        (KJS::ProfilerClient::~ProfilerClient):
+        (KJS::Profiler::currentProfiles):
+        * profiler/TreeProfile.cpp: Use Profile's new interface.
+        (KJS::TreeProfile::create):
+        (KJS::TreeProfile::TreeProfile):
+        * profiler/TreeProfile.h:
+
+2008-07-07  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Cameron Zwarich.
+
+        Third step in broad cleanup effort.
+
+        [ File list elided ]
+
+2008-07-06  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Cameron Zwarich.
+
+        Second step in broad cleanup effort.
+
+        [ File list elided ]
+
+2008-07-05  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Cameron Zwarich.
+
+        First step in broad cleanup effort.
+
+        [ File list elided ]
+
+2008-07-05  Sam Weinig  <sam@webkit.org>
+
+        Rubber-stamped by Cameron Zwarich.
+
+        Rename list.h/cpp to ArgList.h/cpp.
+
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * VM/Machine.h:
+        * kjs/AllInOneFile.cpp:
+        * kjs/ArgList.cpp: Copied from JavaScriptCore/kjs/list.cpp.
+        * kjs/ArgList.h: Copied from JavaScriptCore/kjs/list.h.
+        * kjs/IndexToNameMap.cpp:
+        * kjs/JSGlobalData.cpp:
+        * kjs/JSGlobalData.h:
+        * kjs/JSObject.h:
+        * kjs/collector.cpp:
+        * kjs/list.cpp: Removed.
+        * kjs/list.h: Removed.
+
+2008-07-05  Sam Weinig  <sam@webkit.org>
+
+        Fix non-AllInOne builds again.
+
+        * kjs/BooleanPrototype.cpp:
+        * kjs/ErrorPrototype.cpp:
+        * kjs/FunctionPrototype.cpp:
+        * kjs/NumberPrototype.cpp:
+        * kjs/ObjectPrototype.cpp:
+
+2008-07-05  Sam Weinig  <sam@webkit.org>
+
+        Fix build on case-sensitive build systems.
+
+        * kjs/IndexToNameMap.cpp:
+
+2008-07-05  Sam Weinig  <sam@webkit.org>
+
+        Fix build.
+
+        * kjs/Arguments.cpp:
+        * kjs/BooleanPrototype.cpp:
+        * kjs/DateConstructor.cpp:
+        * kjs/ErrorPrototype.cpp:
+        * kjs/FunctionPrototype.cpp:
+        * kjs/NumberPrototype.cpp:
+        * kjs/ObjectPrototype.cpp:
+        * kjs/RegExpPrototype.cpp:
+        * kjs/StringConstructor.cpp:
+        * kjs/lookup.cpp:
+
+2008-07-05  Sam Weinig  <sam@webkit.org>
+
+        Fix non-AllInOne build.
+
+        * kjs/JSGlobalObject.cpp:
+
+2008-07-05  Sam Weinig  <sam@webkit.org>
+
+        Rubber-stamped by Cameron Zwarich.
+
+        Split Arguments, IndexToNameMap, PrototypeFunction, GlobalEvalFunction and 
+        the functions on the global object out of JSFunction.h/cpp.
+
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * VM/Machine.cpp:
+        * kjs/AllInOneFile.cpp:
+        * kjs/Arguments.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
+        * kjs/Arguments.h: Copied from JavaScriptCore/kjs/JSFunction.h.
+        * kjs/GlobalEvalFunction.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
+        * kjs/GlobalEvalFunction.h: Copied from JavaScriptCore/kjs/JSFunction.h.
+        * kjs/IndexToNameMap.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
+        * kjs/IndexToNameMap.h: Copied from JavaScriptCore/kjs/JSFunction.h.
+        * kjs/JSActivation.cpp:
+        * kjs/JSFunction.cpp:
+        * kjs/JSFunction.h:
+        * kjs/JSGlobalObject.cpp:
+        * kjs/JSGlobalObjectFunctions.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
+        * kjs/JSGlobalObjectFunctions.h: Copied from JavaScriptCore/kjs/JSFunction.h.
+        The functions on the global object should be in JSGlobalObject.cpp, but putting them there
+        was a 0.5% regression.
+
+        * kjs/PrototypeFunction.cpp: Copied from JavaScriptCore/kjs/JSFunction.cpp.
+        * kjs/PrototypeFunction.h: Copied from JavaScriptCore/kjs/JSFunction.h.
+        * kjs/Shell.cpp:
+        * kjs/lexer.cpp:
+        * kjs/ustring.cpp:
+
+2008-07-04  Sam Weinig  <sam@webkit.org>
+
+        Really fix the mac build.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2008-07-04  Sam Weinig  <sam@webkit.org>
+
+        Fix mac build.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2008-07-04  Sam Weinig  <sam@webkit.org>
+
+        Fix non-AllInOne builds.
+
+        * kjs/Error.cpp:
+        * kjs/GetterSetter.cpp:
+        * kjs/JSImmediate.cpp:
+        * kjs/operations.cpp:
+
+2008-07-04  Sam Weinig  <sam@webkit.org>
+
+        Rubber-stamped by Dan Bernstein.
+
+        Split Error and GetterSetter out of JSObject.h.
+
+        * API/JSCallbackObjectFunctions.h:
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * kjs/AllInOneFile.cpp:
+        * kjs/ClassInfo.h: Copied from JavaScriptCore/kjs/JSObject.h.
+        * kjs/Error.cpp: Copied from JavaScriptCore/kjs/JSObject.cpp.
+        * kjs/Error.h: Copied from JavaScriptCore/kjs/JSObject.h.
+        * kjs/GetterSetter.cpp:
+        * kjs/GetterSetter.h: Copied from JavaScriptCore/kjs/JSObject.h.
+        * kjs/JSObject.cpp:
+        * kjs/JSObject.h:
+        * kjs/nodes.h:
+
+2008-07-04  Simon Hausmann  <hausmann@webkit.org>
+
+        Fix the Wx build, added TreeProfile.cpp to the build.
+
+        * JavaScriptCoreSources.bkl:
+
+2008-07-03  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        Fix output path of recently-added script phase to reference the correct file.
+        This prevents Xcode from running the script phase unnecessarily, which caused
+        the generated header to be recreated and lead to AllInOneFile.cpp rebuilding.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2008-07-03  Mark Rowe  <mrowe@apple.com>
+
+        Follow-up to the 64-bit build fix.  Use intptr_t rather than ssize_t as
+        the latter is non-standard and does not exist on Windows.
+
+        * kjs/JSLock.cpp:
+        (KJS::JSLock::lockCount):
+        (KJS::JSLock::lock):
+        (KJS::JSLock::unlock):
+        (KJS::JSLock::DropAllLocks::DropAllLocks):
+        * kjs/JSLock.h:
+
+2008-07-02  Mark Rowe  <mrowe@apple.com>
+
+        Fix the 64-bit build.  pthread_getspecific works with pointer-sized values,
+        so use ssize_t rather than int to track the lock count to avoid warnings about
+        truncating the result of pthread_getspecific.
+
+        * kjs/JSLock.cpp:
+        (KJS::JSLock::lockCount):
+        (KJS::JSLock::lock):
+        (KJS::JSLock::unlock):
+        (KJS::JSLock::DropAllLocks::DropAllLocks):
+        * kjs/JSLock.h:
+
+2008-07-03  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Removed checking for the array get/put fast case from the array code.
+        Callers who want the fast case should call getIndex and/or setIndex
+        instead. (get_by_val and put_by_val already do this.)
+        
+        SunSpider reports no change overall, but a 1.4% speedup on fannkuch and
+        a 3.6% speedup on nsieve.
+
+2008-07-03  Dan Bernstein  <mitz@apple.com>
+
+        - Windows build fix
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added TreeProfile.{h,cpp}.
+
+2008-07-03  Dan Bernstein  <mitz@apple.com>
+
+        Reviewed by Anders Carlsson.
+
+        - Windows build fix
+
+        * VM/Machine.cpp:
+        (KJS::Machine::Machine):
+
+2008-07-03  Simon Hausmann  <hausmann@webkit.org>
+
+        Reviewed by Alexey Proskuryakov.
+
+        Fix the non-threaded build.
+
+        * kjs/JSGlobalData.cpp:
+        (KJS::JSGlobalData::threadInstanceInternal):
+
+2008-07-03  Simon Hausmann  <hausmann@webkit.org>
+
+        Fix the Qt build, added TreeProfile to the build.
+
+        * JavaScriptCore.pri:
+
+2008-07-02  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoff.
+
+        Don't create unnecessary JSGlobalData instances.
+
+        * kjs/JSGlobalData.h:
+        * kjs/JSGlobalData.cpp:
+        (KJS::JSGlobalData::threadInstanceExists):
+        (KJS::JSGlobalData::sharedInstanceExists):
+        (KJS::JSGlobalData::threadInstance):
+        (KJS::JSGlobalData::sharedInstance):
+        (KJS::JSGlobalData::threadInstanceInternal):
+        (KJS::JSGlobalData::sharedInstanceInternal):
+        Added methods to query instance existence.
+
+        * kjs/InitializeThreading.cpp:
+        (KJS::initializeThreadingOnce):
+        Initialize thread instance static in a new way.
+
+        * API/JSBase.cpp:
+        (JSGarbageCollect):
+        * kjs/collector.cpp:
+        (KJS::Heap::collect):
+        Check for instance existence before accessing it.
+
+2008-07-02  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Cameron Zwarich.
+        
+        Fixed https://bugs.webkit.org/show_bug.cgi?id=19862
+        REGRESSION (r34907): Gmail crashes in JavaScriptCore code while editing drafts
+        
+        I was never able to reproduce this issue, but Cameron could, and he says
+        that this patch fixes it.
+        
+        The crash seems tied to a timer or event handler callback. In such a case,
+        the sole reference to the global object may be in the current call frame,
+        so we can't depend on the global object to mark the call frame area in
+        the register file.
+        
+        The new GC marking rule is: the global object is not responsible for
+        marking the whole register file -- it's just responsible for the globals
+        section it's tied to. The heap is responsible for marking the call frame area.
+
+2008-07-02  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Add the ability to trace JavaScriptCore garabge collections using dtrace.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj: Generate the dtrace probe header
+        file when building on a new enough version of Mac OS X.
+        * JavaScriptCorePrefix.h: Add our standard Mac OS X version detection macros.
+        * kjs/Tracing.d: Declare three dtrace probes.
+        * kjs/Tracing.h: Include the generated dtrace macros if dtrace is available,
+        otherwise provide versions that do nothing.
+        * kjs/collector.cpp:
+        (KJS::Heap::collect): Fire dtrace probes when starting a collection, after the
+        mark phase has completed, and when the collection is complete.
+        * wtf/Platform.h: Define HAVE_DTRACE when building on a new enough version of Mac OS X.
+
+2008-07-02  Geoffrey Garen  <ggaren@apple.com>
+
+        Rubber stamped by Oliver Hunt.
+        
+        Reduced the max register file size from 8MB to 2MB.
+
+        We still allow about 20,000 levels of recursion.
+
+2008-07-02  Alp Toker  <alp@nuanti.com>
+
+        Build fix for r34960. Add TreeProfile.cpp to build.
+
+        * GNUmakefile.am:
+
+2008-07-02  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        Optimized a[n] get for cases when a is an array or a string. When a is
+        an array, we optimize both get and put. When a is a string, we only
+        optimize get, since you can't put to a string.
+        
+        SunSpider says 3.4% faster.
+
+2008-07-02  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Darin.
+
+        -Small cleanup in preparation for implementing Bottom-up.
+
+        * profiler/CallIdentifier.h: Rename debug function to make it clear of
+        its output and intention to be debug only.
+        (KJS::CallIdentifier::operator const char* ): Implement in terms of
+        c_str.
+        (KJS::CallIdentifier::c_str):
+        * profiler/ProfileNode.cpp: Impelment findChild() which will be needed
+        by the bottom-up implementation.
+        (KJS::ProfileNode::findChild):
+        * profiler/ProfileNode.h: Added comments to make the collections of
+        functions more clear.
+        (KJS::ProfileNode::operator==):
+        (KJS::ProfileNode::c_str):
+
+2008-07-02  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Darin.
+
+        Bug 19776: Number.toExponential() is incorrect for numbers between 0.1 and 1
+        <https://bugs.webkit.org/show_bug.cgi?id=19776>
+
+        Perform the sign check for the exponent on the actual exponent value,
+        which is 1 less than the value of decimalPoint, instead of on the value
+        of decimalPoint itself.
+
+        * kjs/NumberPrototype.cpp:
+        (KJS::exponentialPartToString):
+
+2008-07-02  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Darin.
+
+        <rdar://problem/5951532> JSProfiler: Implement Bottom-Up view (19228)
+        - Subclass TreeProfile as I prepare for a HeavyProfile to be comming
+        later.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * profiler/Profile.cpp: By default we create a TreeProfile.
+        (KJS::Profile::create):
+        * profiler/Profile.h: Changes to the Profile class to make it amenable
+        to be inherited from.
+        (KJS::Profile::~Profile):
+        * profiler/TreeProfile.cpp: Added.
+        (KJS::TreeProfile::create):
+        (KJS::TreeProfile::TreeProfile):
+        (KJS::TreeProfile::heavyProfile):
+        * profiler/TreeProfile.h: Added.
+        (KJS::TreeProfile::treeProfile):
+
+2008-07-02  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Dan.
+
+        Broke CallIdentifier out into its own file. I did this because it's
+        going to grow a lot soon and I wanted this to be a separate patch.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * profiler/CallIdentifier.h: Added.
+        (KJS::CallIdentifier::CallIdentifier):
+        (KJS::CallIdentifier::operator==):
+        (KJS::CallIdentifier::operator!=):
+        (KJS::CallIdentifier::operator const char* ):
+        (KJS::CallIdentifier::toString):
+        * profiler/ProfileNode.h:
+
+2008-07-02  Simon Hausmann  <hausmann@webkit.org>
+
+        Build fix. Implemented missing functions for single-threaded build.
+
+        * kjs/JSLock.cpp:
+        (KJS::JSLock::JSLock):
+        (KJS::JSLock::lock):
+        (KJS::JSLock::unlock):
+        (KJS::JSLock::DropAllLocks::DropAllLocks):
+
+2008-07-02  Alexey Proskuryakov  <ap@webkit.org>
+
+        Another non-AllInOne build fix.
+
+        * kjs/JSGlobalObject.cpp: Include JSLock.h here, too.
+
+2008-07-02  Alexey Proskuryakov  <ap@webkit.org>
+
+        Non-AllInOne build fix.
+
+        * kjs/interpreter.cpp: Include JSLock.h.
+
+2008-06-30  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Disable JSLock for per-thread contexts.
+
+        No change on SunSpider.
+
+        * kjs/JSGlobalData.h:
+        * kjs/JSGlobalData.cpp:
+        (KJS::JSGlobalData::JSGlobalData):
+        (KJS::JSGlobalData::sharedInstance):
+        Added isSharedInstance as a better way to tell whether the instance is shared (legacy).
+
+        * kjs/JSLock.cpp:
+        (KJS::createJSLockCount):
+        (KJS::JSLock::lockCount):
+        (KJS::setLockCount):
+        (KJS::JSLock::JSLock):
+        (KJS::JSLock::lock):
+        (KJS::JSLock::unlock):
+        (KJS::JSLock::currentThreadIsHoldingLock):
+        (KJS::JSLock::DropAllLocks::DropAllLocks):
+        (KJS::JSLock::DropAllLocks::~DropAllLocks):
+        * kjs/JSLock.h:
+        (KJS::JSLock::JSLock):
+        (KJS::JSLock::~JSLock):
+        Made JSLock and JSLock::DropAllLocks constructors take a parameter to decide whether to
+        actually lock a mutex, or only to increment recursion count. We cannot turn it into no-op
+        if we want to keep existing assertions working.
+        Made recursion count per-thread, now that locks may not lock.
+
+        * API/JSBase.cpp:
+        (JSEvaluateScript): Take JSLock after casting JSContextRef to ExecState* (which doesn't need
+        locking in any case), so that a decision whether to actually lock can be made.
+        (JSCheckScriptSyntax): Ditto.
+        (JSGarbageCollect): Only lock while collecting the shared heap, not the per-thread one.
+
+        * API/JSObjectRef.cpp:
+        (JSClassCreate): Don't lock, as there is no reason to.
+        (JSClassRetain): Ditto.
+        (JSClassRelease): Ditto.
+        (JSPropertyNameArrayRetain): Ditto.
+        (JSPropertyNameArrayRelease): Only lock while deleting the array, as that may touch
+        identifier table.
+        (JSPropertyNameAccumulatorAddName): Adding a string also involves an identifier table
+        lookup, and possibly modification.
+
+        * API/JSStringRef.cpp:
+        (JSStringCreateWithCharacters):
+        (JSStringCreateWithUTF8CString):
+        (JSStringRetain):
+        (JSStringRelease):
+        (JSStringGetUTF8CString):
+        (JSStringIsEqual):
+        * API/JSStringRefCF.cpp:
+        (JSStringCreateWithCFString):
+        JSStringRef operations other than releasing do not need locking.
+
+        * VM/Machine.cpp: Don't include unused JSLock.h.
+
+        * kjs/CollectorHeapIntrospector.cpp: (KJS::CollectorHeapIntrospector::statistics):
+        Don't take the lock for real, as heap introspection pauses the process anyway. It seems that
+        the existing code could cause deadlocks.
+
+        * kjs/Shell.cpp:
+        (functionGC):
+        (main):
+        (jscmain):
+        The test tool uses a per-thread context, so no real locking is required.
+
+        * kjs/collector.h:
+        (KJS::Heap::setGCProtectNeedsLocking): Optionally protect m_protectedValues access with a
+        per-heap mutex. This is only needed for WebCore Database code, which violates the "no data
+        migration between threads" by using ProtectedPtr on a background thread.
+        (KJS::Heap::isShared): Keep a shared flag here, as well.
+
+        * kjs/protect.h:
+        (KJS::::ProtectedPtr):
+        (KJS::::~ProtectedPtr):
+        (KJS::::operator):
+        (KJS::operator==):
+        (KJS::operator!=):
+        ProtectedPtr is ony used from WebCore, so it doesn't need to take JSLock. An assertion in
+        Heap::protect/unprotect guards agains possible future unlocked uses of ProtectedPtr in JSC.
+
+        * kjs/collector.cpp:
+        (KJS::Heap::Heap): Initialize m_isShared.
+        (KJS::Heap::~Heap): No need to lock for real during destruction, but must keep assertions
+        in sweep() working.
+        (KJS::destroyRegisteredThread): Registered thread list is only accessed for shared heap,
+        so locking is always needed here.
+        (KJS::Heap::registerThread): Ditto.
+        (KJS::Heap::markStackObjectsConservatively): Use m_isShared instead of comparing to a shared
+        instance for a small speedup.
+        (KJS::Heap::setGCProtectNeedsLocking): Create m_protectedValuesMutex. There is currently no
+        way to undo this - and ideally, Database code will be fixed to lo longer require this quirk.
+        (KJS::Heap::protect): Take m_protectedValuesMutex (if it exists) while accessing
+        m_protectedValues.
+        (KJS::Heap::unprotect): Ditto.
+        (KJS::Heap::markProtectedObjects): Ditto.
+        (KJS::Heap::protectedGlobalObjectCount): Ditto.
+        (KJS::Heap::protectedObjectCount): Ditto.
+        (KJS::Heap::protectedObjectTypeCounts): Ditto.
+
+        * kjs/ustring.cpp:
+        * kjs/ustring.h:
+        Don't include JSLock.h, which is no longer used here. As a result, an explicit include had
+        to be added to many files in JavaScriptGlue, WebCore and WebKit.
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::init):
+        * API/JSCallbackConstructor.cpp:
+        (KJS::constructJSCallback):
+        * API/JSCallbackFunction.cpp:
+        (KJS::JSCallbackFunction::call):
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::::init):
+        (KJS::::getOwnPropertySlot):
+        (KJS::::put):
+        (KJS::::deleteProperty):
+        (KJS::::construct):
+        (KJS::::hasInstance):
+        (KJS::::call):
+        (KJS::::getPropertyNames):
+        (KJS::::toNumber):
+        (KJS::::toString):
+        (KJS::::staticValueGetter):
+        (KJS::::callbackGetter):
+        * API/JSContextRef.cpp:
+        (JSGlobalContextCreate):
+        (JSGlobalContextRetain):
+        (JSGlobalContextRelease):
+        * API/JSValueRef.cpp:
+        (JSValueIsEqual):
+        (JSValueIsStrictEqual):
+        (JSValueIsInstanceOfConstructor):
+        (JSValueMakeNumber):
+        (JSValueMakeString):
+        (JSValueToNumber):
+        (JSValueToStringCopy):
+        (JSValueToObject):
+        (JSValueProtect):
+        (JSValueUnprotect):
+        * JavaScriptCore.exp:
+        * kjs/PropertyNameArray.h:
+        (KJS::PropertyNameArray::globalData):
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::checkSyntax):
+        (KJS::Interpreter::evaluate):
+        Pass a parameter to JSLock/JSLock::DropAllLocks to decide whether the lock needs to be taken.
+
+2008-07-01  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        https://bugs.webkit.org/show_bug.cgi?id=19834
+        Failed assertion in JavaScriptCore/VM/SegmentedVector.h:82
+
+        Creating a global object with a custom prototype resets it twice (wasteful!).
+        So, addStaticGlobals() was called twice, but JSGlobalObject::reset() didn't reset
+        the register array.        
+
+        * kjs/JSGlobalObject.cpp: (KJS::JSGlobalObject::reset): Call setRegisterArray(0, 0).
+
+        * kjs/JSVariableObject.h: Changed registerArray to OwnArrayPtr. Also, added private copy
+        constructor and operator= to ensure that no one attempts to copy this object (for whatever
+        reason, I couldn't make Noncopyable work).
+
+        * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::addStaticGlobals): Allocate registerArray
+        with new[].
+
+        * kjs/JSVariableObject.cpp:
+        (KJS::JSVariableObject::copyRegisterArray): Allocate registerArray with new[].
+        (KJS::JSVariableObject::setRegisterArray): Avoid hitting an assertion in OwnArrayPtr when
+        "changing" the value from 0 to 0.
+
+2008-07-01  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Removed and/or reordered exception checks in array-style a[n] access.
+        
+        SunSpider says 1.4% faster.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): No need to check for exceptions before
+        calling toString, toNumber and/or get. If the call ends up being observable
+        through toString, valueOf, or a getter, we short-circuit it there, instead.
+        In the op_del_by_val case, I removed the incorrect comment without actually
+        removing the code, since I didn't want to tempt the GCC fates!
+
+        * kjs/JSObject.cpp:
+        (KJS::callDefaultValueFunction): Added exception check to prevent
+        toString and valueOf functions from observing execution after an exception
+        has been thrown. This removes some of the burden of exception checking
+        from the machine.
+
+        (KJS::JSObject::defaultValue): Removed redundant exception check here.
+
+        * kjs/PropertySlot.cpp:
+        (KJS::PropertySlot::functionGetter): Added exception check to prevent
+        getter functions from observing execution after an exception has been
+        thrown. This removes some of the burden of exception checking from the
+        machine.
+
+2008-07-01  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Optimized a[n] get and put for cases where n is an immediate unsigned
+        value.
+        
+        SunSpider says 3.5% faster.
+
+2008-07-01  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Darin.
+
+        Bug 19844: JavaScript Switch statement modifies "this"
+        <https://bugs.webkit.org/show_bug.cgi?id=19844>
+
+        Use a temporary when generating code for switch clauses to avoid
+        overwriting 'this' or a local variable.
+
+        * kjs/nodes.cpp:
+        (KJS::CaseBlockNode::emitCodeForBlock):
+
+2008-07-01  Christian Dywan  <christian@twotoasts.de>
+
+        Gtk+ build fix.
+
+        * kjs/list.cpp: Include "JSCell.h"
+
+2008-07-01  Kevin McCullough  <kmccullough@apple.com>
+
+        Build fix.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2008-07-01  Dan Bernstein  <mitz@apple.com>
+
+        Reviewed by Anders Carlsson.
+
+        - Mac release build fix
+
+        * JavaScriptCore.exp:
+
+2008-07-01  Sam Weinig  <sam@webkit.org>
+
+        Try and fix mac builds.
+
+        * JavaScriptCore.exp:
+
+2008-07-01  Sam Weinig  <sam@webkit.org>
+
+        Fix non-AllInOne builds.
+
+        * kjs/DateMath.cpp:
+
+2008-07-01  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Darin Adler.
+
+        Split JSCell and JSNumberCell class declarations out of JSValue.h
+
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * VM/JSPropertyNameIterator.h:
+        * kjs/AllInOneFile.cpp:
+        * kjs/JSCell.cpp: Copied from JavaScriptCore/kjs/JSValue.cpp.
+        * kjs/JSCell.h: Copied from JavaScriptCore/kjs/JSValue.h.
+        (KJS::JSValue::getJSNumber):
+        * kjs/JSNumberCell.cpp:
+        * kjs/JSNumberCell.h: Copied from JavaScriptCore/kjs/JSValue.h.
+        * kjs/JSObject.h:
+        * kjs/JSString.cpp:
+        (KJS::jsString):
+        (KJS::jsOwnedString):
+        * kjs/JSString.h:
+        (KJS::JSValue::toThisJSString):
+        * kjs/JSValue.cpp:
+        * kjs/JSValue.h:
+
+2008-07-01  Anders Carlsson  <andersca@apple.com>
+
+        Build fixes.
+        
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::addStaticGlobals):
+
+2008-07-01  Simon Hausmann  <hausmann@webkit.org>
+
+        Build fix, include OwnPtr.h.
+
+        * kjs/RegExpConstructor.h:
+
+2008-06-30  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Fixed a global object leak caused by the switch to one register file.
+        
+        Don't unconditionally mark the register file, since that logically
+        makes all global variables GC roots, even when their global object is
+        no longer reachable.
+        
+        Instead, make the global object associated with the register file
+        responsible for marking the register file.
+
+2008-06-30  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Removed the "registerBase" abstraction. Since the register file never
+        reallocates, we can keep direct pointers into it, instead of
+        <registerBase, offset> tuples.
+        
+        SunSpider says 0.8% faster.
+        
+2008-06-30  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by NOBODY (build fix).
+
+        Fix build by adding all (hopefully) the missing includes.
+
+        * kjs/BooleanPrototype.cpp:
+        * kjs/DateConstructor.cpp:
+        * kjs/ErrorPrototype.cpp:
+        * kjs/FunctionPrototype.cpp:
+        * kjs/NativeErrorConstructor.cpp:
+        * kjs/NumberPrototype.cpp:
+        * kjs/ObjectPrototype.cpp:
+        * kjs/RegExpConstructor.cpp:
+        * kjs/StringConstructor.cpp:
+        * kjs/StringPrototype.cpp:
+
+2008-06-30  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Bug 19830: REGRESSION (r34883): Google Reader doesn't show up feed list on sidebar
+        <https://bugs.webkit.org/show_bug.cgi?id=19830>
+
+        Ensure that we do not eliminate a write to a local register when doing
+        peephole optimizations.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitJumpIfTrue):
+        (KJS::CodeGenerator::emitJumpIfFalse):
+
+2008-06-30  Sam Weinig  <sam@webkit.org>
+
+        Rubber-stamped by Darin Alder.
+
+        Split InternalFunction into its own header file.
+
+        * API/JSCallbackFunction.h:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/ArrayConstructor.h:
+        * kjs/BooleanConstructor.h:
+        * kjs/DateConstructor.h:
+        * kjs/ErrorConstructor.h:
+        * kjs/FunctionConstructor.h:
+        * kjs/FunctionPrototype.h:
+        * kjs/InternalFunction.h: Copied from kjs/JSFunction.h.
+        * kjs/JSFunction.h:
+        * kjs/NativeErrorConstructor.h:
+        * kjs/NumberConstructor.h:
+        * kjs/ObjectConstructor.h:
+        * kjs/RegExpConstructor.h:
+        * kjs/StringConstructor.h:
+        * profiler/Profiler.cpp:
+
+2008-06-30  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Kevin McCullough.
+
+        Remove empty files Instruction.cpp, LabelID.cpp, Register.cpp and RegisterID.cpp.
+
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * VM/Instruction.cpp: Removed.
+        * VM/LabelID.cpp: Removed.
+        * VM/Register.cpp: Removed.
+        * VM/RegisterID.cpp: Removed.
+
+2008-06-30  Sam Weinig  <sam@webkit.org>
+
+        Rubber-stamped (reluctantly) by Kevin McCullough.
+
+        Rename date_object.h/cpp to DateInstance.h/cpp
+
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * kjs/AllInOneFile.cpp:
+        * kjs/DateConstructor.cpp:
+        * kjs/DateInstance.cpp: Copied from kjs/date_object.cpp.
+        * kjs/DateInstance.h: Copied from kjs/date_object.h.
+        * kjs/DatePrototype.cpp:
+        * kjs/DatePrototype.h:
+        * kjs/date_object.cpp: Removed.
+        * kjs/date_object.h: Removed.
+
+2008-06-30  Sam Weinig  <sam@webkit.org>
+
+        Rubber-stamped by Darin Adler.
+
+        Remove internal.cpp and move its contents to there own .cpp files.
+
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * kjs/AllInOneFile.cpp:
+        * kjs/GetterSetter.cpp: Copied from kjs/internal.cpp.
+        * kjs/InternalFunction.cpp: Copied from kjs/internal.cpp.
+        * kjs/JSNumberCell.cpp: Copied from kjs/internal.cpp.
+        * kjs/JSString.cpp: Copied from kjs/internal.cpp.
+        * kjs/JSString.h:
+        * kjs/LabelStack.cpp: Copied from kjs/internal.cpp.
+        * kjs/NumberConstructor.cpp:
+        * kjs/NumberObject.cpp:
+        (KJS::constructNumber):
+        (KJS::constructNumberFromImmediateNumber):
+        * kjs/internal.cpp: Removed.
+
+2008-06-30  Adam Roben  <aroben@apple.com>
+
+        Fix <rdar://5954749> Assertion failure due to HashTable's use of
+        operator&
+
+        HashTable was passing &value to constructDeletedValue, which in
+        classes like WebCore::COMPtr would cause an assertion. We now pass
+        value by reference instead of by address so that the HashTraits
+        implementations have more flexibility in constructing the deleted
+        value.
+
+        Reviewed by Ada Chan.
+
+        * VM/CodeGenerator.h: Updated for changes to HashTraits.
+        * wtf/HashTable.h:
+        (WTF::::deleteBucket): Changed to pass bucket by reference instead of
+        by address.
+        (WTF::::checkKey): Ditto.
+        * wtf/HashTraits.h:
+        (WTF::): Updated HashTraits for HashTable change.
+
+2008-07-01  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Cameron Zwarich.
+
+        Make RegisterFile really unmap memory on destruction.
+
+        This fixes run-webkit-tests --threaded, which ran out of address space in a few seconds.
+
+        * VM/RegisterFile.cpp: (KJS::RegisterFile::~RegisterFile): Unmap all the memory, not just
+        1/4 of it.
+
+        * kjs/JSGlobalObject.h: Don't include RegisterFile.h, so that changes to it don't make
+        half of WebCore rebuild.
+
+        * VM/Machine.h: Don't forward declare RegisterFile, as RegisterFile.h is included already.
+
+        * VM/RegisterFile.h: (KJS::RegisterFile::RegisterFile): Assert that the allocation succeeded.
+
+2008-06-30  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Rubber-stamped by Oliver.
+
+        Correct the documentation for op_put_by_index.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-06-29  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Bug 19821: Merge the instruction pair (less, jfalse)
+        <https://bugs.webkit.org/show_bug.cgi?id=19821>
+        
+        This is a 2.4% win on SunSpider. I needed to add an ALWAYS_INLINE
+        intrinisc to CodeGenerator::rewindBinaryOp() to avoid a massive
+        regression in regexp-dna.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::rewindBinaryOp):
+        (KJS::CodeGenerator::emitJumpIfFalse):
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.cpp:
+        (KJS::):
+        * VM/Opcode.h:
+
+2008-06-29  Sam Weinig  <sam@webkit.org>
+
+        Fix non-AllInOne builds.
+
+        * kjs/JSObject.cpp:
+        * kjs/JSValue.cpp:
+
+2008-06-29  Sam Weinig  <sam@webkit.org>
+
+        Build fix for Qt.
+
+        * kjs/DateMath.cpp:
+        * kjs/DatePrototype.cpp:
+
+2008-06-29  Sam Weinig  <sam@webkit.org>
+
+        Rubber-stamped by Cameron Zwarich.
+
+        Splits ErrorConstructor, ErrorPrototype,  NativeErrorConstructor and
+        NativeErrorPrototype out of error_object.h/cpp and renames it ErrorInstance.
+
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * kjs/AllInOneFile.cpp:
+        * kjs/ArrayConstructor.cpp:
+        * kjs/ArrayPrototype.cpp:
+        * kjs/BooleanPrototype.cpp:
+        * kjs/DatePrototype.cpp:
+        * kjs/ErrorConstructor.cpp: Copied from kjs/error_object.cpp.
+        * kjs/ErrorConstructor.h: Copied from kjs/error_object.h.
+        * kjs/ErrorInstance.cpp: Copied from kjs/error_object.cpp.
+        * kjs/ErrorInstance.h: Copied from kjs/error_object.h.
+        * kjs/ErrorPrototype.cpp: Copied from kjs/error_object.cpp.
+        * kjs/ErrorPrototype.h: Copied from kjs/error_object.h.
+        * kjs/JSGlobalObject.cpp:
+        * kjs/JSObject.cpp:
+        * kjs/JSValue.cpp:
+        * kjs/NativeErrorConstructor.cpp: Copied from kjs/error_object.cpp.
+        * kjs/NativeErrorConstructor.h: Copied from kjs/error_object.h.
+        * kjs/NativeErrorPrototype.cpp: Copied from kjs/error_object.cpp.
+        * kjs/NativeErrorPrototype.h: Copied from kjs/error_object.h.
+        * kjs/NumberPrototype.cpp:
+        * kjs/RegExpConstructor.cpp:
+        * kjs/RegExpObject.cpp:
+        * kjs/RegExpPrototype.cpp:
+        * kjs/StringPrototype.cpp:
+        * kjs/error_object.cpp: Removed.
+        * kjs/error_object.h: Removed.
+        * kjs/internal.cpp:
+
+2008-06-29  Sam Weinig  <sam@webkit.org>
+
+        Fix non-AllInOne build.
+
+        * kjs/DateConstructor.cpp:
+        * kjs/DateMath.cpp:
+        * kjs/JSObject.cpp:
+
+2008-06-29  Sam Weinig  <sam@webkit.org>
+
+        Rubber-stamped by Oliver Hunt.
+
+        Splits DateConstructor and DatePrototype out of date_object.h/cpp
+        Moves shared Date code into DateMath.
+
+        * DerivedSources.make:
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * kjs/AllInOneFile.cpp:
+        * kjs/DateConstructor.cpp: Copied from kjs/date_object.cpp.
+        * kjs/DateConstructor.h: Copied from kjs/date_object.h.
+        * kjs/DateMath.cpp:
+        (KJS::ymdhmsToSeconds):
+        (KJS::):
+        (KJS::skipSpacesAndComments):
+        (KJS::findMonth):
+        (KJS::parseDate):
+        (KJS::timeClip):
+        (KJS::formatDate):
+        (KJS::formatDateUTCVariant):
+        (KJS::formatTime):
+        * kjs/DateMath.h:
+        (KJS::gmtoffset):
+        * kjs/DatePrototype.cpp: Copied from kjs/date_object.cpp.
+        * kjs/DatePrototype.h: Copied from kjs/date_object.h.
+        * kjs/JSGlobalObject.cpp:
+        * kjs/JSObject.cpp:
+        * kjs/date_object.cpp:
+        * kjs/date_object.h:
+        * kjs/internal.cpp:
+
+2008-06-29  Jan Michael Alonzo  <jmalonzo@webkit.org>
+
+        Rubber-stamped by Cameron Zwarich
+
+        Fix Gtk non-AllInOne build
+
+        * GNUmakefile.am: include JSVariableObject.cpp
+        * kjs/RegExpConstructor.cpp: include RegExpObject.h
+        * kjs/RegExpObject.h: forward declare RegExpPrototype
+
+2008-06-28  Darin Adler  <darin@apple.com>
+
+        Reviewed by Sam and Cameron.
+
+        - fix https://bugs.webkit.org/show_bug.cgi?id=19805
+          Array.concat turns missing array elements into "undefined"
+
+        Test: fast/js/array-holes.html
+
+        * JavaScriptCore.exp: No longer export JSArray::getItem.
+
+        * kjs/ArrayPrototype.cpp:
+        (KJS::arrayProtoFuncConcat): Changed to use getProperty instead of
+        JSArray::getItem -- need to handle properties from the prototype chain
+        instead of ignoring them.
+
+        * kjs/JSArray.cpp: Removed getItem.
+        * kjs/JSArray.h: Ditto.
+
+2008-06-28  Darin Adler  <darin@apple.com>
+
+        Reviewed by Cameron.
+
+        - https://bugs.webkit.org/show_bug.cgi?id=19804
+          optimize access to arrays without "holes"
+
+        SunSpider says 1.8% faster.
+
+        * kjs/JSArray.cpp:
+        (KJS::JSArray::JSArray): Initialize m_fastAccessCutoff when creating
+        arrays. Also updated for new location of m_vectorLength.
+        (KJS::JSArray::getItem): Updated for new location of m_vectorLength.
+        (KJS::JSArray::getSlowCase): Added. Broke out the non-hot parts of
+        getOwnPropertySlot to make the hot part faster.
+        (KJS::JSArray::getOwnPropertySlot): Added a new faster case for
+        indices lower than m_fastAccessCutoff. We can do theese with no
+        additional checks or branches.
+        (KJS::JSArray::put): Added a new faster case for indices lower than
+        m_fastAccessCutoff. We can do theese with no additional checks or
+        branches. Moved the maxArrayIndex handling out of this function.
+        Added code to set m_fastAccessCutoff when the very last hole in
+        an array is filled; this is how the cutoff gets set for most arrays.
+        (KJS::JSArray::putSlowCase): Moved the rest of the put function logic
+        in here, to make the hot part of the put function faster.
+        (KJS::JSArray::deleteProperty): Added code to lower m_fastAccessCutoff
+        when a delete makes a new hole in the array.
+        (KJS::JSArray::getPropertyNames): Updated for new location of
+        m_vectorLength.
+        (KJS::JSArray::increaseVectorLength): Ditto.
+        (KJS::JSArray::setLength): Added code to lower m_fastAccessCutoff
+        when setLength makes the array smaller.
+        (KJS::JSArray::mark): Updated for new location of m_vectorLength.
+        (KJS::JSArray::sort): Ditto. Set m_fastAccessCutoff after moving
+        all the holes to the end of the array.
+        (KJS::JSArray::compactForSorting): Ditto.
+        (KJS::JSArray::checkConsistency): Added consistency checks fro
+        m_fastAccessCutoff and updated for the new location of m_vectorLength.
+
+        * kjs/JSArray.h: Added declarations for slow case functions.
+        Replaced m_vectorLength with m_fastAccessCutoff.
+
+2008-06-28  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Sam.
+
+        When executing a native call, check for an exception before writing the
+        return value.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-06-28  Mark Rowe  <mrowe@apple.com>
+
+        Build fix.  Flag headers as private or public as is appropriate.
+        These settings were accidentally removed during some project file cleanup.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2008-06-28  Sam Weinig  <sam@webkit.org>
+
+        Rubber-stamped by Darin Adler.
+
+        Splits RegExpConstructor and RegExpPrototype out of RegExpObject.h/cpp
+
+        * DerivedSources.make:
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * VM/Machine.cpp:
+        * kjs/AllInOneFile.cpp:
+        * kjs/JSGlobalObject.cpp:
+        * kjs/RegExpConstructor.cpp: Copied from kjs/RegExpObject.cpp.
+        * kjs/RegExpConstructor.h: Copied from kjs/RegExpObject.h.
+        * kjs/RegExpObject.cpp:
+        * kjs/RegExpObject.h:
+        * kjs/RegExpPrototype.cpp: Copied from kjs/RegExpObject.cpp.
+        * kjs/RegExpPrototype.h: Copied from kjs/RegExpObject.h.
+        * kjs/StringPrototype.cpp:
+        * kjs/internal.cpp:
+
+2008-06-28  Sam Weinig  <sam@webkit.org>
+
+        Fix non-AllInOne builds.
+
+        * kjs/StringConstructor.cpp:
+
+2008-06-28  Sam Weinig  <sam@webkit.org>
+
+        Rubber-stamped by Darin Adler.
+
+        Rename string_object.h/cpp to StringObject.h/cpp and split out StringObjectThatMasqueradesAsUndefined,
+        StringConstructor and StringPrototype.
+
+        * DerivedSources.make:
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * kjs/AllInOneFile.cpp:
+        * kjs/JSGlobalObject.cpp:
+        * kjs/StringConstructor.cpp: Copied from JavaScriptCore/kjs/string_object.cpp.
+        * kjs/StringConstructor.h: Copied from JavaScriptCore/kjs/string_object.h.
+        * kjs/StringObject.cpp: Copied from JavaScriptCore/kjs/string_object.cpp.
+        * kjs/StringObject.h: Copied from JavaScriptCore/kjs/string_object.h.
+        * kjs/StringObjectThatMasqueradesAsUndefined.h: Copied from JavaScriptCore/kjs/string_object.h.
+        * kjs/StringPrototype.cpp: Copied from JavaScriptCore/kjs/string_object.cpp.
+        * kjs/StringPrototype.h: Copied from JavaScriptCore/kjs/string_object.h.
+        * kjs/internal.cpp:
+        * kjs/string_object.cpp: Removed.
+        * kjs/string_object.h: Removed.
+
+2008-06-28  Jan Michael Alonzo  <jmalonzo@webkit.org>
+
+        Gtk build fix: JSVariableObject is now part of AllInOne
+
+        * GNUmakefile.am:
+
+2008-06-28  Darin Adler  <darin@apple.com>
+
+        Reviewed by Oliver.
+
+        - https://bugs.webkit.org/show_bug.cgi?id=19801
+          add a feature so we can tell what regular expressions are taking time
+
+        * pcre/pcre_compile.cpp:
+        (jsRegExpCompile): Compile in the string if REGEXP_HISTOGRAM is on.
+
+        * pcre/pcre_exec.cpp:
+        (jsRegExpExecute): Add hook to time execution.
+        (Histogram::~Histogram): Print a sorted list of what took time.
+        (Histogram::add): Accumulate records of what took time.
+        (HistogramTimeLogger::~HistogramTimeLogger): Hook that calls
+        Histogram::add at the right moment and creates the global histogram
+        object.
+
+        * pcre/pcre_internal.h: Define REGEXP_HISTOGRAM.
+
+        * pcre/pcre_tables.cpp: Added missing include of "config.h". Not needed
+        any more, but an omissions an earlier version of this patch detected.
+        * pcre/pcre_ucp_searchfuncs.cpp: Ditto.
+        * pcre/pcre_xclass.cpp: Ditto.
+
+2008-06-28  Sam Weinig  <sam@webkit.org>
+
+        Try and fix the Windows build again.
+
+        * kjs/RegExpObject.cpp:
+        * kjs/date_object.cpp:
+        * kjs/error_object.cpp:
+
+2008-06-28  Sam Weinig  <sam@webkit.org>
+
+        Rubber-stamped by Darin Adler.
+
+        Remove unused StringConstructorFunction class.
+
+        * kjs/string_object.h:
+
+2008-06-28  Sam Weinig  <sam@webkit.org>
+
+        Fix windows build.
+
+        * kjs/ArrayPrototype.cpp:
+        * kjs/BooleanPrototype.cpp:
+        * kjs/BooleanPrototype.h:
+        * kjs/FunctionPrototype.cpp:
+        * kjs/JSImmediate.cpp:
+        * kjs/JSObject.cpp:
+        * kjs/MathObject.cpp:
+        * kjs/NumberPrototype.cpp:
+        * kjs/NumberPrototype.h:
+        * kjs/ObjectConstructor.cpp:
+        * kjs/RegExpObject.h:
+        * kjs/error_object.h:
+        * kjs/string_object.cpp:
+
+2008-06-28  Sam Weinig  <sam@webkit.org>
+
+        Rubber-stamped by Oliver Hunt.
+
+        Splits FunctionConstructor out of FunctionPrototype.h/cpp
+        Splits NumberConstructor and NumberPrototype out of NumberObject.h/cpp
+        Rename object_object.h/cpp to ObjectPrototype.h/cpp and split out ObjectConstructor.
+
+        * API/JSCallbackConstructor.cpp:
+        * API/JSClassRef.cpp:
+        * API/JSObjectRef.cpp:
+        * DerivedSources.make:
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * VM/Machine.cpp:
+        * kjs/AllInOneFile.cpp:
+        * kjs/ArrayConstructor.cpp:
+        * kjs/ArrayConstructor.h:
+        * kjs/FunctionConstructor.cpp: Copied from JavaScriptCore/kjs/FunctionPrototype.cpp.
+        * kjs/FunctionConstructor.h: Copied from JavaScriptCore/kjs/FunctionPrototype.h.
+        * kjs/FunctionPrototype.cpp:
+        * kjs/FunctionPrototype.h:
+        * kjs/JSFunction.cpp:
+        * kjs/JSGlobalObject.cpp:
+        * kjs/JSImmediate.cpp:
+        * kjs/MathObject.h:
+        * kjs/NumberConstructor.cpp: Copied from JavaScriptCore/kjs/NumberObject.cpp.
+        * kjs/NumberConstructor.h: Copied from JavaScriptCore/kjs/NumberObject.h.
+        * kjs/NumberObject.cpp:
+        * kjs/NumberObject.h:
+        * kjs/NumberPrototype.cpp: Copied from JavaScriptCore/kjs/NumberObject.cpp.
+        * kjs/NumberPrototype.h: Copied from JavaScriptCore/kjs/NumberObject.h.
+        * kjs/ObjectConstructor.cpp: Copied from JavaScriptCore/kjs/object_object.cpp.
+        * kjs/ObjectConstructor.h: Copied from JavaScriptCore/kjs/object_object.h.
+        * kjs/ObjectPrototype.cpp: Copied from JavaScriptCore/kjs/object_object.cpp.
+        * kjs/ObjectPrototype.h: Copied from JavaScriptCore/kjs/object_object.h.
+        * kjs/RegExpObject.h:
+        * kjs/Shell.cpp:
+        * kjs/error_object.h:
+        * kjs/internal.cpp:
+        * kjs/nodes.cpp:
+        * kjs/object_object.cpp: Removed.
+        * kjs/object_object.h: Removed.
+        * kjs/string_object.h:
+
+2008-06-28  Darin Adler  <darin@apple.com>
+
+        Reviewed by Oliver.
+
+        - fix https://bugs.webkit.org/show_bug.cgi?id=19796
+          optimize expressions with ignored results (especially post-increment)
+
+        SunSpider says 0.9% faster.
+
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::tempDestination): Create a new temporary for
+        ignoredResult() too, just as we would for 0.
+        (KJS::CodeGenerator::finalDestination): Use the temporary if the
+        register passed in is ignoredResult() too, just as we would for 0.
+        (KJS::CodeGenerator::destinationForAssignResult): Return 0 if the
+        passed in register is ignoredResult(), just as we would for 0.
+        (KJS::CodeGenerator::moveToDestinationIfNeeded): Return 0 if the
+        register passed in is ignoredResult(). What matters is that we
+        don't want to emit a move. The return value won't be looked at.
+        (KJS::CodeGenerator::emitNode): Allow ignoredResult() and pass it
+        through to the node's emitCode function.
+
+        * VM/RegisterID.h:
+        (KJS::ignoredResult): Added. Special value to indicate the result of
+        a node will be ignored and need not be put in any register.
+
+        * kjs/nodes.cpp:
+        (KJS::NullNode::emitCode): Do nothing if dst == ignoredResult().
+        (KJS::BooleanNode::emitCode): Ditto.
+        (KJS::NumberNode::emitCode): Ditto.
+        (KJS::StringNode::emitCode): Ditto.
+        (KJS::RegExpNode::emitCode): Ditto.
+        (KJS::ThisNode::emitCode): Ditto.
+        (KJS::ResolveNode::emitCode): Do nothing if dst == ignoredResult() and
+        the identifier resolves to a local variable.
+        (KJS::ObjectLiteralNode::emitCode): Do nothing if dst == ignoredResult()
+        and the object is empty.
+        (KJS::PostIncResolveNode::emitCode): If dst == ignoredResult(), then do
+        nothing for the local constant case, and do a pre-increment in all the
+        other cases.
+        (KJS::PostDecResolveNode::emitCode): Ditto.
+        (KJS::PostIncBracketNode::emitCode): Ditto.
+        (KJS::PostDecBracketNode::emitCode): Ditto.
+        (KJS::PostIncDotNode::emitCode): Ditto.
+        (KJS::PostDecDotNode::emitCode): Ditto.
+        (KJS::DeleteValueNode::emitCode): Pass ignoredResult() when evaluating
+        the expression.
+        (KJS::VoidNode::emitCode): Ditto.
+        (KJS::TypeOfResolveNode::emitCode): If dst == ignoredResult(), do nothing
+        if the identifier resolves to a local variable, and don't bother generating
+        a typeof opcode in the other case.
+        (KJS::TypeOfValueNode::emitCode): Ditto.
+        (KJS::PreIncResolveNode::emitCode): Do nothing if dst == ignoredResult() and
+        the identifier resolves to a local constant.
+        (KJS::PreDecResolveNode::emitCode): Ditto.
+        (KJS::AssignResolveNode::emitCode): Turn ignoredResult() into 0 in a couple
+        places, because we need to put the result into a register so we can assign
+        it. At other sites this is taken care of by functions like finalDestination.
+        (KJS::CommaNode::emitCode): Pass ignoredResult() when evaluating the first
+        expression.
+        (KJS::ForNode::emitCode): Pass ignoredResult() when evaluating the first and
+        third expressions.
+        (KJS::ForInNode::emitCode): Pass ignoredResult() when evaluating the first
+        expression.
+
+2008-06-28  Darin Adler  <darin@apple.com>
+
+        Reviewed by Oliver.
+
+        - https://bugs.webkit.org/show_bug.cgi?id=19787
+          create most arrays from values in registers rather than with multiple put operations
+
+        SunSpider says 0.8% faster.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump): Added argv and argc parameters to new_array.
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): Ditto.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitNewArray): Added.
+        * VM/CodeGenerator.h: Added ElementNode* argument to emitNewArray.
+
+        * kjs/nodes.cpp:
+        (KJS::ArrayNode::emitCode): Pass the ElementNode to emitNewArray so it can be
+        initialized with as many elements as possible. If the array doesn't have any
+        holes in it, that's all that's needed. If there are holes, then emit some separate
+        put operations for the other values in the array and for the length as needed.
+
+        * kjs/nodes.h: Added some accessors to ElementNode so the code generator can
+        iterate through elements and generate code to evaluate them. Now ArrayNode does
+        not need to be a friend. Also took out some unused PlacementNewAdoptType
+        constructors.
+
+2008-06-28  Darin Adler  <darin@apple.com>
+
+        Reviewed by Oliver.
+
+        * kjs/nodes.h: Remove obsolete PlacementNewAdopt constructors.
+        We no longer mutate the AST in place.
+
+2008-06-28  Jan Michael Alonzo  <jmalonzo@webkit.org>
+
+        Reviewed by Oliver Hunt.
+
+        Build fix
+
+        * VM/Machine.cpp: include stdio.h for printf
+
+2008-06-27  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Oliver Hunt.
+
+        Fix platforms that don't use AllInOne.cpp
+
+        * kjs/BooleanConstructor.h:
+        * kjs/BooleanPrototype.h:
+        * kjs/FunctionPrototype.cpp:
+
+2008-06-27  Sam Weinig  <sam@webkit.org>
+
+        Rubber-stamped by Oliver Hunt.
+
+        Splits ArrayConstructor out of ArrayPrototype.h/cpp
+        Splits BooleanConstructor and BooleanPrototype out of BooleanObject.h/cpp
+
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * VM/Machine.cpp:
+        * kjs/AllInOneFile.cpp:
+        * kjs/ArrayConstructor.cpp: Copied from kjs/ArrayPrototype.cpp.
+        * kjs/ArrayConstructor.h: Copied from kjs/ArrayPrototype.h.
+        * kjs/ArrayPrototype.cpp:
+        * kjs/ArrayPrototype.h:
+        * kjs/BooleanConstructor.cpp: Copied from kjs/BooleanObject.cpp.
+        * kjs/BooleanConstructor.h: Copied from kjs/BooleanObject.h.
+        * kjs/BooleanObject.cpp:
+        * kjs/BooleanObject.h:
+        * kjs/BooleanPrototype.cpp: Copied from kjs/BooleanObject.cpp.
+        * kjs/BooleanPrototype.h: Copied from kjs/BooleanObject.h.
+        * kjs/CommonIdentifiers.h:
+        * kjs/FunctionPrototype.cpp:
+        * kjs/JSArray.cpp:
+        * kjs/JSGlobalObject.cpp:
+        * kjs/JSImmediate.cpp:
+        * kjs/Shell.cpp:
+        * kjs/internal.cpp:
+        * kjs/nodes.cpp:
+        * kjs/string_object.cpp:
+
+2008-06-27  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Sam.
+
+        Bug 18626: SQUIRRELFISH: support the "slow script" dialog <https://bugs.webkit.org/show_bug.cgi?id=18626>
+        <rdar://problem/5973931> Slow script dialog needs to be reimplemented for squirrelfish
+
+        Adds support for the slow script dialog in squirrelfish.  This requires the addition
+        of three new op codes, op_loop, op_loop_if_true, and op_loop_if_less which have the
+        same behaviour as their simple jump equivalents but have an additional time out check.
+
+        Additional assertions were added to other jump instructions to prevent accidentally
+        creating loops with jump types that do not support time out checks.
+
+        Sunspider does not report a regression, however this appears very sensitive to code
+        layout and hardware, so i would expect up to a 1% regression on other systems.
+
+        Part of this required moving the old timeout logic from JSGlobalObject and into Machine
+        which is the cause of a number of the larger diff blocks.
+
+        * JavaScriptCore.exp:
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitJumpIfTrue):
+        (KJS::CodeGenerator::emitJumpScopes):
+        * VM/ExceptionHelpers.cpp:
+        (KJS::InterruptedExecutionError::isWatchdogException):
+        (KJS::createInterruptedExecutionException):
+        * VM/ExceptionHelpers.h:
+        * VM/LabelID.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::Machine):
+        (KJS::Machine::throwException):
+        (KJS::Machine::resetTimeoutCheck):
+        (KJS::getCurrentTime):
+        (KJS::Machine::checkTimeout):
+        (KJS::Machine::privateExecute):
+        * VM/Machine.h:
+        (KJS::Machine::setTimeoutTime):
+        (KJS::Machine::startTimeoutCheck):
+        (KJS::Machine::stopTimeoutCheck):
+        (KJS::Machine::initTimeout):
+        * VM/Opcode.cpp:
+        (KJS::):
+        * VM/Opcode.h:
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::init):
+        (KJS::JSGlobalObject::setTimeoutTime):
+        (KJS::JSGlobalObject::startTimeoutCheck):
+        * kjs/JSGlobalObject.h:
+        * kjs/JSObject.h:
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::evaluate):
+
+2008-06-27  Jan Michael Alonzo  <jmalonzo@webkit.org>
+
+        Gtk and Qt build fix: Remove RegisterFileStack from the build
+        scripts.
+
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+
+2008-06-27  Adele Peterson  <adele@apple.com>
+
+        Reviewed by Geoff.
+
+        Build fixes. 
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * VM/RegisterFile.h:
+        (KJS::RegisterFile::RegisterFile):
+        * kjs/JSGlobalObject.cpp:
+        * kjs/collector.cpp:
+
+2008-06-27  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        One RegisterFile to rule them all!
+        
+        SunSpider reports a 0.2% speedup.
+
+        This patch removes the RegisterFileStack abstraction and replaces it with
+        a single register file that
+        
+        (a) allocates a fixed storage area, including a fixed area for global
+        vars, so that no operation may cause the register file to reallocate
+        
+        and
+
+        (b) swaps between global storage areas when executing code in different 
+        global objects.
+        
+        This patch also changes the layout of the register file so that all call
+        frames, including call frames for global code, get a header. This is
+        required to support re-entrant global code. It also just makes things simpler.
+        
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::addGlobalVar): New function. Differs from addVar in
+        that
+        
+        (a) global vars don't contribute to a CodeBlock's numLocals count, since
+        global storage is fixed and allocated at startup
+        
+        and
+        
+        (b) references to global vars get shifted to elide intermediate stack
+        between "r" and the global storage area.
+        
+        * VM/Machine.cpp:
+        (KJS::Machine::dumpRegisters): Updated this function to match the new
+        register file layout, and added the ability to dump exact identifiers
+        for the different parts of a call frame.
+        
+        (KJS::Machine::unwindCallFrame): Updated this function to match the new
+        register file layout.
+         
+        (KJS::Machine::execute): Updated this function to initialize a call frame
+        header for global code, and to swap global storage areas when switching
+        to execution in a new global object.
+        
+        (KJS::Machine::privateExecute): Got rid of "safeForReentry" and re-reading
+        of registerBase because the register file is always safe for reentry now,
+        and registerBase never changes.
+        
+        * VM/Machine.h: Moved the call frame header enum from Machine to RegisterFile,
+        to resolve a header dependency problem (a good sign that the enum belonged
+        in RegisterFile all along!)
+
+        * VM/RegisterFile.cpp:
+        * VM/RegisterFile.h: Changed RegisterFile to mmap a fixed size register
+        area. This allows us to avoid re-allocting the register file later on.
+        Instead, we rely on the OS to allocate physical pages to the register
+        file as necessary.
+
+        * VM/RegisterFileStack.cpp: Removed. Tada!
+        * VM/RegisterFileStack.h: Removed. Tada!
+
+        * kjs/DebuggerCallFrame.cpp: Updated this class to match the new
+        register file layout, greatly simplifying it in the process.
+
+        * kjs/JSActivation.h:
+        * kjs/JSActivation.cpp: Moved some of this logic up to JSVariableObject,
+        since the global object now needs to be able to tear off its registers
+        just like the activation object.
+
+        * kjs/JSFunction.cpp: No need to fiddle with the register file anymore.
+
+        * kjs/JSGlobalObject.h:
+        * kjs/JSGlobalObject.cpp: Updated JSGlobalObject to support moving its
+        global storage area into and out of the register file.
+
+        * kjs/PropertySlot.cpp: No need to fiddle with the register file anymore.
+
+        * kjs/collector.cpp: Renamed markStackObjectConservatively to
+        markConservatively, since we don't just mark stack objects this way.
+        
+        Also, added code to mark the machine's register file.
+
+        * kjs/config.h: Moved some platforms #defines from here...
+        * wtf/Platform.h: ...to here, to support mmap/VirtualAlloc detection
+        in RegisterFile.h.
+
+2008-06-26  Mark Rowe  <mrowe@apple.com>
+
+        Speculative fix for the Windows build.
+
+        * kjs/JSImmediate.cpp:
+
+2008-06-26  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Darin Adler and Geoff Garen.
+
+        Fix the malloc zone introspection functions so that malloc_zone_statistics does not give
+        bogus output in an application that uses JavaScriptCore.
+
+        * kjs/CollectorHeapIntrospector.cpp:
+        (KJS::CollectorHeapIntrospector::statistics): Return statistics about memory allocated by the collector.
+        * kjs/CollectorHeapIntrospector.h:
+        * wtf/FastMalloc.cpp: Zero out the statistics.  FastMalloc doesn't track this information at present.
+        Returning zero for all values is preferable to returning bogus data.
+
+2008-06-26  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - https://bugs.webkit.org/show_bug.cgi?id=19721
+          speed up JavaScriptCore by not wrapping strings in objects just
+          to call functions on them
+
+        - optimize UString append and the replace function a bit
+
+        SunSpider says 1.8% faster.
+
+        * JavaScriptCore.exp: Updated.
+
+        * VM/JSPropertyNameIterator.cpp: Added include of JSString.h, now needed
+        because jsString returns a JSString*.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): Removed the toObject call from native
+        function calls. Also removed code to put the this value into a register.
+
+        * kjs/BooleanObject.cpp:
+        (KJS::booleanProtoFuncToString): Rewrite to handle false and true
+        separately.
+
+        * kjs/FunctionPrototype.cpp:
+        (KJS::constructFunction): Use single-character append rather than building
+        a string for each character.
+        * kjs/JSFunction.cpp:
+        (KJS::globalFuncUnescape): Ditto.
+
+        * kjs/JSImmediate.cpp:
+        (KJS::JSImmediate::prototype): Added. Gets the appropriate prototype for
+        use with an immediate value. To be used instead of toObject when doing a
+        get on an immediate value.
+        * kjs/JSImmediate.h: Added prototype.
+
+        * kjs/JSObject.cpp:
+        (KJS::JSObject::toString): Tweaked formatting.
+
+        * kjs/JSObject.h:
+        (KJS::JSValue::get): Use prototype instead of toObject to avoid creating
+        an object wrapper just to search for properties. This also saves an
+        unnecessary hash table lookup since the object wrappers themselves don't
+        have any properties.
+
+        * kjs/JSString.h: Added toThisString and toThisJSString.
+
+        * kjs/JSValue.cpp:
+        (KJS::JSCell::toThisString): Added.
+        (KJS::JSCell::toThisJSString): Added.
+        (KJS::JSCell::getJSNumber): Added.
+        (KJS::jsString): Changed return type to JSString*.
+        (KJS::jsOwnedString): Ditto.
+
+        * kjs/JSValue.h:
+        (KJS::JSValue::toThisString): Added.
+        (KJS::JSValue::toThisJSString): Added.
+        (KJS::JSValue::getJSNumber): Added.
+
+        * kjs/NumberObject.cpp:
+        (KJS::NumberObject::getJSNumber): Added.
+        (KJS::integer_part_noexp): Append C string directly rather than first
+        turning it into a UString.
+        (KJS::numberProtoFuncToString): Use getJSNumber to check if the value
+        is a number rather than isObject(&NumberObject::info). This works for
+        immediate numbers, number cells, and NumberObject instances.
+        (KJS::numberProtoFuncToLocaleString): Ditto.
+        (KJS::numberProtoFuncValueOf): Ditto.
+        (KJS::numberProtoFuncToFixed): Ditto.
+        (KJS::numberProtoFuncToExponential): Ditto.
+        (KJS::numberProtoFuncToPrecision): Ditto.
+        * kjs/NumberObject.h: Added getJSNumber.
+
+        * kjs/PropertySlot.cpp: Tweaked comment.
+
+        * kjs/internal.cpp:
+        (KJS::JSString::toThisString): Added.
+        (KJS::JSString::toThisJSString): Added.
+        (KJS::JSString::getOwnPropertySlot): Changed code that searches the
+        prototype chain to start with the string prototype and not create a
+        string object.
+        (KJS::JSNumberCell::toThisString): Added.
+        (KJS::JSNumberCell::getJSNumber): Added.
+
+        * kjs/lookup.cpp:
+        (KJS::staticFunctionGetter): Moved here, because there's no point in
+        having a function that's only used for a function pointer be inline.
+        (KJS::setUpStaticFunctionSlot): New function for getStaticFunctionSlot.
+
+        * kjs/lookup.h:
+        (KJS::staticValueGetter): Don't mark this inline. It doesn't make sense
+        to have a function that's only used for a function pointer be inline.
+        (KJS::getStaticFunctionSlot): Changed to get properties from the parent
+        first before doing any handling of functions. This is the fastest way
+        to return the function once the initial setup is done.
+
+        * kjs/string_object.cpp:
+        (KJS::StringObject::getPropertyNames): Call value() instead of getString(),
+        avoiding an unnecessary virtual function call (the call to the type()
+        function in the implementation of the isString() function).
+        (KJS::StringObject::toString): Added.
+        (KJS::StringObject::toThisString): Added.
+        (KJS::StringObject::toThisJSString): Added.
+        (KJS::substituteBackreferences): Rewrote to use a appending algorithm
+        instead of a the old one that tried to replace in place.
+        (KJS::stringProtoFuncReplace): Merged this function and the replace function.
+        Replaced the hand-rolled dynamic arrays for source ranges and replacements
+        with Vector.
+        (KJS::stringProtoFuncToString): Handle JSString as well as StringObject.
+        Removed the separate valueOf implementation, since it can just share this.
+        (KJS::stringProtoFuncCharAt): Use toThisString, which handles JSString as
+        well as StringObject, and is slightly more efficient than the old code too.
+        (KJS::stringProtoFuncCharCodeAt): Ditto.
+        (KJS::stringProtoFuncConcat): Ditto.
+        (KJS::stringProtoFuncIndexOf): Ditto.
+        (KJS::stringProtoFuncLastIndexOf): Ditto.
+        (KJS::stringProtoFuncMatch): Ditto.
+        (KJS::stringProtoFuncSearch): Ditto.
+        (KJS::stringProtoFuncSlice): Ditto.
+        (KJS::stringProtoFuncSplit): Ditto.
+        (KJS::stringProtoFuncSubstr): Ditto.
+        (KJS::stringProtoFuncSubstring): Ditto.
+        (KJS::stringProtoFuncToLowerCase): Use toThisJSString.
+        (KJS::stringProtoFuncToUpperCase): Ditto.
+        (KJS::stringProtoFuncToLocaleLowerCase): Ditto.
+        (KJS::stringProtoFuncToLocaleUpperCase): Ditto.
+        (KJS::stringProtoFuncLocaleCompare): Ditto.
+        (KJS::stringProtoFuncBig): Use toThisString.
+        (KJS::stringProtoFuncSmall): Ditto.
+        (KJS::stringProtoFuncBlink): Ditto.
+        (KJS::stringProtoFuncBold): Ditto.
+        (KJS::stringProtoFuncFixed): Ditto.
+        (KJS::stringProtoFuncItalics): Ditto.
+        (KJS::stringProtoFuncStrike): Ditto.
+        (KJS::stringProtoFuncSub): Ditto.
+        (KJS::stringProtoFuncSup): Ditto.
+        (KJS::stringProtoFuncFontcolor): Ditto.
+        (KJS::stringProtoFuncFontsize): Ditto.
+        (KJS::stringProtoFuncAnchor): Ditto.
+        (KJS::stringProtoFuncLink): Ditto.
+
+        * kjs/string_object.h: Added toString, toThisString, and toThisJSString.
+
+        * kjs/ustring.cpp:
+        (KJS::UString::append): Added a version that takes a character pointer and
+        size, so we don't have to create a UString just to append to another UString.
+        * kjs/ustring.h:
+
+2008-06-26  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Maciej.
+
+        Make JSGlobalData per-thread.
+
+        No change on SunSpider total.
+
+        * wtf/ThreadSpecific.h: Re-enabled the actual implementation.
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::~JSGlobalObject): Re-added a JSLock-related assertion. We'll probably
+        want to preserve these somehow to keep legacy behavior in working condition.
+        (KJS::JSGlobalObject::init): Initialize globalData pointer earlier, so that it is ready
+        when updating JSGlobalObject linked list.
+
+        * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::head): Changed head() to be non-static, and
+        to use JSGlobalData associated with the current object.
+
+        * kjs/InitializeThreading.cpp: (KJS::initializeThreadingOnce): Removed a no longer needed
+        Heap::registerAsMainThread() call.
+
+        * kjs/JSGlobalData.h: Removed a lying lie comment - parserObjectExtraRefCounts is not
+        transient, and while newParserObjects may conceptually be such, there is still some node
+        manipulation going on outside Parser::parse which touches it.
+
+        * kjs/JSGlobalData.cpp:
+        (KJS::JSGlobalData::~JSGlobalData): Delete recently added members.
+        (KJS::JSGlobalData::sharedInstance): Actually use a separate instance.
+
+        * kjs/collector.cpp:
+        (KJS::Heap::Heap):
+        (KJS::Heap::~Heap): Added a destructor, which unconditionally deletes everything.
+        (KJS::Heap::sweep): Removed code related to "collect on main thread only" logic.
+        (KJS::Heap::collect): Ditto.
+        (KJS::Heap::globalObjectCount): Explicitly use per-thread instance of JSGlobalObject linked
+        list now that JSGlobalObject::head() is not static. Curently, WebCoreStatistics methods only
+        work with the main thread currently anyway.
+        (KJS::Heap::protectedGlobalObjectCount): Ditto.
+
+        * kjs/collector.h: Removed code related to "collect on main thread only" logic.
+
+        * JavaScriptCore.exp: Removed Heap::collectOnMainThreadOnly.
+
+2008-06-26  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        https://bugs.webkit.org/show_bug.cgi?id=19767
+        REGRESSION: Crash in sort() when visiting http://www.onnyturf.com/subway/
+
+        * kjs/JSArray.cpp: (KJS::AVLTreeAbstractorForArrayCompare::set_balance_factor):
+        Made changing balance factor from -1 to +1 work correctly.
+
+        * wtf/AVLTree.h: (KJS::AVLTreeDefaultBSet::operator[]): Added an assertion that catches
+        this slightly earlier.
+
+2008-06-25  Timothy Hatcher  <timothy@apple.com>
+
+        Fixes an ASSERT in the profiler when starting multiple profiles
+        with the same name inside the same function/program.
+
+        Reviewed by Kevin McCullough.
+
+        * profiler/Profile.cpp:
+        (KJS::Profile::Profile): Initialize m_stoppedCallDepth to zero.
+        (KJS::Profile::stopProfiling): Set the current node to the parent,
+        because we are in a call that will not get a didExecute call.
+        (KJS::Profile::removeProfile): Increment m_stoppedCallDepth to
+        account for didExecute not being called for profile.
+        (KJS::Profile::willExecute): Increment m_stoppedCallDepth if stopped.
+        (KJS::Profile::didExecute): Decrement m_stoppedCallDepth if stopped and
+        greater than zero, and return early.
+        * profiler/Profile.h: Added stoppedProfiling().
+        * profiler/Profiler.cpp:
+        (KJS::Profiler::findProfile): Removed.
+        (KJS::Profiler::startProfiling): Don't return early for stopped profiles.
+        (KJS::Profiler::stopProfiling): Skipp stopped profiles.
+        (KJS::Profiler::didFinishAllExecution): Code clean-up.
+        * profiler/Profiler.h: Removed findProfile.
+
+2008-06-25  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Alexey Proskuryakov.
+
+        Attempt to fix Windows debug build. The compiler gives a warning when
+        Structured Exception Handling and destructors are used in the same
+        function. Using manual locking and unlocking instead of constructors
+        and destructors should fix the warning.
+
+        * kjs/Shell.cpp:
+        (main):
+
+2008-06-25  Alexey Proskuryakov  <ap@webkit.org>
+
+        Forgot to address a review comment about better names for tracked objects, doing it now.
+
+        * kjs/JSGlobalData.cpp:
+        (KJS::JSGlobalData::JSGlobalData):
+        * kjs/JSGlobalData.h:
+        * kjs/nodes.cpp:
+        (KJS::ParserRefCounted::ParserRefCounted):
+        (KJS::ParserRefCounted::ref):
+        (KJS::ParserRefCounted::deref):
+        (KJS::ParserRefCounted::hasOneRef):
+        (KJS::ParserRefCounted::deleteNewObjects):
+
+2008-06-25  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoff.
+
+        Remove more threadInstance() calls.
+
+        * kjs/JSFunction.cpp:
+        (KJS::JSFunction::getParameterName):
+        (KJS::IndexToNameMap::unMap):
+        (KJS::Arguments::deleteProperty):
+        * kjs/JSFunction.h:
+        Access nullIdentifier without going to thread specific storage.
+
+        * JavaScriptCore.exp:
+        * kjs/JSGlobalData.cpp:
+        (KJS::JSGlobalData::JSGlobalData):
+        * kjs/JSGlobalData.h:
+        * kjs/Parser.cpp:
+        (KJS::Parser::parse):
+        * kjs/Parser.h:
+        (KJS::ParserRefCountedData::ParserRefCountedData):
+        (KJS::Parser::parse):
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::ParserRefCounted::ParserRefCounted):
+        (KJS::ParserRefCounted::ref):
+        (KJS::ParserRefCounted::deref):
+        (KJS::ParserRefCounted::hasOneRef):
+        (KJS::ParserRefCounted::deleteNewObjects):
+        (KJS::Node::Node):
+        (KJS::StatementNode::StatementNode):
+        (KJS::BreakpointCheckStatement::BreakpointCheckStatement):
+        (KJS::ConstDeclNode::ConstDeclNode):
+        (KJS::BlockNode::BlockNode):
+        (KJS::ForInNode::ForInNode):
+        (KJS::ScopeNode::ScopeNode):
+        (KJS::ProgramNode::ProgramNode):
+        (KJS::ProgramNode::create):
+        (KJS::EvalNode::EvalNode):
+        (KJS::EvalNode::create):
+        (KJS::FunctionBodyNode::FunctionBodyNode):
+        (KJS::FunctionBodyNode::create):
+        * kjs/nodes.h:
+        (KJS::ExpressionNode::):
+        (KJS::NullNode::):
+        (KJS::BooleanNode::):
+        (KJS::NumberNode::):
+        (KJS::ImmediateNumberNode::):
+        (KJS::StringNode::):
+        (KJS::RegExpNode::):
+        (KJS::ThisNode::):
+        (KJS::ResolveNode::):
+        (KJS::ElementNode::):
+        (KJS::ArrayNode::):
+        (KJS::PropertyNode::):
+        (KJS::PropertyListNode::):
+        (KJS::ObjectLiteralNode::):
+        (KJS::BracketAccessorNode::):
+        (KJS::DotAccessorNode::):
+        (KJS::ArgumentListNode::):
+        (KJS::ArgumentsNode::):
+        (KJS::NewExprNode::):
+        (KJS::EvalFunctionCallNode::):
+        (KJS::FunctionCallValueNode::):
+        (KJS::FunctionCallResolveNode::):
+        (KJS::FunctionCallBracketNode::):
+        (KJS::FunctionCallDotNode::):
+        (KJS::PrePostResolveNode::):
+        (KJS::PostIncResolveNode::):
+        (KJS::PostDecResolveNode::):
+        (KJS::PostfixBracketNode::):
+        (KJS::PostIncBracketNode::):
+        (KJS::PostDecBracketNode::):
+        (KJS::PostfixDotNode::):
+        (KJS::PostIncDotNode::):
+        (KJS::PostDecDotNode::):
+        (KJS::PostfixErrorNode::):
+        (KJS::DeleteResolveNode::):
+        (KJS::DeleteBracketNode::):
+        (KJS::DeleteDotNode::):
+        (KJS::DeleteValueNode::):
+        (KJS::VoidNode::):
+        (KJS::TypeOfResolveNode::):
+        (KJS::TypeOfValueNode::):
+        (KJS::PreIncResolveNode::):
+        (KJS::PreDecResolveNode::):
+        (KJS::PrefixBracketNode::):
+        (KJS::PreIncBracketNode::):
+        (KJS::PreDecBracketNode::):
+        (KJS::PrefixDotNode::):
+        (KJS::PreIncDotNode::):
+        (KJS::PreDecDotNode::):
+        (KJS::PrefixErrorNode::):
+        (KJS::UnaryOpNode::UnaryOpNode):
+        (KJS::UnaryPlusNode::):
+        (KJS::NegateNode::):
+        (KJS::BitwiseNotNode::):
+        (KJS::LogicalNotNode::):
+        (KJS::BinaryOpNode::BinaryOpNode):
+        (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode):
+        (KJS::MultNode::):
+        (KJS::DivNode::):
+        (KJS::ModNode::):
+        (KJS::AddNode::):
+        (KJS::SubNode::):
+        (KJS::LeftShiftNode::):
+        (KJS::RightShiftNode::):
+        (KJS::UnsignedRightShiftNode::):
+        (KJS::LessNode::):
+        (KJS::GreaterNode::):
+        (KJS::LessEqNode::):
+        (KJS::GreaterEqNode::):
+        (KJS::InstanceOfNode::):
+        (KJS::InNode::):
+        (KJS::EqualNode::):
+        (KJS::NotEqualNode::):
+        (KJS::StrictEqualNode::):
+        (KJS::NotStrictEqualNode::):
+        (KJS::BitAndNode::):
+        (KJS::BitOrNode::):
+        (KJS::BitXOrNode::):
+        (KJS::LogicalAndNode::):
+        (KJS::LogicalOrNode::):
+        (KJS::ConditionalNode::):
+        (KJS::ReadModifyResolveNode::):
+        (KJS::AssignResolveNode::):
+        (KJS::ReadModifyBracketNode::):
+        (KJS::AssignBracketNode::):
+        (KJS::AssignDotNode::):
+        (KJS::ReadModifyDotNode::):
+        (KJS::AssignErrorNode::):
+        (KJS::CommaNode::):
+        (KJS::VarDeclCommaNode::):
+        (KJS::ConstStatementNode::):
+        (KJS::SourceElements::SourceElements):
+        (KJS::EmptyStatementNode::):
+        (KJS::DebuggerStatementNode::):
+        (KJS::ExprStatementNode::):
+        (KJS::VarStatementNode::):
+        (KJS::IfNode::):
+        (KJS::IfElseNode::):
+        (KJS::DoWhileNode::):
+        (KJS::WhileNode::):
+        (KJS::ForNode::):
+        (KJS::ContinueNode::):
+        (KJS::BreakNode::):
+        (KJS::ReturnNode::):
+        (KJS::WithNode::):
+        (KJS::LabelNode::):
+        (KJS::ThrowNode::):
+        (KJS::TryNode::):
+        (KJS::ParameterNode::):
+        (KJS::FuncExprNode::):
+        (KJS::FuncDeclNode::):
+        (KJS::CaseClauseNode::):
+        (KJS::ClauseListNode::):
+        (KJS::CaseBlockNode::):
+        (KJS::SwitchNode::):
+        Changed ParserRefCounted to hold a JSGlobalData pointer, and used it to replace
+        threadInstance calls.
+
+2008-06-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Alexey Proskuryakov.
+
+        Make the JavaScript shell collect the heap from main() instead of
+        jscmain() to suppress leak messages in debug builds.
+
+        * kjs/Shell.cpp:
+        (main):
+        (jscmain):
+
+2008-06-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Make the conversion of the pair (less, jtrue) to jless use register
+        reference counting information for safety instead of requiring callers
+        to decide whether it is safe.
+
+        No changes on SunSpider codegen.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitJumpIfTrue):
+        * VM/CodeGenerator.h:
+        * kjs/nodes.cpp:
+        (KJS::DoWhileNode::emitCode):
+        (KJS::WhileNode::emitCode):
+        (KJS::ForNode::emitCode):
+        (KJS::CaseBlockNode::emitCodeForBlock):
+
+2008-06-24  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Tim.
+
+        <rdar://problem/6031594> JSProfiler: Profiler goes into an infinite
+        loop sometimes.
+        <rdar://problem/6031603> JSProfiler: Profiler asserts in debug and
+        give the wrong times in release
+
+        Fixed two issues found by Tim in the same test.
+
+        * profiler/Profile.cpp:
+        (KJS::Profile::removeProfileStart): No longer take profile's time from
+        all ancestors, but instead attribute it to its parent.  Also add an
+        Assert to ensure we only delete the child we mean to.
+        (KJS::Profile::removeProfileEnd): Ditto for profileEnd.
+        (KJS::Profile::didExecute): Cleaned up the execution order and correctly
+        attribute all of the parent's time to the new node.
+        * profiler/ProfileNode.cpp: If this node does not have a startTime it
+        should not get a giant total time, but instead be 0.
+        (KJS::ProfileNode::endAndRecordCall):
+        * profiler/ProfileNode.h:
+        (KJS::ProfileNode::removeChild): Should reset the sibling pointers since
+        one of them has been removed.
+
+2008-06-24  Darin Adler  <darin@apple.com>
+
+        Reviewed by Cameron.
+
+        - fix https://bugs.webkit.org/show_bug.cgi?id=19739
+          REGRESSION: fast/js/property-getters-and-setters.html fails
+
+        * kjs/JSObject.cpp:
+        (KJS::JSObject::put): Remove an untested optimization I checked in by accident.
+        The two loops up the prototype chain both need to start from this; instead the
+        second loop was starting where the first loop left off.
+
+2008-06-24  Steve Falkenburg  <sfalken@apple.com>
+
+        Build fix.
+
+        * kjs/nodes.cpp:
+
+2008-06-24  Joerg Bornemann  <joerg.bornemann@trolltech.com>
+
+        Reviewed by Simon.
+
+        For the Qt build on Windows don't depend on the presence of GNU CPP
+        but use MSVC's preprocessor instead.
+        dftables accepts a --preprocessor option which is set in pcre.pri for MSVC platforms.
+
+        * pcre/dftables: Added support for specifying the preprocessor command
+        to use via --preprocessor, similar to
+        WebCore/bindings/scripts/generate-bindings.pl.
+        * pcre/pcre.pri: Pass --preprocessor='cl /e' to dftables, or more
+        generally speaking QMAKE_CC /E for the win32-msvc buildspecs.
+
+2008-06-24  Simon Hausmann  <hausmann@webkit.org>
+
+        Fix the Qt build, added missing include.
+
+        * kjs/PropertySlot.cpp:
+
+2008-06-24  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Cameron Zwarich.
+
+        Make ParserRefCountedCounter actually perform a leak check.
+
+        * kjs/nodes.cpp:
+        (KJS::ParserRefCountedCounter::~ParserRefCountedCounter): Check for leaks in destructor,
+        not in constructor.
+        (KJS::ParserRefCountedCounter::increment):
+        (KJS::ParserRefCountedCounter::decrement):
+        (KJS::ParserRefCounted::ParserRefCounted):
+        (KJS::ParserRefCounted::~ParserRefCounted):
+        While at it, also made counting thread-safe.
+
+2008-06-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Bug 19730: REGRESSION (r34497): Text in alerts in "Leisure suit Larry" is not wrapped
+        <https://bugs.webkit.org/show_bug.cgi?id=19730>
+
+        Do not convert the pair (less, jtrue) to jless when jtrue is a jump
+        target. An example of this is when the condition of a while loop is a
+        LogicalOrNode.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitLabel):
+
+2008-06-20  Ariya Hidayat  <ariya.hidayat@trolltech.com>
+
+        Reviewed by Adam Roben.
+
+        Fix compile with MinGW.
+
+        * kjs/Shell.cpp:
+        * wtf/Threading.h:
+        (WTF::atomicIncrement):
+        (WTF::atomicDecrement):
+
+2008-06-23  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        Prepration for returning memory to the OS on Windows.  Track whether a portion of a span of memory was returned to the OS.
+        If it was, ask that it be recommitted before returning it to the application as an allocated region.
+
+        * wtf/FastMalloc.cpp:
+        (WTF::TCMalloc_PageHeap::New):  If the span was decommitted, ask that it be recommitted before returning it.
+        (WTF::TCMalloc_PageHeap::AllocLarge):  Ditto.
+        (WTF::TCMalloc_PageHeap::Carve):  When splitting a span, ensure that the decommitted state propogates to the two new spans.
+        (WTF::TCMalloc_PageHeap::Delete):  When merging a span, ensure that the resulting span is marked as decommitted if any of the
+        spans being merged were marked as decommitted.
+        (WTF::TCMalloc_PageHeap::IncrementalScavenge):  Mark as decommitted after releasing the span.
+        (WTF::TCMalloc_Central_FreeList::FetchFromSpans): Add an assertion to catch a decommitted span being returned to the application
+        without first being recommitted.
+        (WTF::TCMalloc_Central_FreeList::Populate): Ditto.
+        * wtf/TCSystemAlloc.cpp: Stub out TCMalloc_SystemCommit.
+        * wtf/TCSystemAlloc.h:
+
+2008-06-23  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Remove the sample member of Span when NO_TCMALLOC_SAMPLES is defined.
+
+        * wtf/FastMalloc.cpp:
+        (WTF::TCMalloc_PageHeap::Delete): Only update Span::sample if NO_TCMALLOC_SAMPLES is not defined.
+        (WTF::TCMallocStats::do_free):  Ditto.
+
+2008-06-23  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - work toward https://bugs.webkit.org/show_bug.cgi?id=19721
+
+        More preparation toward making functions work on primitive types without
+        creating wrapper objects. No speedup this time, but prepares for a future
+        speedup without slowing things down.
+
+        SunSpider reports no change.
+
+        - Eliminated the implementsCall, callAsFunction and construct virtual
+          functions from JSObject. Instead, the CallData and ConstructData for
+          a native function includes a function pointer that the caller can use
+          directly. Changed all call sites to use CallData and ConstructData.
+
+        - Changed the "this" argument to native functions to be a JSValue rather
+          than a JSObject. This prepares us for passing primitives into these
+          functions. The conversion to an object now must be done inside the
+          function. Critically, if it's a function that can be called on a DOM
+          window object, then we have to be sure to call toThisObject on the
+          argument before we use it for anything even if it's already an object.
+
+        - Eliminated the practice of using constructor objects in the global
+          object to make objects of the various basic types. Since these
+          constructors can't be replaced by script, there's no reason to involve
+          a constructor object at all. Added functions to do the construction
+          directly.
+
+        - Made some more class members private and protected, including virtual
+          function overrides. This can catch code using unnecessarily slow virtual
+          function code paths when the type of an object is known statically. If we
+          later find a new reason use the members outside the class it's easy to
+          make them public again.
+
+        - Moved the declarations of the native implementations for functions out
+          of header files. These can have internal linkage and be declared inside
+          the source file.
+
+        - Changed PrototypeFunction to take function pointers with the right
+          arguments to be put directly into CallData. This eliminates the
+          need to have a separate PrototypeReflexiveFunction, and reveals that the
+          real purpose of that class included something else specific to eval --
+          storage of a cached global object. So renamed PrototypeReflexiveFunction
+          to GlobalEvalFunction.
+
+        * API/JSCallbackConstructor.cpp:
+        (KJS::constructJSCallback):
+        (KJS::JSCallbackConstructor::getConstructData):
+        * API/JSCallbackConstructor.h:
+        * API/JSCallbackFunction.cpp:
+        (KJS::JSCallbackFunction::implementsHasInstance):
+        (KJS::JSCallbackFunction::call):
+        (KJS::JSCallbackFunction::getCallData):
+        * API/JSCallbackFunction.h:
+        (KJS::JSCallbackFunction::classInfo):
+        * API/JSCallbackObject.h:
+        (KJS::JSCallbackObject::classRef):
+        (KJS::JSCallbackObject::classInfo):
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::::getConstructData):
+        (KJS::::construct):
+        (KJS::::getCallData):
+        (KJS::::call):
+        * API/JSObjectRef.cpp:
+        (JSObjectMakeFunction):
+        (JSObjectIsFunction):
+        (JSObjectCallAsFunction):
+        (JSObjectCallAsConstructor):
+        * JavaScriptCore.exp:
+        * VM/Machine.cpp:
+        (KJS::jsTypeStringForValue):
+        (KJS::Machine::privateExecute):
+        * kjs/ArrayPrototype.cpp:
+        (KJS::arrayProtoFuncToString):
+        (KJS::arrayProtoFuncToLocaleString):
+        (KJS::arrayProtoFuncJoin):
+        (KJS::arrayProtoFuncConcat):
+        (KJS::arrayProtoFuncPop):
+        (KJS::arrayProtoFuncPush):
+        (KJS::arrayProtoFuncReverse):
+        (KJS::arrayProtoFuncShift):
+        (KJS::arrayProtoFuncSlice):
+        (KJS::arrayProtoFuncSort):
+        (KJS::arrayProtoFuncSplice):
+        (KJS::arrayProtoFuncUnShift):
+        (KJS::arrayProtoFuncFilter):
+        (KJS::arrayProtoFuncMap):
+        (KJS::arrayProtoFuncEvery):
+        (KJS::arrayProtoFuncForEach):
+        (KJS::arrayProtoFuncSome):
+        (KJS::arrayProtoFuncIndexOf):
+        (KJS::arrayProtoFuncLastIndexOf):
+        (KJS::ArrayConstructor::ArrayConstructor):
+        (KJS::constructArrayWithSizeQuirk):
+        (KJS::constructWithArrayConstructor):
+        (KJS::ArrayConstructor::getConstructData):
+        (KJS::callArrayConstructor):
+        (KJS::ArrayConstructor::getCallData):
+        * kjs/ArrayPrototype.h:
+        * kjs/BooleanObject.cpp:
+        (KJS::booleanProtoFuncToString):
+        (KJS::booleanProtoFuncValueOf):
+        (KJS::constructBoolean):
+        (KJS::constructWithBooleanConstructor):
+        (KJS::BooleanConstructor::getConstructData):
+        (KJS::callBooleanConstructor):
+        (KJS::BooleanConstructor::getCallData):
+        (KJS::constructBooleanFromImmediateBoolean):
+        * kjs/BooleanObject.h:
+        * kjs/CallData.h:
+        (KJS::):
+        * kjs/ConstructData.h:
+        (KJS::):
+        * kjs/FunctionPrototype.cpp:
+        (KJS::callFunctionPrototype):
+        (KJS::FunctionPrototype::getCallData):
+        (KJS::functionProtoFuncToString):
+        (KJS::functionProtoFuncApply):
+        (KJS::functionProtoFuncCall):
+        (KJS::constructWithFunctionConstructor):
+        (KJS::FunctionConstructor::getConstructData):
+        (KJS::callFunctionConstructor):
+        (KJS::FunctionConstructor::getCallData):
+        (KJS::constructFunction):
+        * kjs/FunctionPrototype.h:
+        * kjs/JSArray.cpp:
+        (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key):
+        (KJS::JSArray::sort):
+        (KJS::constructEmptyArray):
+        (KJS::constructArray):
+        * kjs/JSArray.h:
+        (KJS::JSArray::classInfo):
+        * kjs/JSFunction.cpp:
+        (KJS::JSFunction::call):
+        (KJS::globalFuncEval):
+        (KJS::globalFuncParseInt):
+        (KJS::globalFuncParseFloat):
+        (KJS::globalFuncIsNaN):
+        (KJS::globalFuncIsFinite):
+        (KJS::globalFuncDecodeURI):
+        (KJS::globalFuncDecodeURIComponent):
+        (KJS::globalFuncEncodeURI):
+        (KJS::globalFuncEncodeURIComponent):
+        (KJS::globalFuncEscape):
+        (KJS::globalFuncUnescape):
+        (KJS::globalFuncKJSPrint):
+        (KJS::PrototypeFunction::PrototypeFunction):
+        (KJS::PrototypeFunction::getCallData):
+        (KJS::GlobalEvalFunction::GlobalEvalFunction):
+        (KJS::GlobalEvalFunction::mark):
+        * kjs/JSFunction.h:
+        (KJS::InternalFunction::classInfo):
+        (KJS::InternalFunction::functionName):
+        (KJS::JSFunction::classInfo):
+        (KJS::GlobalEvalFunction::cachedGlobalObject):
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::reset):
+        (KJS::JSGlobalObject::mark):
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::JSGlobalObject):
+        (KJS::JSGlobalObject::evalFunction):
+        * kjs/JSImmediate.cpp:
+        (KJS::JSImmediate::toObject):
+        * kjs/JSNotAnObject.cpp:
+        * kjs/JSNotAnObject.h:
+        * kjs/JSObject.cpp:
+        (KJS::JSObject::put):
+        (KJS::callDefaultValueFunction):
+        (KJS::JSObject::defaultValue):
+        (KJS::JSObject::lookupGetter):
+        (KJS::JSObject::lookupSetter):
+        (KJS::JSObject::hasInstance):
+        (KJS::JSObject::fillGetterPropertySlot):
+        (KJS::Error::create):
+        (KJS::constructEmptyObject):
+        * kjs/JSObject.h:
+        (KJS::GetterSetter::GetterSetter):
+        (KJS::GetterSetter::getter):
+        (KJS::GetterSetter::setGetter):
+        (KJS::GetterSetter::setter):
+        (KJS::GetterSetter::setSetter):
+        * kjs/JSValue.cpp:
+        (KJS::JSCell::deleteProperty):
+        (KJS::call):
+        (KJS::construct):
+        * kjs/JSValue.h:
+        * kjs/MathObject.cpp:
+        (KJS::mathProtoFuncAbs):
+        (KJS::mathProtoFuncACos):
+        (KJS::mathProtoFuncASin):
+        (KJS::mathProtoFuncATan):
+        (KJS::mathProtoFuncATan2):
+        (KJS::mathProtoFuncCeil):
+        (KJS::mathProtoFuncCos):
+        (KJS::mathProtoFuncExp):
+        (KJS::mathProtoFuncFloor):
+        (KJS::mathProtoFuncLog):
+        (KJS::mathProtoFuncMax):
+        (KJS::mathProtoFuncMin):
+        (KJS::mathProtoFuncPow):
+        (KJS::mathProtoFuncRandom):
+        (KJS::mathProtoFuncRound):
+        (KJS::mathProtoFuncSin):
+        (KJS::mathProtoFuncSqrt):
+        (KJS::mathProtoFuncTan):
+        * kjs/MathObject.h:
+        * kjs/NumberObject.cpp:
+        (KJS::numberProtoFuncToString):
+        (KJS::numberProtoFuncToLocaleString):
+        (KJS::numberProtoFuncValueOf):
+        (KJS::numberProtoFuncToFixed):
+        (KJS::numberProtoFuncToExponential):
+        (KJS::numberProtoFuncToPrecision):
+        (KJS::NumberConstructor::NumberConstructor):
+        (KJS::constructWithNumberConstructor):
+        (KJS::NumberConstructor::getConstructData):
+        (KJS::callNumberConstructor):
+        (KJS::NumberConstructor::getCallData):
+        (KJS::constructNumber):
+        (KJS::constructNumberFromImmediateNumber):
+        * kjs/NumberObject.h:
+        (KJS::NumberObject::classInfo):
+        (KJS::NumberConstructor::classInfo):
+        * kjs/PropertySlot.cpp:
+        (KJS::PropertySlot::functionGetter):
+        * kjs/RegExpObject.cpp:
+        (KJS::regExpProtoFuncTest):
+        (KJS::regExpProtoFuncExec):
+        (KJS::regExpProtoFuncCompile):
+        (KJS::regExpProtoFuncToString):
+        (KJS::callRegExpObject):
+        (KJS::RegExpObject::getCallData):
+        (KJS::constructRegExp):
+        (KJS::constructWithRegExpConstructor):
+        (KJS::RegExpConstructor::getConstructData):
+        (KJS::callRegExpConstructor):
+        (KJS::RegExpConstructor::getCallData):
+        * kjs/RegExpObject.h:
+        (KJS::RegExpConstructor::classInfo):
+        * kjs/Shell.cpp:
+        (GlobalObject::GlobalObject):
+        (functionPrint):
+        (functionDebug):
+        (functionGC):
+        (functionVersion):
+        (functionRun):
+        (functionLoad):
+        (functionReadline):
+        (functionQuit):
+        * kjs/date_object.cpp:
+        (KJS::gmtoffset):
+        (KJS::formatLocaleDate):
+        (KJS::fillStructuresUsingDateArgs):
+        (KJS::DateInstance::getTime):
+        (KJS::DateInstance::getUTCTime):
+        (KJS::DateConstructor::DateConstructor):
+        (KJS::constructDate):
+        (KJS::DateConstructor::getConstructData):
+        (KJS::callDate):
+        (KJS::DateConstructor::getCallData):
+        (KJS::dateParse):
+        (KJS::dateNow):
+        (KJS::dateUTC):
+        (KJS::dateProtoFuncToString):
+        (KJS::dateProtoFuncToUTCString):
+        (KJS::dateProtoFuncToDateString):
+        (KJS::dateProtoFuncToTimeString):
+        (KJS::dateProtoFuncToLocaleString):
+        (KJS::dateProtoFuncToLocaleDateString):
+        (KJS::dateProtoFuncToLocaleTimeString):
+        (KJS::dateProtoFuncValueOf):
+        (KJS::dateProtoFuncGetTime):
+        (KJS::dateProtoFuncGetFullYear):
+        (KJS::dateProtoFuncGetUTCFullYear):
+        (KJS::dateProtoFuncToGMTString):
+        (KJS::dateProtoFuncGetMonth):
+        (KJS::dateProtoFuncGetUTCMonth):
+        (KJS::dateProtoFuncGetDate):
+        (KJS::dateProtoFuncGetUTCDate):
+        (KJS::dateProtoFuncGetDay):
+        (KJS::dateProtoFuncGetUTCDay):
+        (KJS::dateProtoFuncGetHours):
+        (KJS::dateProtoFuncGetUTCHours):
+        (KJS::dateProtoFuncGetMinutes):
+        (KJS::dateProtoFuncGetUTCMinutes):
+        (KJS::dateProtoFuncGetSeconds):
+        (KJS::dateProtoFuncGetUTCSeconds):
+        (KJS::dateProtoFuncGetMilliSeconds):
+        (KJS::dateProtoFuncGetUTCMilliseconds):
+        (KJS::dateProtoFuncGetTimezoneOffset):
+        (KJS::dateProtoFuncSetTime):
+        (KJS::setNewValueFromTimeArgs):
+        (KJS::setNewValueFromDateArgs):
+        (KJS::dateProtoFuncSetMilliSeconds):
+        (KJS::dateProtoFuncSetUTCMilliseconds):
+        (KJS::dateProtoFuncSetSeconds):
+        (KJS::dateProtoFuncSetUTCSeconds):
+        (KJS::dateProtoFuncSetMinutes):
+        (KJS::dateProtoFuncSetUTCMinutes):
+        (KJS::dateProtoFuncSetHours):
+        (KJS::dateProtoFuncSetUTCHours):
+        (KJS::dateProtoFuncSetDate):
+        (KJS::dateProtoFuncSetUTCDate):
+        (KJS::dateProtoFuncSetMonth):
+        (KJS::dateProtoFuncSetUTCMonth):
+        (KJS::dateProtoFuncSetFullYear):
+        (KJS::dateProtoFuncSetUTCFullYear):
+        (KJS::dateProtoFuncSetYear):
+        (KJS::dateProtoFuncGetYear):
+        * kjs/date_object.h:
+        (KJS::DateInstance::internalNumber):
+        (KJS::DateInstance::classInfo):
+        * kjs/error_object.cpp:
+        (KJS::errorProtoFuncToString):
+        (KJS::constructError):
+        (KJS::constructWithErrorConstructor):
+        (KJS::ErrorConstructor::getConstructData):
+        (KJS::callErrorConstructor):
+        (KJS::ErrorConstructor::getCallData):
+        (KJS::NativeErrorConstructor::construct):
+        (KJS::constructWithNativeErrorConstructor):
+        (KJS::NativeErrorConstructor::getConstructData):
+        (KJS::callNativeErrorConstructor):
+        (KJS::NativeErrorConstructor::getCallData):
+        * kjs/error_object.h:
+        (KJS::NativeErrorConstructor::classInfo):
+        * kjs/internal.cpp:
+        (KJS::JSNumberCell::toObject):
+        (KJS::JSNumberCell::toThisObject):
+        (KJS::GetterSetter::mark):
+        (KJS::GetterSetter::toPrimitive):
+        (KJS::GetterSetter::toBoolean):
+        (KJS::GetterSetter::toNumber):
+        (KJS::GetterSetter::toString):
+        (KJS::GetterSetter::toObject):
+        (KJS::InternalFunction::InternalFunction):
+        (KJS::InternalFunction::implementsHasInstance):
+        * kjs/lookup.h:
+        (KJS::HashEntry::):
+        * kjs/nodes.cpp:
+        (KJS::FuncDeclNode::makeFunction):
+        (KJS::FuncExprNode::makeFunction):
+        * kjs/object_object.cpp:
+        (KJS::objectProtoFuncValueOf):
+        (KJS::objectProtoFuncHasOwnProperty):
+        (KJS::objectProtoFuncIsPrototypeOf):
+        (KJS::objectProtoFuncDefineGetter):
+        (KJS::objectProtoFuncDefineSetter):
+        (KJS::objectProtoFuncLookupGetter):
+        (KJS::objectProtoFuncLookupSetter):
+        (KJS::objectProtoFuncPropertyIsEnumerable):
+        (KJS::objectProtoFuncToLocaleString):
+        (KJS::objectProtoFuncToString):
+        (KJS::ObjectConstructor::ObjectConstructor):
+        (KJS::constructObject):
+        (KJS::constructWithObjectConstructor):
+        (KJS::ObjectConstructor::getConstructData):
+        (KJS::callObjectConstructor):
+        (KJS::ObjectConstructor::getCallData):
+        * kjs/object_object.h:
+        * kjs/string_object.cpp:
+        (KJS::replace):
+        (KJS::stringProtoFuncToString):
+        (KJS::stringProtoFuncValueOf):
+        (KJS::stringProtoFuncCharAt):
+        (KJS::stringProtoFuncCharCodeAt):
+        (KJS::stringProtoFuncConcat):
+        (KJS::stringProtoFuncIndexOf):
+        (KJS::stringProtoFuncLastIndexOf):
+        (KJS::stringProtoFuncMatch):
+        (KJS::stringProtoFuncSearch):
+        (KJS::stringProtoFuncReplace):
+        (KJS::stringProtoFuncSlice):
+        (KJS::stringProtoFuncSplit):
+        (KJS::stringProtoFuncSubstr):
+        (KJS::stringProtoFuncSubstring):
+        (KJS::stringProtoFuncToLowerCase):
+        (KJS::stringProtoFuncToUpperCase):
+        (KJS::stringProtoFuncToLocaleLowerCase):
+        (KJS::stringProtoFuncToLocaleUpperCase):
+        (KJS::stringProtoFuncLocaleCompare):
+        (KJS::stringProtoFuncBig):
+        (KJS::stringProtoFuncSmall):
+        (KJS::stringProtoFuncBlink):
+        (KJS::stringProtoFuncBold):
+        (KJS::stringProtoFuncFixed):
+        (KJS::stringProtoFuncItalics):
+        (KJS::stringProtoFuncStrike):
+        (KJS::stringProtoFuncSub):
+        (KJS::stringProtoFuncSup):
+        (KJS::stringProtoFuncFontcolor):
+        (KJS::stringProtoFuncFontsize):
+        (KJS::stringProtoFuncAnchor):
+        (KJS::stringProtoFuncLink):
+        (KJS::stringFromCharCode):
+        (KJS::StringConstructor::StringConstructor):
+        (KJS::constructWithStringConstructor):
+        (KJS::StringConstructor::getConstructData):
+        (KJS::callStringConstructor):
+        (KJS::StringConstructor::getCallData):
+        * kjs/string_object.h:
+
+2008-06-23  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Bug 19716: REGRESSION (SquirrelFish): Reproducible crash after entering a username at mint.com
+        <https://bugs.webkit.org/show_bug.cgi?id=19716>
+
+        When unwinding callframes for exceptions, check whether the callframe
+        was created by a reentrant native call to JavaScript after tearing off
+        the local variables instead of before.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::unwindCallFrame):
+
+2008-06-23  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        Get testapi passing again in a debug build.
+
+        * API/testapi.c:
+        (main): Update the expected output of calling JSValueMakeString on a function object.
+
+2008-06-21  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Print a blank line when exiting the jsc interactive mode to ensure that the shell
+        prompt will start on a new line.
+
+        * kjs/Shell.cpp:
+        (runInteractive):
+
+2008-06-21  Mark Rowe  <mrowe@apple.com>
+
+        Rubber-stamped by Sam Weinig.
+
+        Tweak the paths of the items in the "tests" group to clean things up a little.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2008-06-21  Mark Rowe  <mrowe@apple.com>
+
+        Rubber-stamped by Sam Weinig.
+
+        Fix jsc to link against libedit.dylib rather than libedit.2.dylib.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2008-06-21  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Copy the JavaScriptCore shell (jsc) into JavaScriptCore.framework so that it will
+        be included in nightly builds.
+        https://bugs.webkit.org/show_bug.cgi?id=19691
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2008-06-21  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Mark Rowe.
+
+        Fix the build for non-Mac Darwin platforms by disabling their support
+        for readline in the JavaScript shell.
+
+        * kjs/config.h:
+
+2008-06-20  Timothy Hatcher  <timothy@apple.com>
+
+        Use member function pointers for the Profile::forEach function.
+        Eliminating a few static functions and simplified things a little.
+
+        Reviewed by Alexey Proskuryakov.
+
+        * JavaScriptCore.exp: Change the symbol for forEach.
+        * profiler/Profile.cpp:
+        (KJS::Profile::forEach): Use a member function pointer.
+        * profiler/Profile.h:
+        (KJS::Profile::sortTotalTimeDescending): Pass a function pointer.
+        (KJS::Profile::sortTotalTimeAscending): Ditto.
+        (KJS::Profile::sortSelfTimeDescending): Ditto.
+        (KJS::Profile::sortSelfTimeAscending): Ditto.
+        (KJS::Profile::sortCallsDescending): Ditto.
+        * profiler/ProfileNode.h:
+        (KJS::ProfileNode::sortTotalTimeDescending): No longer static.
+        (KJS::ProfileNode::sortTotalTimeAscending): Ditto.
+        (KJS::ProfileNode::sortSelfTimeDescending): Ditto.
+        (KJS::ProfileNode::sortSelfTimeAscending): Ditto.
+        (KJS::ProfileNode::sortCallsDescending): Ditto.
+
+2008-06-20  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Remove unused destructors.
+
+        * kjs/nodes.cpp:
+        * kjs/nodes.h:
+
+2008-06-20  Timothy Hatcher  <timothy@apple.com>
+
+        Fixed an ASSERT(m_actualSelfTime <= m_actualTotalTime) when starting
+        and stopping a profile from the Develop menu. Also prevents
+        inserting an incorrect parent node as the new head after profiling
+        is stopped from the Develop menu.
+
+        Reviewed by Dan Bernstein.
+
+        * profiler/Profile.cpp:
+        (KJS::Profile::stopProfiling): If the current node is already the head
+        then there is no more need to record future nodes in didExecute.
+        (KJS::Profile::didExecute): Move the code of setupCurrentNodeAsStopped
+        into here since this was the only caller. When setting the total time
+        keep any current total time while adding the self time of the head.
+        (KJS::Profile::setupCurrentNodeAsStopped): Removed.
+        * profiler/Profile.h: Removed setupCurrentNodeAsStopped.
+
+2008-06-20  Kevin Ollivier  <kevino@theolliviers.com>
+
+        !USE(MULTIPLE_THREADS) on Darwin build fix
+
+        * kjs/InitializeThreading.cpp:
+        (KJS::initializeThreading):
+        * kjs/collector.h:
+
+2008-06-20  Kevin McCullough  <kmccullough@apple.com>
+
+        -Leopard Build Fix.
+
+        * profiler/Profile.cpp:
+        (KJS::Profile::removeProfileStart):
+        (KJS::Profile::removeProfileEnd):
+
+2008-06-20  Kevin McCullough  <kmccullough@apple.com>
+
+        Just giving credit.
+
+        * ChangeLog:
+
+2008-06-20  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Tim and Dan.
+
+        <rdar://problem/6024846> JSProfiler: ASSERT hit in Profiler.
+        - Because InspectorController can call startProfiling() and
+        stopProfiling() we cannot assert that console.profile() and
+        console.profileEnd() will be in the profile tree.
+
+        * profiler/Profile.cpp:
+        (KJS::Profile::removeProfileStart):
+        (KJS::Profile::removeProfileEnd):
+
+2008-06-20  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Tim.
+
+        <rdar://problem/5958770> JSProfiler: Time incorrectly given to (idle)
+        if profiling is started and finished within the same function. (19230)
+        - Now we profile one more stack frame up from the last frame to allocate
+        the time spent in it, if it exists.
+
+        * JavaScriptCore.exp:
+        * VM/Machine.cpp: We need to let the profiler know when the JS program 
+        has finished since that is what will actually stop the profiler instead
+        of just calling stopProfiling().
+        (KJS::Machine::execute):
+        * profiler/Profile.cpp:
+        (KJS::Profile::create): Moved from Profile.h since it was getting pretty
+        long.
+        (KJS::Profile::Profile): We now have a client, which is a listener who
+        we will return this profile to, once it has actually finished.
+        (KJS::Profile::stopProfiling): Instead of fully stopping the profiler
+        here, we set the flag and keep it profiling in the background.
+        (KJS::Profile::didFinishAllExecution): This is where the profiler
+        actually finishes and creates the (idle) node if one should be made.
+        (KJS::Profile::removeProfileStart): Don't use m_currentNode since it is
+        needed by the profiler as it runs silently in the background.
+        (KJS::Profile::removeProfileEnd): Ditto.
+        (KJS::Profile::willExecute): Don't profile new functions if we have
+        stopped profiling.
+        (KJS::Profile::didExecute): Only record one more return as all the
+        remaining time will be attributed to that function.
+        (KJS::Profile::setupCurrentNodeAsStopped): Sets the current node's time.
+        * profiler/Profile.h: Added functions and variables for the above
+        changes.
+        (KJS::Profile::client):
+        * profiler/ProfileNode.h:
+        (KJS::CallIdentifier::toString): Debug method.
+        * profiler/Profiler.cpp: Added support for the ProfilerClient.
+        (KJS::Profiler::startProfiling):
+        (KJS::Profiler::stopProfiling): No longer return sthe profile.
+        (KJS::Profiler::didFinishAllExecution): Now returns the profile to the
+        client instead of stopProfiling.
+        * profiler/Profiler.h:
+        (KJS::ProfilerClient::~ProfilerClient): Clients will implement this
+        interface.
+
+2008-06-19  Ariya Hidayat  <ariya.hidayat@trolltech.com>
+
+        Reviewed by Simon.
+
+        Surpress compiler warning (int vs unsigned comparison).
+
+        * wtf/unicode/qt4/UnicodeQt4.h:
+        (WTF::Unicode::toLower):
+
+2008-06-19  Ariya Hidayat  <ariya.hidayat@trolltech.com>
+
+        Reviewed by Timothy Hatcher.
+
+        Introduce compiler define for MinGW, to have COMPILER(MINGW).
+
+        * wtf/Platform.h:
+
+2008-06-19  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoff.
+
+        Make Machine per-JSGlobalData.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitOpcode):
+        * VM/Machine.cpp:
+        (KJS::callEval):
+        (KJS::Machine::unwindCallFrame):
+        (KJS::Machine::throwException):
+        (KJS::Machine::execute):
+        (KJS::Machine::debug):
+        * VM/Machine.h:
+        * kjs/DebuggerCallFrame.cpp:
+        (KJS::DebuggerCallFrame::evaluate):
+        * kjs/DebuggerCallFrame.h:
+        (KJS::DebuggerCallFrame::DebuggerCallFrame):
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::ExecState):
+        * kjs/ExecState.h:
+        (KJS::ExecState::machine):
+        * kjs/JSFunction.cpp:
+        (KJS::JSFunction::callAsFunction):
+        (KJS::JSFunction::argumentsGetter):
+        (KJS::JSFunction::callerGetter):
+        (KJS::JSFunction::construct):
+        (KJS::globalFuncEval):
+        * kjs/JSGlobalData.cpp:
+        (KJS::JSGlobalData::JSGlobalData):
+        * kjs/JSGlobalData.h:
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::evaluate):
+
+2008-06-19  Alp Toker  <alp@nuanti.com>
+
+        GTK+/autotools build fix. JSGlobalObject.cpp in now in
+        AllInOneFile.cpp and shouldn't be built separately.
+
+        * GNUmakefile.am:
+
+2008-06-19  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Get rid of some threadInstance calls.
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::init):
+        * kjs/Parser.cpp:
+        (KJS::Parser::parse):
+        * kjs/Shell.cpp:
+        (jscmain):
+
+2008-06-19  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Sam.
+
+        Fix an assertion failure at startup.
+
+        * kjs/JSObject.h: (KJS::JSObject::JSObject): Allow jsNull prototype in an assertion (I had
+        it fixed in a wrong copy of the file, so I wasn't getting the failure).
+
+2008-06-19  Alexey Proskuryakov  <ap@webkit.org>
+
+        Build fix.
+
+        * kjs/collector.cpp:
+        (KJS::Heap::Heap):
+        (KJS::allocateBlock):
+        * kjs/collector.h:
+        No, #if PLATFORM(UNIX) was not right. I've just moved the unsafe initialization back for now,
+        as the platforms that use that code path do not use multiple threads yet.
+
+2008-06-19  Alexey Proskuryakov  <ap@webkit.org>
+
+        Windows and Qt build fixes.
+
+        * kjs/collector.h: 
+        * kjs/collector.cpp:
+        (KJS::Heap::Heap):
+        Wrapped m_pagesize in #if PLATFORM(UNIX), which should better match the sequence of #elifs
+        in allocateBlock(). Changed MIN_ARRAY_SIZE to be explicitly size_t, as this type is different
+        on different platforms.
+
+2008-06-17  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Prepare JavaScript heap for being per-thread.
+
+        * kjs/ExecState.h: Shuffle includes, making it possible to include ExecState.h in JSValue.h.
+        (KJS::ExecState::heap): Added an accessor.
+
+        * API/JSBase.cpp: (JSGarbageCollect): Collect both shared and per-thread heaps.
+
+        * API/JSContextRef.cpp: (JSGlobalContextCreate): When allocating JSGlobalObject, indicate
+        that it belongs to a shared heap.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/AllInOneFile.cpp:
+        Moved JSGlobalObject.cpp to AllInOneFile, as a build fix for inlineAllocate magic.
+
+        * VM/CodeGenerator.h: (KJS::CodeGenerator::globalExec): Added an accessor (working via
+        m_scopeChain).
+
+        * VM/RegisterFile.h:
+        (KJS::RegisterFile::mark):
+        * VM/RegisterFileStack.h:
+        (KJS::RegisterFileStack::mark):
+        Made these pseudo-mark functions take Heap*.
+
+        * kjs/InitializeThreading.cpp:
+        (KJS::initializeThreading): Initialize heap introspector.
+
+        * kjs/JSGlobalData.h: Added Heap to the structure.
+
+        * kjs/JSGlobalData.cpp:
+        (KJS::JSGlobalData::JSGlobalData): Initialize Heap.
+        (KJS::JSGlobalData::sharedInstance): Added a method to access shared global data instance
+        for legacy clients.
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::~JSGlobalObject): Changed to work with per-thread head; fixed list
+        maintenance logic.
+        (KJS::JSGlobalObject::init): Changed to work with per-thread head.
+        (KJS::JSGlobalObject::put): Assert that a cross-heap operation is not being attempted.
+        (KJS::JSGlobalObject::reset): Pass ExecState* where now required.
+        (KJS::JSGlobalObject::mark): Pass the current heap to RegisterFileStack::mark.
+        (KJS::JSGlobalObject::operator new): Overload operator new to use per-thread or shared heap.
+        * kjs/JSGlobalObject.h: Removed static s_head member.
+
+        * kjs/PropertyMap.h: (KJS::PropertyMap::PropertyMap): Removed unused SavedProperty.
+
+        * kjs/collector.h: Turned Collector into an actual object with its own data, renamed to Heap.
+        (KJS::Heap::initializeHeapIntrospector): Added.
+        (KJS::Heap::heap): Added a method to determine which heap a JSValue is in, if any.
+        (KJS::Heap::allocate): Made non-static.
+        (KJS::Heap::inlineAllocateNumber): Ditto.
+        (KJS::Heap::markListSet): Ditto.
+        (KJS::Heap::cellBlock): Ditto.
+        (KJS::Heap::cellOffset): Ditto.
+        (KJS::Heap::isCellMarked): Ditto.
+        (KJS::Heap::markCell): Ditto.
+        (KJS::Heap::reportExtraMemoryCost): Ditto.
+        (KJS::CollectorBlock): Added a back-reference to Heap for Heap::heap() method.
+        (KJS::SmallCellCollectorBlock): Ditto.
+
+        * kjs/collector.cpp: Changed MIN_ARRAY_SIZE to a #define to avoid a PIC branch. Removed
+        main thread related machinery.
+        (KJS::Heap::Heap): Initialize the newly added data members.
+        (KJS::allocateBlock): Marked NEVER_INLINE, as this is a rare case that uses a PIC branch.
+        Moved static pagesize to the class to make it safely initialized.
+        (KJS::Heap::heapAllocate): Initialize heap back reference after a new block is allocated.
+        (KJS::Heap::registerThread): Removed introspector initialization, as it is now performed
+        in InitializeThreading.cpp.
+        (KJS::Heap::markOtherThreadConservatively): Assert that the "other thread" case only occurs
+        for legacy clients using a shared heap.
+        (KJS::Heap::markStackObjectsConservatively): Moved fastMallocForbid/Allow down here, since
+        it doesn't need to be forbidden during other GC phases.
+
+        * kjs/JSImmediate.h:
+        (KJS::jsUndefined):
+        (KJS::jsNull):
+        (KJS::jsBoolean):
+        Moved from JSvalue.h, to make these usable in files that cannot include JSValue.h (such
+        as list.h).
+
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::::staticFunctionGetter):
+        * API/JSClassRef.cpp:
+        (OpaqueJSClass::prototype):
+        * API/JSObjectRef.cpp:
+        (JSObjectMake):
+        (JSObjectMakeFunctionWithCallback):
+        (JSObjectMakeConstructor):
+        (JSObjectMakeFunction):
+        * API/JSValueRef.cpp:
+        (JSValueMakeNumber):
+        (JSValueMakeString):
+        * JavaScriptCore.exp:
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitLoad):
+        * VM/JSPropertyNameIterator.cpp:
+        (KJS::JSPropertyNameIterator::create):
+        (KJS::JSPropertyNameIterator::next):
+        * VM/Machine.cpp:
+        (KJS::jsAddSlowCase):
+        (KJS::jsAdd):
+        (KJS::jsTypeStringForValue):
+        (KJS::scopeChainForCall):
+        (KJS::Machine::throwException):
+        (KJS::Machine::execute):
+        (KJS::Machine::privateExecute):
+        (KJS::Machine::retrieveArguments):
+        * kjs/ArrayPrototype.cpp:
+        (KJS::arrayProtoFuncToString):
+        (KJS::arrayProtoFuncToLocaleString):
+        (KJS::arrayProtoFuncJoin):
+        (KJS::arrayProtoFuncConcat):
+        (KJS::arrayProtoFuncPop):
+        (KJS::arrayProtoFuncPush):
+        (KJS::arrayProtoFuncShift):
+        (KJS::arrayProtoFuncSlice):
+        (KJS::arrayProtoFuncSplice):
+        (KJS::arrayProtoFuncUnShift):
+        (KJS::arrayProtoFuncFilter):
+        (KJS::arrayProtoFuncMap):
+        (KJS::arrayProtoFuncEvery):
+        (KJS::arrayProtoFuncForEach):
+        (KJS::arrayProtoFuncSome):
+        (KJS::arrayProtoFuncIndexOf):
+        (KJS::arrayProtoFuncLastIndexOf):
+        (KJS::ArrayConstructor::ArrayConstructor):
+        (KJS::ArrayConstructor::construct):
+        (KJS::ArrayConstructor::callAsFunction):
+        * kjs/BooleanObject.cpp:
+        (KJS::BooleanPrototype::BooleanPrototype):
+        (KJS::booleanProtoFuncToString):
+        (KJS::BooleanConstructor::BooleanConstructor):
+        (KJS::BooleanConstructor::construct):
+        * kjs/FunctionPrototype.cpp:
+        (KJS::FunctionPrototype::FunctionPrototype):
+        (KJS::functionProtoFuncToString):
+        (KJS::FunctionConstructor::FunctionConstructor):
+        (KJS::FunctionConstructor::construct):
+        * kjs/JSActivation.cpp:
+        (KJS::JSActivation::createArgumentsObject):
+        * kjs/JSArray.cpp:
+        (KJS::JSArray::JSArray):
+        (KJS::JSArray::lengthGetter):
+        * kjs/JSFunction.cpp:
+        (KJS::JSFunction::lengthGetter):
+        (KJS::JSFunction::construct):
+        (KJS::Arguments::Arguments):
+        (KJS::encode):
+        (KJS::decode):
+        (KJS::globalFuncParseInt):
+        (KJS::globalFuncParseFloat):
+        (KJS::globalFuncEscape):
+        (KJS::globalFuncUnescape):
+        (KJS::PrototypeFunction::PrototypeFunction):
+        (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
+        * kjs/JSImmediate.cpp:
+        (KJS::JSImmediate::toObject):
+        * kjs/JSLock.cpp:
+        (KJS::JSLock::registerThread):
+        * kjs/JSObject.cpp:
+        (KJS::JSObject::put):
+        (KJS::JSObject::defineGetter):
+        (KJS::JSObject::defineSetter):
+        (KJS::Error::create):
+        * kjs/JSObject.h:
+        (KJS::JSObject::putDirect):
+        * kjs/JSString.h:
+        (KJS::JSString::JSString):
+        * kjs/JSValue.cpp:
+        (KJS::JSCell::operator new):
+        (KJS::jsString):
+        (KJS::jsOwnedString):
+        * kjs/JSValue.h:
+        (KJS::JSNumberCell::operator new):
+        (KJS::jsNumberCell):
+        (KJS::jsNaN):
+        (KJS::jsNumber):
+        (KJS::JSCell::marked):
+        (KJS::JSCell::mark):
+        (KJS::JSValue::toJSNumber):
+        * kjs/MathObject.cpp:
+        (KJS::MathObject::getValueProperty):
+        (KJS::mathProtoFuncAbs):
+        (KJS::mathProtoFuncACos):
+        (KJS::mathProtoFuncASin):
+        (KJS::mathProtoFuncATan):
+        (KJS::mathProtoFuncATan2):
+        (KJS::mathProtoFuncCeil):
+        (KJS::mathProtoFuncCos):
+        (KJS::mathProtoFuncExp):
+        (KJS::mathProtoFuncFloor):
+        (KJS::mathProtoFuncLog):
+        (KJS::mathProtoFuncMax):
+        (KJS::mathProtoFuncMin):
+        (KJS::mathProtoFuncPow):
+        (KJS::mathProtoFuncRandom):
+        (KJS::mathProtoFuncRound):
+        (KJS::mathProtoFuncSin):
+        (KJS::mathProtoFuncSqrt):
+        (KJS::mathProtoFuncTan):
+        * kjs/NumberObject.cpp:
+        (KJS::NumberPrototype::NumberPrototype):
+        (KJS::numberProtoFuncToString):
+        (KJS::numberProtoFuncToLocaleString):
+        (KJS::numberProtoFuncToFixed):
+        (KJS::numberProtoFuncToExponential):
+        (KJS::numberProtoFuncToPrecision):
+        (KJS::NumberConstructor::NumberConstructor):
+        (KJS::NumberConstructor::getValueProperty):
+        (KJS::NumberConstructor::construct):
+        (KJS::NumberConstructor::callAsFunction):
+        * kjs/RegExpObject.cpp:
+        (KJS::RegExpPrototype::RegExpPrototype):
+        (KJS::regExpProtoFuncToString):
+        (KJS::RegExpObject::getValueProperty):
+        (KJS::RegExpConstructor::RegExpConstructor):
+        (KJS::RegExpMatchesArray::fillArrayInstance):
+        (KJS::RegExpConstructor::arrayOfMatches):
+        (KJS::RegExpConstructor::getBackref):
+        (KJS::RegExpConstructor::getLastParen):
+        (KJS::RegExpConstructor::getLeftContext):
+        (KJS::RegExpConstructor::getRightContext):
+        (KJS::RegExpConstructor::getValueProperty):
+        (KJS::RegExpConstructor::construct):
+        * kjs/RegExpObject.h:
+        * kjs/Shell.cpp:
+        (GlobalObject::GlobalObject):
+        (functionGC):
+        (functionRun):
+        (functionReadline):
+        (jscmain):
+        * kjs/date_object.cpp:
+        (KJS::formatLocaleDate):
+        (KJS::DatePrototype::DatePrototype):
+        (KJS::DateConstructor::DateConstructor):
+        (KJS::DateConstructor::construct):
+        (KJS::DateConstructor::callAsFunction):
+        (KJS::DateFunction::DateFunction):
+        (KJS::DateFunction::callAsFunction):
+        (KJS::dateProtoFuncToString):
+        (KJS::dateProtoFuncToUTCString):
+        (KJS::dateProtoFuncToDateString):
+        (KJS::dateProtoFuncToTimeString):
+        (KJS::dateProtoFuncToLocaleString):
+        (KJS::dateProtoFuncToLocaleDateString):
+        (KJS::dateProtoFuncToLocaleTimeString):
+        (KJS::dateProtoFuncValueOf):
+        (KJS::dateProtoFuncGetTime):
+        (KJS::dateProtoFuncGetFullYear):
+        (KJS::dateProtoFuncGetUTCFullYear):
+        (KJS::dateProtoFuncToGMTString):
+        (KJS::dateProtoFuncGetMonth):
+        (KJS::dateProtoFuncGetUTCMonth):
+        (KJS::dateProtoFuncGetDate):
+        (KJS::dateProtoFuncGetUTCDate):
+        (KJS::dateProtoFuncGetDay):
+        (KJS::dateProtoFuncGetUTCDay):
+        (KJS::dateProtoFuncGetHours):
+        (KJS::dateProtoFuncGetUTCHours):
+        (KJS::dateProtoFuncGetMinutes):
+        (KJS::dateProtoFuncGetUTCMinutes):
+        (KJS::dateProtoFuncGetSeconds):
+        (KJS::dateProtoFuncGetUTCSeconds):
+        (KJS::dateProtoFuncGetMilliSeconds):
+        (KJS::dateProtoFuncGetUTCMilliseconds):
+        (KJS::dateProtoFuncGetTimezoneOffset):
+        (KJS::dateProtoFuncSetTime):
+        (KJS::setNewValueFromTimeArgs):
+        (KJS::setNewValueFromDateArgs):
+        (KJS::dateProtoFuncSetYear):
+        (KJS::dateProtoFuncGetYear):
+        * kjs/error_object.cpp:
+        (KJS::ErrorPrototype::ErrorPrototype):
+        (KJS::errorProtoFuncToString):
+        (KJS::ErrorConstructor::ErrorConstructor):
+        (KJS::ErrorConstructor::construct):
+        (KJS::NativeErrorPrototype::NativeErrorPrototype):
+        (KJS::NativeErrorConstructor::NativeErrorConstructor):
+        (KJS::NativeErrorConstructor::construct):
+        * kjs/identifier.h:
+        * kjs/internal.cpp:
+        (KJS::StringObject::create):
+        (KJS::JSString::lengthGetter):
+        (KJS::JSString::indexGetter):
+        (KJS::JSString::indexNumericPropertyGetter):
+        * kjs/interpreter.cpp:
+        * kjs/list.cpp:
+        (KJS::ArgList::slowAppend):
+        * kjs/list.h:
+        * kjs/lookup.h:
+        (KJS::staticFunctionGetter):
+        (KJS::cacheGlobalObject):
+        * kjs/nodes.cpp:
+        (KJS::Node::emitThrowError):
+        (KJS::StringNode::emitCode):
+        (KJS::ArrayNode::emitCode):
+        (KJS::FuncDeclNode::makeFunction):
+        (KJS::FuncExprNode::makeFunction):
+        * kjs/nodes.h:
+        * kjs/object_object.cpp:
+        (KJS::ObjectPrototype::ObjectPrototype):
+        (KJS::objectProtoFuncToLocaleString):
+        (KJS::objectProtoFuncToString):
+        (KJS::ObjectConstructor::ObjectConstructor):
+        (KJS::ObjectConstructor::construct):
+        * kjs/protect.h:
+        (KJS::gcProtect):
+        (KJS::gcUnprotect):
+        * kjs/string_object.cpp:
+        (KJS::StringObject::StringObject):
+        (KJS::StringPrototype::StringPrototype):
+        (KJS::replace):
+        (KJS::stringProtoFuncCharAt):
+        (KJS::stringProtoFuncCharCodeAt):
+        (KJS::stringProtoFuncConcat):
+        (KJS::stringProtoFuncIndexOf):
+        (KJS::stringProtoFuncLastIndexOf):
+        (KJS::stringProtoFuncMatch):
+        (KJS::stringProtoFuncSearch):
+        (KJS::stringProtoFuncReplace):
+        (KJS::stringProtoFuncSlice):
+        (KJS::stringProtoFuncSplit):
+        (KJS::stringProtoFuncSubstr):
+        (KJS::stringProtoFuncSubstring):
+        (KJS::stringProtoFuncToLowerCase):
+        (KJS::stringProtoFuncToUpperCase):
+        (KJS::stringProtoFuncToLocaleLowerCase):
+        (KJS::stringProtoFuncToLocaleUpperCase):
+        (KJS::stringProtoFuncLocaleCompare):
+        (KJS::stringProtoFuncBig):
+        (KJS::stringProtoFuncSmall):
+        (KJS::stringProtoFuncBlink):
+        (KJS::stringProtoFuncBold):
+        (KJS::stringProtoFuncFixed):
+        (KJS::stringProtoFuncItalics):
+        (KJS::stringProtoFuncStrike):
+        (KJS::stringProtoFuncSub):
+        (KJS::stringProtoFuncSup):
+        (KJS::stringProtoFuncFontcolor):
+        (KJS::stringProtoFuncFontsize):
+        (KJS::stringProtoFuncAnchor):
+        (KJS::stringProtoFuncLink):
+        (KJS::StringConstructor::StringConstructor):
+        (KJS::StringConstructor::construct):
+        (KJS::StringConstructor::callAsFunction):
+        (KJS::StringConstructorFunction::StringConstructorFunction):
+        (KJS::StringConstructorFunction::callAsFunction):
+        * kjs/string_object.h:
+        (KJS::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
+        * kjs/ustring.h:
+        Updated for the above changes.
+
+2008-06-17  Timothy Hatcher  <timothy@apple.com>
+
+        Added a type to DebuggerCallFrame so the under interface can
+        distinguish anonymous functions and program call frames.
+
+        https://bugs.webkit.org/show_bug.cgi?id=19585
+
+        Reviewed by Geoff Garen.
+
+        * JavaScriptCore.exp: Export the DebuggerCallFrame::type symbol.
+        * kjs/DebuggerCallFrame.cpp:
+        (KJS::DebuggerCallFrame::type): Added.
+        * kjs/DebuggerCallFrame.h:
+
+2008-06-17  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Tim H.
+        
+        Remove bogus ASSERT which tripped every time for those who use PAC files.
+
+        * kjs/Parser.cpp:
+        (KJS::Parser::parse):
+
+2008-06-17  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Geoff.
+
+        <rdar://problem/5951534> JSProfiler: Don't profile console.profile()
+        or console.profileEnd()
+
+        * profiler/Profile.cpp:
+        (KJS::Profile::stopProfiling): Moved the creation of the (idle) node to
+        the Profile (not ProfileNode).  This makes sense since the Profile
+        should be the one to modify the profile tree.  Also each stopProfiling()
+        does not need to check if it's the head node anymore.  Also fixed an
+        oddity where I was using willExecute to create the node.
+        (KJS::Profile::removeProfileStart): Removes the call to console.profile
+        that started this profile.
+        (KJS::Profile::removeProfileEnd): Removes the call to console.profileEnd
+        that ended this profile.
+        * profiler/Profile.h:
+        * profiler/ProfileNode.cpp: Moved the creation of the (idle) node to
+        the Profile object.
+        (KJS::ProfileNode::stopProfiling):
+        * profiler/ProfileNode.h: Added some helper functions and whitespace to
+        facilitate readability and the removal of profile() and profileEnd()
+        from the Profile tree.
+        (KJS::CallIdentifier::operator const char* ):
+        (KJS::ProfileNode::firstChild):
+        (KJS::ProfileNode::lastChild):
+        (KJS::ProfileNode::removeChild):
+        (KJS::ProfileNode::toString):
+
+2008-06-17  Ariya Hidayat  <ariya.hidayat@trolltech.com>
+
+        Rubber stamped by Adam Roben.
+
+        Include JSGlobalObject.h to fix the build.
+
+        * kjs/ScopeChain.cpp:
+
+2008-06-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Reduce code duplication in emitReadModifyAssignment().
+
+        * kjs/nodes.cpp:
+        (KJS::emitReadModifyAssignment):
+
+2008-06-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Sort includes alphabetically.
+
+        * kjs/nodes.cpp:
+
+2008-06-16  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Bug 19596: LEAK: Gmail leaks SegmentedVector<RegisterID>
+        <https://bugs.webkit.org/show_bug.cgi?id=19596>
+
+        When growing SegmentedVector, we start adding segments at the position
+        of the last segment, overwriting it. The destructor frees allocated
+        segments starting at the segment of index 1, because the segment of
+        index 0 is assumed to be the initial inline segment. This causes a leak
+        of the segment that is referenced by index 0. Modifying grow() so that
+        it starts adding segments at the position after the last segment fixes
+        the leak.
+
+        Since the initial segment is a special case in the lookup code, this
+        bug never manifested itself via incorrect results.
+
+        * VM/SegmentedVector.h:
+        (KJS::SegmentedVector::grow):
+
+2008-06-16  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Alexey.
+        
+        - removed nearly unused types.h and LocalStorageEntry.h headers
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/ExecState.h:
+        * kjs/LocalStorageEntry.h: Removed.
+        * kjs/RegExpObject.cpp:
+        * kjs/error_object.cpp:
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        * kjs/types.h: Removed.
+
+2008-06-16  Alp Toker  <alp@nuanti.com>
+
+        Rubber-stamped by Geoff.
+
+        Change c++ to c in minidom and testapi emacs mode line comments.
+
+        * API/Node.h:
+        * API/NodeList.c:
+        * API/NodeList.h:
+        * API/testapi.c:
+
+2008-06-16  Alexey Proskuryakov  <ap@webkit.org>
+
+        Trying to fix Windows build.
+
+        * kjs/PropertyNameArray.h:
+        * kjs/identifier.cpp:
+        Include ExecState.h
+
+2008-06-16  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Slight cleanup to the SymbolTableEntry class.
+        
+        Renamed isEmpty to isNull, since we usually use "empty" to mean "holds
+        the valid, empty value", and "null" to mean "holds no value".
+        
+        Changed an "== 0" to a "!", to match our style guidelines.
+        
+        Added some ASSERTs to verify the (possibly questionable) assumption that
+        all register indexes will have their high two bits set. Also clarified a
+        comment to make that assumption clear.
+
+2008-06-16  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Initialize functionQueueMutex in a safe manner.
+
+        * wtf/MainThread.cpp:
+        (WTF::functionQueueMutex): Made it an AtomicallyInitializedStatic.
+
+        (WTF::dispatchFunctionsFromMainThread):
+        (WTF::setMainThreadCallbacksPaused):
+        Assert that the current thread is main, meaning that the callbacksPaused static can be
+        accessed.
+
+2008-06-16  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoff Garen.
+
+        Make Identifier construction use an explicitly passed IdentifierTable.
+
+        No change on SunSpider total.
+
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::::getOwnPropertySlot):
+        (KJS::::put):
+        (KJS::::deleteProperty):
+        (KJS::::getPropertyNames):
+        * API/JSObjectRef.cpp:
+        (JSObjectMakeFunctionWithCallback):
+        (JSObjectMakeFunction):
+        (JSObjectHasProperty):
+        (JSObjectGetProperty):
+        (JSObjectSetProperty):
+        (JSObjectDeleteProperty):
+        (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray):
+        (JSObjectCopyPropertyNames):
+        * JavaScriptCore.exp:
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::CodeGenerator):
+        (KJS::CodeGenerator::registerForLocal):
+        (KJS::CodeGenerator::isLocal):
+        (KJS::CodeGenerator::addConstant):
+        (KJS::CodeGenerator::findScopedProperty):
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::globalData):
+        (KJS::CodeGenerator::propertyNames):
+        * VM/JSPropertyNameIterator.cpp:
+        (KJS::JSPropertyNameIterator::create):
+        * VM/Machine.cpp:
+        (KJS::Machine::throwException):
+        (KJS::Machine::privateExecute):
+        * kjs/ArrayPrototype.cpp:
+        (KJS::ArrayConstructor::ArrayConstructor):
+        * kjs/BooleanObject.cpp:
+        (KJS::BooleanConstructor::BooleanConstructor):
+        * kjs/FunctionPrototype.cpp:
+        (KJS::FunctionConstructor::FunctionConstructor):
+        (KJS::FunctionConstructor::construct):
+        * kjs/JSArray.cpp:
+        (KJS::JSArray::inlineGetOwnPropertySlot):
+        (KJS::JSArray::put):
+        (KJS::JSArray::deleteProperty):
+        (KJS::JSArray::getPropertyNames):
+        * kjs/JSFunction.cpp:
+        (KJS::Arguments::Arguments):
+        * kjs/JSGlobalData.cpp:
+        (KJS::JSGlobalData::JSGlobalData):
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::reset):
+        * kjs/JSObject.cpp:
+        (KJS::JSObject::getOwnPropertySlot):
+        (KJS::JSObject::put):
+        (KJS::JSObject::putWithAttributes):
+        (KJS::JSObject::deleteProperty):
+        (KJS::JSObject::findPropertyHashEntry):
+        (KJS::JSObject::getPropertyNames):
+        (KJS::Error::create):
+        * kjs/JSVariableObject.cpp:
+        (KJS::JSVariableObject::getPropertyNames):
+        * kjs/NumberObject.cpp:
+        (KJS::NumberConstructor::NumberConstructor):
+        * kjs/PropertyNameArray.cpp:
+        (KJS::PropertyNameArray::add):
+        * kjs/PropertyNameArray.h:
+        (KJS::PropertyNameArray::PropertyNameArray):
+        (KJS::PropertyNameArray::addKnownUnique):
+        * kjs/PropertySlot.h:
+        (KJS::PropertySlot::getValue):
+        * kjs/RegExpObject.cpp:
+        (KJS::RegExpConstructor::RegExpConstructor):
+        * kjs/ScopeChain.cpp:
+        (KJS::ScopeChainNode::print):
+        * kjs/Shell.cpp:
+        (GlobalObject::GlobalObject):
+        * kjs/date_object.cpp:
+        (KJS::DateConstructor::DateConstructor):
+        * kjs/error_object.cpp:
+        (KJS::ErrorConstructor::ErrorConstructor):
+        (KJS::NativeErrorConstructor::NativeErrorConstructor):
+        * kjs/grammar.y:
+        * kjs/identifier.cpp:
+        (KJS::Identifier::add):
+        (KJS::Identifier::addSlowCase):
+        * kjs/identifier.h:
+        (KJS::Identifier::Identifier):
+        (KJS::Identifier::from):
+        (KJS::Identifier::equal):
+        (KJS::Identifier::add):
+        (KJS::operator==):
+        (KJS::operator!=):
+        * kjs/internal.cpp:
+        (KJS::JSString::getOwnPropertySlot):
+        * kjs/lexer.cpp:
+        (KJS::Lexer::Lexer):
+        (KJS::Lexer::lex):
+        (KJS::Lexer::makeIdentifier):
+        * kjs/lexer.h:
+        * kjs/lookup.cpp:
+        (KJS::HashTable::createTable):
+        * kjs/lookup.h:
+        (KJS::HashTable::initializeIfNeeded):
+        (KJS::HashTable::entry):
+        (KJS::getStaticPropertySlot):
+        (KJS::getStaticFunctionSlot):
+        (KJS::getStaticValueSlot):
+        (KJS::lookupPut):
+        * kjs/object_object.cpp:
+        (KJS::objectProtoFuncHasOwnProperty):
+        (KJS::objectProtoFuncDefineGetter):
+        (KJS::objectProtoFuncDefineSetter):
+        (KJS::objectProtoFuncLookupGetter):
+        (KJS::objectProtoFuncLookupSetter):
+        (KJS::objectProtoFuncPropertyIsEnumerable):
+        (KJS::ObjectConstructor::ObjectConstructor):
+        * kjs/string_object.cpp:
+        (KJS::StringObject::getOwnPropertySlot):
+        (KJS::StringObject::getPropertyNames):
+        (KJS::StringConstructor::StringConstructor):
+        Just pass ExecState or JSGlobalData everywhere. Identifier construction is now always
+        explicit.
+
+        * kjs/nodes.cpp: (KJS::RegExpNode::emitCode): Here, Identifier was created from a non-literal
+        char*, which was incorrect, as that uses the pointer value as a key.
+
+2008-06-16  Thiago Macieira  <tjmaciei@trolltech.com>
+
+        Reviewed by Darin.
+
+        https://bugs.webkit.org/show_bug.cgi?id=19577
+
+        Fix compilation in C++ environments where C99 headers are not present
+
+        The stdbool.h header is a C99 feature, defining the "_Bool" type as well as the
+        "true" and "false" constants. But it's completely unnecessary in C++ as the
+        language already defines the "bool" type and its two values.
+
+        * API/JSBase.h:
+        * API/JSContextRef.h:
+        * API/JSObjectRef.h:
+        * API/JSStringRef.h:
+        * API/JSValueRef.h:
+
+2008-06-16  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by John.
+
+        <rdar://problem/6012509> JSProfiler: %s are incorrect if you exclude a
+        top level node like (idle)
+
+        * profiler/Profile.cpp:
+        (KJS::Profile::focus):
+        (KJS::Profile::exclude): Subtract the selfTime from the totalTime of the
+        head since its self time will only be non-zero when one of its children
+        were excluded. Since the head's totalTime is used to calculate %s when
+        its totalTime is the same as the sum of all its visible childrens' times
+        their %s will sum to 100%.
+
+2008-06-16  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the profiler.
+
+        * profiler/Profile.cpp:
+        (KJS::Profile::willExecute):
+
+2008-06-16  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Sam.
+
+        <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
+        profiler.
+        - Remove the last of the uses of recursion in the profiler.
+
+        * JavaScriptCore.exp: Export the new function's signature.
+        * profiler/Profile.cpp: 
+        (KJS::calculateVisibleTotalTime): Added a new static method for
+        recalculating the visibleTotalTime of methods after focus has changed
+        which are visible.
+        (KJS::stopProfiling): 
+        (KJS::Profile::focus): Implemented focus without recursion.
+        * profiler/Profile.h: Moved implementation into the definition file.
+        * profiler/ProfileNode.cpp:
+        (KJS::ProfileNode::traverseNextNodePreOrder): Added an argument for
+        whether or not to process the children nodes, this allows focus to skip
+        sub trees which have been set as not visible.
+        (KJS::ProfileNode::calculateVisibleTotalTime): This function set's a
+        node's total visible time to the sum of its self time and its children's
+        total times.
+        (KJS::ProfileNode::focus): Implemented focus without recursion.
+        * profiler/ProfileNode.h:
+        (KJS::CallIdentifier::operator!= ):
+        (KJS::ProfileNode::setActualTotalTime): Expanded setting the total time
+        so that focus could modify only the visible total time.
+        (KJS::ProfileNode::setVisibleTotalTime):
+
+2008-06-16  Christian Dywan  <christian@twotoasts.de>
+
+        Reviewed by Sam.
+
+        https://bugs.webkit.org/show_bug.cgi?id=19552
+        JavaScriptCore headers use C++ style comments
+
+        Replace all C++ style comments with C style multiline
+        comments and remove all "mode" lines.
+
+        * API/JSBase.h:
+        * API/JSClassRef.h:
+        * API/JSContextRef.h:
+        * API/JSObjectRef.h:
+        * API/JSStringRef.h:
+        * API/JSStringRefBSTR.h:
+        * API/JSStringRefCF.h:
+        * API/JSValueRef.h:
+        * API/JavaScript.h:
+        * API/JavaScriptCore.h:
+
+2008-06-16  Christian Dywan  <christian@twotoasts.de>
+
+        Reviewed by Sam.
+
+        https://bugs.webkit.org/show_bug.cgi?id=19557
+        (JavaScriptCore) minidom uses C++ style comments
+
+        Use only C style comments in minidom sources
+
+        * API/JSNode.c:
+        (JSNode_appendChild):
+        (JSNode_removeChild):
+        * API/JSNode.h:
+        * API/JSNodeList.c:
+        (JSNodeList_getProperty):
+        * API/JSNodeList.h:
+        * API/Node.c:
+        * API/Node.h:
+        * API/NodeList.c:
+        (NodeList_new):
+        (NodeList_item):
+        * API/NodeList.h:
+        * API/minidom.c:
+        (createStringWithContentsOfFile):
+        * wtf/Assertions.h:
+        * wtf/UnusedParam.h:
+
+2008-06-16  Adriaan de Groot  <groot@kde.org>
+
+        Reviewed by Simon.
+
+        Fix compilation on Solaris
+
+        On some systems, munmap takes a char* instead of a void* (contrary to POSIX and
+        Single Unix Specification). Since you can always convert from char* to void*
+        but not vice-versa, do the casting to char*.
+
+        * kjs/collector.cpp:
+        (KJS::allocateBlock):
+        (KJS::freeBlock):
+
+2008-06-16  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Make a UnaryOpNode class to reduce boilerplate code for UnaryPlusNode,
+        NegateNode, BitwiseNotNode, and LogicalNotNode.
+
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::emitToJSNumber):
+        * kjs/nodes.cpp:
+        (KJS::UnaryOpNode::emitCode):
+        * kjs/nodes.h:
+        (KJS::UnaryOpNode::UnaryOpNode):
+        (KJS::UnaryPlusNode::):
+        (KJS::NegateNode::):
+        (KJS::NegateNode::precedence):
+        (KJS::BitwiseNotNode::):
+        (KJS::BitwiseNotNode::precedence):
+        (KJS::LogicalNotNode::):
+        (KJS::LogicalNotNode::precedence):
+
+2008-06-16  Jan Michael Alonzo  <jmalonzo@webkit.org>
+
+        Gtk build fix
+
+        * GNUmakefile.am:
+
+2008-06-15  Darin Adler  <darin@apple.com>
+
+        - rename KJS::List to KJS::ArgList
+
+        * API/JSCallbackConstructor.cpp:
+        (KJS::JSCallbackConstructor::construct):
+        * API/JSCallbackConstructor.h:
+        * API/JSCallbackFunction.cpp:
+        (KJS::JSCallbackFunction::callAsFunction):
+        * API/JSCallbackFunction.h:
+        * API/JSCallbackObject.h:
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::::construct):
+        (KJS::::callAsFunction):
+        * API/JSObjectRef.cpp:
+        (JSObjectMakeFunction):
+        (JSObjectCallAsFunction):
+        (JSObjectCallAsConstructor):
+        * JavaScriptCore.exp:
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+        (KJS::Machine::privateExecute):
+        * VM/Machine.h:
+        * kjs/ArrayPrototype.cpp:
+        (KJS::arrayProtoFuncToString):
+        (KJS::arrayProtoFuncToLocaleString):
+        (KJS::arrayProtoFuncJoin):
+        (KJS::arrayProtoFuncConcat):
+        (KJS::arrayProtoFuncPop):
+        (KJS::arrayProtoFuncPush):
+        (KJS::arrayProtoFuncReverse):
+        (KJS::arrayProtoFuncShift):
+        (KJS::arrayProtoFuncSlice):
+        (KJS::arrayProtoFuncSort):
+        (KJS::arrayProtoFuncSplice):
+        (KJS::arrayProtoFuncUnShift):
+        (KJS::arrayProtoFuncFilter):
+        (KJS::arrayProtoFuncMap):
+        (KJS::arrayProtoFuncEvery):
+        (KJS::arrayProtoFuncForEach):
+        (KJS::arrayProtoFuncSome):
+        (KJS::arrayProtoFuncIndexOf):
+        (KJS::arrayProtoFuncLastIndexOf):
+        (KJS::ArrayConstructor::construct):
+        (KJS::ArrayConstructor::callAsFunction):
+        * kjs/ArrayPrototype.h:
+        * kjs/BooleanObject.cpp:
+        (KJS::booleanProtoFuncToString):
+        (KJS::booleanProtoFuncValueOf):
+        (KJS::BooleanConstructor::construct):
+        (KJS::BooleanConstructor::callAsFunction):
+        * kjs/BooleanObject.h:
+        * kjs/CommonIdentifiers.h:
+        * kjs/ExecState.h:
+        (KJS::ExecState::emptyList):
+        * kjs/FunctionPrototype.cpp:
+        (KJS::FunctionPrototype::callAsFunction):
+        (KJS::functionProtoFuncToString):
+        (KJS::functionProtoFuncApply):
+        (KJS::functionProtoFuncCall):
+        (KJS::FunctionConstructor::construct):
+        (KJS::FunctionConstructor::callAsFunction):
+        * kjs/FunctionPrototype.h:
+        * kjs/JSActivation.cpp:
+        (KJS::JSActivation::createArgumentsObject):
+        * kjs/JSArray.cpp:
+        (KJS::JSArray::JSArray):
+        (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key):
+        * kjs/JSArray.h:
+        * kjs/JSFunction.cpp:
+        (KJS::JSFunction::callAsFunction):
+        (KJS::JSFunction::construct):
+        (KJS::IndexToNameMap::IndexToNameMap):
+        (KJS::Arguments::Arguments):
+        (KJS::encode):
+        (KJS::decode):
+        (KJS::globalFuncEval):
+        (KJS::globalFuncParseInt):
+        (KJS::globalFuncParseFloat):
+        (KJS::globalFuncIsNaN):
+        (KJS::globalFuncIsFinite):
+        (KJS::globalFuncDecodeURI):
+        (KJS::globalFuncDecodeURIComponent):
+        (KJS::globalFuncEncodeURI):
+        (KJS::globalFuncEncodeURIComponent):
+        (KJS::globalFuncEscape):
+        (KJS::globalFuncUnescape):
+        (KJS::globalFuncKJSPrint):
+        (KJS::PrototypeFunction::callAsFunction):
+        (KJS::PrototypeReflexiveFunction::callAsFunction):
+        * kjs/JSFunction.h:
+        * kjs/JSGlobalData.h:
+        * kjs/JSImmediate.cpp:
+        (KJS::JSImmediate::toObject):
+        * kjs/JSNotAnObject.cpp:
+        (KJS::JSNotAnObject::construct):
+        (KJS::JSNotAnObject::callAsFunction):
+        * kjs/JSNotAnObject.h:
+        * kjs/JSObject.cpp:
+        (KJS::JSObject::put):
+        (KJS::JSObject::construct):
+        (KJS::JSObject::callAsFunction):
+        (KJS::Error::create):
+        * kjs/JSObject.h:
+        * kjs/MathObject.cpp:
+        (KJS::mathProtoFuncAbs):
+        (KJS::mathProtoFuncACos):
+        (KJS::mathProtoFuncASin):
+        (KJS::mathProtoFuncATan):
+        (KJS::mathProtoFuncATan2):
+        (KJS::mathProtoFuncCeil):
+        (KJS::mathProtoFuncCos):
+        (KJS::mathProtoFuncExp):
+        (KJS::mathProtoFuncFloor):
+        (KJS::mathProtoFuncLog):
+        (KJS::mathProtoFuncMax):
+        (KJS::mathProtoFuncMin):
+        (KJS::mathProtoFuncPow):
+        (KJS::mathProtoFuncRandom):
+        (KJS::mathProtoFuncRound):
+        (KJS::mathProtoFuncSin):
+        (KJS::mathProtoFuncSqrt):
+        (KJS::mathProtoFuncTan):
+        * kjs/MathObject.h:
+        * kjs/NumberObject.cpp:
+        (KJS::numberProtoFuncToString):
+        (KJS::numberProtoFuncToLocaleString):
+        (KJS::numberProtoFuncValueOf):
+        (KJS::numberProtoFuncToFixed):
+        (KJS::numberProtoFuncToExponential):
+        (KJS::numberProtoFuncToPrecision):
+        (KJS::NumberConstructor::construct):
+        (KJS::NumberConstructor::callAsFunction):
+        * kjs/NumberObject.h:
+        * kjs/RegExpObject.cpp:
+        (KJS::regExpProtoFuncTest):
+        (KJS::regExpProtoFuncExec):
+        (KJS::regExpProtoFuncCompile):
+        (KJS::regExpProtoFuncToString):
+        (KJS::RegExpObject::match):
+        (KJS::RegExpObject::test):
+        (KJS::RegExpObject::exec):
+        (KJS::RegExpObject::callAsFunction):
+        (KJS::RegExpConstructor::construct):
+        (KJS::RegExpConstructor::callAsFunction):
+        * kjs/RegExpObject.h:
+        * kjs/Shell.cpp:
+        (functionPrint):
+        (functionDebug):
+        (functionGC):
+        (functionVersion):
+        (functionRun):
+        (functionLoad):
+        (functionReadline):
+        (functionQuit):
+        * kjs/collector.cpp:
+        (KJS::Collector::collect):
+        * kjs/collector.h:
+        (KJS::Collector::markListSet):
+        * kjs/date_object.cpp:
+        (KJS::formatLocaleDate):
+        (KJS::fillStructuresUsingTimeArgs):
+        (KJS::fillStructuresUsingDateArgs):
+        (KJS::DateConstructor::construct):
+        (KJS::DateConstructor::callAsFunction):
+        (KJS::DateFunction::callAsFunction):
+        (KJS::dateProtoFuncToString):
+        (KJS::dateProtoFuncToUTCString):
+        (KJS::dateProtoFuncToDateString):
+        (KJS::dateProtoFuncToTimeString):
+        (KJS::dateProtoFuncToLocaleString):
+        (KJS::dateProtoFuncToLocaleDateString):
+        (KJS::dateProtoFuncToLocaleTimeString):
+        (KJS::dateProtoFuncValueOf):
+        (KJS::dateProtoFuncGetTime):
+        (KJS::dateProtoFuncGetFullYear):
+        (KJS::dateProtoFuncGetUTCFullYear):
+        (KJS::dateProtoFuncToGMTString):
+        (KJS::dateProtoFuncGetMonth):
+        (KJS::dateProtoFuncGetUTCMonth):
+        (KJS::dateProtoFuncGetDate):
+        (KJS::dateProtoFuncGetUTCDate):
+        (KJS::dateProtoFuncGetDay):
+        (KJS::dateProtoFuncGetUTCDay):
+        (KJS::dateProtoFuncGetHours):
+        (KJS::dateProtoFuncGetUTCHours):
+        (KJS::dateProtoFuncGetMinutes):
+        (KJS::dateProtoFuncGetUTCMinutes):
+        (KJS::dateProtoFuncGetSeconds):
+        (KJS::dateProtoFuncGetUTCSeconds):
+        (KJS::dateProtoFuncGetMilliSeconds):
+        (KJS::dateProtoFuncGetUTCMilliseconds):
+        (KJS::dateProtoFuncGetTimezoneOffset):
+        (KJS::dateProtoFuncSetTime):
+        (KJS::setNewValueFromTimeArgs):
+        (KJS::setNewValueFromDateArgs):
+        (KJS::dateProtoFuncSetMilliSeconds):
+        (KJS::dateProtoFuncSetUTCMilliseconds):
+        (KJS::dateProtoFuncSetSeconds):
+        (KJS::dateProtoFuncSetUTCSeconds):
+        (KJS::dateProtoFuncSetMinutes):
+        (KJS::dateProtoFuncSetUTCMinutes):
+        (KJS::dateProtoFuncSetHours):
+        (KJS::dateProtoFuncSetUTCHours):
+        (KJS::dateProtoFuncSetDate):
+        (KJS::dateProtoFuncSetUTCDate):
+        (KJS::dateProtoFuncSetMonth):
+        (KJS::dateProtoFuncSetUTCMonth):
+        (KJS::dateProtoFuncSetFullYear):
+        (KJS::dateProtoFuncSetUTCFullYear):
+        (KJS::dateProtoFuncSetYear):
+        (KJS::dateProtoFuncGetYear):
+        * kjs/date_object.h:
+        * kjs/debugger.h:
+        * kjs/error_object.cpp:
+        (KJS::errorProtoFuncToString):
+        (KJS::ErrorConstructor::construct):
+        (KJS::ErrorConstructor::callAsFunction):
+        (KJS::NativeErrorConstructor::construct):
+        (KJS::NativeErrorConstructor::callAsFunction):
+        * kjs/error_object.h:
+        * kjs/internal.cpp:
+        (KJS::JSNumberCell::toObject):
+        (KJS::JSNumberCell::toThisObject):
+        * kjs/list.cpp:
+        (KJS::ArgList::getSlice):
+        (KJS::ArgList::markLists):
+        (KJS::ArgList::slowAppend):
+        * kjs/list.h:
+        (KJS::ArgList::ArgList):
+        (KJS::ArgList::~ArgList):
+        * kjs/object_object.cpp:
+        (KJS::objectProtoFuncValueOf):
+        (KJS::objectProtoFuncHasOwnProperty):
+        (KJS::objectProtoFuncIsPrototypeOf):
+        (KJS::objectProtoFuncDefineGetter):
+        (KJS::objectProtoFuncDefineSetter):
+        (KJS::objectProtoFuncLookupGetter):
+        (KJS::objectProtoFuncLookupSetter):
+        (KJS::objectProtoFuncPropertyIsEnumerable):
+        (KJS::objectProtoFuncToLocaleString):
+        (KJS::objectProtoFuncToString):
+        (KJS::ObjectConstructor::construct):
+        (KJS::ObjectConstructor::callAsFunction):
+        * kjs/object_object.h:
+        * kjs/string_object.cpp:
+        (KJS::replace):
+        (KJS::stringProtoFuncToString):
+        (KJS::stringProtoFuncValueOf):
+        (KJS::stringProtoFuncCharAt):
+        (KJS::stringProtoFuncCharCodeAt):
+        (KJS::stringProtoFuncConcat):
+        (KJS::stringProtoFuncIndexOf):
+        (KJS::stringProtoFuncLastIndexOf):
+        (KJS::stringProtoFuncMatch):
+        (KJS::stringProtoFuncSearch):
+        (KJS::stringProtoFuncReplace):
+        (KJS::stringProtoFuncSlice):
+        (KJS::stringProtoFuncSplit):
+        (KJS::stringProtoFuncSubstr):
+        (KJS::stringProtoFuncSubstring):
+        (KJS::stringProtoFuncToLowerCase):
+        (KJS::stringProtoFuncToUpperCase):
+        (KJS::stringProtoFuncToLocaleLowerCase):
+        (KJS::stringProtoFuncToLocaleUpperCase):
+        (KJS::stringProtoFuncLocaleCompare):
+        (KJS::stringProtoFuncBig):
+        (KJS::stringProtoFuncSmall):
+        (KJS::stringProtoFuncBlink):
+        (KJS::stringProtoFuncBold):
+        (KJS::stringProtoFuncFixed):
+        (KJS::stringProtoFuncItalics):
+        (KJS::stringProtoFuncStrike):
+        (KJS::stringProtoFuncSub):
+        (KJS::stringProtoFuncSup):
+        (KJS::stringProtoFuncFontcolor):
+        (KJS::stringProtoFuncFontsize):
+        (KJS::stringProtoFuncAnchor):
+        (KJS::stringProtoFuncLink):
+        (KJS::StringConstructor::construct):
+        (KJS::StringConstructor::callAsFunction):
+        (KJS::StringConstructorFunction::callAsFunction):
+        * kjs/string_object.h:
+
+2008-06-15  Darin Adler  <darin@apple.com>
+
+        - new names for more JavaScriptCore files
+
+        * API/JSCallbackFunction.cpp:
+        * API/JSObjectRef.cpp:
+        * DerivedSources.make:
+        * GNUmakefile.am:
+        * JavaScriptCore.exp:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * VM/Machine.cpp:
+        * kjs/AllInOneFile.cpp:
+        * kjs/ArrayPrototype.cpp: Copied from JavaScriptCore/kjs/array_object.cpp.
+        * kjs/ArrayPrototype.h: Copied from JavaScriptCore/kjs/array_object.h.
+        * kjs/BooleanObject.cpp: Copied from JavaScriptCore/kjs/bool_object.cpp.
+        * kjs/BooleanObject.h: Copied from JavaScriptCore/kjs/bool_object.h.
+        * kjs/ExecState.cpp:
+        * kjs/ExecState.h:
+        * kjs/FunctionPrototype.cpp: Copied from JavaScriptCore/kjs/function_object.cpp.
+        * kjs/FunctionPrototype.h: Copied from JavaScriptCore/kjs/function_object.h.
+        * kjs/JSArray.cpp: Copied from JavaScriptCore/kjs/array_instance.cpp.
+        * kjs/JSArray.h: Copied from JavaScriptCore/kjs/array_instance.h.
+        * kjs/JSFunction.cpp:
+        * kjs/JSFunction.h:
+        * kjs/JSGlobalObject.cpp:
+        * kjs/JSImmediate.cpp:
+        * kjs/JSObject.h:
+        * kjs/JSString.h:
+        * kjs/JSValue.h:
+        * kjs/JSVariableObject.cpp:
+        * kjs/MathObject.cpp: Copied from JavaScriptCore/kjs/math_object.cpp.
+        * kjs/MathObject.h: Copied from JavaScriptCore/kjs/math_object.h.
+        * kjs/NumberObject.cpp: Copied from JavaScriptCore/kjs/number_object.cpp.
+        * kjs/NumberObject.h: Copied from JavaScriptCore/kjs/number_object.h.
+        * kjs/PropertyMap.cpp: Copied from JavaScriptCore/kjs/property_map.cpp.
+        * kjs/PropertyMap.h: Copied from JavaScriptCore/kjs/property_map.h.
+        * kjs/PropertySlot.cpp: Copied from JavaScriptCore/kjs/property_slot.cpp.
+        * kjs/PropertySlot.h: Copied from JavaScriptCore/kjs/property_slot.h.
+        * kjs/RegExpObject.cpp: Copied from JavaScriptCore/kjs/regexp_object.cpp.
+        * kjs/RegExpObject.h: Copied from JavaScriptCore/kjs/regexp_object.h.
+        * kjs/ScopeChain.cpp: Copied from JavaScriptCore/kjs/scope_chain.cpp.
+        * kjs/ScopeChain.h: Copied from JavaScriptCore/kjs/scope_chain.h.
+        * kjs/ScopeChainMark.h: Copied from JavaScriptCore/kjs/scope_chain_mark.h.
+        * kjs/Shell.cpp:
+        * kjs/array_instance.cpp: Removed.
+        * kjs/array_instance.h: Removed.
+        * kjs/array_object.cpp: Removed.
+        * kjs/array_object.h: Removed.
+        * kjs/bool_object.cpp: Removed.
+        * kjs/bool_object.h: Removed.
+        * kjs/error_object.h:
+        * kjs/function_object.cpp: Removed.
+        * kjs/function_object.h: Removed.
+        * kjs/internal.cpp:
+        * kjs/math_object.cpp: Removed.
+        * kjs/math_object.h: Removed.
+        * kjs/nodes.cpp:
+        * kjs/number_object.cpp: Removed.
+        * kjs/number_object.h: Removed.
+        * kjs/object_object.cpp:
+        * kjs/property_map.cpp: Removed.
+        * kjs/property_map.h: Removed.
+        * kjs/property_slot.cpp: Removed.
+        * kjs/property_slot.h: Removed.
+        * kjs/regexp_object.cpp: Removed.
+        * kjs/regexp_object.h: Removed.
+        * kjs/scope_chain.cpp: Removed.
+        * kjs/scope_chain.h: Removed.
+        * kjs/scope_chain_mark.h: Removed.
+        * kjs/string_object.cpp:
+        * kjs/string_object.h:
+
+2008-06-15  Darin Adler  <darin@apple.com>
+
+        - new names for a few key JavaScriptCore files
+
+        * API/JSBase.cpp:
+        * API/JSCallbackConstructor.h:
+        * API/JSCallbackFunction.cpp:
+        * API/JSCallbackFunction.h:
+        * API/JSCallbackObject.h:
+        * API/JSCallbackObjectFunctions.h:
+        * API/JSClassRef.h:
+        * API/JSContextRef.cpp:
+        * API/JSObjectRef.cpp:
+        * API/JSStringRef.cpp:
+        * API/JSStringRefCF.cpp:
+        * API/JSValueRef.cpp:
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * VM/CodeBlock.cpp:
+        * VM/CodeGenerator.cpp:
+        * VM/ExceptionHelpers.cpp:
+        * VM/ExceptionHelpers.h:
+        * VM/JSPropertyNameIterator.cpp:
+        * VM/JSPropertyNameIterator.h:
+        * VM/Machine.cpp:
+        * kjs/AllInOneFile.cpp:
+        * kjs/DateMath.cpp:
+        * kjs/DebuggerCallFrame.cpp:
+        * kjs/ExecState.cpp:
+        * kjs/JSActivation.cpp:
+        * kjs/JSFunction.cpp: Copied from JavaScriptCore/kjs/function.cpp.
+        * kjs/JSFunction.h: Copied from JavaScriptCore/kjs/function.h.
+        * kjs/JSImmediate.cpp:
+        * kjs/JSNotAnObject.h:
+        * kjs/JSObject.cpp: Copied from JavaScriptCore/kjs/object.cpp.
+        * kjs/JSObject.h: Copied from JavaScriptCore/kjs/object.h.
+        * kjs/JSString.h: Copied from JavaScriptCore/kjs/internal.h.
+        * kjs/JSValue.cpp: Copied from JavaScriptCore/kjs/value.cpp.
+        * kjs/JSValue.h: Copied from JavaScriptCore/kjs/value.h.
+        * kjs/JSVariableObject.h:
+        * kjs/JSWrapperObject.h:
+        * kjs/Shell.cpp:
+        * kjs/SymbolTable.h:
+        * kjs/array_instance.h:
+        * kjs/collector.cpp:
+        * kjs/date_object.cpp:
+        * kjs/date_object.h:
+        * kjs/error_object.cpp:
+        * kjs/function.cpp: Removed.
+        * kjs/function.h: Removed.
+        * kjs/function_object.cpp:
+        * kjs/function_object.h:
+        * kjs/grammar.y:
+        * kjs/internal.cpp:
+        * kjs/internal.h: Removed.
+        * kjs/lexer.cpp:
+        * kjs/list.h:
+        * kjs/lookup.h:
+        * kjs/nodes.h:
+        * kjs/object.cpp: Removed.
+        * kjs/object.h: Removed.
+        * kjs/object_object.h:
+        * kjs/operations.cpp:
+        * kjs/property_map.cpp:
+        * kjs/property_slot.cpp:
+        * kjs/property_slot.h:
+        * kjs/protect.h:
+        * kjs/regexp_object.cpp:
+        * kjs/scope_chain.cpp:
+        * kjs/string_object.h:
+        * kjs/ustring.cpp:
+        * kjs/value.cpp: Removed.
+        * kjs/value.h: Removed.
+        * profiler/Profile.cpp:
+        * profiler/Profiler.cpp:
+
+2008-06-15  Darin Adler  <darin@apple.com>
+
+        Rubber stamped by Sam.
+
+        - cut down on confusing uses of "Object" and "Imp" in
+          JavaScriptCore class names
+
+        * API/JSCallbackFunction.cpp:
+        (KJS::JSCallbackFunction::JSCallbackFunction):
+        * API/JSCallbackFunction.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * kjs/ExecState.h:
+        (KJS::ExecState::regExpTable):
+        (KJS::ExecState::regExpConstructorTable):
+        * kjs/JSGlobalData.cpp:
+        (KJS::JSGlobalData::JSGlobalData):
+        (KJS::JSGlobalData::~JSGlobalData):
+        * kjs/JSGlobalData.h:
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::reset):
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::objectConstructor):
+        (KJS::JSGlobalObject::functionConstructor):
+        (KJS::JSGlobalObject::arrayConstructor):
+        (KJS::JSGlobalObject::booleanConstructor):
+        (KJS::JSGlobalObject::stringConstructor):
+        (KJS::JSGlobalObject::numberConstructor):
+        (KJS::JSGlobalObject::dateConstructor):
+        (KJS::JSGlobalObject::regExpConstructor):
+        (KJS::JSGlobalObject::errorConstructor):
+        (KJS::JSGlobalObject::evalErrorConstructor):
+        (KJS::JSGlobalObject::rangeErrorConstructor):
+        (KJS::JSGlobalObject::referenceErrorConstructor):
+        (KJS::JSGlobalObject::syntaxErrorConstructor):
+        (KJS::JSGlobalObject::typeErrorConstructor):
+        (KJS::JSGlobalObject::URIErrorConstructor):
+        * kjs/array_object.cpp:
+        (KJS::ArrayConstructor::ArrayConstructor):
+        (KJS::ArrayConstructor::getConstructData):
+        (KJS::ArrayConstructor::construct):
+        (KJS::ArrayConstructor::callAsFunction):
+        * kjs/array_object.h:
+        * kjs/bool_object.cpp:
+        (KJS::BooleanObject::BooleanObject):
+        (KJS::BooleanPrototype::BooleanPrototype):
+        (KJS::booleanProtoFuncToString):
+        (KJS::booleanProtoFuncValueOf):
+        (KJS::BooleanConstructor::BooleanConstructor):
+        (KJS::BooleanConstructor::getConstructData):
+        (KJS::BooleanConstructor::construct):
+        (KJS::BooleanConstructor::callAsFunction):
+        * kjs/bool_object.h:
+        * kjs/date_object.cpp:
+        (KJS::DatePrototype::DatePrototype):
+        (KJS::DateConstructor::DateConstructor):
+        (KJS::DateConstructor::getConstructData):
+        (KJS::DateConstructor::construct):
+        (KJS::DateConstructor::callAsFunction):
+        (KJS::DateFunction::DateFunction):
+        (KJS::DateFunction::callAsFunction):
+        * kjs/date_object.h:
+        * kjs/error_object.cpp:
+        (KJS::ErrorPrototype::ErrorPrototype):
+        (KJS::ErrorConstructor::ErrorConstructor):
+        (KJS::ErrorConstructor::getConstructData):
+        (KJS::ErrorConstructor::construct):
+        (KJS::ErrorConstructor::callAsFunction):
+        (KJS::NativeErrorConstructor::NativeErrorConstructor):
+        (KJS::NativeErrorConstructor::getConstructData):
+        (KJS::NativeErrorConstructor::construct):
+        (KJS::NativeErrorConstructor::callAsFunction):
+        (KJS::NativeErrorConstructor::mark):
+        * kjs/error_object.h:
+        * kjs/function.cpp:
+        (KJS::JSFunction::JSFunction):
+        (KJS::JSFunction::mark):
+        (KJS::JSFunction::getOwnPropertySlot):
+        (KJS::JSFunction::put):
+        (KJS::JSFunction::deleteProperty):
+        (KJS::PrototypeFunction::PrototypeFunction):
+        (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
+        (KJS::PrototypeReflexiveFunction::mark):
+        * kjs/function.h:
+        * kjs/function_object.cpp:
+        (KJS::functionProtoFuncToString):
+        (KJS::FunctionConstructor::FunctionConstructor):
+        (KJS::FunctionConstructor::getConstructData):
+        (KJS::FunctionConstructor::construct):
+        (KJS::FunctionConstructor::callAsFunction):
+        * kjs/function_object.h:
+        * kjs/internal.cpp:
+        (KJS::StringObject::create):
+        (KJS::JSString::toObject):
+        (KJS::JSString::toThisObject):
+        (KJS::JSString::getOwnPropertySlot):
+        (KJS::InternalFunction::InternalFunction):
+        (KJS::InternalFunction::getCallData):
+        (KJS::InternalFunction::implementsHasInstance):
+        * kjs/math_object.cpp:
+        (KJS::MathObject::MathObject):
+        (KJS::MathObject::getOwnPropertySlot):
+        (KJS::MathObject::getValueProperty):
+        * kjs/math_object.h:
+        * kjs/number_object.cpp:
+        (KJS::NumberObject::NumberObject):
+        (KJS::NumberPrototype::NumberPrototype):
+        (KJS::numberProtoFuncToString):
+        (KJS::numberProtoFuncToLocaleString):
+        (KJS::numberProtoFuncValueOf):
+        (KJS::numberProtoFuncToFixed):
+        (KJS::numberProtoFuncToExponential):
+        (KJS::numberProtoFuncToPrecision):
+        (KJS::NumberConstructor::NumberConstructor):
+        (KJS::NumberConstructor::getOwnPropertySlot):
+        (KJS::NumberConstructor::getValueProperty):
+        (KJS::NumberConstructor::getConstructData):
+        (KJS::NumberConstructor::construct):
+        (KJS::NumberConstructor::callAsFunction):
+        * kjs/number_object.h:
+        * kjs/object.cpp:
+        (KJS::JSObject::putDirectFunction):
+        * kjs/object.h:
+        * kjs/object_object.cpp:
+        (KJS::ObjectConstructor::ObjectConstructor):
+        (KJS::ObjectConstructor::getConstructData):
+        (KJS::ObjectConstructor::construct):
+        (KJS::ObjectConstructor::callAsFunction):
+        * kjs/object_object.h:
+        * kjs/regexp.cpp:
+        (KJS::RegExp::RegExp):
+        * kjs/regexp_object.cpp:
+        (KJS::regExpProtoFuncTest):
+        (KJS::regExpProtoFuncExec):
+        (KJS::regExpProtoFuncCompile):
+        (KJS::regExpProtoFuncToString):
+        (KJS::RegExpObject::RegExpObject):
+        (KJS::RegExpObject::~RegExpObject):
+        (KJS::RegExpObject::getOwnPropertySlot):
+        (KJS::RegExpObject::getValueProperty):
+        (KJS::RegExpObject::put):
+        (KJS::RegExpObject::putValueProperty):
+        (KJS::RegExpObject::match):
+        (KJS::RegExpObject::test):
+        (KJS::RegExpObject::exec):
+        (KJS::RegExpObject::getCallData):
+        (KJS::RegExpObject::callAsFunction):
+        (KJS::RegExpConstructorPrivate::RegExpConstructorPrivate):
+        (KJS::RegExpConstructor::RegExpConstructor):
+        (KJS::RegExpConstructor::performMatch):
+        (KJS::RegExpMatchesArray::RegExpMatchesArray):
+        (KJS::RegExpMatchesArray::~RegExpMatchesArray):
+        (KJS::RegExpMatchesArray::fillArrayInstance):
+        (KJS::RegExpConstructor::arrayOfMatches):
+        (KJS::RegExpConstructor::getBackref):
+        (KJS::RegExpConstructor::getLastParen):
+        (KJS::RegExpConstructor::getLeftContext):
+        (KJS::RegExpConstructor::getRightContext):
+        (KJS::RegExpConstructor::getOwnPropertySlot):
+        (KJS::RegExpConstructor::getValueProperty):
+        (KJS::RegExpConstructor::put):
+        (KJS::RegExpConstructor::putValueProperty):
+        (KJS::RegExpConstructor::getConstructData):
+        (KJS::RegExpConstructor::construct):
+        (KJS::RegExpConstructor::callAsFunction):
+        (KJS::RegExpConstructor::input):
+        * kjs/regexp_object.h:
+        * kjs/string_object.cpp:
+        (KJS::StringObject::StringObject):
+        (KJS::StringObject::getOwnPropertySlot):
+        (KJS::StringObject::put):
+        (KJS::StringObject::deleteProperty):
+        (KJS::StringObject::getPropertyNames):
+        (KJS::StringPrototype::StringPrototype):
+        (KJS::StringPrototype::getOwnPropertySlot):
+        (KJS::replace):
+        (KJS::stringProtoFuncToString):
+        (KJS::stringProtoFuncValueOf):
+        (KJS::stringProtoFuncCharAt):
+        (KJS::stringProtoFuncCharCodeAt):
+        (KJS::stringProtoFuncConcat):
+        (KJS::stringProtoFuncIndexOf):
+        (KJS::stringProtoFuncLastIndexOf):
+        (KJS::stringProtoFuncMatch):
+        (KJS::stringProtoFuncSearch):
+        (KJS::stringProtoFuncReplace):
+        (KJS::stringProtoFuncSlice):
+        (KJS::stringProtoFuncSplit):
+        (KJS::stringProtoFuncSubstr):
+        (KJS::stringProtoFuncSubstring):
+        (KJS::stringProtoFuncToLowerCase):
+        (KJS::stringProtoFuncToUpperCase):
+        (KJS::stringProtoFuncToLocaleLowerCase):
+        (KJS::stringProtoFuncToLocaleUpperCase):
+        (KJS::stringProtoFuncLocaleCompare):
+        (KJS::stringProtoFuncBig):
+        (KJS::stringProtoFuncSmall):
+        (KJS::stringProtoFuncBlink):
+        (KJS::stringProtoFuncBold):
+        (KJS::stringProtoFuncFixed):
+        (KJS::stringProtoFuncItalics):
+        (KJS::stringProtoFuncStrike):
+        (KJS::stringProtoFuncSub):
+        (KJS::stringProtoFuncSup):
+        (KJS::stringProtoFuncFontcolor):
+        (KJS::stringProtoFuncFontsize):
+        (KJS::stringProtoFuncAnchor):
+        (KJS::stringProtoFuncLink):
+        (KJS::StringConstructor::StringConstructor):
+        (KJS::StringConstructor::getConstructData):
+        (KJS::StringConstructor::construct):
+        (KJS::StringConstructor::callAsFunction):
+        (KJS::StringConstructorFunction::StringConstructorFunction):
+        (KJS::StringConstructorFunction::callAsFunction):
+        * kjs/string_object.h:
+        (KJS::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined):
+        * profiler/Profiler.cpp:
+        (KJS::createCallIdentifier):
+
+2008-06-15  Darin Adler  <darin@apple.com>
+
+        Rubber stamped by Sam.
+
+        - use JS prefix and simpler names for basic JavaScriptCore types,
+          to complement JSValue and JSObject
+
+        * JavaScriptCore.exp:
+        * VM/Machine.cpp:
+        (KJS::jsLess):
+        (KJS::jsLessEq):
+        (KJS::jsAdd):
+        (KJS::callEval):
+        (KJS::Machine::execute):
+        (KJS::Machine::retrieveArguments):
+        (KJS::Machine::retrieveCaller):
+        (KJS::Machine::getCallFrame):
+        (KJS::Machine::getFunctionAndArguments):
+        * VM/Machine.h:
+        * VM/Register.h:
+        * kjs/DebuggerCallFrame.cpp:
+        (KJS::DebuggerCallFrame::functionName):
+        * kjs/ExecState.h:
+        * kjs/JSActivation.cpp:
+        (KJS::JSActivation::createArgumentsObject):
+        * kjs/array_instance.cpp:
+        (KJS::JSArray::checkConsistency):
+        (KJS::JSArray::JSArray):
+        (KJS::JSArray::~JSArray):
+        (KJS::JSArray::getItem):
+        (KJS::JSArray::lengthGetter):
+        (KJS::JSArray::inlineGetOwnPropertySlot):
+        (KJS::JSArray::getOwnPropertySlot):
+        (KJS::JSArray::put):
+        (KJS::JSArray::deleteProperty):
+        (KJS::JSArray::getPropertyNames):
+        (KJS::JSArray::increaseVectorLength):
+        (KJS::JSArray::setLength):
+        (KJS::JSArray::mark):
+        (KJS::JSArray::sort):
+        (KJS::JSArray::compactForSorting):
+        (KJS::JSArray::lazyCreationData):
+        (KJS::JSArray::setLazyCreationData):
+        * kjs/array_instance.h:
+        * kjs/array_object.cpp:
+        (KJS::ArrayPrototype::ArrayPrototype):
+        (KJS::ArrayPrototype::getOwnPropertySlot):
+        (KJS::arrayProtoFuncToString):
+        (KJS::arrayProtoFuncToLocaleString):
+        (KJS::arrayProtoFuncConcat):
+        (KJS::arrayProtoFuncSort):
+        (KJS::ArrayObjectImp::construct):
+        * kjs/array_object.h:
+        * kjs/completion.h:
+        * kjs/function.cpp:
+        (KJS::JSFunction::JSFunction):
+        (KJS::JSFunction::mark):
+        (KJS::JSFunction::getCallData):
+        (KJS::JSFunction::callAsFunction):
+        (KJS::JSFunction::argumentsGetter):
+        (KJS::JSFunction::callerGetter):
+        (KJS::JSFunction::lengthGetter):
+        (KJS::JSFunction::getOwnPropertySlot):
+        (KJS::JSFunction::put):
+        (KJS::JSFunction::deleteProperty):
+        (KJS::JSFunction::getParameterName):
+        (KJS::JSFunction::getConstructData):
+        (KJS::JSFunction::construct):
+        (KJS::IndexToNameMap::IndexToNameMap):
+        (KJS::Arguments::Arguments):
+        * kjs/function.h:
+        * kjs/function_object.cpp:
+        (KJS::functionProtoFuncToString):
+        (KJS::functionProtoFuncApply):
+        (KJS::FunctionObjectImp::construct):
+        * kjs/internal.cpp:
+        (KJS::JSString::toPrimitive):
+        (KJS::JSString::getPrimitiveNumber):
+        (KJS::JSString::toBoolean):
+        (KJS::JSString::toNumber):
+        (KJS::JSString::toString):
+        (KJS::StringInstance::create):
+        (KJS::JSString::toObject):
+        (KJS::JSString::toThisObject):
+        (KJS::JSString::lengthGetter):
+        (KJS::JSString::indexGetter):
+        (KJS::JSString::indexNumericPropertyGetter):
+        (KJS::JSString::getOwnPropertySlot):
+        (KJS::JSNumberCell::type):
+        (KJS::JSNumberCell::toPrimitive):
+        (KJS::JSNumberCell::getPrimitiveNumber):
+        (KJS::JSNumberCell::toBoolean):
+        (KJS::JSNumberCell::toNumber):
+        (KJS::JSNumberCell::toString):
+        (KJS::JSNumberCell::toObject):
+        (KJS::JSNumberCell::toThisObject):
+        (KJS::JSNumberCell::getUInt32):
+        (KJS::JSNumberCell::getTruncatedInt32):
+        (KJS::JSNumberCell::getTruncatedUInt32):
+        (KJS::GetterSetter::mark):
+        (KJS::GetterSetter::toPrimitive):
+        (KJS::GetterSetter::getPrimitiveNumber):
+        (KJS::GetterSetter::toBoolean):
+        (KJS::GetterSetter::toNumber):
+        (KJS::GetterSetter::toString):
+        (KJS::GetterSetter::toObject):
+        (KJS::GetterSetter::getOwnPropertySlot):
+        (KJS::GetterSetter::put):
+        (KJS::GetterSetter::toThisObject):
+        * kjs/internal.h:
+        (KJS::JSString::JSString):
+        (KJS::JSString::getStringPropertySlot):
+        * kjs/nodes.cpp:
+        (KJS::FuncDeclNode::makeFunction):
+        (KJS::FuncExprNode::makeFunction):
+        * kjs/nodes.h:
+        * kjs/object.cpp:
+        (KJS::JSObject::put):
+        (KJS::JSObject::deleteProperty):
+        (KJS::JSObject::defineGetter):
+        (KJS::JSObject::defineSetter):
+        (KJS::JSObject::lookupGetter):
+        (KJS::JSObject::lookupSetter):
+        (KJS::JSObject::fillGetterPropertySlot):
+        * kjs/object.h:
+        (KJS::GetterSetter::GetterSetter):
+        * kjs/operations.cpp:
+        (KJS::equal):
+        (KJS::strictEqual):
+        * kjs/property_map.cpp:
+        (KJS::PropertyMap::containsGettersOrSetters):
+        * kjs/regexp_object.cpp:
+        (KJS::RegExpMatchesArray::getOwnPropertySlot):
+        (KJS::RegExpMatchesArray::put):
+        (KJS::RegExpMatchesArray::deleteProperty):
+        (KJS::RegExpMatchesArray::getPropertyNames):
+        (KJS::RegExpMatchesArray::RegExpMatchesArray):
+        (KJS::RegExpMatchesArray::fillArrayInstance):
+        * kjs/string_object.cpp:
+        (KJS::StringInstance::StringInstance):
+        (KJS::replace):
+        (KJS::stringProtoFuncReplace):
+        (KJS::stringProtoFuncToLowerCase):
+        (KJS::stringProtoFuncToUpperCase):
+        (KJS::stringProtoFuncToLocaleLowerCase):
+        (KJS::stringProtoFuncToLocaleUpperCase):
+        * kjs/string_object.h:
+        (KJS::StringInstance::internalValue):
+        * kjs/value.cpp:
+        (KJS::JSCell::getNumber):
+        (KJS::JSCell::getString):
+        (KJS::JSCell::getObject):
+        (KJS::jsString):
+        (KJS::jsOwnedString):
+        * kjs/value.h:
+        (KJS::JSNumberCell::JSNumberCell):
+        (KJS::jsNumberCell):
+        (KJS::JSValue::uncheckedGetNumber):
+        * profiler/Profiler.cpp:
+        (KJS::createCallIdentifier):
+        (KJS::createCallIdentifierFromFunctionImp):
+
+2008-06-15  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Alexey.
+        
+        - add emitUnaryOp, emitNullaryOp and emitUnaryOpNoDst; use them
+        
+        This removes some boilerplate code and also reduces the number of
+        places that will need to be changed to do on-demand emit of
+        loads (and thus support k operands).
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitUnaryOp):
+        (KJS::CodeGenerator::emitNullaryOp):
+        (KJS::CodeGenerator::emitUnaryOpNoDst):
+        (KJS::CodeGenerator::emitPushScope):
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::emitNewObject):
+        (KJS::CodeGenerator::emitNewArray):
+        (KJS::CodeGenerator::emitNot):
+        (KJS::CodeGenerator::emitBitNot):
+        (KJS::CodeGenerator::emitToJSNumber):
+        (KJS::CodeGenerator::emitNegate):
+        (KJS::CodeGenerator::emitInstanceOf):
+        (KJS::CodeGenerator::emitTypeOf):
+        (KJS::CodeGenerator::emitIn):
+        (KJS::CodeGenerator::emitReturn):
+        (KJS::CodeGenerator::emitEnd):
+        (KJS::CodeGenerator::emitGetPropertyNames):
+
+2008-06-15  Alp Toker  <alp@nuanti.com>
+
+        Rubber-stamped by Maciej.
+
+        Install 'jsc' application by default.
+
+        * GNUmakefile.am:
+
+2008-06-15  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - rename testkjs to jsc
+
+        * GNUmakefile.am:
+        * JavaScriptCore.vcproj/JavaScriptCore.sln:
+        * JavaScriptCore.vcproj/jsc: Added.
+        * JavaScriptCore.vcproj/jsc/jsc.vcproj: Copied from JavaScriptCore.vcproj/testkjs/testkjs.vcproj.
+        * JavaScriptCore.vcproj/testkjs: Removed.
+        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Removed.
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * jscore.bkl:
+        * kjs/Shell.cpp: Copied from kjs/testkjs.cpp.
+        (main):
+        (printUsageStatement):
+        (jscmain):
+        * kjs/jsc.pro: Copied from kjs/testkjs.pro.
+        * kjs/testkjs.cpp: Removed.
+        * kjs/testkjs.pro: Removed.
+        * tests/mozilla/expected.html:
+        * tests/mozilla/js1_2/Array/tostring_1.js:
+        * tests/mozilla/js1_2/Array/tostring_2.js:
+        * tests/mozilla/jsDriver.pl:
+
+2008-06-15  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Mac build fix.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/nodes.h:
+
+2008-06-15  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Change the spelling of PrecMultiplicitave to PrecMultiplicative.
+
+        * kjs/nodes.h:
+        (KJS::MultNode::precedence):
+        (KJS::DivNode::precedence):
+        (KJS::ModNode::precedence):
+
+2008-06-15  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Remove unused preprocessor macros related to exceptions in the old
+        interpreter.
+
+        * kjs/nodes.cpp:
+
+2008-06-15  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Bug 19484: More instructions needs to use temporary registers
+        <https://bugs.webkit.org/show_bug.cgi?id=19484>
+
+        Fix codegen for all binary operations so that temporaries are used if
+        necessary. This was done by making BinaryOpNode and ReverseBinaryOpNode
+        subclasses of ExpressionNode, and eliminating the custom emitCode()
+        methods for the individual node classes.
+
+        This only adds 3 new instructions to SunSpider code, and there is no
+        difference in SunSpider execution time.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitBitNot):
+        (KJS::CodeGenerator::emitBinaryOp):
+        * VM/CodeGenerator.h:
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::PreIncResolveNode::emitCode):
+        (KJS::PreDecResolveNode::emitCode):
+        (KJS::BinaryOpNode::emitCode):
+        (KJS::ReverseBinaryOpNode::emitCode):
+        (KJS::emitReadModifyAssignment):
+        (KJS::CaseBlockNode::emitCodeForBlock):
+        * kjs/nodes.h:
+        (KJS::BinaryOpNode::BinaryOpNode):
+        (KJS::ReverseBinaryOpNode::ReverseBinaryOpNode):
+        (KJS::MultNode::):
+        (KJS::DivNode::):
+        (KJS::DivNode::precedence):
+        (KJS::ModNode::):
+        (KJS::ModNode::precedence):
+        (KJS::AddNode::):
+        (KJS::AddNode::precedence):
+        (KJS::SubNode::):
+        (KJS::SubNode::precedence):
+        (KJS::LeftShiftNode::):
+        (KJS::LeftShiftNode::precedence):
+        (KJS::RightShiftNode::):
+        (KJS::RightShiftNode::precedence):
+        (KJS::UnsignedRightShiftNode::):
+        (KJS::UnsignedRightShiftNode::precedence):
+        (KJS::LessNode::):
+        (KJS::LessNode::precedence):
+        (KJS::GreaterNode::):
+        (KJS::GreaterNode::precedence):
+        (KJS::LessEqNode::):
+        (KJS::LessEqNode::precedence):
+        (KJS::GreaterEqNode::):
+        (KJS::GreaterEqNode::precedence):
+        (KJS::InstanceOfNode::):
+        (KJS::InstanceOfNode::precedence):
+        (KJS::InNode::):
+        (KJS::InNode::precedence):
+        (KJS::EqualNode::):
+        (KJS::EqualNode::precedence):
+        (KJS::NotEqualNode::):
+        (KJS::NotEqualNode::precedence):
+        (KJS::StrictEqualNode::):
+        (KJS::StrictEqualNode::precedence):
+        (KJS::NotStrictEqualNode::):
+        (KJS::NotStrictEqualNode::precedence):
+        (KJS::BitAndNode::):
+        (KJS::BitAndNode::precedence):
+        (KJS::BitOrNode::):
+        (KJS::BitOrNode::precedence):
+        (KJS::BitXOrNode::):
+        (KJS::BitXOrNode::precedence):
+        * kjs/nodes2string.cpp:
+        (KJS::LessNode::streamTo):
+        (KJS::GreaterNode::streamTo):
+        (KJS::LessEqNode::streamTo):
+        (KJS::GreaterEqNode::streamTo):
+        (KJS::InstanceOfNode::streamTo):
+        (KJS::InNode::streamTo):
+        (KJS::EqualNode::streamTo):
+        (KJS::NotEqualNode::streamTo):
+        (KJS::StrictEqualNode::streamTo):
+        (KJS::NotStrictEqualNode::streamTo):
+        (KJS::BitAndNode::streamTo):
+        (KJS::BitXOrNode::streamTo):
+        (KJS::BitOrNode::streamTo):
+
+2008-06-14  Darin Adler  <darin@apple.com>
+
+        Rubber stamped by Sam.
+
+        - rename a bunch of local symbols within the regular expression code to
+          follow our usual coding style, and do a few other name tweaks
+
+        * pcre/pcre_compile.cpp:
+        (CompileData::CompileData):
+        (checkEscape):
+        (readRepeatCounts):
+        (compileBranch):
+        (compileBracket):
+        (calculateCompiledPatternLength):
+        (returnError):
+        (jsRegExpCompile):
+        * pcre/pcre_exec.cpp:
+        (MatchStack::MatchStack):
+        (MatchStack::canUseStackBufferForNextFrame):
+        (MatchStack::popCurrentFrame):
+        (match):
+        (tryFirstByteOptimization):
+        (tryRequiredByteOptimization):
+        (jsRegExpExecute):
+        * pcre/pcre_internal.h:
+
+2008-06-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Darin.
+
+        Remove redundant uses of get().
+
+        * kjs/nodes.cpp:
+        (KJS::BracketAccessorNode::emitCode):
+        (KJS::AddNode::emitCode):
+        (KJS::SubNode::emitCode):
+        (KJS::ReadModifyResolveNode::emitCode):
+        (KJS::AssignDotNode::emitCode):
+        (KJS::ReadModifyDotNode::emitCode):
+        (KJS::AssignBracketNode::emitCode):
+        (KJS::ReadModifyBracketNode::emitCode):
+
+2008-06-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Make code generation not use a temporary for the left-hand side of an
+        expression if the right-hand side is a local variable.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::isLocal):
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::leftHandSideNeedsCopy):
+        (KJS::CodeGenerator::emitNodeForLeftHandSide):
+        * kjs/nodes.cpp:
+        (KJS::ResolveNode::isPure):
+        (KJS::BracketAccessorNode::emitCode):
+        (KJS::AddNode::emitCode):
+        (KJS::SubNode::emitCode):
+        (KJS::ReadModifyResolveNode::emitCode):
+        (KJS::AssignDotNode::emitCode):
+        (KJS::ReadModifyDotNode::emitCode):
+        (KJS::AssignBracketNode::emitCode):
+        (KJS::ReadModifyBracketNode::emitCode):
+        * kjs/nodes.h:
+        (KJS::ExpressionNode::):
+        (KJS::BooleanNode::):
+        (KJS::NumberNode::):
+        (KJS::StringNode::):
+
+2008-06-14  Darin Adler  <darin@apple.com>
+
+        Reviewed by Sam.
+
+        - more of https://bugs.webkit.org/show_bug.cgi?id=17257
+          start ref counts at 1 instead of 0 for speed
+
+        * kjs/nodes.cpp:
+        (KJS::ParserRefCounted::hasOneRef): Added. Replaces refcount.
+        * kjs/nodes.h: Replaced refcount with hasOneRef.
+
+        * wtf/ListRefPtr.h:
+        (WTF::ListRefPtr::~ListRefPtr): Changed to use hasOneRef instead of
+        refcount, so this class can be used with the RefCounted template.
+
+        * wtf/RefCounted.h:
+        (WTF::RefCounted::hasOneRef): Made const, since there's no reason for
+        it to be non-const.
+
+2008-06-14  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - initialize local vars as side effect of call instead of in bytecode
+        1.004x speedup on SunSpider.
+
+        This removes just the dispatch overhead for these loads - in the
+        future, dead store elimination might be able to eliminate them
+        entirely.
+        
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::CodeGenerator): For function blocks, don't
+        emit loads of undefined for var initialization.
+        * VM/Machine.cpp:
+        (KJS::slideRegisterWindowForCall): Instead, initialize locals
+        as part of the call.
+
+2008-06-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Remove helper functions in the parser that are no longer needed.
+
+        * kjs/grammar.y:
+
+2008-06-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Bug 19484: More instructions needs to use temporary registers
+        <https://bugs.webkit.org/show_bug.cgi?id=19484>
+
+        Make code generation for AddNode and SubNode use temporaries when
+        necessary.
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::AddNode::emitCode):
+        (KJS::SubNode::emitCode):
+        * kjs/nodes.h:
+        (KJS::AddNode::):
+        (KJS::SubNode::):
+
+2008-06-13  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Combine TrueNode and FalseNode to make BooleanNode, and remove the
+        unused class PlaceholderTrueNode.
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::BooleanNode::emitCode):
+        * kjs/nodes.h:
+        (KJS::BooleanNode::):
+        (KJS::BooleanNode::precedence):
+        * kjs/nodes2string.cpp:
+        (KJS::BooleanNode::streamTo):
+
+2008-06-13  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Eliminate the use of temporaries to store the left hand side of an
+        expression when the right hand side is a constant. This slightly
+        improves the generated bytecode for a few SunSpider tests, but it is
+        mostly in preparation for fixing
+
+        Bug 19484: More instructions needs to use temporary registers
+        <https://bugs.webkit.org/show_bug.cgi?id=19484>
+
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::leftHandSideNeedsCopy):
+        (KJS::CodeGenerator::emitNodeForLeftHandSide):
+        * kjs/nodes.cpp:
+        (KJS::BracketAccessorNode::emitCode):
+        (KJS::ReadModifyResolveNode::emitCode):
+        (KJS::AssignDotNode::emitCode):
+        (KJS::ReadModifyDotNode::emitCode):
+        (KJS::AssignBracketNode::emitCode):
+        (KJS::ReadModifyBracketNode::emitCode):
+        * kjs/nodes.h:
+        (KJS::ExpressionNode::):
+        (KJS::FalseNode::):
+        (KJS::TrueNode::):
+        (KJS::NumberNode::):
+        (KJS::StringNode::):
+
+2008-06-13  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - prettify opcode stats output
+        
+        I changed things to be a bit more aligned, also there is a new
+        section listing most common opcodes and most common sequences that
+        include them.
+
+        * VM/Opcode.cpp:
+        (KJS::OpcodeStats::~OpcodeStats):
+        * VM/Opcode.h:
+
+2008-06-13  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Geoff.
+
+        <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
+        profiler.
+        - Remove recursion from exclude().  This leaves only focus() to fix.
+
+        * JavaScriptCore.exp: Change the signatures of the exported functions.
+        * profiler/Profile.cpp:
+        (KJS::Profile::forEach): I added a traverseNextNodePreOrder() function
+        and so needed to distinguish the other function by labeling it
+        traverseNextNodePostOrder().
+        (KJS::Profile::exclude): All new exclude that iteratively walks the tree
+        * profiler/Profile.h:
+        (KJS::Profile::focus): Add a null check for m_head.
+        * profiler/ProfileNode.cpp:
+        (KJS::ProfileNode::traverseNextNodePostOrder): Renamed
+        (KJS::ProfileNode::traverseNextNodePreOrder): Walks the tree in pre-
+        order, where the parent is processed before the children.
+        (KJS::ProfileNode::setTreeVisible): Iterate over the sub-tree and set
+        all of the nodes visible value.  This changes another function that used
+        recursion.
+        (KJS::ProfileNode::exclude): Remove recursion from this function.
+        Because we now check for m_visible and we are walking the tree in pre-
+        order we do not need to check if an excluded node is in an excluded
+        sub-tree.
+        * profiler/ProfileNode.h: Added specific selfTime functions to
+        facilitate exclude().
+        (KJS::ProfileNode::setSelfTime):
+        (KJS::ProfileNode::setActualSelfTime):
+        (KJS::ProfileNode::setVisibleSelfTime):
+
+2008-06-12  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - https://bugs.webkit.org/show_bug.cgi?id=19434
+          speed up SunSpider by avoiding some string boxing
+
+        Speeds up SunSpider by 1.1%.
+
+        Optimized code path for getting built-in properties from strings -- avoid
+        boxing with a string object in that case. We can make further changes to avoid
+        even more boxing, but this change alone is a win.
+
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::JSCallbackObject::staticValueGetter): Use isObject instead of inherits
+        in asssert, since the type of slotBase() is now JSValue, not JSObject.
+        (KJS::JSCallbackObject::staticFunctionGetter): Ditto.
+        (KJS::JSCallbackObject::callbackGetter): Ditto.
+
+        * kjs/internal.cpp:
+        (KJS::StringImp::getPrimitiveNumber): Updated for change of data member name.
+        (KJS::StringImp::toBoolean): Ditto.
+        (KJS::StringImp::toNumber): Ditto.
+        (KJS::StringImp::toString): Ditto.
+        (KJS::StringInstance::create): Added; avoids a bit of cut and paste code.
+        (KJS::StringImp::toObject): Use StringInstance::create.
+        (KJS::StringImp::toThisObject): Ditto.
+        (KJS::StringImp::lengthGetter): Added. Replaces the getter that used to live in
+        the StringInstance class.
+        (KJS::StringImp::indexGetter): Ditto.
+        (KJS::StringImp::indexNumericPropertyGetter): Ditto.
+        (KJS::StringImp::getOwnPropertySlot): Added. Deals with built in properties of
+        the string class without creating a StringInstance.
+
+        * kjs/internal.h:
+        (KJS::StringImp::getStringPropertySlot): Added. To be used by both the string
+        and string object getOwnPropertySlot function.
+
+        * kjs/lookup.h:
+        (KJS::staticFunctionGetter): Updated since slotBase() is now a JSValue rather
+        than a JSObject.
+
+        * kjs/object.h: Removed PropertySlot::slotBase() function, which can now move
+        back into property_slot.h where it belongs since it doesn't have to cast to
+        JSObject*.
+
+        * kjs/property_slot.cpp:
+        (KJS::PropertySlot::functionGetter): Updated since slot.slotBase() is now a JSValue*
+        instead of JSObject*. setGetterSlot still guarantees the base is a JSObject*.
+        * kjs/property_slot.h:
+        (KJS::PropertySlot::PropertySlot): Changed base to JSValue* intead of JSCell*.
+        (KJS::PropertySlot::setStaticEntry): Ditto.
+        (KJS::PropertySlot::setCustom): Ditto.
+        (KJS::PropertySlot::setCustomIndex): Ditto.
+        (KJS::PropertySlot::setCustomNumeric): Ditto.
+        (KJS::PropertySlot::slotBase): Moved inline here since it no longer involves a
+        downcast to JSObject*.
+        (KJS::PropertySlot::setBase): Changed to JSValue*.
+
+        * kjs/string_object.cpp:
+        (KJS::StringInstance::getOwnPropertySlot): Changed to use getStringPropertySlot
+        instead of coding the properties here. This allows sharing the code with StringImp.
+
+        * kjs/string_object.h: Removed inlineGetOwnPropertySlot, lengthGetter, and indexGetter.
+        Made one of the constructors protected.
+
+        * kjs/value.h: Made getOwnPropertySlot private in the JSCell class -- this is better
+        since it's not the real JSObject getOwnPropertySlot semantic and most callers shouldn't
+        use it.
+
+2008-06-12  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Maciej.
+
+        Preparation to making JavaScript heap per-thread.
+
+        * kjs/collector.cpp:
+        (KJS::Collector::collect):
+        * kjs/collector.h:
+        (KJS::Collector::markListSet):
+        The collector now holds the list of protected lists itself, to be made per-instance.
+
+        * kjs/list.h: Changed to hold a pointer to a mark set this list is in, if any.
+        (KJS::List::List): Explicitly initialize m_size with zero, as m_vector.size() is
+        guaranteed to be such anyway.
+        (KJS::List::append): Changed the fast case to only be executed as long as inline buffer
+        is used, because otherwise, we now do more expensive checks.
+
+        * kjs/list.cpp:
+        (KJS::List::markLists): Renamed from markProtectedListsSlowCase, made it take the list set
+        as a parameter.
+        (KJS::List::slowAppend): If a non-immediate value is appended, the list needs to be added
+        to an appropriate Heap's protected list. For now, a static Collector::markListSet() is
+        used, but the code is layed out in preparation to making the switch to multiple heaps.
+
+        * JavaScriptCore.exp: Updated export list.
+
+2008-06-12  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Bug 19510: CodeBlock::needsFullScopeChain not always set for global code
+        <https://bugs.webkit.org/show_bug.cgi?id=19510>
+
+        This fixes the symptoms by using CodeGenerator::m_codeType to determine
+        when to use temporaries instead of CodeBlock::needsFullScopeChain, but
+        it does not fix the problem itself.
+
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::leftHandSideNeedsCopy):
+
+2008-06-11  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Bug 19498: REGRESSION (r34497): crash while loading GMail
+        <https://bugs.webkit.org/show_bug.cgi?id=19498>
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitJumpIfTrueMayCombine):
+        (KJS::CodeGenerator::emitJumpIfTrue):
+        * VM/CodeGenerator.h:
+        * kjs/nodes.cpp:
+        (KJS::DoWhileNode::emitCode):
+        (KJS::WhileNode::emitCode):
+        (KJS::ForNode::emitCode):
+        (KJS::CaseBlockNode::emitCodeForBlock):
+
+2008-06-11  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - a little bit of cleanup and prep for some upcoming optimizations
+
+        * JavaScriptCore.exp: Re-sorted this file (with sort command line tool).
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump): Fixed printf to avoid warnings -- to use %lu we
+        need to make sure the type is unsigned long.
+        * kjs/object.cpp:
+        (KJS::Error::create): Eliminated unused error names array, and also put
+        the strings into the code since there was already a switch statment.
+        This also avoids having to contemplate a hypothetical access past the
+        end of the array.
+        * kjs/object.h: Got rid of errorNames.
+        * kjs/property_slot.cpp: Deleted unused ungettableGetter.
+        * kjs/property_slot.h: Ditto.
+        * wtf/AlwaysInline.h: Added LIKELY alongside UNLIKELY.
+
+2008-06-11  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Darin.
+
+        Bug 19457: Create fused opcodes for tests and conditional jumps
+        <https://bugs.webkit.org/show_bug.cgi?id=19457>
+
+        Add a new jless instruction, and modify the code generator to emit it
+        instead of the pair (less, jtrue).
+
+        Gives a 3.6% improvement on SunSpider.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::CodeGenerator):
+        (KJS::CodeGenerator::emitOpcode):
+        (KJS::CodeGenerator::retrieveLastBinaryOp):
+        (KJS::CodeGenerator::rewindBinaryOp):
+        (KJS::CodeGenerator::emitJump):
+        (KJS::CodeGenerator::emitJumpIfTrue):
+        (KJS::CodeGenerator::emitJumpIfFalse):
+        (KJS::CodeGenerator::emitMove):
+        (KJS::CodeGenerator::emitNot):
+        (KJS::CodeGenerator::emitEqual):
+        (KJS::CodeGenerator::emitNotEqual):
+        (KJS::CodeGenerator::emitStrictEqual):
+        (KJS::CodeGenerator::emitNotStrictEqual):
+        (KJS::CodeGenerator::emitLess):
+        (KJS::CodeGenerator::emitLessEq):
+        (KJS::CodeGenerator::emitPreInc):
+        (KJS::CodeGenerator::emitPreDec):
+        (KJS::CodeGenerator::emitPostInc):
+        (KJS::CodeGenerator::emitPostDec):
+        (KJS::CodeGenerator::emitToJSNumber):
+        (KJS::CodeGenerator::emitNegate):
+        (KJS::CodeGenerator::emitAdd):
+        (KJS::CodeGenerator::emitMul):
+        (KJS::CodeGenerator::emitDiv):
+        (KJS::CodeGenerator::emitMod):
+        (KJS::CodeGenerator::emitSub):
+        (KJS::CodeGenerator::emitLeftShift):
+        (KJS::CodeGenerator::emitRightShift):
+        (KJS::CodeGenerator::emitUnsignedRightShift):
+        (KJS::CodeGenerator::emitBitAnd):
+        (KJS::CodeGenerator::emitBitXOr):
+        (KJS::CodeGenerator::emitBitOr):
+        (KJS::CodeGenerator::emitBitNot):
+        (KJS::CodeGenerator::emitInstanceOf):
+        (KJS::CodeGenerator::emitTypeOf):
+        (KJS::CodeGenerator::emitIn):
+        (KJS::CodeGenerator::emitLoad):
+        (KJS::CodeGenerator::emitNewObject):
+        (KJS::CodeGenerator::emitNewArray):
+        (KJS::CodeGenerator::emitResolve):
+        (KJS::CodeGenerator::emitGetScopedVar):
+        (KJS::CodeGenerator::emitPutScopedVar):
+        (KJS::CodeGenerator::emitResolveBase):
+        (KJS::CodeGenerator::emitResolveWithBase):
+        (KJS::CodeGenerator::emitResolveFunction):
+        (KJS::CodeGenerator::emitGetById):
+        (KJS::CodeGenerator::emitPutById):
+        (KJS::CodeGenerator::emitPutGetter):
+        (KJS::CodeGenerator::emitPutSetter):
+        (KJS::CodeGenerator::emitDeleteById):
+        (KJS::CodeGenerator::emitGetByVal):
+        (KJS::CodeGenerator::emitPutByVal):
+        (KJS::CodeGenerator::emitDeleteByVal):
+        (KJS::CodeGenerator::emitPutByIndex):
+        (KJS::CodeGenerator::emitNewFunction):
+        (KJS::CodeGenerator::emitNewRegExp):
+        (KJS::CodeGenerator::emitNewFunctionExpression):
+        (KJS::CodeGenerator::emitCall):
+        (KJS::CodeGenerator::emitReturn):
+        (KJS::CodeGenerator::emitEnd):
+        (KJS::CodeGenerator::emitConstruct):
+        (KJS::CodeGenerator::emitPushScope):
+        (KJS::CodeGenerator::emitPopScope):
+        (KJS::CodeGenerator::emitDebugHook):
+        (KJS::CodeGenerator::emitComplexJumpScopes):
+        (KJS::CodeGenerator::emitJumpScopes):
+        (KJS::CodeGenerator::emitNextPropertyName):
+        (KJS::CodeGenerator::emitGetPropertyNames):
+        (KJS::CodeGenerator::emitCatch):
+        (KJS::CodeGenerator::emitThrow):
+        (KJS::CodeGenerator::emitNewError):
+        (KJS::CodeGenerator::emitJumpSubroutine):
+        (KJS::CodeGenerator::emitSubroutineReturn):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.cpp:
+        * VM/Opcode.h:
+
+2008-06-11  Darin Adler  <darin@apple.com>
+
+        Reviewed by Alexey.
+
+        - fix https://bugs.webkit.org/show_bug.cgi?id=19442
+          JavaScript array implementation doesn't maintain m_numValuesInVector when sorting
+
+        * kjs/array_instance.cpp:
+        (KJS::ArrayInstance::checkConsistency): Added. Empty inline version for when
+        consistency checks are turned off.
+        (KJS::ArrayInstance::ArrayInstance): Check consistency after construction.
+        (KJS::ArrayInstance::~ArrayInstance): Check consistency before destruction.
+        (KJS::ArrayInstance::put): Check consistency before and after.
+        (KJS::ArrayInstance::deleteProperty): Ditto.
+        (KJS::ArrayInstance::setLength): Ditto.
+        (KJS::compareByStringPairForQSort): Use typedef for clarity.
+        (KJS::ArrayInstance::sort): Check consistency before and after. Also broke the loop
+        to set up sorting into two separate passes. Added FIXMEs about various exception
+        safety issues. Added code to set m_numValuesInVector after sorting.
+        (KJS::ArrayInstance::compactForSorting): Ditto.
+
+        * kjs/array_instance.h: Added a definition of an enum for the types of consistency
+        check and a declaration of the consistency checking function.
+
+2008-06-10  Kevin Ollivier  <kevino@theolliviers.com>
+
+        wx build fix. Link against libedit on Mac since HAVE(READLINE) is defined there.
+
+        * jscore.bkl:
+
+2008-06-10  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        https://bugs.webkit.org/show_bug.cgi?id=16503
+        match limit takes at least 13% of the time on the SunSpider regexp-dna test
+
+        Make the limit test slightly more efficient. It is not clear how much of a win it is,
+        as the improvement on regexp-dna varies from 2.3% to 0.6% depending on what revision I
+        apply the patch to. Today, the win on regexp-dna was minimal, but the total win was whopping
+        0.5%, due to random code generation changes.
+
+        * pcre/pcre_exec.cpp: (match): Avoid loading a constant on each iteration.
+
+2008-06-09  Alp Toker  <alp@nuanti.com>
+
+        gcc3/autotools build fix. Add explicit -O2 -fno-strict-aliasing to
+        each of the tools since these are no longer set globally.
+
+        * GNUmakefile.am:
+
+2008-06-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Sam.
+
+        Add an include for readline/history.h to fix the build for Darwin users
+        with the GNU readline library installed. Also, clean up the style of
+        the HAVE(READLINE) check.
+
+        * kjs/testkjs.cpp:
+        (runInteractive):
+
+2008-06-09  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Darin.
+
+        Bug 17531: Add interactive mode to testkjs
+        <https://bugs.webkit.org/show_bug.cgi?id=17531>
+
+        This is a cleaned up version of Sam's earlier patch to add an
+        interactive mode to testkjs.
+
+        Readline support is only enabled on Darwin platforms for now, but
+        other ports can enable it by defining HAVE_READLINE in kjs/config.h.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/config.h:
+        * kjs/testkjs.cpp:
+        (Options::Options):
+        (runWithScripts):
+        (runInteractive):
+        (printUsageStatement):
+        (parseArguments):
+        (kjsmain):
+
+2008-06-08  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Darin.
+
+        Bug 19346: REGRESSION: Mootools 1.2 Class inheritance broken in post-SquirrelFish merge
+        <https://bugs.webkit.org/show_bug.cgi?id=19346>
+
+        A check for whether a function's caller is eval code accidentally included
+        the case where the caller's caller is native code. Add a CodeType field to
+        CodeBlock and use this for the eval caller test instead.
+
+        * VM/CodeBlock.h:
+        (KJS::CodeBlock::CodeBlock):
+        (KJS::ProgramCodeBlock::ProgramCodeBlock):
+        (KJS::EvalCodeBlock::EvalCodeBlock):
+        * VM/Machine.cpp:
+        (KJS::getCallerFunctionOffset):
+        * kjs/nodes.cpp:
+        (KJS::FunctionBodyNode::generateCode):
+        (KJS::ProgramNode::generateCode):
+
+2008-06-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Dan Bernstein.
+
+        Bug 17928: testkjs shouldn't require "-f"
+        <https://bugs.webkit.org/show_bug.cgi?id=17928>
+
+        * kjs/testkjs.cpp:
+        (printUsageStatement):
+        (parseArguments):
+
+2008-06-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Eric.
+
+        Bug 17548: JavaScriptCore print(a, b) differs from Spidermonkey Behavior
+        <https://bugs.webkit.org/show_bug.cgi?id=17548>
+
+        * kjs/testkjs.cpp:
+        (functionPrint):
+
+2008-06-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Sam.
+
+        Bug 17547: JavaScriptCore print() differs from Spidermonkey Behavior
+        <https://bugs.webkit.org/show_bug.cgi?id=17547>
+
+        * kjs/testkjs.cpp:
+        (functionPrint):
+
+2008-06-07  Alexey Proskuryakov  <ap@webkit.org>
+
+        More build fixes.
+
+        * kjs/JSGlobalData.cpp: Fixed an included file name for case-sensitive file systems, fixed
+        JSGlobalData::threadInstance() for non-multithreaded builds.
+
+2008-06-07  Alexey Proskuryakov  <ap@webkit.org>
+
+        Build fix - actually adding JSGlobalData.cpp to non-Mac builds!
+
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCoreSources.bkl:
+
+2008-06-07  Alexey Proskuryakov  <ap@webkit.org>
+
+        Try to fix Gtk/gcc 4.3 build.
+
+        * kjs/JSGlobalData.h: Include ustring.h instead of forward-declaring UString::Rep.
+
+2008-06-06  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Combine per-thread objects into one, to make it easier to support legacy clients (for
+        which they shouldn't be really per-thread).
+
+        No change on SunSpider total.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj: Added JSGlobalData.{h,cpp}
+
+        * kjs/JSGlobalData.cpp: Added.
+        (KJS::JSGlobalData::JSGlobalData):
+        (KJS::JSGlobalData::~JSGlobalData):
+        (KJS::JSGlobalData::threadInstance):
+        * kjs/JSGlobalData.h: Added.
+        This class encapsulates all data that should be per-thread (or shared between legacy clients).
+        It will also keep a Heap pointer, but right now, Heap (Collector) methods are all static.
+
+        * kjs/identifier.h:
+        (KJS::Identifier::Identifier):
+        Added a constructor explicitly taking JSGlobalData to access IdentifierTable. Actually,
+        all of them should, but this will be a separate patch.
+
+        * kjs/identifier.cpp:
+        (KJS::IdentifierTable::literalTable):
+        (KJS::createIdentifierTable):
+        (KJS::deleteIdentifierTable):
+        (KJS::Identifier::add):
+        (KJS::Identifier::addSlowCase):
+        Combined IdentifierTable and LiteralIdentifierTable into a single class for simplicity.
+
+        * kjs/grammar.y: kjsyyparse now takes JSGlobalData, not just a Lexer.
+
+        * kjs/nodes.cpp:
+        (KJS::Node::Node):
+        (KJS::EvalFunctionCallNode::emitCode):
+        (KJS::ScopeNode::ScopeNode):
+        Changed to access Lexer and Parser via JSGlobalData::threadInstance(). This is also a
+        temporary measure, they will need to use JSGlobalData explicitly.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::CodeGenerator):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::callEval):
+        * kjs/CommonIdentifiers.cpp:
+        (KJS::CommonIdentifiers::CommonIdentifiers):
+        * kjs/CommonIdentifiers.h:
+        * kjs/DebuggerCallFrame.cpp:
+        (KJS::DebuggerCallFrame::evaluate):
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::ExecState):
+        * kjs/ExecState.h:
+        (KJS::ExecState::globalData):
+        (KJS::ExecState::identifierTable):
+        (KJS::ExecState::propertyNames):
+        (KJS::ExecState::emptyList):
+        (KJS::ExecState::lexer):
+        (KJS::ExecState::parser):
+        (KJS::ExecState::arrayTable):
+        (KJS::ExecState::dateTable):
+        (KJS::ExecState::mathTable):
+        (KJS::ExecState::numberTable):
+        (KJS::ExecState::RegExpImpTable):
+        (KJS::ExecState::RegExpObjectImpTable):
+        (KJS::ExecState::stringTable):
+        * kjs/InitializeThreading.cpp:
+        (KJS::initializeThreadingOnce):
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::init):
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
+        (KJS::JSGlobalObject::head):
+        (KJS::JSGlobalObject::globalData):
+        * kjs/Parser.cpp:
+        (KJS::Parser::parse):
+        * kjs/Parser.h:
+        * kjs/function.cpp:
+        (KJS::FunctionImp::getParameterName):
+        (KJS::IndexToNameMap::unMap):
+        (KJS::globalFuncEval):
+        * kjs/function_object.cpp:
+        (KJS::FunctionObjectImp::construct):
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::checkSyntax):
+        (KJS::Interpreter::evaluate):
+        * kjs/lexer.cpp:
+        (kjsyylex):
+        * kjs/lexer.h:
+        * kjs/testkjs.cpp:
+        (prettyPrintScript):
+        Updated for the above changes. Most of threadInstance uses here will need to be replaced with
+        explicitly passed pointers to support legacy JSC clients.
+
+        * JavaScriptCore.exp: Removed KJS::parser().
+
+2008-06-06  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Bug 19424: Add support for logging opcode pair counts
+        <https://bugs.webkit.org/show_bug.cgi?id=19424>
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.cpp:
+        (KJS::OpcodeStats::OpcodeStats):
+        (KJS::compareOpcodeIndices):
+        (KJS::compareOpcodePairIndices):
+        (KJS::OpcodeStats::~OpcodeStats):
+        (KJS::OpcodeStats::recordInstruction):
+        (KJS::OpcodeStats::resetLastInstruction):
+        * VM/Opcode.h:
+
+2008-06-06  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Adam.
+
+        <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
+        profiler.
+        - Change the remaining functions that do not take arguments, from using
+        recursion to using iteration.
+
+        * JavaScriptCore.exp:
+        * profiler/Profile.cpp:
+        (KJS::stopProfiling):
+        (KJS::restoreAll):
+        (KJS::Profile::stopProfiling): Use foreach instead of recursion.
+        (KJS::Profile::restoreAll): Ditto.
+        * profiler/Profile.h:
+        * profiler/ProfileNode.cpp: Remove recursion.
+        (KJS::ProfileNode::stopProfiling):
+        (KJS::ProfileNode::restore):
+        * profiler/ProfileNode.h:
+
+2008-06-05  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Alexey.
+
+        Fix Greater and GreaterEq nodes to emit code for the left
+        and right sub-expressions in the correct order.
+
+        * kjs/nodes.cpp:
+        (KJS::GreaterNode::emitCode):
+        (KJS::GreaterEqNode::emitCode):
+
+2008-06-05  Antti Koivisto  <antti@apple.com>
+
+        Reviewed by Alp Toker.
+        
+        Fix whitespaces.
+
+        * kjs/collector.cpp:
+        (KJS::getPlatformThreadRegisters):
+
+2008-06-05  Antti Koivisto  <antti@apple.com>
+
+        Reviewed by Darin.
+        
+        Support compiling JavaScriptCore for ARM.
+
+        * kjs/collector.cpp:
+        (KJS::getPlatformThreadRegisters):
+        (KJS::otherThreadStackPointer):
+
+2008-06-05  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Jon.
+
+        - Name changes.
+
+        * JavaScriptCore.exp:
+        * profiler/Profile.cpp:
+        (KJS::Profile::Profile):
+        (KJS::Profile::stopProfiling):
+        (KJS::Profile::didExecute):
+        (KJS::Profile::forEach):
+        (KJS::Profile::debugPrintData):
+        (KJS::Profile::debugPrintDataSampleStyle):
+        * profiler/Profile.h:
+        (KJS::Profile::callTree):
+        (KJS::Profile::totalTime):
+        (KJS::Profile::sortTotalTimeDescending):
+        (KJS::Profile::sortTotalTimeAscending):
+        (KJS::Profile::sortSelfTimeDescending):
+        (KJS::Profile::sortSelfTimeAscending):
+        (KJS::Profile::sortCallsDescending):
+        (KJS::Profile::sortCallsAscending):
+        (KJS::Profile::sortFunctionNameDescending):
+        (KJS::Profile::sortFunctionNameAscending):
+        (KJS::Profile::focus):
+        (KJS::Profile::exclude):
+        (KJS::Profile::restoreAll):
+
+2008-06-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Stephanie Lewis.
+
+        Added the -fno-move-loop-invariants flag to the pcre_exec.cpp build, to
+        tell GCC not to perform loop invariant motion, since GCC's loop
+        invariant motion doesn't do very well with computed goto code.
+        
+        SunSpider reports no change.
+
+2008-06-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Stephanie Lewis.
+        
+        Added the -fno-tree-pre flag to the Machine.cpp build, to tell GCC not
+        to perform Partial Redundancy Elimination (PRE) on trees in Machine.cpp,
+        since GCC's PRE doesn't do very well with computed goto code.
+        
+        SunSpider reports a .7% speedup.
+        
+2008-06-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Stephanie Lewis (or maybe the other way around).
+        
+        Minor change to PCRE to help out certain compilers.
+        
+        SunSpider reports no change, maybe a small speedup.
+
+        * pcre/pcre_exec.cpp:
+        (match): Use instructionPtr++ a little less, to avoid confusing the
+        optimizer.
+
+2008-06-05  Alexey Proskuryakov  <ap@webkit.org>
+
+        Re-landing an independent part of a previously rolled out threading patch.
+
+        * wtf/ThreadSpecific.h: Make sure to initialize POD thread-specific varaibles, too
+        (replaced "new T" with "new T()").
+
+2008-06-05  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Hyatt.
+        
+        - force inlining of a template function that only has one call site per specialization
+        1.3% speedup on SunSpider
+
+        * kjs/collector.cpp:
+        (KJS::Collector::heapAllocate): This template function is only
+        called from allocate() and allocateNumber() (once per
+        specialization) and the extra call overhead for GC allocation
+        shows up, so force inlining.
+
+2008-06-05  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Alexey and Oliver.
+        
+        - remove profiler fetch hack
+        I measure an 0.5% progression from this, others show a wash. It seems not needed any more.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-06-05  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Bug 19400: subscript operator does not protect base when necessary
+        <https://bugs.webkit.org/show_bug.cgi?id=19400>
+
+        Use a temporary for the base in BracketAccessorNode if the subscript
+        might possibly modify it.
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::BracketAccessorNode::emitCode):
+        * kjs/nodes.h:
+        (KJS::BracketAccessorNode::):
+
+2008-06-04  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Maciej Stachowiak.
+
+        Big cleanup of formatting and whitespace.
+
+2008-06-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Add an option to dump statistics on executed instructions.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.cpp:
+        (KJS::OpcodeStats::~OpcodeStats):
+        (KJS::OpcodeStats::recordInstruction):
+        * VM/Opcode.h:
+
+2008-06-04  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Geoff.
+
+        <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
+        profiler.
+        - This patch removes the use of recursion for the sort functions.
+
+        * JavaScriptCore.exp: Change the signatures of the functions being
+        exported.
+        * profiler/Profile.cpp:
+        (KJS::Profile::sort): This generic function will accept any of the
+        static sort functions and apply them to the whole tree.
+        * profiler/Profile.h: All of the sorting functions now call the new
+        sort() function.
+        (KJS::Profile::sortTotalTimeDescending):
+        (KJS::Profile::sortTotalTimeAscending):
+        (KJS::Profile::sortSelfTimeDescending):
+        (KJS::Profile::sortSelfTimeAscending):
+        (KJS::Profile::sortCallsDescending):
+        (KJS::Profile::sortCallsAscending):
+        (KJS::Profile::sortFunctionNameDescending):
+        (KJS::Profile::sortFunctionNameAscending):
+        * profiler/ProfileNode.cpp:
+        (KJS::ProfileNode::ProfileNode): m_head used to point to the head node
+        if this was the head node.  It now points to null to make iteration easy
+        (KJS::ProfileNode::willExecute): Now must check if m_head is null, this
+        check used to happend in the constructor.
+        (KJS::ProfileNode::stopProfiling): Again the check is slightly different
+        to determine if this is the head.
+        (KJS::ProfileNode::traverseNextNode): This function returns the next
+        node in post order.
+        (KJS::ProfileNode::sort): This generic function will sort according to
+        the comparator passed in, then reset the children pointers to macth the
+        new order.
+        * profiler/ProfileNode.h: The sorting function were removed from the
+        definition file and instead use the new generic sort() function
+        (KJS::ProfileNode::totalPercent): because the head can now be empty we
+        need to check here too for the head node.
+        (KJS::ProfileNode::selfPercent): Ditto
+        (KJS::ProfileNode::firstChild): This function is necessary for the 
+        iterative algorithm in Profile.cpp.
+        (KJS::ProfileNode::sortTotalTimeDescending):
+        (KJS::ProfileNode::sortTotalTimeAscending):
+        (KJS::ProfileNode::sortSelfTimeDescending):
+        (KJS::ProfileNode::sortSelfTimeAscending):
+        (KJS::ProfileNode::sortCallsDescending):
+        (KJS::ProfileNode::sortCallsAscending):
+        (KJS::ProfileNode::sortFunctionNameDescending):
+        (KJS::ProfileNode::sortFunctionNameAscending):
+        (KJS::ProfileNode::childrenBegin):
+        (KJS::ProfileNode::childrenEnd):
+        (KJS::ProfileNode::totalTimeDescendingComparator):
+        (KJS::ProfileNode::totalTimeAscendingComparator):
+        (KJS::ProfileNode::selfTimeDescendingComparator):
+        (KJS::ProfileNode::selfTimeAscendingComparator):
+        (KJS::ProfileNode::callsDescendingComparator):
+        (KJS::ProfileNode::callsAscendingComparator):
+        (KJS::ProfileNode::functionNameDescendingComparator):
+        (KJS::ProfileNode::functionNameAscendingComparator):
+
+2008-06-04  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Fix JSClassCreate to work with old JSCore API threading model.
+
+        No change on SunSpider.
+
+        * API/JSClassRef.cpp: (OpaqueJSClass::OpaqueJSClass): Since JSClass is constructed without
+        a context, there is no way for it to create Identifiers.
+        Also, added initializeThreading(), just for good measure.
+
+        * API/JSCallbackObjectFunctions.h: (KJS::::getPropertyNames): Make an Identifier out of the
+        string here, because propertyNames.add() needs that.
+
+        * kjs/identifier.cpp:
+        * kjs/identifier.h:
+        (KJS::Identifier::equal):
+        * kjs/ustring.cpp:
+        (KJS::equal):
+        Moved equal() from identifier.h to ustring.h, because it's not really about Identifiers,
+        and to make it possible to use it from StrHash.
+        Include StrHash.h from ustring.h to avoid having the behavior depend on headers that happen
+        to be included.
+
+        * wtf/StrHash.h: Removed.
+        * kjs/ustring.h: Made RefPtr<UString::Rep> use the same default hash as UString::Rep* (it
+        used to default to pointer equality). Moved the whole StrHash header into ustring.h.
+
+        * JavaScriptCore.exp: Export equal() for WebCore use (this StrHash is used in c_class.cpp,
+        jni_class.cpp, and npruntime.cpp).
+
+2008-06-04  Alexey Proskuryakov  <ap@webkit.org>
+
+        Rubber-stamped by Darin.
+
+        Fix spacing in collector.{h,cpp}.
+
+        * kjs/collector.cpp:
+        * kjs/collector.h:
+
+2008-06-03  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Build fix. The cleanup in r34355 missed a method.
+
+        * kjs/nodes.cpp:
+        * kjs/nodes.h:
+
+2008-06-03  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - https://bugs.webkit.org/show_bug.cgi?id=19269
+          speed up SunSpider by eliminating the toObject call for most get/put/delete
+
+        Makes standalone SunSpider 1.025x as fast as before.
+
+        The getOwnPropertySlot virtual function now takes care of the toObject call
+        for get. Similarly, the put function (and later deleteProperty) does the
+        same for those operations. To do this, the virtual functions were moved from
+        the JSObject class to the JSCell class. Also, since the caller no longer knows
+        the identity of the "original object", which is used by JavaScript-function
+        based getters, changed the PropertySlot class so the original object is
+        already stored in the slot when getOwnPropertySlot is called, if the caller
+        intends to call getValue.
+
+        This affected the old interpreter code enough that the easiest thing for me
+        was to just delete it. While I am not certain the mysterious slowdown is not
+        still occurring, the net change is definitely a significant speedup.
+
+        * JavaScriptCore.exp: Updated.
+
+        * VM/Machine.cpp: Moved the UNLIKELY macro into AlwaysInline.h.
+        (KJS::resolve): Set up the originalObject in the PropertySlot before
+        calling getPropertySlot. Also removed the originalObject argument from
+        getValue.
+        (KJS::resolve_skip): Ditto.
+        (KJS::resolveBaseAndProperty): Ditto.
+        (KJS::resolveBaseAndFunc): Ditto.
+        (KJS::Machine::privateExecute): Removed the toObject calls from the get and
+        put functions where possible, instead calling directly with JSValue and letting
+        the JSValue and JSCell calls handle toObject. Same for toThisObject.
+
+        * kjs/ExecState.h: Removed OldInterpreterExecState.
+
+        * API/JSBase.cpp: Updated includes.
+
+        * kjs/LocalStorageEntry.h: Removed contents. Later we can remove the file too.
+
+        * kjs/array_instance.cpp:
+        (KJS::ArrayInstance::lengthGetter): Removed originalObject argumet.
+        (KJS::ArrayInstance::inlineGetOwnPropertySlot): Don't pass a base value to
+        setValueSlot. Also use UNLIKELY around the "getting elements past the end of
+        the array" code path; less common than successfully getting an element.
+
+        * kjs/array_object.cpp:
+        (KJS::getProperty): Initialize the PropertySlot with the original object.
+        Don't pass the original object to the get function.
+        (KJS::arrayProtoFuncFilter): Ditto.
+        (KJS::arrayProtoFuncMap): Ditto.
+        (KJS::arrayProtoFuncEvery): Ditto.
+        (KJS::arrayProtoFuncForEach): Ditto.
+        (KJS::arrayProtoFuncSome): Ditto.
+
+        * kjs/function_object.cpp:
+        (KJS::FunctionObjectImp::construct): Removed an obsolete comment.
+
+        * kjs/grammar.y: Eliminated support for some of the node types that were
+        used to optimize executing from the syntax tree.
+
+        * kjs/internal.cpp:
+        (KJS::StringImp::toThisObject): Added. Same as toObject.
+        (KJS::NumberImp::toThisObject): Ditto.
+        (KJS::GetterSetterImp::getOwnPropertySlot): Added. Not reached.
+        (KJS::GetterSetterImp::put): Ditto.
+        (KJS::GetterSetterImp::toThisObject): Ditto.
+
+        * kjs/internal.h: Added toThisObject to NumberImp for speed.
+
+        * kjs/lexer.cpp:
+        (KJS::Lexer::shift): Changed shift to just do a single character, to unroll
+        the loop and especially to make the one character case faster.
+        (KJS::Lexer::setCode): Call shift multiple times instead of passing a number.
+        (KJS::Lexer::lex): Ditto.
+        (KJS::Lexer::matchPunctuator): Ditto. Also removed unneeded elses after returns.
+        (KJS::Lexer::scanRegExp): Ditto.
+        * kjs/lexer.h: Removed the count argument from shift.
+
+        * kjs/math_object.cpp:
+        (KJS::mathProtoFuncPow): Call jsNaN instead of jsNumber(NaN).
+
+        * kjs/nodes.cpp: Removed some of the things needed only for the pre-SquirrelFish
+        execution model.
+        (KJS::ForNode::emitCode): Handle cases where some expressions are missing by
+        not emitting any code at all. The old way was to emit code for "true", but
+        this is an unnecessary remnant of the old way of doing things.
+
+        * kjs/nodes.h: Removed some of the things needed only for the pre-SquirrelFish
+        execution model.
+
+        * kjs/object.cpp:
+        (KJS::JSObject::fillGetterPropertySlot): Changed to only pass in the getter
+        function. The old code passed in a base, but it was never used when
+        actually getting the property; the toThisObject call was pointless. Also
+        changed to not pass a base for setUndefined.
+
+        * kjs/object.h: Added the new JSCell operations to GetterSetterImp.
+        Never called.
+        (KJS::JSObject::get): Initialize the object in the PropertySlot and don't
+        pass it in getValue.
+        (KJS::JSObject::getOwnPropertySlotForWrite): Removed the base argument
+        in calls to setValueSlot.
+        (KJS::JSObject::getOwnPropertySlot): Ditto.
+        (KJS::JSValue::get): Added. Here because it calls through to JSObject.
+        A version of JSObject::get that also handles the other types of JSValue
+        by creating the appropriate wrapper. Saves the virtual call to toObject.
+        (KJS::JSValue::put): Ditto.
+        (KJS::JSValue::deleteProperty): Ditto.
+
+        * kjs/property_slot.cpp:
+        (KJS::PropertySlot::undefinedGetter): Removed the originalObject argument.
+        (KJS::PropertySlot::ungettableGetter): Ditto.
+        (KJS::PropertySlot::functionGetter): Ditto. Use the value in the base
+        as the "this" object, which will be set to the original object by the new
+        PropertySlot initialization code. Also call toThisObject. The old code did
+        not do this, but needed to so we can properly handle the activation object
+        like the other similar code paths.
+
+        * kjs/property_slot.h:
+        (KJS::PropertySlot::PropertySlot): Added a constructor that takes a base
+        object. In debug builds, set the base to 0 if you don't pass one.
+        (KJS::PropertySlot::getValue): Don't take or pass the originalObject.
+        (KJS::PropertySlot::setValueSlot): Don't take a base object, and clear the
+        base object in debug builds.
+        (KJS::PropertySlot::setGetterSlot): Ditto.
+        (KJS::PropertySlot::setUndefined): Ditto.
+        (KJS::PropertySlot::setUngettable): Ditto.
+        (KJS::PropertySlot::slotBase): Assert that a base object is present.
+        This will fire if someone actually calls the get function without having
+        passed in a base object and the getter needs it.
+        (KJS::PropertySlot::setBase): Added. Used by the code that implements
+        toObject so it can supply the original object after the fact.
+        (KJS::PropertySlot::clearBase): Added. Clears the base, but is debug-only
+        code because it's an error to fetch the base if you don't have a guarantee
+        it was set.
+
+        * API/JSCallbackObject.h:
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::JSCallbackObject::cachedValueGetter):
+        (KJS::JSCallbackObject::staticValueGetter):
+        (KJS::JSCallbackObject::staticFunctionGetter):
+        (KJS::JSCallbackObject::callbackGetter):
+        * kjs/JSActivation.cpp:
+        (KJS::JSActivation::getOwnPropertySlot):
+        (KJS::JSActivation::argumentsGetter):
+        * kjs/JSActivation.h:
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::symbolTableGet):
+        * kjs/array_instance.h:
+        * kjs/function.cpp:
+        (KJS::FunctionImp::argumentsGetter):
+        (KJS::FunctionImp::callerGetter):
+        (KJS::FunctionImp::lengthGetter):
+        (KJS::Arguments::mappedIndexGetter):
+        * kjs/function.h:
+        * kjs/lookup.h:
+        (KJS::staticFunctionGetter):
+        (KJS::staticValueGetter):
+        * kjs/string_object.cpp:
+        (KJS::StringInstance::lengthGetter):
+        (KJS::StringInstance::indexGetter):
+        (KJS::stringInstanceNumericPropertyGetter):
+        * kjs/string_object.h:
+        Removed originalObject arguments from getters. Don't pass base values to
+        the various PropertySlot functions that no longer take them.
+
+        * kjs/value.cpp:
+        (KJS::JSCell::getOwnPropertySlot): Added. Calls toObject and then sets the slot.
+        This function has to always return true, because the caller can't walk the prototype
+        chain. Because of that, we do a getPropertySlot, not getOwnPropertySlot, which works
+        for the caller. This is private, only called by getOwnPropertySlotInternal.
+        (KJS::JSCell::put): Added. Calls toObject and then put.
+        (KJS::JSCell::toThisObject): Added. Calls toObject.
+
+        * kjs/value.h: Added get, put, and toThisObject to both JSValue
+        and JSCell. These take care of the toObject operation without an additional virtual
+        function call, and so make the common "already an object" case faster.
+
+        * wtf/AlwaysInline.h: Moved the UNLIKELY macro here for now. Maybe we can find a
+        better place later, or rename this header.
+
+2008-06-03  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Tim.
+
+        Bug 12983: Web Inspector break on the debugger keyword
+        <https://bugs.webkit.org/show_bug.cgi?id=12983>
+
+        Added a DebuggerStatementNode to handle codegen, and added a new
+        DidReachBreakPoint debug event (which will hopefully be useful
+        if we ever move breakpoint management into JSC proper).  Also
+        added didReachBreakpoint to Debugger to allow us to actually respond
+        to this event.
+
+        * VM/CodeBlock.cpp:
+        (KJS::debugHookName):
+        * VM/Machine.cpp:
+        (KJS::Machine::debug):
+        * VM/Machine.h:
+        * kjs/debugger.h:
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::DebuggerStatementNode::emitCode):
+        (KJS::DebuggerStatementNode::execute):
+        * kjs/nodes.h:
+        (KJS::DebuggerStatementNode::):
+        * kjs/nodes2string.cpp:
+        (KJS::DebuggerStatementNode::streamTo):
+
+2008-06-03  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - document remaining opcodes.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): Document call, call_eval,
+        construct, ret and end opcodes.
+
+2008-06-03  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): Document throw and catch opcodes.
+
+2008-06-02  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Alexey Proskuryakov.
+
+        Removed JSObject::call, since it just called JSObject::callAsFunction.
+
+        SunSpider reports no change.
+
+2008-06-02  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        A little cleanup in the CodeGenerator.
+
+        * VM/CodeGenerator.cpp: A few changes here.
+
+        (1) Removed remaining cases of the old hack of putting "this" into the
+        symbol table; replaced with explicit tracking of m_thisRegister.
+
+        (2) Made m_thisRegister behave the same for function, eval, and program
+        code, removing the static programCodeThis() function.
+
+        (3) Added a feature to nix a ScopeNode's declaration stacks when done
+        compiling, to save memory.
+
+        (4) Removed code that copied eval declarations into special vectors: we
+        just use the originals in the ScopeNode now.
+        
+        * VM/CodeGenerator.h: Removed unneded parameters from the CodeGenerator
+        constructor: we just use get that data from the ScopeNode now.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::execute): When executing an eval node, don't iterate a
+        special copy of its declarations; iterate the originals, instead.
+
+        * kjs/nodes.cpp: Moved responsibility for knowing what AST data to throw
+        away into the CodeGenerator. Nodes no longer call shrinkCapacity on
+        their data directly.
+        
+        * kjs/nodes.h: Changed FunctionStack to ref its contents, so declaration
+        data stays around even after we've thrown away the AST, unless we explicitly
+        throw away the declaration data, too. This is useful for eval code, which
+        needs to reference its declaration data at execution time. (Soon, it will
+        be useful for program code, too, since program code should do the same.)
+
+2008-06-02  Adam Roben  <aroben@apple.com>
+
+        Build fix for non-AllInOne builds
+
+        * kjs/array_object.cpp: Added a missing #include.
+
+2008-06-02  Kevin McCullough  <kmccullough@apple.com>
+
+        Took out accidental confilct lines I checked in.
+
+        * ChangeLog:
+
+2008-06-02  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Darin.
+
+        <rdar://problem/5969992> JSProfiler: Remove the recursion limit in the
+        profiler
+        Implement Next Sibling pointers as groundwork for removing the recursion
+        limit in the profiler.
+
+        * profiler/ProfileNode.cpp: Also I renamed parentNode and headNode since
+        'node' is redundant.
+        (KJS::ProfileNode::ProfileNode): Initialize the nextSibling.
+        (KJS::ProfileNode::willExecute): If there are already children then the
+        new child needs to be the nextSibling of the last child.
+        (KJS::ProfileNode::didExecute):
+        (KJS::ProfileNode::addChild): Ditto.
+        (KJS::ProfileNode::stopProfiling):
+        (KJS::ProfileNode::sortTotalTimeDescending): For all of the sorting
+        algorithms once the children are sorted their nextSibling pointers need
+        to be reset to reflect the new order.
+        (KJS::ProfileNode::sortTotalTimeAscending):
+        (KJS::ProfileNode::sortSelfTimeDescending):
+        (KJS::ProfileNode::sortSelfTimeAscending):
+        (KJS::ProfileNode::sortCallsDescending):
+        (KJS::ProfileNode::sortCallsAscending):
+        (KJS::ProfileNode::sortFunctionNameDescending):
+        (KJS::ProfileNode::sortFunctionNameAscending):
+        (KJS::ProfileNode::resetChildrensSiblings): This new function simply
+        loops over all of the children and sets their nextSibling pointers to
+        the next child in the Vector
+        (KJS::ProfileNode::debugPrintData):
+        * profiler/ProfileNode.h:
+        (KJS::ProfileNode::parent):
+        (KJS::ProfileNode::setParent):
+        (KJS::ProfileNode::nextSibling):
+        (KJS::ProfileNode::setNextSibling):
+        (KJS::ProfileNode::totalPercent):
+        (KJS::ProfileNode::selfPercent):
+
+2008-06-02  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        Removed the recursion limit from JSObject::call, since the VM does
+        recursion checking now.
+
+        This should allow us to remove JSObject::call entirely, netting a small
+        speedup.
+
+        * kjs/object.cpp:
+        (KJS::JSObject::call):
+
+2008-06-02  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Adele Peterson.
+
+        Added a specific affordance for avoiding stack overflow when converting
+        recursive arrays to string, in preparation for removing generic stack
+        overflow checking from JSObject::call.
+        
+        Tested by fast/js/toString-stack-overflow.html.
+
+2008-06-02  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Alice Liu.
+        
+        Refactored some hand-rolled code to call ScopeChain::globalObject instead.
+
+2008-06-02  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        Fixed ASSERT due to execution continuing after an exception is thrown
+        during array sort.
+
+        * kjs/array_instance.cpp:
+        (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key): Don't call the
+        custom comparator function if an exception has been thrown. Just return
+        1 for everything, so the sort completes quickly. (The result will be
+        thrown away.)
+
+2008-05-30  Timothy Hatcher  <timothy@apple.com>
+
+        Made the starting line number of scripts be 1-based throughout the engine.
+        This cleans up script line numbers so they are all consistent now and fixes
+        some cases where script execution was shown as off by one line in the debugger.
+
+        No change in SunSpider.
+
+        Reviewed by Oliver Hunt.
+
+        * API/minidom.c:
+        (main): Pass a line number of 1 instead of 0 to parser().parse().
+        * API/testapi.c:
+        (main): Ditto. And removes a FIXME and changed an assertEqualsAsNumber
+        to use 1 instead of 2 for the line number.
+        * VM/Machine.cpp:
+        (KJS::callEval): Pass a line number of 1 instead of 0.
+        (KJS::Machine::debug): Use firstLine for WillExecuteProgram instead of
+        lastLine. Use lastLine for DidExecuteProgram instead of firstLine.
+        * kjs/DebuggerCallFrame.cpp:
+        (KJS::DebuggerCallFrame::evaluate): Pass a line number of 1 instead of
+        0 to parser().parse().
+        * kjs/Parser.cpp:
+        (KJS::Parser::parse): ASSERT startingLineNumber is greatter than 0. Change
+        the startingLineNumber to be 1 if it was less than or equal to 0. This is needed
+        for release builds to maintain compatibility with the JavaScriptCore API.
+        * kjs/function.cpp:
+        (KJS::globalFuncEval): Pass a line number of 1 instead of 0 to parser().parse().
+        * kjs/function_object.cpp:
+        (FunctionObjectImp::construct): Pass a line number of 1 instead of 0 to construct().
+        * kjs/lexer.cpp:
+        (Lexer::setCode): Made yylineno = startingLineNumber instead of adding 1.
+        * kjs/testkjs.cpp:
+        (functionRun): Pass a line number of 1 instead of 0 to Interpreter::evaluate().
+        (functionLoad): Ditto.
+        (prettyPrintScript): Ditto.
+        (runWithScripts): Ditto.
+        * profiler/Profiler.cpp:
+        (WebCore::createCallIdentifier): Removed a plus 1 of startingLineNumber.
+
+2008-05-30  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        https://bugs.webkit.org/show_bug.cgi?id=19180
+        speed up SunSpider by optimizing immediate number cases
+
+        Also fixed a JavaScriptCore regression seen on PowerPC - we didn't clip left shift
+        parameter to 0...31.
+
+        0.5% improvement on SunSpider overall, although a 8.5 regression on bitops-3bit-bits-in-byte.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+        * kjs/JSImmediate.h:
+        (KJS::JSImmediate::toTruncatedUInt32): Added. Same as getTruncatedInt32, but casts the result
+        to unsigned.
+
+2008-05-30  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Oliver Hunt.
+
+        https://bugs.webkit.org/show_bug.cgi?id=19180
+        speed up SunSpider by optimizing immediate number cases
+
+        Also fixed two JavaScriptCore regressions seen on PowerPC - we didn't clip right shift
+        parameter to 0...31.
+
+        1.6% improvement on SunSpider, without significant regressions on any tests.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        Added fast paths for >>, ==, ===, !=, !==. Changed order of memory accesses in many
+        cases, making them less dependent on gcc's ability to properly assign registers. With this,
+        I could move exception checks back into slow code paths, and saw less randomness in general.
+
+        * kjs/JSImmediate.h:
+        (KJS::JSImmediate::rightShiftImmediateNumbers):
+        Added.
+
+2008-05-29  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+
+        - fixed <rdar://problem/5972943> REGRESSION(r33979): Flash clips do not play on cnn.com
+        
+        Finally blocks could clobber registers that had to remain live
+        until they returned. This patch takes a conservative approach and
+        makes sure that finally blocks do not reuse any registers that
+        were previously allocated for the function. In the future this
+        could probably be tightened up to be less profligate with the
+        register allocation.
+        
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::highestUsedRegister):
+        * VM/CodeGenerator.h:
+        * kjs/nodes.cpp:
+        (KJS::TryNode::emitCode):
+
+2008-05-29  Steve Falkenburg  <sfalken@apple.com>
+
+        Build fix.
+
+        * kjs/array_instance.cpp:
+
+2008-05-29  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        https://bugs.webkit.org/show_bug.cgi?id=19294
+        <rdar://problem/5969062> A crash when iterating over a sparse array backwards.
+
+        * kjs/array_instance.cpp: Turned sparseArrayCutoff into a macro, so that using max() on it
+        doesn't cause a PIC branch.
+        (KJS::ArrayInstance::increaseVectorLength): Added a comment about this function not
+        preserving class invariants.
+        (KJS::ArrayInstance::put): Update m_storage after reallocation. Move values that fit to
+        the vector from the map in all code paths.
+
+2008-05-29  Thiago Macieira  <tjmaciei@trolltech.com>
+
+        Reviewed by Simon.
+
+        Fix compilation in Solaris with Sun CC
+
+        Lots of WebKit code uses C99 functions that, strict as it
+        is, the Solaris system doesn't provide in C++. So we must define them
+        for both GCC and the Sun CC.
+
+        * wtf/MathExtras.h:
+
+2008-05-28  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Anders.
+
+        Fix codegen for assignment being used as a function.
+
+        FunctionCallValueNode::emitCode failed to account for the
+        potential of the function expression to allocate arbitrary
+        registers.
+
+        * kjs/nodes.cpp:
+        (KJS::FunctionCallValueNode::emitCode):
+
+2008-05-27  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Tim Hatcher.
+
+        Fixed https://bugs.webkit.org/show_bug.cgi?id=19183
+        REGRESSION (r33979): Crash in DebuggerCallFrame::functionName when
+        clicking button in returnEvent-crash.html
+
+        Added two new debugger hooks, willExecuteProgram and didExecuteProgram,
+        along with code to generate them, code to invoke them when unwinding
+        due to an exception, and code to dump them.
+        
+        SunSpider reports no change.
+
+        * VM/CodeBlock.cpp:
+        (KJS::debugHookName): I had to mark this function NEVER_INLINE to avoid
+        a .4% performance regression. The mind boggles.
+
+2008-05-28  Adam Roben  <aroben@apple.com>
+
+        Fix JavaScriptCore tests on OS X
+
+        We were quoting the path to testkjs too late, after it had already
+        been combined with spaces and other options.
+
+        * tests/mozilla/jsDriver.pl:
+        (top level): Move path quoting from here...
+        (sub get_kjs_engine_command): ...to here.
+
+2008-05-28  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Oliver.
+
+        <rdar://problem/5968071> "const f" crashes in JavaScriptCore
+        
+        Make sure to null check the initializer.
+        
+        * kjs/nodes.cpp:
+        (KJS::ConstDeclNode::emitCodeSingle):
+
+2008-05-28  Adam Roben  <aroben@apple.com>
+
+        Make run-javascriptcore-tests work with a space in the path to testkjs
+
+        Reviewed by Alexey Proskuryakov.
+
+        * tests/mozilla/jsDriver.pl: Quote the path to the engine so that
+        spaces will be interpreted correctly.
+
+2008-05-28  Alexey Proskuryakov  <ap@webkit.org>
+
+        Fixed a misguiding comment - my measurement for negative numbers only included cases
+        where both operands were negative, which is not very interesting.
+
+        * VM/Machine.cpp:
+
+2008-05-28  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Maciej.
+
+        Based on a patch by Oliver Hunt.
+
+        https://bugs.webkit.org/show_bug.cgi?id=19180
+        speed up SunSpider by optimizing immediate number cases
+
+        1.4% speedup on SunSpider.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * kjs/JSImmediate.h:
+        (KJS::JSImmediate::incImmediateNumber):
+        (KJS::JSImmediate::decImmediateNumber):
+        Added fast paths for ++ and --.
+
+        (KJS::JSImmediate::canDoFastAdditiveOperations): Corrected a comment.
+
+2008-05-28  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        https://bugs.webkit.org/show_bug.cgi?id=19180
+        speed up SunSpider by optimizing immediate number cases
+
+        2% speedup overall, maximum 10% on controlflow-recursive and bitops-3bit-bits-in-byte,
+        but a 4% regression on bitops-bits-in-byte and bitops-bitwise-and.
+
+        * kjs/JSImmediate.h:
+        (KJS::JSImmediate::canDoFastAdditiveOperations):
+        (KJS::JSImmediate::addImmediateNumbers):
+        (KJS::JSImmediate::subImmediateNumbers):
+        Added fast cases that work with positive values less than 2^30.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): Use the above operations. Also updated SunSpider frequencies
+        with my results (looks like tag values have changed, not sure what caused the minor variation
+        in actual frequencies).
+
+2008-05-27  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
+        Remove code that appended Cygwin's /bin directory to PATH.
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj:
+        Prepend Cygwin's /bin directory to PATH. We prepend instead of append
+        so that Cygwin's utilities will win out over Win32 versions of the
+        same utilities (particularly perl). We do the prepend here instead of
+        in the Makefile because nmake doesn't seem to like prepending to PATH
+        inside the Makefile. This also matches the way WebCoreGenerated works.
+
+2008-05-27  Adam Roben  <aroben@apple.com>
+
+        Roll out r34163
+
+        A better fix is on the way.
+
+        * DerivedSources.make:
+        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
+
+2008-05-27  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        * DerivedSources.make: Don't generate the bytecode docs if
+        OMIT_BYTECODE_DOCS is set to 1.
+        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: Set
+        OMIT_BYTECODE_DOCS for production builds.
+
+2008-05-27  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Geoff and Maciej.
+
+        <rdar://problem/5806428> 
+        https://bugs.webkit.org/show_bug.cgi?id=17925
+        Crash in KJS::JSObject::put after setting this.__proto__
+
+        Set slotIsWriteable to false for __proto__, we want setting __proto__ to go through JSObject::put instead.
+        
+        * kjs/object.h:
+        (KJS::JSObject::getOwnPropertySlotForWrite):
+
+2008-05-27  Kevin Ollivier  <kevino@theolliviers.com>
+
+        wx build fixes to catch up with SquirrelFish, etc.
+
+        * JavaScriptCoreSources.bkl:
+        * jscore.bkl:
+        * wtf/Platform.h:
+
+2008-05-27  Darin Adler  <darin@apple.com>
+
+        Reviewed by Tim Hatcher.
+
+        - https://bugs.webkit.org/show_bug.cgi?id=19180
+          speed up SunSpider by optimizing immediate number cases
+
+        Add immediate number cases for the &, |, and ^ operators.
+        Makes standalone SunSpider 1.010x faster.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): Add areBothImmediateNumbers special cases
+        for the &, |, and ^ operators.
+
+        * kjs/JSImmediate.h:
+        (KJS::JSImmediate::xorImmediateNumbers): Added.
+        (KJS::JSImmediate::orImmediateNumbers): Added.
+
+2008-05-26  Stephanie Lewis  <slewis@apple.com>
+
+        Windows build fix. 
+
+        * kjs/testkjs.cpp:
+
+2008-05-26  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Anders.
+        
+        - make addStaticGlobals protected instead of private so subclasses can use it
+
+        * JavaScriptCore.exp:
+        * kjs/JSGlobalObject.h:
+
+2008-05-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        Fixed <rdar://problem/5960859> After an eval of a non-string or a syntax
+        error, all profile stack frames are incorrect
+        
+        SunSpider reports a .3% speedup, possibly because eval of a string is a
+        little more efficient now.
+
+        * VM/Machine.cpp:
+        (KJS::callEval): Make sure to call didExecute when returning early. I
+        simplified this function to remove one early return, making the job
+        of adding special code to early returns easier.
+
+        (KJS::Machine::execute): Use the new function ExecState when notifying
+        the profiler. (This doesn't change behavior now, but it might prevent
+        subtle errors in the future.)
+
+2008-05-23  Tor Arne Vestbø  <tavestbo@trolltech.com>
+
+        Reviewed by Simon.
+
+        Fixed toLower and toUpper implementations to allow being called
+        with a null result pointer and resultLength, to determine the
+        number of characters needed for the case conversion.
+
+        * wtf/unicode/qt4/UnicodeQt4.h:
+        (WTF::Unicode::toLower):
+        (WTF::Unicode::toUpper):
+
+2008-05-25  Alexey Proskuryakov  <ap@webkit.org>
+
+        Fixing a typo in the previous commit made as a last minute change.
+
+        * kjs/regexp_object.cpp:
+
+2008-05-24  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Changed regular expression matching result array to be lazily filled, because many callers
+        only care about it being non-null.
+
+        2% improvement on Acid3 test 26.
+
+        * kjs/array_instance.cpp: Added a void* member to ArrayStorage for ArrayInstance subclasses
+        to use.
+        * kjs/array_instance.h:
+        (KJS::ArrayInstance::lazyCreationData):
+        (KJS::ArrayInstance::setLazyCreationData):
+        Added methods to access it from subclasses.
+
+        * kjs/regexp_object.cpp:
+        (KJS::RegExpMatchesArray::RegExpMatchesArray):
+        (KJS::RegExpMatchesArray::getOwnPropertySlot):
+        (KJS::RegExpMatchesArray::put):
+        (KJS::RegExpMatchesArray::deleteProperty):
+        (KJS::RegExpMatchesArray::getPropertyNames):
+        (KJS::RegExpMatchesArray::fillArrayInstanceIfNeeded):
+        (KJS::RegExpMatchesArray::~RegExpMatchesArray):
+        (KJS::RegExpObjectImp::arrayOfMatches):
+        RegExpMatchesArray is a subclass of ArrayInstance that isn't filled until
+        accessed for the first time.
+
+2008-05-24  Alp Toker  <alp@nuanti.com>
+
+        Win32/gcc build fix. Remove MSVC assumption.
+
+        * wtf/TCSpinLock.h:
+        (TCMalloc_SlowLock):
+
+2008-05-24  Oleg Finkelshteyn <olegfink@gmail.com>
+
+        Rubber-stamped, tweaked and landed by Alexey.
+
+        Build fix for gcc 4.3.
+
+        * JavaScriptCore/kjs/testkjs.cpp:
+        * JavaScriptCore/VM/CodeBlock.cpp:
+        Add missing standard includes.
+
+2008-05-23  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Geoff.
+
+        <rdar://problem/5959886> REGRESSION: Assertion failure in JSImmediate::toString when loading GMail (19217)
+        
+        Change List to store a JSValue*** pointer + an offset instead of a JSValue** pointer to protect against the case where 
+        a register file changes while a list object points to its buffer.
+        
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * kjs/JSActivation.cpp:
+        (KJS::JSActivation::createArgumentsObject):
+        * kjs/list.cpp:
+        (KJS::List::getSlice):
+        * kjs/list.h:
+        (KJS::List::List):
+        (KJS::List::at):
+        (KJS::List::append):
+        (KJS::List::begin):
+        (KJS::List::end):
+        (KJS::List::buffer):
+
+2008-05-23  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Sam.
+
+        <rdar://problem/5960012> JSProfiler: Stack overflow if recursion is
+        too deep.
+        -Use a simple depth limit to restrict too deep of recursion.
+
+        * profiler/Profile.cpp:
+        (KJS::Profile::willExecute):
+        (KJS::Profile::didExecute):
+        * profiler/Profile.h:
+
+2008-05-23  Geoffrey Garen  <ggaren@apple.com>
+
+        Rolling back in r34085, with performance resolved.
+        
+        Apparently, passing the eval function to callEval gave GCC a hernia.
+
+        Reviewed by Darin Adler, Kevin McCullough, and Oliver Hunt.
+        
+        Fixed <rdar://problem/5959447> Crashes and incorrect reporting in the
+        JavaScript profiler
+
+        * VM/Machine.cpp:
+        (KJS::Machine::unwindCallFrame): Fixed incorrect reporting / a crash
+        when unwinding from inside eval and/or program code: detect the
+        difference, and do the right thing. Also, be sure to notify the profiler
+        *before* deref'ing the scope chain, since the profiler uses the scope chain.
+
+        (KJS::Machine::execute): Fixed incorrect reporting / crash when calling
+        a JS function re-entrently: Machine::execute(FunctionBodyNode*...)
+        should not invoke the didExecute hook, because op_ret already does that.
+        Also, use the new function's ExecState when calling out to the profiler.
+        (Not important now, but could have become a subtle bug later.)
+
+        (KJS::Machine::privateExecute): Fixed a hard to reproduce crash when
+        profiling JS functions: notify the profiler *before* deref'ing the scope
+        chain, since the profiler uses the scope chain.
+
+        * kjs/object.cpp:
+        (KJS::JSObject::call): Removed these hooks, because they are now unnecessary.
+
+        * profiler/Profile.cpp: Added a comment to explain a subtlety that only
+        Kevin and I understood previously. (Now, the whole world can understand!)
+
+        * profiler/Profiler.cpp:
+        (KJS::shouldExcludeFunction): Don't exclude .call and .apply. That was
+        a hack to fix bugs that no longer exist.
+
+        Finally, sped things up a little bit by changing the "Is the profiler
+        running?" check into an ASSERT, since we only call into the profiler
+        when it's running:
+
+        (KJS::Profiler::willExecute):
+        (KJS::Profiler::didExecute):
+
+2008-05-23  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        - fixed <rdar://problem/5957662> REGRESSION(r33943-r33980): Can't send email , attach file or save as draft from hotmail.com
+        
+        SunSpider reports no change.
+        
+        This is a reworking of r34073, which I rolled out because it caused
+        lots of crashes.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::CodeGenerator): Use removeDirect to nix old
+        properties whose names collide with new functions. (Don't use putWithAttributes
+        because that tries to write to the register file, which hasn't grown to
+        fit this program yet.)
+
+2008-05-23  Darin Adler  <darin@apple.com>
+
+        Reviewed by Mark Rowe.
+
+        As allocateNumber is used via jsNumberCell outside of JavaScriptCore,
+        we need to provide a non-inlined version of it to avoid creating a
+        weak external symbol.
+
+        * JavaScriptCore.exp:
+        * kjs/AllInOneFile.cpp:
+        * kjs/collector.cpp:
+        (KJS::Collector::allocate):
+        (KJS::Collector::allocateNumber):
+        * kjs/collector.h:
+        (KJS::Collector::allocate):
+        (KJS::Collector::inlineAllocateNumber):
+        * kjs/value.h:
+        (KJS::NumberImp::operator new):
+
+2008-05-23  Geoffrey Garen  <ggaren@apple.com>
+
+        Rolled out r34073 because it caused lots of layout test crashes.
+
+2008-05-23  Geoffrey Garen  <ggaren@apple.com>
+
+        Rolled out r34085 because it measured as a 7.6% performance regression.
+
+2008-05-23  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add the
+        profiler directory to the include path.
+
+2008-05-23  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Anders.
+
+        SQUIRRELFISH: JavaScript error messages are missing informative text
+
+        Partial fix.
+        Tidy up error messages, makes a couple of them provide slightly more info.
+        Inexplicably leads to a 1% SunSpider Progression.
+
+        * VM/ExceptionHelpers.cpp:
+        (KJS::createError):
+        (KJS::createInvalidParamError):
+        (KJS::createNotAConstructorError):
+        (KJS::createNotAFunctionError):
+        * VM/ExceptionHelpers.h:
+        * VM/Machine.cpp:
+        (KJS::isNotObject):
+
+2008-05-23  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Tim H.
+
+        Fix call stack reported by profiler when entering event handlers.
+
+        JSObject::call was arbitrarily notifying the profiler when it was
+        called, even if it was JS code, which notifies the profile on entry
+        in any case.
+
+        * kjs/object.cpp:
+        (KJS::JSObject::call):
+
+2008-05-16  Alp Toker  <alp@nuanti.com>
+
+        Build fix for gcc 3. Default constructor required in ExecState,
+        used by OldInterpreterExecState.
+
+        * kjs/ExecState.h:
+        (KJS::ExecState::ExecState):
+
+2008-05-23  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        Fix <rdar://problem/5954997> global-recursion-on-full-stack.html crashes under guardmalloc.
+
+        Growing the register file with uncheckedGrow from within Machine::execute is not safe as the
+        register file may be too close to its maximum size to grow successfully.  By using grow,
+        checking the result and throwing a stack overflow error we can avoid crashing.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+        * VM/RegisterFile.h: Remove the now-unused uncheckedGrow.
+
+2008-05-23  Oliver Hunt  <oliver@apple.com>
+
+        RS=Kevin McCullough
+
+        Remove JAVASCRIPT_PROFILER define
+
+        * VM/Machine.cpp:
+        (KJS::callEval):
+        (KJS::Machine::unwindCallFrame):
+        (KJS::Machine::execute):
+        (KJS::Machine::privateExecute):
+        * kjs/config.h:
+        * kjs/object.cpp:
+        (KJS::JSObject::call):
+
+2008-05-23  Oliver Hunt  <oliver@apple.com>
+
+       <rdar://problem/5951561> Turn on JavaScript Profiler
+
+        Reviewed by Kevin McCullough.
+
+        Flipped the switch on the profiler, rearranged how we
+        signal the the profiler is active so that calls aren't
+        needed in the general case.
+        
+        Also fixed the entry point for Machine::execute(FunctionBodyNode..)
+        to correctly indicate function exit.
+
+        Results in a 0.7-1.0% regression in SunSpider :-(
+
+        * VM/Machine.cpp:
+        (KJS::callEval):
+        (KJS::Machine::unwindCallFrame):
+        (KJS::Machine::execute):
+        (KJS::Machine::privateExecute):
+        * kjs/config.h:
+        * profiler/Profiler.cpp:
+        (KJS::Profiler::profiler):
+        (KJS::Profiler::startProfiling):
+        (KJS::Profiler::stopProfiling):
+        * profiler/Profiler.h:
+        (KJS::Profiler::enabledProfilerReference):
+
+2008-05-23  Simon Hausmann  <hausmann@webkit.org>
+
+        Fix the Qt build by adding profiler/ to the include search path.
+
+        * JavaScriptCore.pri:
+
+2008-05-22  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Adam.
+
+        Fix a bug in the profiler where time in the current function is given to
+        (idle).
+
+        * profiler/Profile.cpp:
+        (KJS::Profile::didExecute): Set the start time and then call didExecute
+        to calculate the time spent in this function.
+        * profiler/ProfileNode.cpp: Remove confusing calculations that are no
+        longer necessary.
+        (KJS::ProfileNode::insertNode):
+        * profiler/ProfileNode.h: Expose access to the start time to allow the
+        simpler time calculations above.
+        (KJS::ProfileNode::startTime):
+        (KJS::ProfileNode::setStartTime):
+
+2008-05-22  Adam Roben  <aroben@apple.com>
+
+        Show "(Function object)" instead of "(JSInpectorCallbackWrapper
+        object)" in profiles
+
+        Reviewed by Kevin McCullough.
+
+        * profiler/Profiler.cpp:
+        (KJS::createCallIdentifier): Use JSObject::className instead of
+        getting the class name from the ClassInfo directly. JSObject
+        subclasses can override className to provide a custom class name, and
+        it seems like we should honor that.
+
+2008-05-22  Timothy Hatcher  <timothy@apple.com>
+
+        Added Profile::restoreAll and added ProfileNode::restoreAll
+        to the export file.
+
+        Reviewed by Adam Roben.
+
+        * JavaScriptCore.exp:
+        * profiler/Profile.h:
+
+2008-05-22  Alp Toker  <alp@nuanti.com>
+
+        GTK+ build fix. Add JavaScriptCore/profiler to include path.
+
+        * GNUmakefile.am:
+
+2008-05-22  Adam Roben  <aroben@apple.com>
+
+        Implement sub-millisecond profiling on Windows
+
+        Reviewed by Kevin McCullough.
+
+        * profiler/ProfileNode.cpp:
+        (KJS::getCount): Added. On Windows, we use QueryPerformanceCounter. On
+        other platforms, we use getCurrentUTCTimeWithMicroseconds.
+        (KJS::ProfileNode::endAndRecordCall): Use getCount instead of
+        getCurrentUTCTimeWithMicroseconds.
+        (KJS::ProfileNode::startTimer): Ditto.
+
+2008-05-22  Adam Roben  <aroben@apple.com>
+
+        Fix a profiler assertion when calling a NodeList as a function
+
+        Reviewed by Kevin McCullough.
+
+        * profiler/Profiler.cpp:
+        (KJS::createCallIdentifier): Don't assert when a non-function object
+        is called as a function. Instead, build up a CallIdentifier using the
+        object's class name.
+
+2008-05-22  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Darin.
+
+        <rdar://problem/5951529> JSProfiler: Allow the profiler to "Exclude" a
+        profile node.
+        -Implement 'exclude'; where the excluded node attributes its time to its
+        parent's self time.
+
+        * JavaScriptCore.exp: Export the exclude function.
+        * profiler/Profile.h: 
+        (KJS::Profile::exclude):
+        * profiler/ProfileNode.cpp: 
+        (KJS::ProfileNode::setTreeVisible): New function that allows a change in
+        visiblitiy to be propogated to all the children of a node.
+        (KJS::ProfileNode::exclude): If the node matches the callIdentifier then
+        set the visiblity of this node and all of its children to false and
+        attribute it's total time to it's caller's self time.
+        * profiler/ProfileNode.h:
+
+2008-05-22  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        Fix access to static global variables in Windows release builds.
+
+        * kjs/JSGlobalObject.h: Don't store a reference to an Identifier
+        in GlobalPropertyInfo as the Identifier is likely to be a temporary
+        and therefore may be destroyed before the GlobalPropertyInfo.
+
+2008-05-22  Kevin McCullough  <kmccullough@apple.com>
+
+        Build fix.
+
+        * VM/Machine.cpp:
+        (KJS::callEval):
+
+2008-05-22  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Sam.
+
+        <rdar://problem/5951561> Turn on JavaScript Profiler
+        Get basic JS profiling working.
+        Even with this patch the profiler will not be compiled in because we do
+        not know the extend, if any, of the performance regression it would cause
+        when it is not in use. However with these changes, if the profiler were
+        on, it would not crash and show good profiling data.
+
+        * VM/Machine.cpp: Instrument the calls sites that are needed for profiling.
+        (KJS::callEval):
+        (KJS::Machine::unwindCallFrame):
+        (KJS::Machine::execute):
+        (KJS::Machine::privateExecute):
+        * kjs/function.cpp: Ditto.
+        (KJS::globalFuncEval):
+        * kjs/interpreter.cpp: Ditto.
+        (KJS::Interpreter::evaluate):
+        * profiler/Profile.cpp: 
+        (KJS::Profile::willExecute):
+        (KJS::Profile::didExecute): Because we do not get a good context when
+        startProfiling is called it is possible that m_currentNode will be at the
+        top of the known stack when a didExecute() is called.  What we then do is
+        create a new node that represents the function being exited and insert
+        it between the head and the currently known children, since they should
+        be children of this new node.
+        * profiler/ProfileNode.cpp:
+        (KJS::ProfileNode::ProfileNode):
+        (KJS::ProfileNode::willExecute): Rename the add function for consistency.
+        (KJS::ProfileNode::addChild): Appends the child to this node but also
+        sets the parent pointer of the children to this node.
+        (KJS::ProfileNode::insertNode): Insert a node between this node and its
+        children.  Also set the time for the new node since it is now exiting
+        and we don't really know when it started.
+        (KJS::ProfileNode::stopProfiling):
+        (KJS::ProfileNode::startTimer):
+        * profiler/ProfileNode.h:
+        (KJS::CallIdentifier::toString): Added for debugging.
+        (KJS::ProfileNode::setParent):
+        (KJS::ProfileNode::setSelfTime): Fixed an old bug where we set the
+        visibleTotalTime not the visibleSelfTime.
+        (KJS::ProfileNode::children):
+        (KJS::ProfileNode::toString): Added for debugging.
+        * profiler/Profiler.cpp: remove unecessary calls.
+        (KJS::Profiler::startProfiling):
+
+2008-05-22  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Oliver Hunt.
+
+        Rename register arguments for op_call, op_call_eval, op_end, and op_construct 
+        to document what they are for.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitCall):
+        (KJS::CodeGenerator::emitCallEval):
+        (KJS::CodeGenerator::emitEnd):
+        (KJS::CodeGenerator::emitConstruct):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-05-22  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Darin.
+
+        Bug 19116: SquirrelFish shouldn't regress on variable lookups
+        <https://bugs.webkit.org/show_bug.cgi?id=19116>
+
+        Last of the multiscope look up optimisations.  This is a wash overall on SunSpider
+        but is a factor of 5-10 improvement in multiscope read/write/modify (eg. ++, --, +=,
+        ... applied to any non-local var).
+
+        * kjs/nodes.cpp:
+        (KJS::PostIncResolveNode::emitCode):
+        (KJS::PostDecResolveNode::emitCode):
+        (KJS::PreIncResolveNode::emitCode):
+        (KJS::PreDecResolveNode::emitCode):
+        (KJS::ReadModifyResolveNode::emitCode):
+
+2008-05-22  David Kilzer  <ddkilzer@apple.com>
+
+        <rdar://problem/5954233> Add method to release free memory from FastMalloc
+
+        Patch suggested by Mark Rowe.  Rubber-stamped by Maciej.
+
+        * JavaScriptCore.exp: Export _releaseFastMallocFreeMemory.
+        * wtf/FastMalloc.cpp:
+        (WTF::TCMallocStats::): Added releaseFastMallocFreeMemory() for both
+        system malloc and FastMalloc code paths.
+        * wtf/FastMalloc.h: Define releaseFastMallocFreeMemory().
+
+2008-05-22  Oliver Hunt  <oliver@apple.com>
+
+        RS=Maciej.
+
+        Roll out r34020 as it causes recursion tests to fail.
+
+        * kjs/object.cpp:
+        (KJS::JSObject::call):
+
+2008-05-22  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Mark.
+
+        Don't leak the SymbolTable when compiling eval code.
+
+        * kjs/nodes.cpp:
+        (KJS::EvalNode::generateCode):
+
+2008-05-22  Simon Hausmann  <hausmann@webkit.org>
+
+        Reviewed by Oliver.
+
+        Qt build fix.
+
+        * JavaScriptCore.pri: Added DebuggerCallFrame to the build.
+        * VM/LabelID.h: Include limits.h for UINT_MAX.
+        * wtf/VectorTraits.h: Include memory for std::auto_ptr.
+
+2008-05-22  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Adam Roben.
+        
+        Removed the old recursion guard mechanism, since squirrelfish has its
+        own mechanism. Also removed some old JS call tracing code, since we
+        have other ways to do that, too.
+        
+        SunSpider reports no change.
+
+        * kjs/object.cpp:
+        (KJS::JSObject::call):
+
+2008-05-22  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - fixed <rdar://problem/5954979> crash on celtic kane JS benchmark
+
+        * kjs/nodes.cpp:
+        (KJS::WithNode::emitCode):
+        (KJS::TryNode::emitCode):
+
+2008-05-21  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Maciej and Geoff.
+
+        <rdar://problem/5951561> Turn on JavaScript Profiler
+        -As part of the effort to turn on the profiler it would be helpful if it
+        did not need ExecStates to represent the stack location of the currently
+        executing statement.
+        -We now create each node as necessary with a reference to the current
+        node and each node knows its parent so that the tree can be made without
+        the entire stack.
+
+        * profiler/Profile.cpp:
+        (KJS::Profile::Profile): The current node starts at the head.
+        (KJS::Profile::stopProfiling): The current node is cleared when profiling
+        stops.
+        (KJS::Profile::willExecute): The current node either adds a new child or
+        starts and returns a reference to an already existing child if the call
+        ID that is requested already exists.
+        (KJS::Profile::didExecute): The current node finishes and returns its
+        parent.
+        * profiler/Profile.h: Use a single callIdentifier instead of a vector
+        since we no longer use the whole stack.
+        * profiler/ProfileNode.cpp: Now profile nodes keep a reference to their
+        parent.
+        (KJS::ProfileNode::ProfileNode): Initialize the parent.
+        (KJS::ProfileNode::didExecute): Record the time and return the parent.
+        (KJS::ProfileNode::addOrStartChild): If the given callIdentifier is
+        already a child, start it and return it, otherwise create a new one and
+        return that.
+        (KJS::ProfileNode::stopProfiling): Same logic, just use the new function.
+        * profiler/ProfileNode.h: Utilize the parent.
+        (KJS::ProfileNode::create):
+        (KJS::ProfileNode::parent):
+        * profiler/Profiler.cpp: 
+        (KJS::Profiler::startProfiling): Here is the only place where the
+        ExecState is used to figure out where in the stack the profiler is
+        currently profiling.
+        (KJS::dispatchFunctionToProfiles): Only send one CallIdentifier instead
+        of a vector of them.
+        (KJS::Profiler::willExecute): Ditto.
+        (KJS::Profiler::didExecute): Ditto.
+        (KJS::createCallIdentifier): Create only one CallIdentifier.
+        (KJS::createCallIdentifierFromFunctionImp): Ditto.
+        * profiler/Profiler.h:
+
+2008-05-21  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - https://bugs.webkit.org/show_bug.cgi?id=19180
+          speed up the < operator for the case when both values are integers
+
+        Makes standalone SunSpider 1.022x faster.
+
+        * VM/Machine.cpp:
+        (KJS::jsLess): Add a special case for when both are numbers that fit in a JSImmediate.
+
+2008-05-21  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver and Sam.
+        
+        - fixed <rdar://problem/5815631> REGRESSION (r31239): Multiscope optimisation of function calls results in incorrect this value (breaks tvtv.de)
+        
+        Track global this value in the scope chain so we can retrieve it
+        efficiently but it follows lexical scope properly.
+
+        * kjs/ExecState.h:
+        (KJS::ExecState::globalThisValue):
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
+        * kjs/function_object.cpp:
+        (KJS::FunctionObjectImp::construct):
+        * kjs/scope_chain.h:
+        (KJS::ScopeChainNode::ScopeChainNode):
+        (KJS::ScopeChainNode::globalThisObject):
+        (KJS::ScopeChainNode::push):
+        (KJS::ScopeChain::ScopeChain):
+
+2008-05-21  Kevin McCullough  <kmccullough@apple.com>
+
+        Sadness :(
+
+        * kjs/config.h:
+
+2008-05-21  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Maciej.
+
+        <rdar://problem/5950867> JSProfiler: Allow the profiler to "Focus" a
+        profile node.
+        - This patch updatest the times of the visible nodes correctly, but to do
+        so, some of the design of the ProfileNode changed.
+
+        * JavaScriptCore.exp: export focus' symbol.
+        * profiler/Profile.cpp: ProfileNodes now take a reference to the head of
+        the profile tree to get up-to-date accurate total profile time.
+        (KJS::Profile::Profile): Pass 0 for the head node.
+        (KJS::Profile::stopProfiling): stopProfiling no longer needs the time
+        passed into it, since it can get it from the head and it does not need to
+        be told it is the head because it can figure it out on it's own.
+        (KJS::Profile::willExecute): Set the head node for each created node.
+        * profiler/Profile.h:
+        (KJS::Profile::focus): Instead of taking a CallIdentifier that the caller
+        would have to create, now focus() takes a ProfileNode that they should
+        already have a reference to and focus() can extract the CallIdentifier
+        from it.
+        * profiler/ProfileNode.cpp: Create actual and visible versions fo the
+        total and self times for focus and exclude.  Also add a head node
+        reference so that nodes can get information from their head.
+        (KJS::ProfileNode::ProfileNode):
+        (KJS::ProfileNode::stopProfiling): Rename the total and self time
+        variables and set the visual ones to the actual ones, so that without any
+        changes to the visual versions of these variables, their times will match
+        the actual times.
+        (KJS::ProfileNode::focus): Now focus() has a bool to force it's children
+        to be visible if this node is visible.  If this node does not match the
+        CallIdentifier being focused then the visibleTotalTime is only updated if
+        one or more of it's children is the CallIdentifier being focused. 
+        (KJS::ProfileNode::restoreAll): Restores all variables with respect to
+        the visible data in the ProfileNode.
+        (KJS::ProfileNode::endAndRecordCall): Name change.
+        (KJS::ProfileNode::debugPrintData): Dump the new variables.
+        (KJS::ProfileNode::debugPrintDataSampleStyle): Name change.
+        * profiler/ProfileNode.h: Use the new variables and reference to the head
+        node.
+        (KJS::ProfileNode::create):
+        (KJS::ProfileNode::totalTime):
+        (KJS::ProfileNode::setTotalTime):
+        (KJS::ProfileNode::selfTime):
+        (KJS::ProfileNode::setSelfTime):
+        (KJS::ProfileNode::totalPercent):
+        (KJS::ProfileNode::selfPercent):
+        (KJS::ProfileNode::setVisible):
+
+2008-05-21  Alp Toker  <alp@nuanti.com>
+
+        GTK+/UNIX testkjs build fix. Include signal.h.
+
+        * kjs/testkjs.cpp:
+
+2008-05-21  Oliver Hunt  <oliver@apple.com>
+
+        Yet more windows build fixes
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2008-05-21  Oliver Hunt  <oliver@apple.com>
+
+        Yet more windows build fixes
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2008-05-21  Alp Toker  <alp@nuanti.com>
+
+        GTK+ build fix. Add DebuggerCallFrame.cpp and take AllInOneFile.cpp
+        changes into account.
+
+        * GNUmakefile.am:
+
+2008-05-21  Oliver Hunt  <oliver@apple.com>
+
+        Add DebuggerCallFrame.{h,cpp} to the project file
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2008-05-21  Alp Toker  <alp@nuanti.com>
+
+        GTK+ port build fixes following squirrelfish merge r33979.
+
+        * GNUmakefile.am:
+
+2008-05-21  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Darin.
+        
+        - save a hash lookup wne writing to global properties
+        0.3% speedup on SunSpider, 7% on bitops-bitwise-and
+
+        * VM/Machine.cpp:
+        (KJS::resolveBase): Check for being a the end of the scope chain
+        before hash lookup.
+
+2008-05-21  Alp Toker  <alp@nuanti.com>
+
+        Rubber-stamped by Maciej.
+
+        Replace non-standard #pragma marks with comments to avoid compiler
+        warnings.
+
+        * profiler/ProfileNode.cpp:
+
+2008-05-21  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Mark Rowe.
+
+        Fix layout test failure in fast/dom/getter-on-window-object2 introduced in r33961.
+
+        * JavaScriptCore.exp:
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::defineGetter):
+        (KJS::JSGlobalObject::defineSetter):
+        * kjs/JSGlobalObject.h:
+
+=== End merge of squirrelfish ===
+
+2008-05-21  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Tim Hatcher.
+        
+        Merged with trunk WebCore's new debugger.
+
+        * kjs/DebuggerCallFrame.cpp:
+        (KJS::DebuggerCallFrame::evaluate): Changed this function to separate
+        the exception value from the return value. The WebKit debugger treats
+        them as one, but the WebCore debugger doesn't.
+
+        * kjs/DebuggerCallFrame.h:
+        (KJS::DebuggerCallFrame::dynamicGlobalObject): Added a new accessor for
+        the dynamic global object, since the debugger doesn't want the lexical
+        global object.
+
+2008-05-21  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 19116: SquirrelFish shouldn't regress on variable lookups
+        <https://bugs.webkit.org/show_bug.cgi?id=19116>
+
+        Optimise cross scope assignment, 0.4% progression in sunspider.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitPutScopedVar):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::AssignResolveNode::emitCode):
+
+2008-05-21  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - check property map before symbol table in JSGlobalObject::getOwnPropertySlot
+        0.5% speedup on SunSpider
+
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::getOwnPropertySlot): Check property map before symbol table
+        because symbol table access is likely to have been optimized.
+
+2008-05-21  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 19116: SquirrelFish shouldn't regress on variable lookups
+        <https://bugs.webkit.org/show_bug.cgi?id=19116>
+
+        Optimise multiscope lookup of statically resolvable function calls.
+        SunSpider reports a 1.5% improvement, including 37% on 
+        controlflow-recursive for some reason :D
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitResolve):
+        * VM/CodeGenerator.h:
+        * kjs/nodes.cpp:
+        (KJS::FunctionCallResolveNode::emitCode):
+
+2008-05-21  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - give JSGlobalObject a special version of getOwnPropertySlot that tells you if the slot is directly writable
+        (WebCore change using this is a 2.6% speedup on in-browser SunSpider).
+
+        * JavaScriptCore.exp:
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::getOwnPropertySlot):
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::symbolTableGet):
+        * kjs/object.h:
+        (KJS::JSObject::getDirectLocation):
+        (KJS::JSObject::getOwnPropertySlotForWrite):
+        * kjs/property_map.cpp:
+        (KJS::PropertyMap::getLocation):
+        * kjs/property_map.h:
+        * kjs/property_slot.h:
+        (KJS::PropertySlot::putValue):
+
+2008-05-20  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 19116: SquirrelFish shouldn't regress on variable lookups
+        <https://bugs.webkit.org/show_bug.cgi?id=19116>
+
+        This restores multiscope optimisation to simple resolve, producing
+        a 2.6% progression in SunSpider.  Have verified that none of the
+        sites broken by the multiscope optimisation in trunk were effected
+        by this change.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeBlock.h:
+        (KJS::CodeBlock::CodeBlock):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::findScopedProperty):
+        (KJS::CodeGenerator::emitResolve):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::resolve_n):
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/JSVariableObject.h:
+
+2008-05-20  Oliver Hunt  <oliver@apple.com>
+
+        Fixerate the windows build.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * VM/CodeGenerator.cpp:
+        * VM/RegisterFile.h:
+        * kjs/JSGlobalObject.h:
+        * kjs/Parser.cpp:
+        * kjs/interpreter.h:
+
+2008-05-20  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Bug 19110: SquirrelFish: Google Maps - no maps
+        <https://bugs.webkit.org/show_bug.cgi?id=19110>
+
+        Correct a comedy of errors present in my original patch to "fix"
+        exceptions occurring midway through pre and post increment. This
+        solution is cleaner than the original, doesn't need the additional
+        opcodes, and as an added benefit does not break Google Maps.
+
+        Sunspider reports a 0.4% progression.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::PreIncResolveNode::emitCode):
+        (KJS::PreDecResolveNode::emitCode):
+        (KJS::PreIncBracketNode::emitCode):
+        (KJS::PreDecBracketNode::emitCode):
+        (KJS::PreIncDotNode::emitCode):
+        (KJS::PreDecDotNode::emitCode):
+
+2008-05-20  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - inline JSGlobalObject::getOwnPropertySlot
+        1% improvement on in-browser SunSpider (a wash command-line)
+
+        * kjs/JSGlobalObject.cpp:
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::getOwnPropertySlot):
+
+2008-05-18  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 18752: SQUIRRELFISH: exceptions are not always handled by the vm
+        <https://bugs.webkit.org/show_bug.cgi?id=18752>
+
+        Handle exceptions thrown by toString conversion in subscript operators,
+        this should basically complete exception handling in SquirrelFish.
+
+        Sunspider reports no regression.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-05-17  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        [Reapplying patch with previously missing files from r33553 -- Oliver]
+
+        Behold: debugging.
+        
+        SunSpider reports no change.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj: Added DebuggerCallFrame.h/.cpp,
+        and created a debugger folder.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::generate): If the debugger is attached, always
+        generate full scope chains for its sake.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::unwindCallFrame): Notify the debugger when unwinding
+        due to an exception, so it doesn't keep stale call frames around.
+
+        (KJS::Machine::execute): Set Callee to 0 in eval frames, so the
+        debugger can distinguish them from function call frames.
+
+        (KJS::Machine::debug): Simplified this function, since the debugger
+        doesn't actually need all the information we used to provide.
+
+        (KJS::Machine::privateExecute): Treat debugging hooks like other function
+        calls, so the code we hook into (the debugger UI) can be optimized.
+
+        * kjs/debugger.cpp: Nixed these default callback implementations and
+        made the callbacks pure virtual instead, so the compiler could tell me
+        if I made a mistake in one of the subclasses.
+
+        * kjs/debugger.h: Removed a bunch of irrelevent data from the debugger
+        callbacks. Changed from passing an ExecState* to passing a
+        DebuggerCallFrame*, since an ExecState* doesn't contain sufficient
+        information anymore.
+
+        * kjs/function.cpp:
+        (KJS::globalFuncEval): Easiest bug fix evar!
+
+        [Previously missing files from r33553]
+        * kjs/DebuggerCallFrame.cpp: Copied from JavaScriptCore/profiler/FunctionCallProfile.h.
+        (KJS::DebuggerCallFrame::functionName):
+        (KJS::DebuggerCallFrame::thisObject):
+        (KJS::DebuggerCallFrame::evaluateScript):
+        * kjs/DebuggerCallFrame.h: Copied from JavaScriptCore/VM/Register.h.
+        (KJS::DebuggerCallFrame::DebuggerCallFrame):
+        (KJS::DebuggerCallFrame::scopeChain):
+        (KJS::DebuggerCallFrame::exception):
+
+2008-05-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Bug 18991: SquirrelFish: Major codegen issue in a.b=expr, a[b]=expr
+        <https://bugs.webkit.org/show_bug.cgi?id=18991>
+
+        Fix the last remaining blocking cases of this bug.
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::ReadModifyResolveNode::emitCode):
+
+2008-05-17  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Partial fix for:
+
+        Bug 18991: SquirrelFish: Major codegen issue in a.b=expr, a[b]=expr
+        <https://bugs.webkit.org/show_bug.cgi?id=18991>
+
+        Ensure that the code generated for assignments uses temporaries whenever
+        necessary. This patch covers the vast majority of situations, but there
+        are still a few left.
+
+        This patch also adds some missing cases to CodeBlock::dump().
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::destinationForAssignResult):
+        (KJS::CodeGenerator::leftHandSideNeedsCopy):
+        (KJS::CodeGenerator::emitNodeForLeftHandSide):
+        * kjs/NodeInfo.h:
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::AssignDotNode::emitCode):
+        (KJS::ReadModifyDotNode::emitCode):
+        (KJS::AssignBracketNode::emitCode):
+        (KJS::ReadModifyBracketNode::emitCode):
+        (KJS::ForInNode::ForInNode):
+        * kjs/nodes.h:
+        (KJS::ReadModifyResolveNode::):
+        (KJS::AssignResolveNode::):
+        (KJS::ReadModifyBracketNode::):
+        (KJS::AssignBracketNode::):
+        (KJS::AssignDotNode::):
+        (KJS::ReadModifyDotNode::):
+
+2008-05-17  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 19106: SquirrelFish: Activation is not marked correctly
+        <https://bugs.webkit.org/show_bug.cgi?id=19106>
+
+        We can't rely on the symbol table for a count of the number of globals
+        we need to mark as that misses duplicate parameters and 'this'.  Now we
+        use the actual local register count from the codeBlock.
+
+        * kjs/JSActivation.cpp:
+        (KJS::JSActivation::mark):
+
+2008-05-16  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Bug 19076: SquirrelFish: RegisterFile can be corrupted if implictly reenter global scope with no declared vars
+        <https://bugs.webkit.org/show_bug.cgi?id=19076>
+
+        Don't delay allocation of initial global RegisterFile, as we can't guarantee we will be able
+        to allocate the global 'this' register safely at any point after initialisation of the Global
+        Object.
+
+        Unfortunately this initial allocation caused a regression of 0.2-0.3%, however this patch adds
+        support for the static slot optimisation for the global Math object which brings it to a 0.3%
+        progression.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::programCodeThis):
+        (KJS::CodeGenerator::CodeGenerator):
+        (KJS::CodeGenerator::addParameter):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+        * kjs/ExecState.h:
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::reset):
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo):
+        (KJS::JSGlobalObject::addStaticGlobals):
+        * kjs/nodes.cpp:
+
+2008-05-16  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver Hunt.
+
+        Bug 19098: SquirrelFish: Ref'd temporaries can be clobbered
+        <https://bugs.webkit.org/show_bug.cgi?id=19098>
+
+        When doing code generation for a statement list, increase the reference
+        count on a register that might eventually be returned, so that it doesn't
+        get clobbered by a request for a new temporary.
+
+        * kjs/nodes.cpp:
+        (KJS::statementListEmitCode):
+
+2008-05-16  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - fixed Bug 19044: SquirrelFish: Bogus values enter evaluation when closing over scope with parameter and var with same name
+        https://bugs.webkit.org/show_bug.cgi?id=19044
+
+        * kjs/JSActivation.cpp:
+        (KJS::JSActivation::copyRegisters): Use numLocals from the code
+        block rather than the size of the symbol table for the number of
+        registers to copy, to account for duplicate parameters and vars
+        with the same name as parameters (we still have potentially
+        suboptimal codegen in that we allocate a local register for the
+        var in the latter case but it is never used).
+        
+2008-05-15  Geoffrey Garen  <ggaren@apple.com>
+
+        Not reviewed.
+        
+        We regret to inform you that your program is crashing because you were
+        stupid.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): Math is hard.
+
+2008-05-14  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        A little more debugger action: filled in op_debug. All debugger control
+        flow works now, but variable inspection and backtraces still don't.
+        
+        SunSpider reports no change.
+
+        * VM/CodeGenerator.cpp: Changed op_debug to accept line number parameters.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::getFunctionAndArguments): Moved op_debug into a
+        NEVER_INLINE function to avoid a stunning 10% performance regression.
+        Also factored out a common function for retrieving the function and 
+        arguments from a  call frame. 
+
+        * kjs/JSActivation.cpp:
+        (KJS::JSActivation::createArgumentsObject): Use the new factored out
+        function mentioned above.
+
+        * kjs/Parser.cpp:
+        (KJS::Parser::parse): Increment m_sourceId before assigning it, so the
+        sourceId we send to the debugger matches the sourceId recorded in the
+        node.
+
+        * kjs/nodes.cpp: Emit debugging hooks.
+
+2008-05-14  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 19024: SQUIRRELFISH: ASSERTION FAILED: activation->isActivationObject() in Machine::unwindCallFrame
+        <https://bugs.webkit.org/show_bug.cgi?id=19024>
+
+        This fixes a number of issues.  The most important is that we now check every register
+        file for tainting rather than just looking for function register files as that was
+        insufficient. Additionally guarded against implicit re-entry into Eval code.
+
+        Also added a few additional assertions to reduce the amout of time between something
+        going wrong and us seeing the error.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+        (KJS::Machine::privateExecute):
+        * VM/RegisterFile.cpp:
+        (KJS::RegisterFile::growBuffer):
+        (KJS::RegisterFile::addGlobalSlots):
+        * VM/RegisterFileStack.cpp:
+        (KJS::RegisterFileStack::pushGlobalRegisterFile):
+        (KJS::RegisterFileStack::pushFunctionRegisterFile):
+        * VM/RegisterFileStack.h:
+        (KJS::RegisterFileStack::inImplicitCall):
+
+2008-05-14  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        A little more debugger action: emit opcodes for debugger hooks. Right
+        now, the opcode implementation is just a stub.
+        
+        SunSpider reports no change.
+        
+        Some example codegen for "function f() { 1; }":
+
+            [   0] dbg         DidEnterCallFrame
+            [   2] dbg         WillExecuteStatement
+            [   4] load        tr0, 1(@k0)
+            [   7] load        tr0, undefined(@k1)
+            [  10] dbg         WillLeaveCallFrame
+            [  12] ret         tr0
+
+2008-05-14  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Bug 19025: SQUIRRELFISH: malformed syntax in onload handler causes crash
+        <https://bugs.webkit.org/show_bug.cgi?id=19025>
+
+        Simple fix -- move the use of functionBodyNode to after the null check.
+
+        * kjs/function_object.cpp:
+        (KJS::FunctionObjectImp::construct):
+
+2008-05-13  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Fixed a codegen crash with run-time parse errors.
+        
+        SunSpider reports no change.
+        
+        emitThrowError needs to return the temporary holding the error, not dst,
+        since dst may be NULL. In fact, emitThrowError shouldn't take a dst
+        parameter at all, since exceptions should not modify the destination
+        register.
+
+2008-05-13  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Bug 19027: SquirrelFish: Incorrect codegen for pre-increment
+        <https://bugs.webkit.org/show_bug.cgi?id=19027>
+
+        This fixes the codegen issues for the pre-inc/decrement operators
+        to prevent incorrectly clobbering the destination in the event of
+        an exception.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitPreInc):
+        (KJS::CodeGenerator::emitPreDec):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::PreIncResolveNode::emitCode):
+        (KJS::PreDecResolveNode::emitCode):
+        (KJS::PreIncBracketNode::emitCode):
+        (KJS::PreDecBracketNode::emitCode):
+        (KJS::PreIncDotNode::emitCode):
+        (KJS::PreDecDotNode::emitCode):
+
+2008-05-13  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        A little more debugger action: supply a real line number, sourceId,
+        and sourceURL in op_new_error.
+        
+        SunSpider reports a .2% speedup. Not sure what that's about.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): Use the new good stuff in op_new_error.
+
+        * kjs/nodes.cpp:
+        (KJS::RegExpNode::emitCode): Use the shared emitThrowError instead of
+        rolling our own.
+
+2008-05-13  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        A little more debugger action: implemented the exception callback.
+        
+        SunSpider reports a .2% speedup. Not sure what that's about.
+
+        * VM/CodeBlock.h: A little refactoring here. Store a pointer to our
+        owner ScopeNode so we can retrieve data from it. This allows us to
+        stop storing copies of the data ourselves. Also, store a "this" register
+        instead of a code type, since we were only using the code type to
+        calculate the "this" register.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::generate): Calculate the "this" register mentioned
+        above. Also, take care of removing "this" from the symbol table after
+        codegen is done, since relying on the timing of a destructor for correct
+        behavior is not so good.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::throwException): Invoke the debugger's exception callback.
+        (KJS::Machine::privateExecute): Use the "this" register mentioned above.
+
+2008-05-13  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Removed some unused exception machinery.
+        
+        SunSpider reports a .3% speedup.
+
+        * API/JSCallbackObject.h:
+        * API/JSCallbackObjectFunctions.h:
+        * JavaScriptCore.exp:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * kjs/internal.cpp:
+        * kjs/object.cpp:
+        * kjs/object.h:
+        * kjs/value.h:
+
+2008-05-13  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        A little more debugger action.
+
+        * kjs/debugger.cpp:
+        * kjs/debugger.h: Removed debuggersPresent because it was unused.
+        Replaced AttachedGlobalObject linked list with a HashSet because HashSet
+        is faster and simpler. Changed all functions to return void instead of
+        bool, because no clients ever return false, and we don't want to support
+        it.
+
+        * kjs/nodes.cpp: Did some up-keep to avoid build bustage.
+        (KJS::Node::handleException):
+        (KJS::BreakpointCheckStatement::execute):
+        (KJS::FunctionBodyNodeWithDebuggerHooks::execute):
+
+2008-05-13  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Darin.
+
+        Bug 18752: SQUIRRELFISH: exceptions are not always handled by the vm
+        <https://bugs.webkit.org/show_bug.cgi?id=18752>
+
+        Replace old attempt at "branchless" exceptions as the extra information
+        being passed made gcc an unhappy compiler, replacing these custom toNumber
+        calls with ordinary toNumber logic (by relying on toNumber now preventing
+        side effects after an exception has been thrown) provided sufficient leeway
+        to add the additional checks for the remaining unchecked cases.
+
+        This leaves only toString conversions in certain contexts as possibly
+        misbehaving.
+
+        * VM/Machine.cpp:
+        (KJS::jsAdd):
+        (KJS::resolve):
+        (KJS::resolveBaseAndProperty):
+        (KJS::resolveBaseAndFunc):
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/value.h:
+        (KJS::JSValue::safeGetNumber):
+
+2008-05-13  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        First steps toward supporting the debugger API: support the sourceParsed
+        callback; plus some minor fixups.
+
+        SunSpider reports no regression.
+
+        * VM/CodeGenerator.h: Removed a misleading comment.
+
+        * kjs/Parser.h: Changed the parser to take an ExecState*, so it can
+        implement the sourceParsed callback -- that way, we only have to
+        implement the callback in one place.
+
+        * kjs/debugger.cpp: Nixed DebuggerImp, because its sole purpose in life
+        was to demonstrate the misapplication of design patterns.
+
+        * kjs/debugger.h: Changed sourceParsed to take a SourceProvider, to
+        reduce copying, and not to return a value, because pausing execution
+        after parsing is complicated, and no clients needed that ability, anyway.
+
+        * kjs/grammar.y: Make sure never to pass a NULL SourceElements* to
+        didFinishParsing -- that simplifies some code down the road.
+        
+        * kjs/nodes.cpp: Don't generate special AST nodes just because the
+        debugger is attached -- that's a relic of the old AST execution model,
+        and those nodes haven't been maintained.
+
+2008-05-13  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Bug 18752: SQUIRRELFISH: exceptions are not always handled by the vm
+        <https://bugs.webkit.org/show_bug.cgi?id=18752>
+
+        First step: prevent incorrect evaluation of valueOf/toString conversion
+        in right hand side of expression after earlier conversion throws.
+
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::::toNumber):
+        * kjs/object.cpp:
+        (KJS::JSObject::defaultValue):
+
+2008-05-12  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Bug 18934: SQUIRRELFISH: ASSERT @ nytimes.com due to RegisterFile being clobbered
+        <https://bugs.webkit.org/show_bug.cgi?id=18934>
+
+        Unfortunately we cannot create new statically optimised globals if there are any
+        tainted RegisterFiles on the RegisterFileStack.  To handle this we re-introduce
+        (in a slightly cleaner form) the inImplicitCall concept to the RegisterFileStack.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+        * VM/RegisterFileStack.cpp:
+        (KJS::RegisterFileStack::pushFunctionRegisterFile):
+        * VM/RegisterFileStack.h:
+
+2008-05-12  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Introduced support for function.caller.
+        
+        Improved support for walking interesting scopes for function introspection.
+        
+        This fixes all remaining layout tests not blocked by rebasing to trunk.
+        
+        SunSpider reports no change.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::dumpRegisters): Fixed a spacing issue.
+
+2008-05-11  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Bug 18961: SQUIRRELFISH: Gmail doesn't load
+        <https://bugs.webkit.org/show_bug.cgi?id=18961>
+
+        Fix codegen for logical nodes so that they don't use their destination
+        as a temporary.
+
+        * kjs/nodes.cpp:
+        (KJS::LogicalAndNode::emitCode):
+        (KJS::LogicalOrNode::emitCode):
+
+2008-05-10  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+
+        - JavaScriptCore part of fix for: "SQUIRRELFISH: function toString broken after calling"
+        https://bugs.webkit.org/show_bug.cgi?id=18869
+       
+        Three layout tests are fixed:
+          fast/js/toString-elision-trailing-comma.html
+          fast/js/toString-prefix-postfix-preserve-parens.html
+          fast/js/kde/lval-exceptions.html
+        
+        Functions now save a shared subrange of the original source used
+        to make them (so in the common case this adds no storage above the
+        memory cache).
+        
+        * kjs/SourceProvider.h: Added.
+        (KJS::SourceProvider): New abstract base class for classes that provide on-demand access
+        to the source for a JavaScript program. This allows function objects to have access to their
+        original source without copying.
+        (KJS::UStringSourceProvider): SourceProvider subclass backed by a KJS::UString.
+        (KJS::UStringSourceProvider::create):
+        (KJS::UStringSourceProvider::getRange):
+        (KJS::UStringSourceProvider::data):
+        (KJS::UStringSourceProvider::length):
+        (KJS::UStringSourceProvider::UStringSourceProvider):
+        * kjs/SourceRange.h: Added.
+        (KJS::SourceRange::SourceRange): Class that holds a SourceProvider and a character range into
+        the source, to encapsulate on-demand access to the source of a function.
+        (KJS::SourceRange::toString):
+        * VM/Machine.cpp:
+        (KJS::eval): Pass a UStringSourceProvider to the parser.
+        * kjs/Parser.cpp:
+        (KJS::Parser::parse): Take a SourceProvider and pass it on to the lexer.
+        * kjs/Parser.h:
+        (KJS::Parser::parse): Take a SourceProvider.
+        * kjs/lexer.cpp:
+        (KJS::Lexer::setCode): Take a SourceProvider; keep it around, and
+        use it to get the raw buffer and length.
+        * kjs/lexer.h:
+        (KJS::Lexer::sourceRange): Convenience function to get a source
+        range based on the lexer's source provieder, and char offsets
+        right before and after the desired range.
+        * kjs/function.cpp:
+        (KJS::globalFuncEval): Pass a UStringSourceProvider to the parser.
+        * kjs/function_object.cpp:
+        (KJS::functionProtoFuncToString): Use toSourceString to get the source.
+        (KJS::FunctionObjectImp::construct): Give the parser a UStringSourceProvider.
+        * kjs/grammar.y: When parsing a function declaration, function
+        expression, or getter or setter, tell the function body about its
+        SourceRange.
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::checkSyntax): Pass a SourceProvider to the parser.
+        (KJS::Interpreter::evaluate): Pass a SourceProvider to the parser.
+        * kjs/interpreter.h:
+        * kjs/nodes.h:
+        (KJS::FunctionBodyNode::setSource): Establish a SourceRange for this function.
+        (KJS::FunctionBodyNode::toSourceString): Get the source string out
+        of the SourceRange.
+        (KJS::FuncExprNode::): Take a SourceRange and set it on the body.
+        (KJS::FuncDeclNode::): ditto
+        * kjs/testkjs.cpp:
+        (prettyPrintScript): Use a SourceProvider appropriately.
+        * JavaScriptCore.exp: Export new symbols.
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add new files.
+        * JavaScriptCore.xcodeproj/project.pbxproj: Add new files.
+
+2008-05-09  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bring back RegisterFile tainting in order to correctly handle
+        natively implemented getters and setters that re-enter JavaScript
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/RegisterFile.h:
+        * kjs/function.cpp:
+        (KJS::FunctionImp::callAsFunction):
+        * kjs/object.cpp:
+        (KJS::JSObject::put):
+        (KJS::tryGetAndCallProperty):
+        * kjs/property_slot.cpp:
+        (KJS::PropertySlot::functionGetter):
+
+2008-05-09  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - track character offsets of open and close braces, in preparation for saving function source
+        
+        I verified that there is no performance regression from this change.
+
+        * kjs/grammar.y:
+        * kjs/lexer.cpp:
+        (KJS::Lexer::lex):
+        (KJS::Lexer::matchPunctuator):
+        * kjs/lexer.h:
+
+2008-05-09  Oliver Hunt  <oliver@apple.com>
+
+        Debug build fix
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::restoreLocalStorage):
+
+2008-05-09  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Build fixes for SquirrelFish on windows.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
+        * VM/Register.h:
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::restoreLocalStorage):
+        * kjs/collector.cpp:
+        (KJS::Collector::allocate):
+        (KJS::Collector::allocateNumber):
+        * kjs/collector.h:
+        (KJS::Collector::allocate):
+        (KJS::Collector::allocateNumber):
+        * kjs/property_slot.cpp:
+
+2008-05-08  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff.
+        
+        - fix activation tearoff in the case where functions are called with too many arguments
+        
+        Fixes:
+        fast/canvas/patternfill-repeat.html
+        fast/dom/SelectorAPI/bug-17313.html
+
+        * VM/Machine.cpp:
+        (KJS::slideRegisterWindowForCall):
+        (KJS::scopeChainForCall):
+        (KJS::Machine::execute):
+        (KJS::Machine::privateExecute):
+
+2008-05-08  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Fixed failure in fast/canvas/canvas-pattern-behaviour.html.
+        
+        SunSpider reports a small speedup. Not sure what that's about.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump): Fixed op_call_eval to dump as "op_call_eval".
+        This helped me while debugging.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::unwindCallFrame): When looking for an activation to tear
+        off, don't use the scope chain. Inside eval, the scope chain doesn't
+        belong to us; it belongs to our calling function.
+        
+        Also, don't use the needsFullScopeChain flag to decide whether to tear
+        off the activation. "function.arguments" can create an activation
+        for a function whose needsFullScopeChain flag is set to false.
+
+2008-05-08  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - fix function.call for calls of more than 8 arguments
+        
+        Fixes svg/carto.net/button.svg
+
+        * kjs/list.cpp:
+        (KJS::List::getSlice): properly set up the m_buffer of the target list.
+
+2008-05-08  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - don't return a null RegisterID from RegExpNode in the exception case, since the caller may need a real register
+
+        Fixes:
+        - fast/regex/early-acid3-86.html
+        - http/tests/misc/acid3.html
+        
+        * kjs/nodes.cpp:
+        (KJS::RegExpNode::emitCode):
+
+2008-05-07  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Fix a performance regression caused by the introduction of property
+        attributes to SymbolTable in r32859 by encoding the attributes and the
+        register index into a single field of SymbolTableEntry.
+
+        This leaves Node::optimizeVariableAccess() definitely broken, although
+        it was probably not entirely correct in SquirrelFish before this change.
+
+        * VM/CodeBlock.h:
+        (KJS::missingThisObjectMarker):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::addVar):
+        (KJS::CodeGenerator::CodeGenerator):
+        (KJS::CodeGenerator::registerForLocal):
+        (KJS::CodeGenerator::registerForLocalConstInit):
+        (KJS::CodeGenerator::isLocalConstant):
+        (KJS::CodeGenerator::addConstant):
+        (KJS::CodeGenerator::emitCall):
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::IdentifierMapIndexHashTraits::emptyValue):
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::saveLocalStorage):
+        * kjs/JSVariableObject.cpp:
+        (KJS::JSVariableObject::getPropertyNames):
+        (KJS::JSVariableObject::getPropertyAttributes):
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::symbolTableGet):
+        (KJS::JSVariableObject::symbolTablePut):
+        (KJS::JSVariableObject::symbolTablePutWithAttributes):
+        * kjs/SymbolTable.h:
+        (KJS::SymbolTableEntry::SymbolTableEntry):
+        (KJS::SymbolTableEntry::isEmpty):
+        (KJS::SymbolTableEntry::getIndex):
+        (KJS::SymbolTableEntry::getAttributes):
+        (KJS::SymbolTableEntry::setAttributes):
+        (KJS::SymbolTableEntry::isReadOnly):
+        * kjs/nodes.cpp:
+        (KJS::getSymbolTableEntry):
+        (KJS::PostIncResolveNode::optimizeVariableAccess):
+        (KJS::PostDecResolveNode::optimizeVariableAccess):
+        (KJS::DeleteResolveNode::optimizeVariableAccess):
+        (KJS::TypeOfResolveNode::optimizeVariableAccess):
+        (KJS::PreIncResolveNode::optimizeVariableAccess):
+        (KJS::PreDecResolveNode::optimizeVariableAccess):
+        (KJS::ReadModifyResolveNode::optimizeVariableAccess):
+        (KJS::AssignResolveNode::optimizeVariableAccess):
+        (KJS::ProgramNode::initializeSymbolTable):
+
+2008-05-06  Maciej Stachowiak  <mjs@apple.com>
+
+        Rubber stamped by Oliver.
+        
+        - add missing ! in an assert that I failed to reverse
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::CodeGenerator):
+
+2008-05-06  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - fixed "SQUIRRELFISH: window.this shows up as a property, but it shouldn't"
+        https://bugs.webkit.org/show_bug.cgi?id=18868
+        
+        The basic approach is to have "this" only be present in the symbol
+        table at compile time, not runtime.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::~CodeGenerator): Remove "this" from symbol table.
+        (KJS::CodeGenerator::CodeGenerator): Add "this" back when re-using
+        a symbol table.
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::execute): Don't assert that "this" is in the symbol table.
+
+2008-05-06  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Trivial support for function.arguments: Currently, we only support
+        function.arguments from within the scope of function.
+        
+        This fixes the remaining Mozilla JS test failures.
+        
+        SunSpider reports no change.
+
+        * JavaScriptCore.exp:
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): Separated scope chain deref from
+        activation register copying: since it is now possible for client code
+        to create an activation on behalf of a function that otherwise wouldn't
+        need one, having an activation no longer necessarily means that you need
+        to deref the scope chain.
+        
+        (KJS::Machine::getCallFrame): For now, this function only examines the
+        current scope. Walking parent scopes requires some refactoring in the
+        way we track execution stacks.
+
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::ExecState): We use a negative call frame offset to
+        indicate that a given scope is not a function call scope.
+        
+2008-05-05  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Fix call frame set up for native -> JS function calls.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+
+2008-05-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Fixed ecma_3/Object/8.6.2.6-001.js, and similar bugs.
+        
+        SunSpider reports a .4% speedup. Not sure what that's about.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): Check for exception return from equal,
+        since toPrimitive can throw.
+
+        * kjs/operations.cpp:
+        (KJS::strictEqual): In response to an error I made in an earlier version
+        of this patch, I changed strictEqual to make clear the fact that it
+        performs no conversions and can't throw, making it slightly more efficient
+        in the process.
+
+2008-05-05  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - fix some dumb mistakes in my last patch
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitPushScope):
+        (KJS::CodeGenerator::emitGetPropertyNames):
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-05-05  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - document opcodes relating to jumps, scopes, and property name iteration
+        
+        Documented jmp, jtrue, false, push_scope, pop_scope, get_pnames,
+        next_pname and jmp_scopes.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitJump):
+        (KJS::CodeGenerator::emitJumpIfTrue):
+        (KJS::CodeGenerator::emitJumpIfFalse):
+        (KJS::CodeGenerator::emitPushScope):
+        (KJS::CodeGenerator::emitNextPropertyName):
+        (KJS::CodeGenerator::emitGetPropertyNames):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * kjs/nodes.cpp:
+        (KJS::LogicalAndNode::emitCode):
+        (KJS::LogicalOrNode::emitCode):
+        (KJS::ConditionalNode::emitCode):
+        (KJS::IfNode::emitCode):
+        (KJS::IfElseNode::emitCode):
+        (KJS::DoWhileNode::emitCode):
+        (KJS::WhileNode::emitCode):
+        (KJS::ForNode::emitCode):
+        (KJS::ForInNode::emitCode):
+        (KJS::WithNode::emitCode):
+
+2008-05-05  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Bug 18749: SQUIRRELFISH: const support is broken
+        <https://bugs.webkit.org/show_bug.cgi?id=18749>
+
+        Adds support for const during code generation.
+
+        Fixes 2 layout tests.
+
+        * ChangeLog:
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::addVar):
+        (KJS::CodeGenerator::CodeGenerator):
+        (KJS::CodeGenerator::isLocalConstant):
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::addVar):
+        * kjs/nodes.cpp:
+        (KJS::PostIncResolveNode::emitCode):
+        (KJS::PostDecResolveNode::emitCode):
+        (KJS::PreIncResolveNode::emitCode):
+        (KJS::PreDecResolveNode::emitCode):
+        (KJS::ReadModifyResolveNode::emitCode):
+        (KJS::AssignResolveNode::emitCode):
+
+2008-05-04  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff.
+        
+        - document some more opcodes (and fix argument names)
+        
+        Added docs for eq, neq, stricteq, nstriceq, less and lesseq.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitEqual):
+        (KJS::CodeGenerator::emitNotEqual):
+        (KJS::CodeGenerator::emitStrictEqual):
+        (KJS::CodeGenerator::emitNotStrictEqual):
+        (KJS::CodeGenerator::emitLess):
+        (KJS::CodeGenerator::emitLessEq):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * kjs/nodes.cpp:
+        (KJS::LessNode::emitCode):
+        (KJS::GreaterNode::emitCode):
+        (KJS::LessEqNode::emitCode):
+        (KJS::GreaterEqNode::emitCode):
+        (KJS::EqualNode::emitCode):
+        (KJS::NotEqualNode::emitCode):
+        (KJS::StrictEqualNode::emitCode):
+        (KJS::NotStrictEqualNode::emitCode):
+        (KJS::CaseBlockNode::emitCodeForBlock):
+
+2008-05-04  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        More scaffolding for f.arguments.
+        
+        Track the offset of the last call frame in the ExecState, so we can
+        produce a backtrace at any time.
+        
+        Also, record numLocals, the sum of numVars + numParameters, in each code
+        block, to make updates to the ExecState a little cheaper than they
+        would be otherwise.
+        
+        We now use numLocals in a bunch of places where we used to calculate
+        numVars + numParameters or -numVars - numParameters.
+        
+        Reports are mixed, but all in all, this seems to be a wash on SunSpider.
+
+2008-05-04  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Whoops, correctly handle properties that don't exist in the 
+        symbol table.
+
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::symbolTablePutWithAttributes):
+
+2008-05-04  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Add attribute information to SymbolTable as ground work for
+        various DontEnum and ReadOnly issues.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::addVar):
+        (KJS::CodeGenerator::CodeGenerator):
+        (KJS::CodeGenerator::registerForLocal):
+        (KJS::CodeGenerator::registerForLocalConstInit):
+        (KJS::CodeGenerator::addConstant):
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::saveLocalStorage):
+        * kjs/JSVariableObject.cpp:
+        (KJS::JSVariableObject::getPropertyNames):
+        (KJS::JSVariableObject::getPropertyAttributes):
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::symbolTablePut):
+        (KJS::JSVariableObject::symbolTablePutWithAttributes):
+        * kjs/SymbolTable.h:
+        (KJS::SymbolTableEntry::SymbolTableEntry):
+        (KJS::SymbolTableIndexHashTraits::emptyValue):
+        * kjs/nodes.cpp:
+        (KJS::getSymbolTableEntry):
+        (KJS::ReadModifyResolveNode::optimizeVariableAccess):
+        (KJS::AssignResolveNode::optimizeVariableAccess):
+        (KJS::ProgramNode::initializeSymbolTable):
+
+2008-05-04  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        More scaffolding for f.arguments.
+        
+        Store the register file associated with an ExecState in the ExecState.
+        
+        SunSpider reports no change.
+
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Moved
+        registerFileStack above globalExec, so it gets initialized first.
+        Removed remnants of old activation scheme.
+
+2008-05-04  Maciej Stachowiak  <mjs@apple.com>
+
+        Rubber stamped by Oliver.
+        
+        - renamed a few opcodes and fixed assembly formatting to accomodate the longest opcode
+        
+        equal --> eq
+        nequal --> neq
+        resolve_base_and_property --> resolve_with_base
+        resolve_base_and_func --> resolve_func
+        get_prop_id --> get_by_id
+        put_prop_id --> put_by_id
+        delete_prop_id --> del_by_id
+        get_prop_val --> get_by_val
+        put_prop_val --> put_by_val
+        delete_prop_val --> del_by_val
+        put_prop_index --> put_by_index
+        
+        * VM/CodeBlock.cpp:
+        (KJS::printUnaryOp):
+        (KJS::printBinaryOp):
+        (KJS::printConditionalJump):
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitEqual):
+        (KJS::CodeGenerator::emitNotEqual):
+        (KJS::CodeGenerator::emitResolveWithBase):
+        (KJS::CodeGenerator::emitResolveFunction):
+        (KJS::CodeGenerator::emitGetById):
+        (KJS::CodeGenerator::emitPutById):
+        (KJS::CodeGenerator::emitDeleteById):
+        (KJS::CodeGenerator::emitGetByVal):
+        (KJS::CodeGenerator::emitPutByVal):
+        (KJS::CodeGenerator::emitDeleteByVal):
+        (KJS::CodeGenerator::emitPutByIndex):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::ArrayNode::emitCode):
+        (KJS::PropertyListNode::emitCode):
+        (KJS::BracketAccessorNode::emitCode):
+        (KJS::DotAccessorNode::emitCode):
+        (KJS::EvalFunctionCallNode::emitCode):
+        (KJS::FunctionCallResolveNode::emitCode):
+        (KJS::FunctionCallBracketNode::emitCode):
+        (KJS::FunctionCallDotNode::emitCode):
+        (KJS::PostIncResolveNode::emitCode):
+        (KJS::PostDecResolveNode::emitCode):
+        (KJS::PostIncBracketNode::emitCode):
+        (KJS::PostDecBracketNode::emitCode):
+        (KJS::PostIncDotNode::emitCode):
+        (KJS::PostDecDotNode::emitCode):
+        (KJS::DeleteResolveNode::emitCode):
+        (KJS::DeleteBracketNode::emitCode):
+        (KJS::DeleteDotNode::emitCode):
+        (KJS::TypeOfResolveNode::emitCode):
+        (KJS::PreIncResolveNode::emitCode):
+        (KJS::PreDecResolveNode::emitCode):
+        (KJS::PreIncBracketNode::emitCode):
+        (KJS::PreDecBracketNode::emitCode):
+        (KJS::PreIncDotNode::emitCode):
+        (KJS::PreDecDotNode::emitCode):
+        (KJS::ReadModifyResolveNode::emitCode):
+        (KJS::AssignResolveNode::emitCode):
+        (KJS::AssignDotNode::emitCode):
+        (KJS::ReadModifyDotNode::emitCode):
+        (KJS::AssignBracketNode::emitCode):
+        (KJS::ReadModifyBracketNode::emitCode):
+        (KJS::ConstDeclNode::emitCodeSingle):
+        (KJS::ForInNode::emitCode):
+        (KJS::TryNode::emitCode):
+
+2008-05-04  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Fix assertion when accessing arguments object with too many arguments provided
+
+        The arguments constructor was assuming that the register offset given for argv
+        was an absolute offset into the registerfile, rather than the offset from the
+        frame.  This patches corrects that issue.
+
+        * kjs/JSActivation.cpp:
+        (KJS::JSActivation::createArgumentsObject):
+
+2008-05-04  Geoffrey Garen  <ggaren@apple.com>
+
+        Rubber stamped by Sam Weinig.
+        
+        Cleaned up Machine.cpp according to our style guidelines: moved static
+        data to the top of the file; moved stand-alone functions below that;
+        moved the Machine constructor above other Machine member functions.
+
+2008-05-03  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Sam.
+        
+        - fix accidental breakage from last patch
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-05-03  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff.
+        
+        - a bunch more opcode documentation and corresponding parameter name fixes
+
+        I renamed a few opcodes:
+        
+        type_of --> typeof (that's what the JS operator is named)
+        instance_of --> instanceof (ditto)
+        create_error --> new_error (for consistency with other new_* opcodes)
+        
+        I documented the following opcodes:
+        
+        - load
+        - new_object
+        - new_array
+        - new_regexp
+        - mov
+        - pre_inc
+        - pre_dec
+        - post_inc
+        - post_dec
+        - to_jsnumber
+        - negate
+        - bitnot
+        - not
+        - instanceof
+        - typeof
+        - in
+        - new_func
+        - new_funcexp
+        - new_error
+
+        I also fixed formatting on some existing opcode docs.
+        
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitMove):
+        (KJS::CodeGenerator::emitNot):
+        (KJS::CodeGenerator::emitPreInc):
+        (KJS::CodeGenerator::emitPreDec):
+        (KJS::CodeGenerator::emitPostInc):
+        (KJS::CodeGenerator::emitPostDec):
+        (KJS::CodeGenerator::emitToJSNumber):
+        (KJS::CodeGenerator::emitNegate):
+        (KJS::CodeGenerator::emitBitNot):
+        (KJS::CodeGenerator::emitInstanceOf):
+        (KJS::CodeGenerator::emitTypeOf):
+        (KJS::CodeGenerator::emitIn):
+        (KJS::CodeGenerator::emitLoad):
+        (KJS::CodeGenerator::emitNewObject):
+        (KJS::CodeGenerator::emitNewArray):
+        (KJS::CodeGenerator::emitNewRegExp):
+        (KJS::CodeGenerator::emitNewError):
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::scopeDepth):
+        (KJS::CodeGenerator::addVar):
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::Node::emitThrowError):
+        (KJS::RegExpNode::emitCode):
+        (KJS::TypeOfValueNode::emitCode):
+        (KJS::UnaryPlusNode::emitCode):
+        (KJS::NegateNode::emitCode):
+        (KJS::BitwiseNotNode::emitCode):
+        (KJS::LogicalNotNode::emitCode):
+        (KJS::InstanceOfNode::emitCode):
+        (KJS::InNode::emitCode):
+
+2008-05-03  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff and Sam.
+        
+        - generate HTML bytecode docs at build time
+
+        * DerivedSources.make:
+        * docs: Added.
+        * docs/make-bytecode-docs.pl: Added.
+
+2008-05-03  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Update ExecState::m_scopeChain when switching scope chains inside the
+        machine.
+        
+        This fixes uses of lexicalGlobalObject, such as, in a subframe
+
+            alert(top.makeArray() instanceof Array ? "FAIL" : "PASS");
+        
+        and a bunch of the security failures listed in
+        https://bugs.webkit.org/show_bug.cgi?id=18870. (Those tests still fail,
+        seemingly because of regressions in exception messages).
+        
+        SunSpider reports no change.
+
+        * VM/Machine.cpp: Factored out scope chain updating into a common
+        function that takes care to update ExecState::m_scopeChain, too.
+
+        * kjs/ExecState.h: I made Machine a friend of ExecState so that Machine
+        could update ExecState::m_scopeChain, even though that value is
+        read-only for everyone else.
+
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Changed
+        this client to be a little friendlier to ExecState's internal
+        storage type for scope chain data.
+
+2008-05-03  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Fixed https://bugs.webkit.org/show_bug.cgi?id=18876
+        Squirrelfish: ScopeChainNode leak in op_jmp_scopes.
+        
+        SunSpider reports no change.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): Don't construct a ScopeChain object,
+        since the direct threaded interpreter will goto across its destructor.
+
+2008-05-03  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        A bit more efficient fix than r32832: Don't copy globals into function
+        register files; instead, have the RegisterFileStack track only the base
+        of the last *global* register file, so the global object's register
+        references stay good.
+        
+        SunSpider reports a .3% speedup. Not sure what that's about.
+
+2008-05-03  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 18864: SquirrelFish: Support getter and setter definition in object literals
+        <https://bugs.webkit.org/show_bug.cgi?id=18864>
+
+        Add new opcodes to allow us to add getters and setters to an object.  These are
+        only used by the codegen for object literals.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitPutGetter):
+        (KJS::CodeGenerator::emitPutSetter):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::PropertyListNode::emitCode):
+
+2008-05-02  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - properly copy globals into and out of implicit call register
+        files, otherwise they will fail at global lookup
+
+        Fixes fast/js/array-tostring-and-join.html layout test.
+        
+        * VM/RegisterFileStack.cpp:
+        (KJS::RegisterFileStack::pushGlobalRegisterFile):
+        (KJS::RegisterFileStack::popGlobalRegisterFile):
+        (KJS::RegisterFileStack::pushFunctionRegisterFile):
+        (KJS::RegisterFileStack::popFunctionRegisterFile):
+
+2008-05-02  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Fixed https://bugs.webkit.org/show_bug.cgi?id=18822
+        SQUIRRELFISH: incorrect eval used in some cases
+        
+        Changed all code inside the machine to fetch the lexical global object
+        directly from the scope chain, instead of from the ExecState.
+        
+        Clients who fetch the lexical global object through the ExecState
+        still don't work.
+        
+        SunSpider reports no change.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): Fetch the lexical global object from
+        the scope chain.
+        
+        * kjs/ExecState.h:
+        (KJS::ExecState::ExecState::lexicalGlobalObject): Moved the logic for
+        this function into ScopeChainNode, but kept this function around to
+        support existing clients.
+
+2008-05-02  Geoffrey Garen  <ggaren@apple.com>
+
+        Rubber stamped by Oliver Hunt.
+        
+        Removed ExecState.cpp from AllInOneFile.cpp, for a .2% speedup.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/AllInOneFile.cpp:
+
+2008-05-01  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff and Maciej.
+
+        Bug 18827: SquirrelFish: Prevent getters and setters from destroying the current RegisterFile
+        <https://bugs.webkit.org/show_bug.cgi?id=18827>
+
+        Remove safe/unsafe RegisterFile concept, and instead just add additional
+        logic to ensure we always push/pop RegisterFiles when executing getters
+        and setters, similar to the logic for valueOf and toString.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/RegisterFile.h:
+        * kjs/function.cpp:
+        (KJS::FunctionImp::callAsFunction):
+        * kjs/object.cpp:
+        (KJS::JSObject::put):
+        * kjs/property_slot.cpp:
+        (KJS::PropertySlot::functionGetter):
+
+2008-05-01  Oliver Hunt  <oliver@apple.com>
+
+        RS=Geoff
+
+        Rename unsafeForReentry to safeForReentry to avoid double negatives.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/RegisterFile.h:
+        * kjs/function.cpp:
+        (KJS::FunctionImp::callAsFunction):
+
+2008-05-01  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 18827: SquirrelFish: Prevent getters and setters from destroying the current RegisterFile
+        <https://bugs.webkit.org/show_bug.cgi?id=18827>
+        
+        This patch makes getters and setters work.  It does this by
+        tracking whether the RegisterFile is "safe", that is whether
+        the interpreter is in a state that in which it can handle
+        the RegisterFile being reallocated.
+
+        * VM/Machine.cpp:
+        (KJS::resolve):
+        (KJS::Machine::privateExecute):
+        * VM/RegisterFile.h:
+        * kjs/function.cpp:
+        (KJS::FunctionImp::callAsFunction):
+
+2008-04-30  Geoffrey Garen  <ggaren@apple.com>
+
+        Release build fix: Always compile in "isGlobalObject", since it's
+        listed in our .exp file.
+
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::isGlobalObject):
+        * kjs/ExecState.h:
+
+2008-04-30  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Minor code restructuring to prepare for getters and setters, 
+        also helps exception semantics a bit.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-04-30  Geoffrey Garen  <ggaren@apple.com>
+
+        Fixed tyop.
+
+        * kjs/ExecState.h:
+
+2008-04-30  Geoffrey Garen  <ggaren@apple.com>
+
+        Debug build fix: export a missing symbol.
+
+        * JavaScriptCore.exp:
+
+2008-04-30  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        A little more ExecState refactoring: Now, only the global object creates
+        an ExecState.
+        
+        Also inlined ExecState::lexicalGlobalObject().
+        
+        SunSpider reports no change.
+
+2008-04-30  Geoffrey Garen  <ggaren@apple.com>
+
+        WebCore build fix: forward-declare ScopeChain.
+
+        * kjs/interpreter.h:
+
+2008-04-30  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix for JavaScriptGlue: export a missing symbol.
+
+        * JavaScriptCore.exp:
+
+2008-04-30  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Removed a lot of unused bits from ExecState, moving them into
+        OldInterpreterExecState, the fake scaffolding class.
+        
+        The clutter was making it hard to see the forest from the trees.
+        
+        .4% SunSpider speedup, probably because ExecState::lexicalGlobalObject()
+        is faster now.
+
+2008-04-29  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 18643: SQUIRRELFISH: need to support implicit function calls (valueOf, toString, getters/setters)
+        <https://bugs.webkit.org/show_bug.cgi?id=18643>
+
+        Prevent static slot optimisation for new variables and functions in
+        globally re-entrant code called from an an implicit function call.
+
+        This is necessary to prevent us from needing to resize the global
+        slot portion of the root RegisterFile during an implicit (and hence
+        unguarded) function call.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::CodeGenerator):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+        * VM/RegisterFile.h:
+        * VM/RegisterFileStack.cpp:
+        (KJS::RegisterFileStack::pushGlobalRegisterFile):
+        (KJS::RegisterFileStack::popGlobalRegisterFile):
+        (KJS::RegisterFileStack::pushFunctionRegisterFile):
+        (KJS::RegisterFileStack::popFunctionRegisterFile):
+        * VM/RegisterFileStack.h:
+        (KJS::RegisterFileStack::inImplicitFunctionCall):
+        (KJS::RegisterFileStack::lastGlobal):
+        * kjs/nodes.cpp:
+        (KJS::ProgramNode::generateCode):
+        * kjs/nodes.h:
+        (KJS::ProgramNode::):
+
+2008-04-29  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        In nested program code, don't propogate "this" back to the parent
+        register file. ("this" should remain constant in the parent register
+        file, regardless of the scripts it invokes.)
+
+        * VM/RegisterFile.cpp:
+        (KJS::RegisterFile::copyGlobals):
+
+2008-04-28  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Restore base pointer when popping a global RegisterFile
+
+        * VM/RegisterFileStack.cpp:
+        (KJS::RegisterFileStack::popGlobalRegisterFile):
+
+2008-04-28  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Bug 18643: SQUIRRELFISH: need to support implicit function calls (valueOf, toString, getters/setters)
+        <https://bugs.webkit.org/show_bug.cgi?id=18643>
+
+        Partial fix.  This results in all implicit calls to toString or valueOf
+        executing in a separate RegisterFile, so ensuring that the the pointers
+        in the triggering interpreter don't get trashed.  This still leaves the
+        task of preventing new global re-entry from toString and valueOf from
+        clobbering the RegisterFile.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+        * VM/RegisterFileStack.cpp:
+        (KJS::RegisterFileStack::pushFunctionRegisterFile):
+        (KJS::RegisterFileStack::popFunctionRegisterFile):
+        * VM/RegisterFileStack.h:
+        * kjs/object.cpp:
+        (KJS::tryGetAndCallProperty):
+
+2008-04-28  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Simplified activation object a bit: No need to store the callee
+        in the activation object -- we can pull it out of the call frame
+        when needed, instead.
+        
+        SunSpider reports no change.
+
+2008-04-28  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        RS by Oliver Hunt on moving JSArguments.cpp out of AllInOneFile.cpp.
+
+        Substantially more handling of "arguments": "arguments" works fully
+        now, but "f.arguments" still doesn't work.
+
+        Fixes 10 regression tests.
+        
+        SunSpider reports no regression.
+
+        * kjs/JSActivation.cpp:
+        (KJS::JSActivation::createArgumentsObject): Reconstruct an arguments
+        List to pass to the arguments object constructor.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/AllInOneFile.cpp: Removed JSActivation.cpp from AllInOneFile.cpp
+        because that seems to make GCC happy. (Previously, I had added
+        JSActivation.cpp to AllInOneFile.cpp because *that* seemed to make GCC
+        happy. So it goes.)
+
+2008-04-28  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Groundwork for more handling of "arguments". I'm not checking in the
+        actual handling of "arguments" yet, because it still needs a little
+        fiddling to avoid a performance regression.
+        
+        SunSpider reports no change.
+
+        * VM/Machine.cpp:
+        (KJS::initializeCallFrame): Put argc in the register file, so the
+        arguments object can find it later, to determine arguments.length.
+
+        * kjs/nodes.h:
+        (KJS::FunctionBodyNode::): Added a special code accessor for when you
+        know the code has already been generated, and you don't have a scopeChain
+        to supply for potential code generation. (This is the case when the
+        activation object creates the arguments object.)
+
+2008-04-28  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Replace unsafe use of auto_ptr in Vector with manual memory
+        management.
+
+        * VM/RegisterFileStack.cpp:
+        (KJS::RegisterFileStack::~RegisterFileStack):
+        (KJS::RegisterFileStack::popRegisterFile):
+        * VM/RegisterFileStack.h:
+
+2008-04-27  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Bug 18746: SQUIRRELFISH: indirect eval used when direct eval should be used
+        <https://bugs.webkit.org/show_bug.cgi?id=18746>
+
+        Change the base to the correct value of the 'this' object after the direct
+        eval test instead of before.
+
+        Fixes 5 layout tests.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * kjs/nodes.cpp:
+        (KJS::EvalFunctionCallNode::emitCode):
+
+2008-04-26  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - document all property getting, setting and deleting opcodes
+        
+        (And fix function parameter names to match corresponding opcode parameter names.)
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitResolve):
+        (KJS::CodeGenerator::emitResolveBase):
+        (KJS::CodeGenerator::emitResolveBaseAndProperty):
+        (KJS::CodeGenerator::emitResolveBaseAndFunc):
+        (KJS::CodeGenerator::emitGetPropId):
+        (KJS::CodeGenerator::emitPutPropId):
+        (KJS::CodeGenerator::emitDeletePropId):
+        (KJS::CodeGenerator::emitPutPropVal):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::resolve):
+        (KJS::resolveBase):
+        (KJS::resolveBaseAndProperty):
+        (KJS::resolveBaseAndFunc):
+        (KJS::Machine::privateExecute):
+        * kjs/nodes.cpp:
+        (KJS::ResolveNode::emitCode):
+        (KJS::ArrayNode::emitCode):
+        (KJS::PropertyListNode::emitCode):
+        (KJS::BracketAccessorNode::emitCode):
+        (KJS::EvalFunctionCallNode::emitCode):
+        (KJS::FunctionCallResolveNode::emitCode):
+        (KJS::FunctionCallBracketNode::emitCode):
+        (KJS::PostIncResolveNode::emitCode):
+        (KJS::PostDecResolveNode::emitCode):
+        (KJS::PostIncBracketNode::emitCode):
+        (KJS::PostDecBracketNode::emitCode):
+        (KJS::PostIncDotNode::emitCode):
+        (KJS::PostDecDotNode::emitCode):
+        (KJS::DeleteResolveNode::emitCode):
+        (KJS::TypeOfResolveNode::emitCode):
+        (KJS::PreIncResolveNode::emitCode):
+        (KJS::PreDecResolveNode::emitCode):
+        (KJS::PreIncBracketNode::emitCode):
+        (KJS::PreDecBracketNode::emitCode):
+        (KJS::AssignResolveNode::emitCode):
+        (KJS::AssignDotNode::emitCode):
+        (KJS::ReadModifyDotNode::emitCode):
+        (KJS::AssignBracketNode::emitCode):
+        (KJS::ReadModifyBracketNode::emitCode):
+        (KJS::ConstDeclNode::emitCodeSingle):
+
+2008-04-26  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 18628: SQUIRRELFISH: need to support recursion limit
+        <https://bugs.webkit.org/show_bug.cgi?id=18628>
+
+        Basically completes recursion limiting.  There is still some
+        tuning we may want to do to make things better in the face of
+        very bad code, but certainly nothing worse than anything already
+        possible in trunk.
+
+        Also fixes a WebKit test by fixing the exception text :D
+
+        * JavaScriptCore.exp:
+        * VM/ExceptionHelpers.cpp:
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+        * VM/RegisterFile.cpp:
+        (KJS::RegisterFile::growBuffer):
+        (KJS::RegisterFile::addGlobalSlots):
+        * VM/RegisterFile.h:
+        (KJS::RegisterFile::grow):
+        (KJS::RegisterFile::uncheckedGrow):
+        * VM/RegisterFileStack.cpp:
+        (KJS::RegisterFileStack::pushRegisterFile):
+        * VM/RegisterFileStack.h:
+
+2008-04-25  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Bug 18628: SQUIRRELFISH: need to support recursion limit
+        <https://bugs.webkit.org/show_bug.cgi?id=18628>
+
+        Put a limit on the level of reentry recursion.  128 levels of re-entrant recursion
+        seems reasonable as it is greater than the old eval limit, and a long way short of
+        the reentry depth needed to overflow the stack.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+        * VM/Machine.h:
+
+2008-04-25  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        A tiny bit of cleanup to the regexp code.
+        
+        Removed some static_cast.
+        
+        Removed createRegExpImp because it's no longer used.
+
+2008-04-25  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 18736: SQUIRRELFISH: switch statements with no default have incorrect codegen
+        <https://bugs.webkit.org/show_bug.cgi?id=18736>
+
+        Ensure the "default" target is correct in the absence of an explicit default handler.
+
+        * kjs/nodes.cpp:
+        (KJS::CaseBlockNode::emitCodeForBlock):
+
+2008-04-25  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 18628: SQUIRRELFISH: need to support recursion limit
+        <https://bugs.webkit.org/show_bug.cgi?id=18628>
+
+        More bounds checking.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+        * VM/RegisterFile.cpp:
+        (KJS::RegisterFile::growBuffer):
+        * VM/RegisterFile.h:
+
+2008-04-25  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - fix signal catching magic
+        
+        The signal handlers are restored to _exit but are only set when
+        running under run-javascriptcore-tests. fprintf from a signal
+        handler is not safe.
+
+        * kjs/testkjs.cpp:
+        (main):
+        (parseArguments):
+        * tests/mozilla/jsDriver.pl:
+
+2008-04-25  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Bug 18732: SQUIRRELFISH: exceptions thrown by native constructors are ignored
+        <https://bugs.webkit.org/show_bug.cgi?id=18732>
+
+        Fixes another regression test.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-04-25  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Bug 18728: SQUIRRELFISH: invalid regular expression constants should throw exceptions
+        <https://bugs.webkit.org/show_bug.cgi?id=18728>
+
+        Fixes another regression test.
+
+        * kjs/nodes.cpp:
+        (KJS::RegExpNode::emitCode):
+
+2008-04-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Geoffrey Garen.
+
+        Bug 18735: SQUIRRELFISH: closures are sometimes given an incorrect 'this' value when called
+        <https://bugs.webkit.org/show_bug.cgi?id=18735>
+
+        The overloaded toThisObject method was not copied over to JSActivation.
+
+        Fixes two regression tests.
+
+        * kjs/JSActivation.cpp:
+        (KJS::JSActivation::toThisObject):
+        * kjs/JSActivation.h:
+
+2008-04-24  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Added support for arguments.callee.
+
+2008-04-24  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 18628: SQUIRRELFISH: need to support recursion limit
+        <https://bugs.webkit.org/show_bug.cgi?id=18628>
+
+        Partial fix -- this gets us some of the required bounds checking, but not
+        complete coverage.  But it does manage to do them without regressing :D
+
+        * VM/ExceptionHelpers.cpp:
+        (KJS::createError):
+        (KJS::createStackOverflowError):
+        * VM/ExceptionHelpers.h:
+        * VM/Machine.cpp:
+        (KJS::slideRegisterWindowForCall):
+        (KJS::Machine::execute):
+        (KJS::Machine::privateExecute):
+        * VM/RegisterFile.cpp:
+        * VM/RegisterFile.h:
+        (KJS::RegisterFile::):
+        (KJS::RegisterFile::RegisterFile):
+        (KJS::RegisterFile::grow):
+
+2008-04-24  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        A tiny bit more handling of "arguments": create a real, but mostly
+        hollow, arguments object.
+        
+        Fixes 2 regression tests.
+
+2008-04-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Bug 18717: SQUIRRELFISH: eval returns the wrong value for a variable declaration statement
+        <https://bugs.webkit.org/show_bug.cgi?id=18717>
+
+        Fixes a regression test, but exposes the failure of another due to the
+        lack of getters and setters.
+
+        * kjs/nodes.cpp:
+        (KJS::ConstDeclNode::emitCodeSingle):
+        (KJS::ConstDeclNode::emitCode):
+        (KJS::ConstStatementNode::emitCode):
+        (KJS::VarStatementNode::emitCode):
+        * kjs/nodes.h:
+
+2008-04-24  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Print a CRASH statement when crashing, so test failures are not a
+        mystery.
+
+        * kjs/testkjs.cpp:
+        (handleCrash):
+        (main):
+
+2008-04-24  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Geoffrey Garen.
+
+        Bug 18716: SQUIRRELFISH: typeof should return undefined for an undefined variable reference
+        <https://bugs.webkit.org/show_bug.cgi?id=18716>
+
+        This fixes 2 more regression tests.
+
+        * kjs/nodes.cpp:
+        (KJS::TypeOfResolveNode::emitCode):
+
+2008-04-24  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Put the callee in the call frame.
+        
+        Necessary in order to support "arguments" and "arguments.callee".
+
+        Also fixes a latent GC bug, where an executing function could be
+        subject to GC if the register holding it were overwritten. Here's
+        an example that would have caused problems:
+        
+        function f()
+        {
+            // Flood the machine stack to eliminate any old pointers to f.
+            g.call({});
+            
+            // Overwrite f in the register file.
+            f = 1;
+
+            // Force a GC.
+            for (var i = 0; i < 5000; ++i) {
+                ({});
+            }
+            
+            // Welcome to crash-ville.
+        }
+
+        function g()
+        {
+        }
+
+        f();
+
+        * VM/Machine.h: Changed the order of arguments to
+        execute(FunctionBodyNode*...) to match the other execute functions.
+        * kjs/function.cpp: Updated to match new argument requirements from
+        execute(FunctionBodyNode*...). Renamed newObj to thisObj to match the
+        rest of JavaScriptCore.
+
+        SunSpider reports no change.
+
+2008-04-23  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Bug 18707: SQUIRRELFISH: eval always performs toString() on its argument
+        <https://bugs.webkit.org/show_bug.cgi?id=18707>
+
+        This fixes 4 more regression tests.
+
+        * VM/Machine.cpp:
+        (KJS::eval):
+
+2008-04-23  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - fix logic bug in SegmentedVector::grow which would sometimes fail to resize a segment when needed
+        
+        Fixes 3 JSC tests.
+
+        * VM/SegmentedVector.h:
+        (KJS::SegmentedVector::grow):
+
+2008-04-23  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Degenerate handling of "arguments" as a property of the activation
+        object. Currently, we just return a vanilla object.
+        
+        SunSpider reports no change.
+
+        Fixes:
+
+        ecma_3/Function/regress-94506.js.
+        
+        Reveals to have been secretly broken:
+
+        ecma_3/Function/15.3.4.3-1.js
+        ecma_3/Function/15.3.4.4-1.js
+        
+        These tests were passing incorrectly. testkjs creates a global array
+        named "arguments" to hold command-line arguments. That array was
+        tricking these tests into thinking that an arguments object with length
+        0 had been created. Since our new vanilla object shadows the global
+        property named arguments, that object no longer fools these tests into
+        passing.
+        
+        Net change: +1 failing test.
+
+        * kjs/AllInOneFile.cpp: Had to put JSActivation.cpp into AllInOneFile.cpp
+        to solve a surprising 8.6% regression in bitops-3bit-bits-in-byte.
+
+2008-04-23  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - save and restore callFrame
+
+        * VM/Machine.cpp:
+        (KJS::slideRegisterWindowForCall):
+        (KJS::Machine::execute):
+        (KJS::Machine::privateExecute):
+        * kjs/testkjs.cpp:
+        (main):
+
+2008-04-23  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Fixed scopes for named function expressions.
+        
+        Fixes one regression test.
+        
+        Two changes here:
+        
+        (1) The function's name is supposed to have attributes DontDelete,
+        ReadOnly, regardless of the type of code executing.
+        
+        (2) Push the name object on the function's scope chain, rather than
+        the ExecState's scope chain because, well, that's where it belongs.
+
+2008-04-23  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Inlined JSObject::putDirect, for a .4% SunSpider speedup.
+        
+        I did this as a first step toward removing nodes.cpp from
+        AllInOneFile.cpp, but I'm putting that larger project aside for now.
+
+2008-04-23  Maciej Stachowiak  <mjs@apple.com>
+
+        Rubber stamped by Geoff.
+        
+        - add OldInterpreterExecState class and use it in dead code
+        
+        This will allow removing things from the real ExecState class
+        without having to figure out how to remove all this code without
+        getting a perf regression.
+
+        * kjs/nodes.cpp:
+        (KJS::ExpressionNode::evaluateToNumber):
+        (KJS::ExpressionNode::evaluateToBoolean):
+        (KJS::ExpressionNode::evaluateToInt32):
+        (KJS::ExpressionNode::evaluateToUInt32):
+        (KJS::Node::setErrorCompletion):
+        (KJS::Node::throwError):
+        (KJS::Node::throwUndefinedVariableError):
+        (KJS::Node::handleException):
+        (KJS::Node::rethrowException):
+        (KJS::BreakpointCheckStatement::execute):
+        (KJS::BreakpointCheckStatement::optimizeVariableAccess):
+        (KJS::NullNode::evaluate):
+        (KJS::FalseNode::evaluate):
+        (KJS::TrueNode::evaluate):
+        (KJS::NumberNode::evaluate):
+        (KJS::NumberNode::evaluateToNumber):
+        (KJS::NumberNode::evaluateToBoolean):
+        (KJS::NumberNode::evaluateToInt32):
+        (KJS::NumberNode::evaluateToUInt32):
+        (KJS::ImmediateNumberNode::evaluate):
+        (KJS::ImmediateNumberNode::evaluateToInt32):
+        (KJS::ImmediateNumberNode::evaluateToUInt32):
+        (KJS::StringNode::evaluate):
+        (KJS::StringNode::evaluateToNumber):
+        (KJS::StringNode::evaluateToBoolean):
+        (KJS::RegExpNode::evaluate):
+        (KJS::ThisNode::evaluate):
+        (KJS::ResolveNode::inlineEvaluate):
+        (KJS::ResolveNode::evaluate):
+        (KJS::ResolveNode::evaluateToNumber):
+        (KJS::ResolveNode::evaluateToBoolean):
+        (KJS::ResolveNode::evaluateToInt32):
+        (KJS::ResolveNode::evaluateToUInt32):
+        (KJS::getSymbolTableEntry):
+        (KJS::ResolveNode::optimizeVariableAccess):
+        (KJS::LocalVarAccessNode::inlineEvaluate):
+        (KJS::LocalVarAccessNode::evaluate):
+        (KJS::LocalVarAccessNode::evaluateToNumber):
+        (KJS::LocalVarAccessNode::evaluateToBoolean):
+        (KJS::LocalVarAccessNode::evaluateToInt32):
+        (KJS::LocalVarAccessNode::evaluateToUInt32):
+        (KJS::getNonLocalSymbol):
+        (KJS::ScopedVarAccessNode::inlineEvaluate):
+        (KJS::ScopedVarAccessNode::evaluate):
+        (KJS::ScopedVarAccessNode::evaluateToNumber):
+        (KJS::ScopedVarAccessNode::evaluateToBoolean):
+        (KJS::ScopedVarAccessNode::evaluateToInt32):
+        (KJS::ScopedVarAccessNode::evaluateToUInt32):
+        (KJS::NonLocalVarAccessNode::inlineEvaluate):
+        (KJS::NonLocalVarAccessNode::evaluate):
+        (KJS::NonLocalVarAccessNode::evaluateToNumber):
+        (KJS::NonLocalVarAccessNode::evaluateToBoolean):
+        (KJS::NonLocalVarAccessNode::evaluateToInt32):
+        (KJS::NonLocalVarAccessNode::evaluateToUInt32):
+        (KJS::ElementNode::optimizeVariableAccess):
+        (KJS::ElementNode::evaluate):
+        (KJS::ArrayNode::optimizeVariableAccess):
+        (KJS::ArrayNode::evaluate):
+        (KJS::ObjectLiteralNode::optimizeVariableAccess):
+        (KJS::ObjectLiteralNode::evaluate):
+        (KJS::PropertyListNode::optimizeVariableAccess):
+        (KJS::PropertyListNode::evaluate):
+        (KJS::PropertyNode::optimizeVariableAccess):
+        (KJS::PropertyNode::evaluate):
+        (KJS::BracketAccessorNode::optimizeVariableAccess):
+        (KJS::BracketAccessorNode::inlineEvaluate):
+        (KJS::BracketAccessorNode::evaluate):
+        (KJS::BracketAccessorNode::evaluateToNumber):
+        (KJS::BracketAccessorNode::evaluateToBoolean):
+        (KJS::BracketAccessorNode::evaluateToInt32):
+        (KJS::BracketAccessorNode::evaluateToUInt32):
+        (KJS::DotAccessorNode::optimizeVariableAccess):
+        (KJS::DotAccessorNode::inlineEvaluate):
+        (KJS::DotAccessorNode::evaluate):
+        (KJS::DotAccessorNode::evaluateToNumber):
+        (KJS::DotAccessorNode::evaluateToBoolean):
+        (KJS::DotAccessorNode::evaluateToInt32):
+        (KJS::DotAccessorNode::evaluateToUInt32):
+        (KJS::ArgumentListNode::optimizeVariableAccess):
+        (KJS::ArgumentListNode::evaluateList):
+        (KJS::ArgumentsNode::optimizeVariableAccess):
+        (KJS::NewExprNode::optimizeVariableAccess):
+        (KJS::NewExprNode::inlineEvaluate):
+        (KJS::NewExprNode::evaluate):
+        (KJS::NewExprNode::evaluateToNumber):
+        (KJS::NewExprNode::evaluateToBoolean):
+        (KJS::NewExprNode::evaluateToInt32):
+        (KJS::NewExprNode::evaluateToUInt32):
+        (KJS::ExpressionNode::resolveAndCall):
+        (KJS::EvalFunctionCallNode::optimizeVariableAccess):
+        (KJS::EvalFunctionCallNode::evaluate):
+        (KJS::FunctionCallValueNode::optimizeVariableAccess):
+        (KJS::FunctionCallValueNode::evaluate):
+        (KJS::FunctionCallResolveNode::optimizeVariableAccess):
+        (KJS::FunctionCallResolveNode::inlineEvaluate):
+        (KJS::FunctionCallResolveNode::evaluate):
+        (KJS::FunctionCallResolveNode::evaluateToNumber):
+        (KJS::FunctionCallResolveNode::evaluateToBoolean):
+        (KJS::FunctionCallResolveNode::evaluateToInt32):
+        (KJS::FunctionCallResolveNode::evaluateToUInt32):
+        (KJS::LocalVarFunctionCallNode::inlineEvaluate):
+        (KJS::LocalVarFunctionCallNode::evaluate):
+        (KJS::LocalVarFunctionCallNode::evaluateToNumber):
+        (KJS::LocalVarFunctionCallNode::evaluateToBoolean):
+        (KJS::LocalVarFunctionCallNode::evaluateToInt32):
+        (KJS::LocalVarFunctionCallNode::evaluateToUInt32):
+        (KJS::ScopedVarFunctionCallNode::inlineEvaluate):
+        (KJS::ScopedVarFunctionCallNode::evaluate):
+        (KJS::ScopedVarFunctionCallNode::evaluateToNumber):
+        (KJS::ScopedVarFunctionCallNode::evaluateToBoolean):
+        (KJS::ScopedVarFunctionCallNode::evaluateToInt32):
+        (KJS::ScopedVarFunctionCallNode::evaluateToUInt32):
+        (KJS::NonLocalVarFunctionCallNode::inlineEvaluate):
+        (KJS::NonLocalVarFunctionCallNode::evaluate):
+        (KJS::NonLocalVarFunctionCallNode::evaluateToNumber):
+        (KJS::NonLocalVarFunctionCallNode::evaluateToBoolean):
+        (KJS::NonLocalVarFunctionCallNode::evaluateToInt32):
+        (KJS::NonLocalVarFunctionCallNode::evaluateToUInt32):
+        (KJS::FunctionCallBracketNode::optimizeVariableAccess):
+        (KJS::FunctionCallBracketNode::evaluate):
+        (KJS::FunctionCallDotNode::optimizeVariableAccess):
+        (KJS::FunctionCallDotNode::inlineEvaluate):
+        (KJS::FunctionCallDotNode::evaluate):
+        (KJS::FunctionCallDotNode::evaluateToNumber):
+        (KJS::FunctionCallDotNode::evaluateToBoolean):
+        (KJS::FunctionCallDotNode::evaluateToInt32):
+        (KJS::FunctionCallDotNode::evaluateToUInt32):
+        (KJS::PostIncResolveNode::optimizeVariableAccess):
+        (KJS::PostIncResolveNode::evaluate):
+        (KJS::PostIncLocalVarNode::evaluate):
+        (KJS::PostDecResolveNode::optimizeVariableAccess):
+        (KJS::PostDecResolveNode::evaluate):
+        (KJS::PostDecLocalVarNode::evaluate):
+        (KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
+        (KJS::PostDecLocalVarNode::evaluateToNumber):
+        (KJS::PostDecLocalVarNode::evaluateToBoolean):
+        (KJS::PostDecLocalVarNode::evaluateToInt32):
+        (KJS::PostDecLocalVarNode::evaluateToUInt32):
+        (KJS::PostfixBracketNode::optimizeVariableAccess):
+        (KJS::PostIncBracketNode::evaluate):
+        (KJS::PostDecBracketNode::evaluate):
+        (KJS::PostfixDotNode::optimizeVariableAccess):
+        (KJS::PostIncDotNode::evaluate):
+        (KJS::PostDecDotNode::evaluate):
+        (KJS::PostfixErrorNode::evaluate):
+        (KJS::DeleteResolveNode::optimizeVariableAccess):
+        (KJS::DeleteResolveNode::evaluate):
+        (KJS::LocalVarDeleteNode::evaluate):
+        (KJS::DeleteBracketNode::optimizeVariableAccess):
+        (KJS::DeleteBracketNode::evaluate):
+        (KJS::DeleteDotNode::optimizeVariableAccess):
+        (KJS::DeleteDotNode::evaluate):
+        (KJS::DeleteValueNode::optimizeVariableAccess):
+        (KJS::DeleteValueNode::evaluate):
+        (KJS::VoidNode::optimizeVariableAccess):
+        (KJS::VoidNode::evaluate):
+        (KJS::TypeOfValueNode::optimizeVariableAccess):
+        (KJS::TypeOfResolveNode::optimizeVariableAccess):
+        (KJS::LocalVarTypeOfNode::evaluate):
+        (KJS::TypeOfResolveNode::evaluate):
+        (KJS::TypeOfValueNode::evaluate):
+        (KJS::PreIncResolveNode::optimizeVariableAccess):
+        (KJS::PreIncLocalVarNode::evaluate):
+        (KJS::PreIncResolveNode::evaluate):
+        (KJS::PreDecResolveNode::optimizeVariableAccess):
+        (KJS::PreDecLocalVarNode::evaluate):
+        (KJS::PreDecResolveNode::evaluate):
+        (KJS::PreIncConstNode::evaluate):
+        (KJS::PreDecConstNode::evaluate):
+        (KJS::PostIncConstNode::evaluate):
+        (KJS::PostDecConstNode::evaluate):
+        (KJS::PrefixBracketNode::optimizeVariableAccess):
+        (KJS::PreIncBracketNode::evaluate):
+        (KJS::PreDecBracketNode::evaluate):
+        (KJS::PrefixDotNode::optimizeVariableAccess):
+        (KJS::PreIncDotNode::evaluate):
+        (KJS::PreDecDotNode::evaluate):
+        (KJS::PrefixErrorNode::evaluate):
+        (KJS::UnaryPlusNode::optimizeVariableAccess):
+        (KJS::UnaryPlusNode::evaluate):
+        (KJS::UnaryPlusNode::evaluateToBoolean):
+        (KJS::UnaryPlusNode::evaluateToNumber):
+        (KJS::UnaryPlusNode::evaluateToInt32):
+        (KJS::UnaryPlusNode::evaluateToUInt32):
+        (KJS::NegateNode::optimizeVariableAccess):
+        (KJS::NegateNode::evaluate):
+        (KJS::NegateNode::evaluateToNumber):
+        (KJS::BitwiseNotNode::optimizeVariableAccess):
+        (KJS::BitwiseNotNode::inlineEvaluateToInt32):
+        (KJS::BitwiseNotNode::evaluate):
+        (KJS::BitwiseNotNode::evaluateToNumber):
+        (KJS::BitwiseNotNode::evaluateToBoolean):
+        (KJS::BitwiseNotNode::evaluateToInt32):
+        (KJS::BitwiseNotNode::evaluateToUInt32):
+        (KJS::LogicalNotNode::optimizeVariableAccess):
+        (KJS::LogicalNotNode::evaluate):
+        (KJS::LogicalNotNode::evaluateToBoolean):
+        (KJS::MultNode::optimizeVariableAccess):
+        (KJS::MultNode::inlineEvaluateToNumber):
+        (KJS::MultNode::evaluate):
+        (KJS::MultNode::evaluateToNumber):
+        (KJS::MultNode::evaluateToBoolean):
+        (KJS::MultNode::evaluateToInt32):
+        (KJS::MultNode::evaluateToUInt32):
+        (KJS::DivNode::optimizeVariableAccess):
+        (KJS::DivNode::inlineEvaluateToNumber):
+        (KJS::DivNode::evaluate):
+        (KJS::DivNode::evaluateToNumber):
+        (KJS::DivNode::evaluateToInt32):
+        (KJS::DivNode::evaluateToUInt32):
+        (KJS::ModNode::optimizeVariableAccess):
+        (KJS::ModNode::inlineEvaluateToNumber):
+        (KJS::ModNode::evaluate):
+        (KJS::ModNode::evaluateToNumber):
+        (KJS::ModNode::evaluateToBoolean):
+        (KJS::ModNode::evaluateToInt32):
+        (KJS::ModNode::evaluateToUInt32):
+        (KJS::throwOutOfMemoryErrorToNumber):
+        (KJS::addSlowCase):
+        (KJS::addSlowCaseToNumber):
+        (KJS::add):
+        (KJS::addToNumber):
+        (KJS::AddNode::optimizeVariableAccess):
+        (KJS::AddNode::evaluate):
+        (KJS::AddNode::inlineEvaluateToNumber):
+        (KJS::AddNode::evaluateToNumber):
+        (KJS::AddNode::evaluateToInt32):
+        (KJS::AddNode::evaluateToUInt32):
+        (KJS::AddNumbersNode::inlineEvaluateToNumber):
+        (KJS::AddNumbersNode::evaluate):
+        (KJS::AddNumbersNode::evaluateToNumber):
+        (KJS::AddNumbersNode::evaluateToInt32):
+        (KJS::AddNumbersNode::evaluateToUInt32):
+        (KJS::AddStringsNode::evaluate):
+        (KJS::AddStringLeftNode::evaluate):
+        (KJS::AddStringRightNode::evaluate):
+        (KJS::SubNode::optimizeVariableAccess):
+        (KJS::SubNode::inlineEvaluateToNumber):
+        (KJS::SubNode::evaluate):
+        (KJS::SubNode::evaluateToNumber):
+        (KJS::SubNode::evaluateToInt32):
+        (KJS::SubNode::evaluateToUInt32):
+        (KJS::LeftShiftNode::optimizeVariableAccess):
+        (KJS::LeftShiftNode::inlineEvaluateToInt32):
+        (KJS::LeftShiftNode::evaluate):
+        (KJS::LeftShiftNode::evaluateToNumber):
+        (KJS::LeftShiftNode::evaluateToInt32):
+        (KJS::LeftShiftNode::evaluateToUInt32):
+        (KJS::RightShiftNode::optimizeVariableAccess):
+        (KJS::RightShiftNode::inlineEvaluateToInt32):
+        (KJS::RightShiftNode::evaluate):
+        (KJS::RightShiftNode::evaluateToNumber):
+        (KJS::RightShiftNode::evaluateToInt32):
+        (KJS::RightShiftNode::evaluateToUInt32):
+        (KJS::UnsignedRightShiftNode::optimizeVariableAccess):
+        (KJS::UnsignedRightShiftNode::inlineEvaluateToUInt32):
+        (KJS::UnsignedRightShiftNode::evaluate):
+        (KJS::UnsignedRightShiftNode::evaluateToNumber):
+        (KJS::UnsignedRightShiftNode::evaluateToInt32):
+        (KJS::UnsignedRightShiftNode::evaluateToUInt32):
+        (KJS::lessThan):
+        (KJS::lessThanEq):
+        (KJS::LessNode::optimizeVariableAccess):
+        (KJS::LessNode::inlineEvaluateToBoolean):
+        (KJS::LessNode::evaluate):
+        (KJS::LessNode::evaluateToBoolean):
+        (KJS::LessNumbersNode::inlineEvaluateToBoolean):
+        (KJS::LessNumbersNode::evaluate):
+        (KJS::LessNumbersNode::evaluateToBoolean):
+        (KJS::LessStringsNode::inlineEvaluateToBoolean):
+        (KJS::LessStringsNode::evaluate):
+        (KJS::LessStringsNode::evaluateToBoolean):
+        (KJS::GreaterNode::optimizeVariableAccess):
+        (KJS::GreaterNode::inlineEvaluateToBoolean):
+        (KJS::GreaterNode::evaluate):
+        (KJS::GreaterNode::evaluateToBoolean):
+        (KJS::LessEqNode::optimizeVariableAccess):
+        (KJS::LessEqNode::inlineEvaluateToBoolean):
+        (KJS::LessEqNode::evaluate):
+        (KJS::LessEqNode::evaluateToBoolean):
+        (KJS::GreaterEqNode::optimizeVariableAccess):
+        (KJS::GreaterEqNode::inlineEvaluateToBoolean):
+        (KJS::GreaterEqNode::evaluate):
+        (KJS::GreaterEqNode::evaluateToBoolean):
+        (KJS::InstanceOfNode::optimizeVariableAccess):
+        (KJS::InstanceOfNode::evaluate):
+        (KJS::InstanceOfNode::evaluateToBoolean):
+        (KJS::InNode::optimizeVariableAccess):
+        (KJS::InNode::evaluate):
+        (KJS::InNode::evaluateToBoolean):
+        (KJS::EqualNode::optimizeVariableAccess):
+        (KJS::EqualNode::inlineEvaluateToBoolean):
+        (KJS::EqualNode::evaluate):
+        (KJS::EqualNode::evaluateToBoolean):
+        (KJS::NotEqualNode::optimizeVariableAccess):
+        (KJS::NotEqualNode::inlineEvaluateToBoolean):
+        (KJS::NotEqualNode::evaluate):
+        (KJS::NotEqualNode::evaluateToBoolean):
+        (KJS::StrictEqualNode::optimizeVariableAccess):
+        (KJS::StrictEqualNode::inlineEvaluateToBoolean):
+        (KJS::StrictEqualNode::evaluate):
+        (KJS::StrictEqualNode::evaluateToBoolean):
+        (KJS::NotStrictEqualNode::optimizeVariableAccess):
+        (KJS::NotStrictEqualNode::inlineEvaluateToBoolean):
+        (KJS::NotStrictEqualNode::evaluate):
+        (KJS::NotStrictEqualNode::evaluateToBoolean):
+        (KJS::BitAndNode::optimizeVariableAccess):
+        (KJS::BitAndNode::evaluate):
+        (KJS::BitAndNode::inlineEvaluateToInt32):
+        (KJS::BitAndNode::evaluateToNumber):
+        (KJS::BitAndNode::evaluateToBoolean):
+        (KJS::BitAndNode::evaluateToInt32):
+        (KJS::BitAndNode::evaluateToUInt32):
+        (KJS::BitXOrNode::optimizeVariableAccess):
+        (KJS::BitXOrNode::inlineEvaluateToInt32):
+        (KJS::BitXOrNode::evaluate):
+        (KJS::BitXOrNode::evaluateToNumber):
+        (KJS::BitXOrNode::evaluateToBoolean):
+        (KJS::BitXOrNode::evaluateToInt32):
+        (KJS::BitXOrNode::evaluateToUInt32):
+        (KJS::BitOrNode::optimizeVariableAccess):
+        (KJS::BitOrNode::inlineEvaluateToInt32):
+        (KJS::BitOrNode::evaluate):
+        (KJS::BitOrNode::evaluateToNumber):
+        (KJS::BitOrNode::evaluateToBoolean):
+        (KJS::BitOrNode::evaluateToInt32):
+        (KJS::BitOrNode::evaluateToUInt32):
+        (KJS::LogicalAndNode::optimizeVariableAccess):
+        (KJS::LogicalAndNode::evaluate):
+        (KJS::LogicalAndNode::evaluateToBoolean):
+        (KJS::LogicalOrNode::optimizeVariableAccess):
+        (KJS::LogicalOrNode::evaluate):
+        (KJS::LogicalOrNode::evaluateToBoolean):
+        (KJS::ConditionalNode::optimizeVariableAccess):
+        (KJS::ConditionalNode::evaluate):
+        (KJS::ConditionalNode::evaluateToBoolean):
+        (KJS::ConditionalNode::evaluateToNumber):
+        (KJS::ConditionalNode::evaluateToInt32):
+        (KJS::ConditionalNode::evaluateToUInt32):
+        (KJS::valueForReadModifyAssignment):
+        (KJS::ReadModifyResolveNode::optimizeVariableAccess):
+        (KJS::AssignResolveNode::optimizeVariableAccess):
+        (KJS::ReadModifyLocalVarNode::evaluate):
+        (KJS::AssignLocalVarNode::evaluate):
+        (KJS::ReadModifyConstNode::evaluate):
+        (KJS::AssignConstNode::evaluate):
+        (KJS::ReadModifyResolveNode::evaluate):
+        (KJS::AssignResolveNode::evaluate):
+        (KJS::AssignDotNode::optimizeVariableAccess):
+        (KJS::AssignDotNode::evaluate):
+        (KJS::ReadModifyDotNode::optimizeVariableAccess):
+        (KJS::ReadModifyDotNode::evaluate):
+        (KJS::AssignErrorNode::evaluate):
+        (KJS::AssignBracketNode::optimizeVariableAccess):
+        (KJS::AssignBracketNode::evaluate):
+        (KJS::ReadModifyBracketNode::optimizeVariableAccess):
+        (KJS::ReadModifyBracketNode::evaluate):
+        (KJS::CommaNode::optimizeVariableAccess):
+        (KJS::CommaNode::evaluate):
+        (KJS::ConstDeclNode::optimizeVariableAccess):
+        (KJS::ConstDeclNode::handleSlowCase):
+        (KJS::ConstDeclNode::evaluateSingle):
+        (KJS::ConstDeclNode::evaluate):
+        (KJS::ConstStatementNode::optimizeVariableAccess):
+        (KJS::ConstStatementNode::execute):
+        (KJS::statementListExecute):
+        (KJS::BlockNode::optimizeVariableAccess):
+        (KJS::BlockNode::execute):
+        (KJS::EmptyStatementNode::execute):
+        (KJS::ExprStatementNode::optimizeVariableAccess):
+        (KJS::ExprStatementNode::execute):
+        (KJS::VarStatementNode::optimizeVariableAccess):
+        (KJS::VarStatementNode::execute):
+        (KJS::IfNode::optimizeVariableAccess):
+        (KJS::IfNode::execute):
+        (KJS::IfElseNode::optimizeVariableAccess):
+        (KJS::IfElseNode::execute):
+        (KJS::DoWhileNode::optimizeVariableAccess):
+        (KJS::DoWhileNode::execute):
+        (KJS::WhileNode::optimizeVariableAccess):
+        (KJS::WhileNode::execute):
+        (KJS::ForNode::optimizeVariableAccess):
+        (KJS::ForNode::execute):
+        (KJS::ForInNode::optimizeVariableAccess):
+        (KJS::ForInNode::execute):
+        (KJS::ContinueNode::execute):
+        (KJS::BreakNode::execute):
+        (KJS::ReturnNode::optimizeVariableAccess):
+        (KJS::ReturnNode::execute):
+        (KJS::WithNode::optimizeVariableAccess):
+        (KJS::WithNode::execute):
+        (KJS::CaseClauseNode::optimizeVariableAccess):
+        (KJS::CaseClauseNode::evaluate):
+        (KJS::CaseClauseNode::executeStatements):
+        (KJS::ClauseListNode::optimizeVariableAccess):
+        (KJS::CaseBlockNode::optimizeVariableAccess):
+        (KJS::CaseBlockNode::executeBlock):
+        (KJS::SwitchNode::optimizeVariableAccess):
+        (KJS::SwitchNode::execute):
+        (KJS::LabelNode::optimizeVariableAccess):
+        (KJS::LabelNode::execute):
+        (KJS::ThrowNode::optimizeVariableAccess):
+        (KJS::ThrowNode::execute):
+        (KJS::TryNode::optimizeVariableAccess):
+        (KJS::TryNode::execute):
+        (KJS::ProgramNode::initializeSymbolTable):
+        (KJS::ScopeNode::optimizeVariableAccess):
+        (KJS::ProgramNode::processDeclarations):
+        (KJS::EvalNode::processDeclarations):
+        (KJS::ProgramNode::execute):
+        (KJS::EvalNode::execute):
+        (KJS::FunctionBodyNodeWithDebuggerHooks::execute):
+        (KJS::FuncDeclNode::execute):
+        (KJS::FuncExprNode::evaluate):
+        * kjs/nodes.h:
+        (KJS::Node::):
+        (KJS::FalseNode::):
+        (KJS::TrueNode::):
+        (KJS::ArgumentsNode::):
+
+2008-04-23  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Bug 18672: SQUIRRELFISH: codegen fails with a large number of temporaries
+        <https://bugs.webkit.org/show_bug.cgi?id=18672>
+
+        Add a SegmentedVector type, which provides a Vector<T> which maintains
+        existing memory locations during resize.  This allows dynamically sizing
+        local, temporary and label "vectors" in CodeGenerator.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::addVar):
+        (KJS::CodeGenerator::CodeGenerator):
+        (KJS::CodeGenerator::newTemporary):
+        (KJS::CodeGenerator::newLabel):
+        * VM/CodeGenerator.h:
+        * VM/SegmentedVector.h: Added.
+        (KJS::SegmentedVector::SegmentedVector):
+        (KJS::SegmentedVector::~SegmentedVector):
+        (KJS::SegmentedVector::last):
+        (KJS::SegmentedVector::append):
+        (KJS::SegmentedVector::removeLast):
+        (KJS::SegmentedVector::size):
+        (KJS::SegmentedVector::operator[]):
+        (KJS::SegmentedVector::resize):
+        (KJS::SegmentedVector::shrink):
+        (KJS::SegmentedVector::grow):
+
+2008-04-23  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        A little refactoring in preparation for supporting 'arguments'.
+        
+        Fixes 2 regression tests.
+
+        SunSpider reports no change.        
+
+        We now check the activation register, instead of the codeBlock, to
+        determine whether we need to tear off the activation. This is to support
+        "f.arguments", which will create an activation/arguments pair for f,
+        even though the needsFullScopeChain flag is false for f's codeBlock.
+        
+        The test fixes resulted from calling initializeCallFrame for re-entrant
+        function code, instead of initializing (not enough) parts of the call
+        frame by hand.
+
+2008-04-22  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Sam.
+        
+        - propagate the "this" value properly to local eval
+        
+        (fixes a measly one regression test)
+
+        * VM/CodeBlock.h:
+        (KJS::CodeBlock::CodeBlock):
+        (KJS::ProgramCodeBlock::ProgramCodeBlock):
+        (KJS::EvalCodeBlock::EvalCodeBlock):
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-04-22  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Add support for function declarations in eval code.
+
+        (this fixes 12 more regression tests)
+        
+        * VM/CodeBlock.h:
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::CodeGenerator):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+        * kjs/nodes.cpp:
+        (KJS::EvalNode::generateCode):
+
+2008-04-22  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Implement LabelNode.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::pushJumpContext):
+        (KJS::CodeGenerator::jumpContextForContinue):
+        (KJS::CodeGenerator::jumpContextForBreak):
+        * VM/CodeGenerator.h:
+        * kjs/nodes.cpp:
+        (KJS::DoWhileNode::emitCode):
+        (KJS::WhileNode::emitCode):
+        (KJS::ForNode::emitCode):
+        (KJS::ForInNode::emitCode):
+        (KJS::ContinueNode::emitCode):
+        (KJS::BreakNode::emitCode):
+        (KJS::SwitchNode::emitCode):
+        (KJS::LabelNode::emitCode):
+
+2008-04-22  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Fixed crash when unwinding from exceptions inside eval.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::unwindCallFrame): Don't assume that the top of the
+        current call frame's scope chain is an activation: it can be the global
+        object, instead.
+
+2008-04-22  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff.
+
+        * kjs/testkjs.cpp:
+        (main): Convert signals to exit codes, so that crashing tests are
+        detected as regression test failures.
+
+2008-04-22  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt and Maciej Stachowiak.
+        
+        Renamed "needsActivation" to "needsFullScopeChain" because lying will
+        make hair grow on the backs of your hands.
+
+2008-04-21  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Fixed ScopeChainNode lifetime problems:
+        
+        (1) In "with" and "catch" scopes, we would construct a ScopeChain
+        object and then jump across its destructor, leaking the ScopeChainNode
+        we had pushed.
+
+        (2) In global and eval scopes, we would fail to initially ref
+        "scopeChain", causing us to overrelease it later. Now that we ref
+        "scopeChain" properly, we also need to deref it when the script
+        terminates.
+
+        SunSpider reports a .2% regression, but an earlier round of ScopeChain
+        refactoring was a .4% speedup, so there.
+
+2008-04-22  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Alexey.
+        
+        - use global object instead of null for "this" on unqualified calls
+        
+        This fixes 10 more JSC test regressions.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-04-22  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - throw proper exceptions for objects that don't implement call or construct
+        
+        This fixes 21 more JSC test regressions. It is also seemingly an
+        0.5% progression.
+
+        * VM/ExceptionHelpers.cpp:
+        (KJS::createNotAnObjectError):
+        (KJS::createNotAConstructorError):
+        (KJS::createNotAFunctionError):
+        * VM/ExceptionHelpers.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-04-21  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Implement emitCode for ConstDeclNode.
+
+        This fixes the crash (assertion) in js1_5/Scope/scope-001.js
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::registerForLocalConstInit):
+        * VM/CodeGenerator.h:
+        * kjs/nodes.cpp:
+        (KJS::AssignResolveNode::emitCode):
+        (KJS::ConstDeclNode::emitCodeSingle):
+        (KJS::ConstDeclNode::emitCode):
+        (KJS::ConstStatementNode::emitCode):
+        * kjs/nodes.h:
+
+2008-04-21  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Sam.
+        
+        - add some support for the split window object
+
+        This fixes many layout tests.
+        
+        * VM/Machine.cpp:
+        (KJS::resolveBaseAndFunc): Use toThisObject() to ensure we get the
+        wrapper global, if one exists, as the "this" object.
+        * kjs/function.cpp:
+        (KJS::globalFuncEval): Use toGlobalObject() to handle the wrapper
+        case properly.
+
+2008-04-21  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - restore ScopeChain::operator= to avoid crash on many layout tests
+        
+        Otherwise, FunctionImp::setScope would cause a reference
+        underflow. I implemented using the copy construct and swap idiom.
+
+        * kjs/scope_chain.h:
+        (KJS::ScopeChain::swap):
+        (KJS::ScopeChain::operator=):
+
+2008-04-21  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Bug 18649: SQUIRRELFISH: correctly handle exceptions in eval code
+        <https://bugs.webkit.org/show_bug.cgi?id=18649>
+
+        Allocate a callframe for eval() and initialise with a null codeBlock to
+        indicate native code.  This prevents the unwinder from clobbering the
+        register stack.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+
+2008-04-21  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Removed ScopeChain::push(ScopeChain&) because it was unused. Moved
+        ScopeChain::print to ScopeChainNode.
+        
+        ScopeChain is now nothing more than a resource-handling wrapper around
+        ScopeChainNode.
+
+2008-04-21  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Bug 18671: SquirrelFish: continue inside switch fails
+        <https://bugs.webkit.org/show_bug.cgi?id=18671>
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::jumpContextForLabel):
+        * VM/CodeGenerator.h:
+        * kjs/nodes.cpp:
+        (KJS::ContinueNode::emitCode):
+
+2008-04-21  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Moved push(JSObject*) and pop() from ScopeChain to ScopeChainNode,
+        rearranging scope_chain.h a bit.
+
+        SunSpider reports no change.
+
+2008-04-21  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Moved bottom() from ScopeChain to ScopeChainNode, simplifying it based
+        on the knowledge that the ScopeChain is never empty.
+
+        SunSpider reports no change.
+
+2008-04-21  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Moved begin() and end() from ScopeChain to ScopeChainNode. 
+        
+        Also marked a few methods "const".
+
+        SunSpider reports no change.
+        
+2008-04-21  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Turned ScopeChain::depth into a stand-alone function, and simplified it
+        a bit. 
+        
+        I also moved ScopeChain::depth to Machine.cpp because it doesn't report
+        the true depth of the ScopeChain -- just the Machine's perspective of
+        its depth within a given call frame.
+
+        SunSpider reports no change.
+        
+2008-04-21  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Removed indirection in ScopeChain::ref / ScopeChain::deref.
+        
+        SunSpider reports no change.
+        
+        * kjs/scope_chain.h:
+        (KJS::ScopeChain::ScopeChain):
+        (KJS::ScopeChain::~ScopeChain):
+        (KJS::ScopeChain::clear):
+
+2008-04-21  Oliver Hunt  <oliver@apple.com>
+
+        Fix debug build
+
+        * kjs/nodes.cpp:
+        (KJS::ConstDeclNode::evaluateSingle):
+
+2008-04-21  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Bug 18664: SQUIRRELFISH: correctly throw a SyntaxError when parsing of eval code fails
+        <https://bugs.webkit.org/show_bug.cgi?id=18664>
+
+        Correctly throw a SyntaxError when parsing of eval code fails.
+
+        * VM/Machine.cpp:
+        (KJS::eval):
+
+2008-04-21  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Partial fix for Bug 18649: SQUIRRELFISH: correctly handle exceptions in eval code
+
+        Make sure we correct the register state before jumping to vm_throw.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-04-21  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Simplified ScopeChain ref/deref.
+        
+        SunSpider reports a .4% speedup.
+        
+        * kjs/scope_chain.h:
+        (KJS::ScopeChainNode::ref): Removed this function because it was nonsense.
+        ScopeChainNodes are initialized with a refCount of 1, so the loop was
+        guaranteed to iterate exactly once.
+
+2008-04-21  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Removed support for empty ScopeChains.
+
+        SunSpider reports no change.
+
+2008-04-21  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Removed some completely unused ScopeChain member functions.
+
+        SunSpider reports no change.
+
+2008-04-21  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Avoid creating unnecessary ScopeChain objects, to reduce refcount churn.
+
+        SunSpider reports no change.
+
+2008-04-21  Maciej Stachowiak  <mjs@apple.com>
+
+        Rubber stamped by Alexey.
+        
+        Add some braces.x
+
+        * kjs/testkjs.cpp:
+        (runWithScripts):
+
+2008-04-21  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - only print "End:" output when -d flag is passed.
+        
+        This fixes half of our failing JSC regression tests.
+
+        * kjs/testkjs.cpp:
+        (runWithScripts):
+
+2008-04-21  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Add support for variable declarations in eval code.
+
+        * VM/CodeBlock.h:
+        (KJS::EvalCodeBlock::EvalCodeBlock):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::CodeGenerator):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+        * VM/Machine.h:
+        * kjs/function.cpp:
+        (KJS::globalFuncEval):
+        * kjs/nodes.cpp:
+        (KJS::EvalNode::generateCode):
+        * kjs/nodes.h:
+        (KJS::EvalNode::):
+
+2008-04-20  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Throw exceptions for invalid continue, break, and return statements.
+
+        Simple refactoring and extension of Cameron's AssignErrorNode, etc patch
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::CodeGenerator):
+        (KJS::CodeGenerator::pushJumpContext):
+        (KJS::CodeGenerator::popJumpContext):
+        (KJS::CodeGenerator::jumpContextForLabel):
+        * VM/CodeGenerator.h:
+        * kjs/nodes.cpp:
+        (KJS::Node::emitThrowError):
+        (KJS::ContinueNode::emitCode):
+        (KJS::BreakNode::emitCode):
+        (KJS::ReturnNode::emitCode):
+        * kjs/nodes.h:
+
+2008-04-20  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Removed Machine.cpp from AllInOneFile.cpp, and manually inlined a few
+        things that used to be inlined automatically.
+        
+        1.9% speedup on SunSpider.
+        
+        My hope is that we'll face fewer surprises in Machine.cpp codegen, now
+        that GCC is making fewer decisions. The speedup seems to confirm that.
+
+2008-04-20  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 18642: Iterator context may get placed into the return register, leading to much badness
+        <https://bugs.webkit.org/show_bug.cgi?id=18642>
+
+        To prevent incorrectly reusing what will become the result register for
+        eval and global code execution, we need to request and ref the destination
+        in advance of codegen.  Unfortunately this may lead to unnecessary copying,
+        although in future we can probably limit this.  Curiously SunSpider shows
+        a progression in a number of tests, although it comes out as a wash overall.
+
+        * kjs/nodes.cpp:
+        (KJS::EvalNode::emitCode):
+        (KJS::ProgramNode::emitCode):
+
+2008-04-20  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Add support for AssignErrorNode, PrefixErrorNode, and PostfixErrorNode.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitCreateError):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::PostfixErrorNode::emitCode):
+        (KJS::PrefixErrorNode::emitCode):
+        (KJS::AssignErrorNode::emitCode):
+        * kjs/nodes.h:
+
+2008-04-20  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff and Mark.
+
+        Provide line number information in exceptions
+
+        Simple patch, adds line number information metadata to CodeBlock
+        and a simple method to get the line number responsible for a given
+        Instruction*.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::lineNumberForVPC):
+        * VM/CodeBlock.h:
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::emitNode):
+        * VM/Machine.cpp:
+        (KJS::Machine::throwException):
+
+2008-04-20  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Provide "sourceURL" in exceptions
+
+        * VM/CodeBlock.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::throwException):
+        * kjs/nodes.cpp:
+        (KJS::EvalNode::generateCode):
+        (KJS::ProgramNode::generateCode):
+
+2008-04-19  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Don't call emitCode directly on subnodes, instead use CodeGenerator::emitNode
+
+        This patch just a preparation for tracking line numbers.
+
+        * kjs/nodes.cpp:
+        (KJS::ObjectLiteralNode::emitCode):
+        (KJS::PropertyListNode::emitCode):
+        (KJS::ArgumentListNode::emitCode):
+        (KJS::TryNode::emitCode):
+
+2008-04-19  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 18619: Support continue, break, and return in try .. finally blocks
+        <https://bugs.webkit.org/show_bug.cgi?id=18619>
+
+        This patch replaces the current partial finally support (which uses code
+        duplication to achieve what it does) with a subroutine based approach.
+        This has a number of advantages over code duplication:
+          * Reduced code size
+          * Simplified exception handling as the finaliser code only exists in 
+            one place, so no "magic" is needed to get the correct handler for a 
+            finaliser.
+          * When we support instruction to line number mapping we won't need to
+            worry about the dramatic code movement caused by duplication
+
+        On the downside it is necessary to add two new opcodes, op_jsr and op_sret
+        to enter and exit the finaliser subroutines, happily SunSpider reports
+        a performance progression (gcc amazes me) and ubench reports a wash.
+
+        While jsr and sret provide a mechanism that allows us to enter and exit
+        any arbitrary finaliser we need to, it was still necessary to increase
+        the amount of information tracked when entering and exiting both finaliser
+        scopes and dynamic scopes ("with").  This means "scopeDepth" is now
+        the combination of "finaliserDepth" and "dynamicScopeDepth".  We also
+        now use a scopeContextStack to ensure that we pop scopes and execute
+        finalisers in the correct order.  This increases the cost of "with" nodes
+        during codegen, but it should not be significant enough to effect real
+        world performance and greatly simplifies codegen for return, break and
+        continue when interacting with finalisers.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+          Pretty printing of jsr/sret opcodes
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::CodeGenerator):
+        (KJS::CodeGenerator::emitPushScope):
+        (KJS::CodeGenerator::emitPopScope):
+          Dynamic scopes need to be tracked on the scopeContextStack now
+
+        (KJS::CodeGenerator::pushFinallyContext):
+        (KJS::CodeGenerator::popFinallyContext):
+          Handle entry and exit from code regions with finalisers.  This is
+          needed solely to support return, continue and break inside finaliser
+          regions.
+
+        (KJS::CodeGenerator::emitComplexJumpScopes):
+          Helper function for emitJumpScopes to handle the complex codegen
+          needed to handle return, continue and break inside a finaliser region
+
+        (KJS::CodeGenerator::emitJumpScopes):
+          Updated to be aware of finalisers, if a cross-scope jump occurs inside
+          a finaliser we hand off codegen to emitComplexJumpScopes, otherwise
+          we can handle the normal (trivial) case with a single instruction.
+
+        (KJS::CodeGenerator::emitJumpSubroutine):
+        (KJS::CodeGenerator::emitSubroutineReturn):
+          Trivial opcode emitter functions.
+
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::scopeDepth):
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+          Implement op_jsr and op_sret.
+
+        * VM/Opcode.h:
+          Ad op_jsr and op_sret
+
+        * kjs/nodes.cpp:
+        (KJS::TryNode::emitCode):
+          Fix codegen for new finaliser model.
+
+2008-04-17  Mark Rowe  <mrowe@apple.com>
+
+        Rubber-stamped by Oliver Hunt.
+
+        Remove unnecessary files from testkjs, testapi and minidom targets.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2008-04-17  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Fixed ASSERT seen during run-sunspider of a debug build.
+
+        * VM/CodeGenerator.h: Made the default codegen buffers bigger. SunSpider
+        runs all tests in one global environment, so you end up with more than
+        128 locals. This is just a stop-gap until we code up a real
+        solution to arbitrary symbol and label limits.
+
+2008-04-17  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Fixed a bug in exception unwinding, where we wouldn't deref the scope
+        chain in global scope, so we would leak ScopeChainNodes when exceptions
+        were thrown inside "with" and "catch" scopes.
+        
+        Also did some cleanup of the unwinding code along the way.
+        
+        Scope chain reference counting is still wrong in a few ways. I thought
+        I would fix this portion of it first.
+        
+        run-sunspider shows no change.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::unwindCallFrame):
+        (KJS::Machine::throwException):
+        (KJS::Machine::privateExecute):
+        * VM/Machine.h:
+
+2008-04-17  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Add more exception checking to toNumber conversions
+
+        This corrects op_pre_dec, op_negate, op_mod and op_sub.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-04-17  Geoffrey Garen  <ggaren@apple.com> and Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver Hunt.
+        
+        Behold: eval.
+        
+        Introduced a new opcode: op_call_eval. In the normal case, it performs
+        an eval. In the case where eval has been overridden in some way, it
+        performs a function call.
+
+        * VM/CodeGenerator.h: Added a feature so the code generator knows not
+        to optimized locals in eval code.
+        
+2008-04-17  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Added some ASSERTs to document codegen failures in
+        run-javascriptcore-tests.
+        
+        For all tests, program-level codegen now either succeeds, or fails with
+        an ASSERT.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::addVar):
+        (KJS::CodeGenerator::CodeGenerator):
+        (KJS::CodeGenerator::newTemporary):
+        (KJS::CodeGenerator::newLabel):
+
+2008-04-17  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Fixed another case of a dst register being an unreferenced temporary
+        (caused an ASSERT when running the full sunspider suite).
+
+        * kjs/nodes.cpp:
+        (KJS::CaseBlockNode::emitCodeForBlock):
+
+2008-04-16  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff.
+        
+        - add documentation (and meaningful parameter names) for arithmetic and bitwise binary ops
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitMul):
+        (KJS::CodeGenerator::emitDiv):
+        (KJS::CodeGenerator::emitMod):
+        (KJS::CodeGenerator::emitSub):
+        (KJS::CodeGenerator::emitLeftShift):
+        (KJS::CodeGenerator::emitRightShift):
+        (KJS::CodeGenerator::emitUnsignedRightShift):
+        (KJS::CodeGenerator::emitBitAnd):
+        (KJS::CodeGenerator::emitBitXOr):
+        (KJS::CodeGenerator::emitBitOr):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::MultNode::emitCode):
+        (KJS::DivNode::emitCode):
+        (KJS::ModNode::emitCode):
+        (KJS::SubNode::emitCode):
+        (KJS::LeftShiftNode::emitCode):
+        (KJS::RightShiftNode::emitCode):
+        (KJS::UnsignedRightShiftNode::emitCode):
+        (KJS::BitAndNode::emitCode):
+        (KJS::BitXOrNode::emitCode):
+        (KJS::BitOrNode::emitCode):
+        (KJS::emitReadModifyAssignment):
+        (KJS::ReadModifyResolveNode::emitCode):
+
+2008-04-16  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Exception checks for toNumber in op_pre_inc
+
+        This is somewhat more convoluted than the simple hadException checks
+        we currently use.  Instead we use special toNumber conversions that
+        select between the exception and ordinary vPC.  This allows us to 
+        remove any branches in the common case (incrementing a number).
+
+        * API/JSCallbackObject.h:
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::::toNumber):
+        * ChangeLog:
+        * JavaScriptCore.exp:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * VM/JSPropertyNameIterator.cpp:
+        (KJS::JSPropertyNameIterator::toNumber):
+        * VM/JSPropertyNameIterator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::ExecState):
+        * kjs/ExecState.h:
+        * kjs/JSNotAnObject.cpp:
+        (KJS::JSNotAnObject::toNumber):
+        * kjs/JSNotAnObject.h:
+        * kjs/internal.cpp:
+        (KJS::StringImp::toNumber):
+        (KJS::NumberImp::toNumber):
+        (KJS::GetterSetterImp::toNumber):
+        * kjs/internal.h:
+        * kjs/object.cpp:
+        (KJS::JSObject::toNumber):
+        * kjs/object.h:
+        * kjs/value.h:
+        (KJS::JSValue::toNumber):
+
+2008-04-16  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff.
+        
+        - ensure that activations are kept in a register to protect them from GC
+        
+        Also renamed OptionalCalleeScopeChain constant to OptionalCalleeActivation, since
+        that is what is now kept there, and there is no more need to keep the scope chain in
+        the register file.
+
+        * VM/Machine.cpp:
+        (KJS::initializeCallFrame):
+        (KJS::scopeChainForCall):
+        * VM/Machine.h:
+        (KJS::Machine::):
+
+2008-04-16  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Made "this" work in program code / global scope.
+        
+        The machine can initialize "this" prior to execution because it knows
+        that, for program code, "this" is always stored in lr1. 
+
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+        * VM/Machine.h:
+        (KJS::Machine::):
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::evaluate):
+
+2008-04-16  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Fixed a codegen bug when returning from inside a dynamic scope (a with
+        or catch block): we need to pop any dynamic scope(s) that have been
+        added so op_ret can find the activation object at the top of the scope
+        chain.
+
+        * kjs/nodes.cpp:
+        (KJS::ReturnNode::emitCode): If we're returning from inside a dynamic
+        scope, emit a jmp_scopes to take care of popping any dynamic scope(s)
+        and then branching to the return instruction.
+
+2008-04-16  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff.
+        
+        - document the add and get_prop_id opcodes
+        
+        In addition to adding documentation in comments, I changed
+        references to register IDs or indices relating to these opcodes to
+        have meaningful names instead of r0 r1 r2.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitAdd):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * kjs/nodes.cpp:
+        (KJS::DotAccessorNode::emitCode):
+        (KJS::FunctionCallDotNode::emitCode):
+        (KJS::PostIncDotNode::emitCode):
+        (KJS::PostDecDotNode::emitCode):
+        (KJS::PreIncDotNode::emitCode):
+        (KJS::PreDecDotNode::emitCode):
+        (KJS::AddNode::emitCode):
+        (KJS::ReadModifyDotNode::emitCode):
+
+2008-04-15  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt and Maciej Stachowiak.
+        
+        Fixed a codegen bug in with and switch, and added an ASSERT to
+        make sure it doesn't happen again.
+        
+        emitCode() assumes that dst, if non-zero, is either referenced or
+        non-temporary (i.e., it assumes that newTemporary() will return a
+        register not equal to dst). Certain callers to emitCode() weren't
+        guaranteeing that to be so, so temporary register values were being
+        overwritten.
+
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::emitNode): ASSERT that dst is referenced or non-temporary.
+
+        * kjs/nodes.cpp:
+        (KJS::CommaNode::emitCode): Reference the dst we pass.
+
+        (KJS::WithNode::emitCode): No need to pass an explicit dst register.
+        
+        (KJS::CaseBlockNode::emitCodeForBlock): No need to pass an explicit dst register.
+        (KJS::SwitchNode::emitCode): No need to pass an explicit dst register.
+
+        * kjs/nodes.h: Made dst the last parameter to emitCodeForBlock, to match
+        emitCode.
+
+2008-04-15  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 18526: Throw exceptions when resolve fails for op_resolve_base_and_func.
+        <https://bugs.webkit.org/show_bug.cgi?id=18526>
+
+        Very simple fix, sunspider shows a 0.7% progression, ubench shows a 0.4% regression.
+
+        * VM/Machine.cpp:
+        (KJS::resolveBaseAndFunc):
+        (KJS::Machine::privateExecute):
+
+2008-04-15  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - fix incorrect result on 3d-raytrace test
+        
+        Oliver found and tracked down this bug, I just typed in the fix.
+
+        * VM/Machine.cpp:
+        (KJS::slideRegisterWindowForCall): When setting omitted parameters to undefined,
+        account for the space for local variables.
+
+2008-04-15  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - fix codegen handling of dst registers
+        
+        1.006x speedup (not sure why).
+        
+        Most emitCode functions take an optional "dst" parameter that says
+        where the output of the instruction should be written. I made some
+        functions for convenient handling of the dst register:
+
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::tempDestination): Takes the dst register. Returns it if
+        it is not null and is a temporary, otherwise allocates a new temporary. This is
+        intended for cases where an intermediate value might be written into the dst
+
+        (KJS::CodeGenerator::finalDestination): Takes the dst register and an optional
+        register that was used as a temp destination. Picks the right thing for the final
+        output. Intended to be used as the output register for the instruction that generates
+        the final value of a particular node.
+        
+        (KJS::CodeGenerator::moveToDestinationIfNeeded): Takes dst and a
+        RegisterID; moves from the register to dst if dst is defined and
+        different from the register. This is intended for cases where the
+        result of a node is already in a specific register (likely a
+        local), and so no code needs to be generated unless a specific
+        destination has been requested, in which case a move is needed.
+        
+        I also applied these methods throughout emitCode functions. In
+        some cases this was just cleanup, in other cases I fixed actual
+        codegen bugs. Below I have given specific comments for the cases
+        where I believe I fixed a codegen bug, or improved quality of codegen.
+        
+        * kjs/nodes.cpp:
+        (KJS::NullNode::emitCode):
+        (KJS::FalseNode::emitCode):
+        (KJS::TrueNode::emitCode):
+        (KJS::NumberNode::emitCode):
+        (KJS::StringNode::emitCode):
+        (KJS::RegExpNode::emitCode):
+        (KJS::ThisNode::emitCode): Now avoids emitting a mov when dst is
+        the same as the this register (the unlikely case of "this = this");
+        (KJS::ResolveNode::emitCode): Now avoids emitting a mov when dst
+        is the same as the local regiester, in the local var case (the
+        unlikely case of "x = x");
+        (KJS::ArrayNode::emitCode): Fixed a codegen bug where array
+        literal element expressions may have observed an intermediate
+        value of constructing the array.
+        (KJS::ObjectLiteralNode::emitCode): 
+        (KJS::PropertyListNode::emitCode): Fixed a codegen bug where object literal
+        property definition expressions may have obesrved an intermediate value of
+        constructing the object.
+        (KJS::BracketAccessorNode::emitCode):
+        (KJS::DotAccessorNode::emitCode):
+        (KJS::NewExprNode::emitCode):
+        (KJS::FunctionCallValueNode::emitCode):
+        (KJS::FunctionCallBracketNode::emitCode):
+        (KJS::FunctionCallDotNode::emitCode):
+        (KJS::PostIncResolveNode::emitCode):
+        (KJS::PostDecResolveNode::emitCode):
+        (KJS::PostIncBracketNode::emitCode):
+        (KJS::PostDecBracketNode::emitCode):
+        (KJS::PostIncDotNode::emitCode):
+        (KJS::PostDecDotNode::emitCode):
+        (KJS::DeleteResolveNode::emitCode):
+        (KJS::DeleteBracketNode::emitCode):
+        (KJS::DeleteDotNode::emitCode):
+        (KJS::DeleteValueNode::emitCode):
+        (KJS::VoidNode::emitCode):
+        (KJS::TypeOfResolveNode::emitCode):
+        (KJS::TypeOfValueNode::emitCode):
+        (KJS::PreIncResolveNode::emitCode): Fixed a codegen bug where the final
+        value would not be output to the dst register in the local var case.
+        (KJS::PreDecResolveNode::emitCode): Fixed a codegen bug where the final
+        value would not be output to the dst register in the local var case.
+        (KJS::PreIncBracketNode::emitCode):
+        (KJS::PreDecBracketNode::emitCode):
+        (KJS::PreIncDotNode::emitCode):
+        (KJS::PreDecDotNode::emitCode):
+        (KJS::UnaryPlusNode::emitCode):
+        (KJS::NegateNode::emitCode):
+        (KJS::BitwiseNotNode::emitCode):
+        (KJS::LogicalNotNode::emitCode):
+        (KJS::MultNode::emitCode):
+        (KJS::DivNode::emitCode):
+        (KJS::ModNode::emitCode):
+        (KJS::AddNode::emitCode):
+        (KJS::SubNode::emitCode):
+        (KJS::LeftShiftNode::emitCode):
+        (KJS::RightShiftNode::emitCode):
+        (KJS::UnsignedRightShiftNode::emitCode):
+        (KJS::LessNode::emitCode):
+        (KJS::GreaterNode::emitCode):
+        (KJS::LessEqNode::emitCode):
+        (KJS::GreaterEqNode::emitCode):
+        (KJS::InstanceOfNode::emitCode):
+        (KJS::InNode::emitCode):
+        (KJS::EqualNode::emitCode):
+        (KJS::NotEqualNode::emitCode):
+        (KJS::StrictEqualNode::emitCode):
+        (KJS::NotStrictEqualNode::emitCode):
+        (KJS::BitAndNode::emitCode):
+        (KJS::BitXOrNode::emitCode):
+        (KJS::BitOrNode::emitCode):
+        (KJS::LogicalAndNode::emitCode):
+        (KJS::LogicalOrNode::emitCode):
+        (KJS::ConditionalNode::emitCode):
+        (KJS::emitReadModifyAssignment): Allow an out argument separate from the operands,
+        needed for fixes below.
+        (KJS::ReadModifyResolveNode::emitCode): Fixed a codegen bug where the right side of
+        the expression may observe an intermediate value.
+        (KJS::AssignResolveNode::emitCode): Fixed a codegen bug where the right side of the
+        expression may observe an intermediate value.
+        (KJS::ReadModifyDotNode::emitCode): Fixed a codegen bug where the right side of the
+        expression may observe an intermediate value.
+        (KJS::ReadModifyBracketNode::emitCode): Fixed a codegen bug where the right side of the
+        expression may observe an intermediate value.
+        (KJS::CommaNode::emitCode): Avoid writing temporary value to dst register.
+        (KJS::ReturnNode::emitCode): Void return should return undefined, not null.
+        (KJS::FuncExprNode::emitCode):
+
+2008-04-15  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff.
+
+        - fix huge performance regression (from trunk) in string-unpack-code
+        
+        This restores string-unpack-code performance to parity with
+        trunk (2.27x speedup relative to previous SquirrelFish)
+        
+        * VM/Machine.cpp:
+        (KJS::Machine::execute): Shrink register file after call to avoid
+        growing repeatedly.
+
+2008-04-15  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Fixed dumpCallFrame to match our new convention of passing around a
+        ScopeChainNode* instead of a ScopeChain*.
+
+        * JavaScriptCore.exp:
+        * VM/Machine.cpp:
+        (KJS::Machine::dumpCallFrame):
+        * VM/Machine.h:
+
+2008-04-15  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 18436: Need to throw exception on read/modify/write or similar resolve for nonexistent property
+        <https://bugs.webkit.org/show_bug.cgi?id=18436>
+
+        Add op_resolve_base_and_property for read/modify/write operations,
+        this adds a "superinstruction" to resolve the base and value of a
+        property simultaneously.  Just using resolveBase and resolve results 
+        in an 5% regression in ubench, 30% in loop-empty-resolve (which is 
+        expected).  1.3% progression in sunspider, 2.1% in ubench, with a 
+        21% gain in loop-empty-resolve.  The only outlier is function-missing-args
+        which gets a 3% regression that I could never resolve.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitResolveBaseAndProperty):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::resolveBaseAndProperty):
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::PostIncResolveNode::emitCode):
+        (KJS::PostDecResolveNode::emitCode):
+        (KJS::PreIncResolveNode::emitCode):
+        (KJS::PreDecResolveNode::emitCode):
+        (KJS::ReadModifyResolveNode::emitCode):
+
+2008-04-15  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - fixed "SquirrelFish crashes due to bad scope chain on some SunSpider tests"
+        https://bugs.webkit.org/show_bug.cgi?id=18508
+
+        3d-raytrace and string-unpack-code now run.
+        
+        The basic approach is to pass around ScopeChainNode* instead of
+        ScopeChain*, which in addition to not becoming suddenly an invalid
+        pointer also saves an indirection.
+        
+        This is an 0.4% speedup on SunSpider --squirrelfish (1.8% on --ubench)
+        
+        * VM/Machine.cpp:
+        (KJS::resolve):
+        (KJS::resolveBase):
+        (KJS::resolveBaseAndFunc):
+        (KJS::initializeCallFrame):
+        (KJS::scopeChainForCall):
+        (KJS::Machine::unwindCallFrame):
+        (KJS::Machine::throwException):
+        (KJS::Machine::execute):
+        (KJS::Machine::privateExecute):
+        * VM/Machine.h:
+        * VM/Register.h:
+        (KJS::Register::):
+        * kjs/nodes.cpp:
+        (KJS::EvalNode::generateCode):
+        (KJS::FunctionBodyNode::generateCode):
+        (KJS::ProgramNode::generateCode):
+        (KJS::ProgramNode::processDeclarations):
+        (KJS::EvalNode::processDeclarations):
+        (KJS::FuncDeclNode::makeFunction):
+        (KJS::FuncExprNode::makeFunction):
+        * kjs/nodes.h:
+        (KJS::ProgramNode::):
+        (KJS::EvalNode::):
+        (KJS::FunctionBodyNode::):
+        * kjs/object.h:
+        * kjs/scope_chain.h:
+        (KJS::ScopeChainNode::ScopeChainNode):
+        (KJS::ScopeChainNode::deref):
+        (KJS::ScopeChainIterator::ScopeChainIterator):
+        (KJS::ScopeChainIterator::operator*):
+        (KJS::ScopeChainIterator::operator->):
+        (KJS::ScopeChain::ScopeChain):
+        (KJS::ScopeChain::node):
+        (KJS::ScopeChain::deref):
+        (KJS::ScopeChain::ref):
+        (KJS::ScopeChainNode::ref):
+        (KJS::ScopeChainNode::release):
+        (KJS::ScopeChainNode::begin):
+        (KJS::ScopeChainNode::end):
+
+2008-04-14  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Fixed crash when accessing registers in a torn-off activation object.
+
+        * kjs/JSActivation.cpp:
+        (KJS::JSActivation::copyRegisters): Update our registerOffset after
+        copying our registers, since our offset should now be relative to
+        our private register array, not the shared register file.
+
+2008-04-14  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - fix a codegen flaw that makes some tests run way too fast or way too slow
+        
+        The basic problem was that FunctionCallResolveNode results in
+        codegen which can incorrectly write an intermediate value into the
+        dst register even when that is a local. I added convenience
+        functions to CodeGenerator for getting this right, but for now I
+        only fixed FunctionCallResolve.
+
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::tempDestination):
+        (KJS::CodeGenerator::):
+        * kjs/nodes.cpp:
+        (KJS::FunctionCallResolveNode::emitCode):
+
+2008-04-14  Gabor Loki  <loki@inf.u-szeged.hu>
+
+        Reviewed and slightly tweaked by Geoffrey Garen.
+
+        Bug 18489: Squirrelfish doesn't build on linux
+        <https://bugs.webkit.org/show_bug.cgi?id=18489>
+
+        * JavaScriptCore.pri: Add VM into include path and its files into
+        source set
+        * VM/JSPropertyNameIterator.cpp: Fix include name
+        * VM/Machine.cpp: Add UNLIKELY macro for GCC
+        * VM/Machine.h: Add missing includes
+        * VM/RegisterFile.cpp: Add missing include
+        * kjs/testkjs.pro: Add VM into include path
+
+2008-04-14  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Restored OwnPtr in some places where I had removed it previously. We
+        can have an OwnPtr to an undefined class in a header as long as the
+        class's destructor isn't in the header.
+        
+2008-04-14  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Fixed access to "this" inside dynamic scopes.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::registerForLocal): Always return a register for
+        "this", even if we're not optimizing access to other locals. Because
+        "this" is a keyword, it's always in a register and always accessible.
+
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::shouldOptimizeLocals): Factored out a function
+        for determining whether we should optimize access to locals, since
+        eval will need to make this test a little more complicated.
+
+2008-04-14  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Adam.
+        
+        - fix crash when running SunSpider full harness
+        
+        When growing the register file's buffer to make space for new globals,
+        make sure to copy accounting for the fact that the new space is logically
+        at the beginning of the buffer in this case, instead of at the end as when
+        growing for a new call frame.
+
+        * VM/RegisterFile.cpp:
+        (KJS::RegisterFile::newBuffer):
+        (KJS::RegisterFile::growBuffer):
+        (KJS::RegisterFile::addGlobalSlots):
+        * VM/RegisterFile.h:
+
+2008-04-11  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Mark constant pools for global and eval code (collectively known as
+        "program code"). (Constant pools for function code are already marked by
+        their functions.)
+        
+        The global object is responsible for marking program code constant
+        pools. Code blocks add themselves to the mark set at creation time, and
+        remove themselves from the mark set at destruction time.
+        
+        sunspider --squirrelfish reports a 1% speedup, perhaps because
+        generateCode() is now non-virtual.
+
+        * kjs/nodes.cpp: I had to use manual init and delete in this file
+        because putting an OwnPtr into the header would have created a circular
+        header dependency.
+
+2008-04-10  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Bug 18231: Improve support for function call nodes in SquirrelFish
+        <https://bugs.webkit.org/show_bug.cgi?id=18231>
+
+        Use correct value of 'this' for function calls.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitResolveBaseAndFunc):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::resolveBaseAndFunc):
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::FunctionCallResolveNode::emitCode):
+
+2008-04-10  Geoffrey Garen  <ggaren@apple.com>
+
+        This time for sure.
+
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::evaluate):
+
+2008-04-10  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Fixed Interpreter::execute to honor the new model for returning non-NULL
+        values when an exception is thrown.
+
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::evaluate):
+
+2008-04-10  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Fix SquirrelFish interpreter to pass internal exceptions back to 
+        native code correctly.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-04-10  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Geoffrey Garen.
+
+        Replace the use of getCallData in op_construct with the new
+        getConstructData function that replaces implementsConstruct.
+
+        * API/JSCallbackConstructor.cpp:
+        (KJS::JSCallbackConstructor::getConstructData):
+        * API/JSCallbackConstructor.h:
+        * API/JSCallbackObject.h:
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::::getConstructData):
+        (KJS::::construct):
+        * API/JSObjectRef.cpp:
+        (JSObjectIsConstructor):
+        * JavaScriptCore.exp:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * kjs/CallData.h:
+        * kjs/ConstructData.h: Copied from JavaScriptCore/kjs/CallData.h.
+        * kjs/array_object.cpp:
+        (KJS::ArrayObjectImp::getConstructData):
+        * kjs/array_object.h:
+        * kjs/bool_object.cpp:
+        (KJS::BooleanObjectImp::getConstructData):
+        * kjs/bool_object.h:
+        * kjs/date_object.cpp:
+        (KJS::DateObjectImp::getConstructData):
+        * kjs/date_object.h:
+        * kjs/error_object.cpp:
+        (KJS::ErrorObjectImp::getConstructData):
+        (KJS::NativeErrorImp::getConstructData):
+        * kjs/error_object.h:
+        * kjs/function.cpp:
+        (KJS::FunctionImp::getCallData):
+        (KJS::FunctionImp::getConstructData):
+        (KJS::FunctionImp::construct):
+        * kjs/function.h:
+        * kjs/function_object.cpp:
+        (KJS::FunctionObjectImp::getConstructData):
+        * kjs/function_object.h:
+        * kjs/nodes.cpp:
+        (KJS::NewExprNode::inlineEvaluate):
+        * kjs/number_object.cpp:
+        (KJS::NumberObjectImp::getConstructData):
+        * kjs/number_object.h:
+        * kjs/object.cpp:
+        * kjs/object.h:
+        * kjs/object_object.cpp:
+        (KJS::ObjectObjectImp::getConstructData):
+        * kjs/object_object.h:
+        * kjs/regexp_object.cpp:
+        (KJS::RegExpObjectImp::getConstructData):
+        * kjs/regexp_object.h:
+        * kjs/string_object.cpp:
+        (KJS::StringObjectImp::getConstructData):
+        * kjs/string_object.h:
+        * kjs/value.cpp:
+        (KJS::JSCell::getConstructData):
+        * kjs/value.h:
+        (KJS::JSValue::getConstructData):
+
+2008-04-10  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Bug 18420: SquirrelFish: need to throw Reference and Type errors 
+        when attempting invalid operations on JSValues
+
+        Add validation and exception checks to SquirrelFish so that the
+        correct exceptions are thrown for undefined variables, type errors
+        and toObject failure.  Also handle exceptions thrown by native
+        function calls.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * VM/ExceptionHelpers.cpp: Added.
+        (KJS::substitute):
+        (KJS::createError):
+        (KJS::createUndefinedVariableError):
+        * VM/ExceptionHelpers.h: Added.
+          Helper functions
+        * VM/Machine.cpp:
+        (KJS::resolve):
+           Modified to signal failure
+        (KJS::isNotObject):
+           Wrapper for JSValue::isObject and exception creation (these need
+           to be merged, lest GCC go off the deep end)
+        (KJS::Machine::privateExecute):
+           Adding the many exception and validity checks.
+
+        * kjs/JSNotAnObject.cpp: Added.
+          Stub object used to reduce the need for multiple exception checks
+          when toObject fails.
+        (KJS::JSNotAnObject::toPrimitive):
+        (KJS::JSNotAnObject::getPrimitiveNumber):
+        (KJS::JSNotAnObject::toBoolean):
+        (KJS::JSNotAnObject::toNumber):
+        (KJS::JSNotAnObject::toString):
+        (KJS::JSNotAnObject::toObject):
+        (KJS::JSNotAnObject::mark):
+        (KJS::JSNotAnObject::getOwnPropertySlot):
+        (KJS::JSNotAnObject::put):
+        (KJS::JSNotAnObject::deleteProperty):
+        (KJS::JSNotAnObject::defaultValue):
+        (KJS::JSNotAnObject::construct):
+        (KJS::JSNotAnObject::callAsFunction):
+        (KJS::JSNotAnObject::getPropertyNames):
+        * kjs/JSNotAnObject.h: Added.
+        (KJS::JSNotAnObject::JSNotAnObject):
+        * kjs/JSImmediate.cpp:
+        (KJS::JSImmediate::toObject):
+          modified to create an JSNotAnObject rather than throwing an exception
+          directly.
+
+2008-04-10  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Pass a function body node its function's scope chain, rather than the
+        current execution context's scope chain, when compiling it.
+        
+        This doesn't matter yet, but it will once we start using the scope
+        chain during compilation.
+
+        sunspider --squirrelfish notes a tiny speedup.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-04-10  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Fix two bugs when throwing exceptions from re-entrant JS calls:
+        
+        (1) Don't shrink the register file to 0, since our caller may still
+        be using it.
+        
+        (2) In case of exception, return jsNull() instead of 0 because,
+        surprisingly, some JavaScriptCore clients rely on a function's return
+        value being safe to operate on even if the function threw an exception.
+        
+        Also:
+        
+        - Changed FunctionImp::callAsFunction to honor the new semantics of
+        exceptions not returning 0.
+        
+        - Renamed "handlerPC" to "handlerVPC" to match other uses of "VPC".
+        
+        - Renamed "exceptionData" to "exceptionValue", because "data" seemed to
+        imply something more than just a JSValue.
+        
+        - Merged prepareException into throwException, since throwException was
+        its only caller, and it seemed weird that throwException didn't take
+        an exception as an argument.
+
+        sunspider --squirrelfish does not seem to complain on my machine, but it
+        complains a little (.6%) on Oliver's.
+
+2008-04-10  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Fixed op_construct for CallTypeNative to reacquire "r" before setting
+        its return value, since registerBase can theoretically change during the
+        execution of arbitrary code. (Not sure if any native constructors
+        actually make this possible.)
+
+        sunspider --squirrelfish does not seem to complain.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-04-10  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt and Sam Weinig.
+        
+        Re-entrant execution of function code (global code -> built-in function
+        -> JS function):
+        
+        Miraculously, sunspider --squirrelfish does not seem to complain.
+
+        A re-entrant function call is the same as a normal function call with
+        one exception: the re-entrant call leaves everything except for
+        CallerCodeBlock in the call frame header uninitialized, since the call
+        doesn't need to return to JS code. (It sets CallerCodeBlock to 0, to
+        indicate that the call shouldn't return to JS code.)
+        
+        Also fixed a few issues along the way:
+        
+        - Fixed two bugs in the read-write List implementation that caused
+        m_size and m_buffer to go stale.
+        
+        - Changed native call code to update "r" *before* setting the return
+        value, since the call may in turn call JS code, which changes the value
+        of "r".
+        
+        - Migrated initialization of "r" outside of Machine::privateExecute,
+        because global code and function code initialize "r" differently.
+        
+        - Migrated a codegen warning from Machine::privateExecute to the wiki.
+        
+        - Removed unnecessary "r" parameter from slideRegisterWindowForCall
+
+        * VM/Machine.cpp:
+        (KJS::slideRegisterWindowForCall):
+        (KJS::scopeChainForCall):
+        (KJS::Machine::execute):
+        (KJS::Machine::privateExecute):
+        * VM/Machine.h:
+        * kjs/function.cpp:
+        (KJS::FunctionImp::callAsFunction):
+        * kjs/list.cpp:
+        (KJS::List::getSlice):
+        * kjs/list.h:
+        (KJS::List::clear):
+
+2008-04-10  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - fix problem with code generation for return with no argument
+        
+        3d-cube now runs
+
+        * kjs/nodes.cpp:
+        (KJS::ReturnNode::emitCode):
+
+2008-04-10  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - Implement support for JS constructors
+        
+        access-binary-trees and access-nbody now run.
+        
+        Inexplicably a 1% speedup.
+
+        * VM/Machine.cpp:
+        (KJS::initializeCallFrame):
+        (KJS::Machine::privateExecute):
+        * VM/Machine.h:
+        (KJS::Machine::):
+
+2008-04-10  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+
+        - More code cleanup in preparation for JS constructors
+
+        Factor the remaining interesting parts of JS function calls into
+        slideRegisterWindowForCall and scopeChainForCall.
+        
+        * VM/Machine.cpp:
+        (KJS::slideRegisterWindowForCall):
+        (KJS::scopeChainForCall):
+        (KJS::Machine::privateExecute):
+
+2008-04-10  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff.
+        
+        - Code cleanup in preparation for JS constructors
+
+        - Renamed returnInfo to callFrame. 
+        - Made an enum which defines what goes where in the call frame.
+        - Factored out initializeCallFrame function from op_call
+        
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitCall):
+        (KJS::CodeGenerator::emitConstruct):
+        * VM/Machine.cpp:
+        (KJS::Machine::dumpRegisters):
+        (KJS::initializeCallFrame):
+        (KJS::Machine::unwindCallFrame):
+        (KJS::Machine::execute):
+        (KJS::Machine::privateExecute):
+        * VM/Machine.h:
+        (KJS::Machine::):
+
+2008-04-10  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Fixed two bugs in register allocation for function calls:
+        
+        (1) op_call used to allocate codeBlock->numVars too many registers for
+        each call frame, due to duplicated math. Fixing this revealed...
+        
+        (2) By unconditionally calling resize(), op_call used to truncate the
+        register file when calling a function whose registers fit wholly within
+        the register file already allocated by its caller.
+        
+        sunspider --squirrelfish reports no regression.
+        
+        I also threw in a little extra formatting to dumpCallFrame, because it
+        helped me debug these issues.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::dumpRegisters):
+        (KJS::Machine::execute):
+        (KJS::Machine::privateExecute):
+        * VM/RegisterFile.h:
+        (KJS::RegisterFile::shrink):
+        (KJS::RegisterFile::grow):
+        * VM/RegisterFileStack.cpp:
+        (KJS::RegisterFileStack::popRegisterFile):
+
+2008-04-09  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        Next step toward re-entrant execution of function code (global code ->
+        built-in function -> JS function):
+        
+        Made op_ret return from Machine::privateExecute if its calling codeBlock
+        is NULL.
+        
+        I'm checking this in by itself to demonstrate that a more clever
+        mechanism is not necessary for performance.
+        
+        sunspider --squirrelfish reports no regression.
+
+        * ChangeLog:
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+        (KJS::Machine::privateExecute):
+
+2008-04-09  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        Next step toward re-entrant execution of function code (global code ->
+        built-in function -> JS function):
+        
+        Made Machine::execute return a value.
+        
+        Sketched out some code for Machine::execute for functions -- still
+        doesn't work yet, though.
+
+        sunspider --squirrelfish reports no regression.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::execute):
+        (KJS::Machine::privateExecute):
+        * VM/Machine.h:
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::evaluate):
+        * kjs/testkjs.cpp:
+        (runWithScripts):
+
+2008-04-09  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        First step toward re-entrant execution of function code (global code ->
+        built-in function -> JS function):
+        
+        Tiny bit of refactoring in the Machine class.
+
+        sunspider --squirrelfish reports no regression.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::dumpRegisters):
+        (KJS::Machine::unwindCallFrame):
+        (KJS::Machine::execute):
+        (KJS::Machine::privateExecute):
+        * VM/Machine.h:
+        (KJS::Machine::isGlobalCallFrame):
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::evaluate):
+
+2008-04-08  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Support for re-entrant execution of global code (global code -> built-in
+        function -> global code).
+        
+        Keep a stack of register files instead of just one. Globals propogate
+        between register files as the register files enter and exit the stack.
+        
+        An activation still uses its own register file's base as its
+        registerBase, but the global object uses the register file *stack*'s
+        registerBase, which updates dynamically to match the register file at
+        the top of the stack.
+        
+        sunspider --squirrelfish reports no regression.
+
+2008-04-08  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff.
+        
+        - initial preparatory work for JS constructors
+        
+        1) Allocate registers for the returnInfo block and "this" value when generating code for
+        op_construct. These are not used yet, but the JS branch of op_construct will use them.
+        
+        2) Adjust argc and argv appropriately for native constructor calls.
+        
+        3) Assign return value in a more straightforward way in op_ret since this is actually
+        a bit faster (and makes up for the allocation of extra registers above).
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitConstruct):
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-04-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Fixed crashing SunSpider tests.
+        
+        Let's just pretend this never happened, bokay?
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::CodeGenerator):
+        * VM/CodeGenerator.h:
+        * VM/RegisterFile.cpp:
+        (KJS::RegisterFile::addGlobals):
+
+2008-04-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Restored dumping of generated code as a command-line switch:
+        run-testkjs -d will do it.
+
+2008-04-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Next step toward supporting re-entrant evaluation: Moved register file
+        maintenance code into a proper "RegisterFile" class.
+        
+        There's a subtle change to the register file's internal layout: for
+        global code / the global object, registerOffset is always 0 now. In
+        other words, all register counting starts at 0, not 0 + (number of
+        global variables). The helps simplify accounting when the number of
+        global variables changes.
+
+2008-04-07  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Bug 18338: Support exceptions in SquirrelFish <http://bugs.webkit.org/show_bug.cgi?id=18338>
+        
+        Initial support for exceptions in SquirrelFish, only supports finalisers in the
+        simple cases (eg. exceptions and non-goto/return across finaliser boundaries).
+        This doesn't add the required exception checks to existing code, it merely adds
+        support for throw, catch, and the required stack unwinding.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        (KJS::CodeBlock::getHandlerForVPC):
+        * VM/CodeBlock.h:
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitCatch):
+        (KJS::CodeGenerator::emitThrow):
+        * VM/CodeGenerator.h:
+        * VM/JSPropertyNameIterator.cpp:
+        (KJS::JSPropertyNameIterator::create):
+        * VM/Machine.cpp:
+        (KJS::prepareException):
+        (KJS::Machine::unwindCallFrame):
+        (KJS::Machine::throwException):
+        (KJS::Machine::privateExecute):
+        * VM/Machine.h:
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::ThrowNode::emitCode):
+        (KJS::TryNode::emitCode):
+        * kjs/nodes.h:
+        * kjs/scope_chain.cpp:
+        (KJS::ScopeChain::depth):
+        * kjs/scope_chain.h:
+
+2008-04-06  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        First step toward supporting re-entrant evaluation: Switch register
+        clients from using "registers", a pointer to a register vector, to
+        "registerBase", an indirect pointer to the logical first entry in the
+        register file. (The logical first entry is the first entry that is not
+        a global variable).
+        
+        With a vector, offsets into the register file remain good when the
+        underlying buffer reallocates, but they go bad when the logical
+        first entry moves. (The logical first entry moves when new global
+        variables get added to the beginning of the register file.) With an
+        indirect pointer to the logical first entry, offsets will remain good
+        regardless.
+
+        1.4% speedup on sunspider --squirrelfish. I suspect this is due to
+        reduced allocation when creating closures, and reduced indirection
+        through the register vector.
+
+        * wtf/Vector.h: Added an accessor for an indirect pointer to the vector's
+        buffer, which we currently use (incorrectly) for registerBase. This is
+        temporary scaffolding to allow us to change client code without
+        changing behavior.
+
+2008-04-06  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Oliver Hunt.
+
+        Implement codegen for ReadModifyDotNode.
+
+        * kjs/nodes.cpp:
+        (KJS::ReadModifyDotNode::emitCode):
+        * kjs/nodes.h:
+
+2008-04-06  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Oliver Hunt.
+
+        Fix codegen for PostIncDotNode and implement codegen for PostIncBracketNode,
+        PostDecBracketNode and PostDecDotNode.
+
+        * kjs/nodes.cpp:
+        (KJS::PostIncBracketNode::emitCode):
+        (KJS::PostDecBracketNode::emitCode):
+        (KJS::PostIncDotNode::emitCode):
+        (KJS::PostDecDotNode::emitCode):
+        * kjs/nodes.h:
+
+2008-04-06  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Geoffrey Garen.
+
+        Implement codegen for PreDecResolveNode, PreIncBracketNode, PreDecBracketNode,
+        PreIncDotNode and PreDecDotNode.  This required adding one new op code, op_pre_dec.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitPreDec):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::PreDecResolveNode::emitCode):
+        (KJS::PreIncBracketNode::emitCode):
+        (KJS::PreDecBracketNode::emitCode):
+        (KJS::PreIncDotNode::emitCode):
+        (KJS::PreDecDotNode::emitCode):
+        * kjs/nodes.h:
+
+2008-04-06  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Improved register dumping, plus a liberal smattering of "const". Here's
+        what the new format looks like:
+
+        (gdb) call (void)dumpCallFrame(codeBlock, scopeChain, registers->begin(), r)
+        4 instructions; 48 bytes at 0x509210; 3 locals (2 parameters); 1 temporaries
+
+        [   0] load             lr1, undefined(@k0)
+        [   3] load             lr1, 2(@k1)
+        [   6] add              tr0, lr2, lr1
+        [  10] ret              tr0
+
+        Constants:
+          k0 = undefined
+          k1 = 2
+
+        Register frame: 
+
+        ----------------------------------------
+             use      |   address  |    value   
+        ----------------------------------------
+        [return info] |   0x80ac08 |   0x5081c0 
+        [return info] |   0x80ac0c |   0x508e90 
+        [return info] |   0x80ac10 |   0x504acc 
+        [return info] |   0x80ac14 |        0x2 
+        [return info] |   0x80ac18 |        0x0 
+        [return info] |   0x80ac1c |        0x7 
+        [return info] |   0x80ac20 |        0x0 
+        ----------------------------------------
+        [param]       |   0x80ac24 |        0x1 
+        [param]       |   0x80ac28 |        0x7 
+        [var]         |   0x80ac2c |        0xb 
+        [temp]        |   0x80ac30 |        0xf 
+
+2008-04-06  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Support for evaluating multiple scripts in the same global environment.
+        (Still don't support re-entrant evaluation yet.)
+
+        The main changes here are:
+
+        (1) Obey the ECMA 10.1.3 rules regarding how to resolve collisions when
+        a given symbol is declared more than once. (This patch fixes the same
+        issue for function code, too.)
+        
+        (2) In the case of var and/or function collisions, reuse the existing
+        storage slot. For global code, this is required for previously
+        generated instructions to continue to work. For function code, it's
+        more of a "nice to have": it makes register layout in the case of
+        collisions easier to understand, and has the added benefit of saving
+        memory.
+        
+        (3) Allocate slots in the CodeGenerator's m_locals vector in parallel
+        to register indexes in the symbol table. This ensures that, given an
+        index in the symbol table, we can find the corresponding RegisterID
+        without hashing, which speeds up codegen. 
+        
+        I moved responsibility for emitting var and function initialization
+        instructions into the CodeGenerator, because bookkeeping in cases where
+        var, function, and/or parameter names collide requires a lot of
+        internal knowledge about the CodeGenerator.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::addVar): Removed responsibility for checking whether
+        a var declaration overwrites "arguments", because the check is
+        inappropriate for global code, which may not have a pre-existing
+        "arguments" symbol in scope. Also changed this function to return a
+        boolean indicating whether addVar actually created a new RegisterID,
+        or just reused an old one.
+        
+        (KJS::CodeGenerator::CodeGenerator): Split out the constructors for
+        function code and global code, since they're quite different now.
+        
+        (KJS::CodeGenerator::registerForLocal): This function does its job
+        without any hashing now.
+        
+        * VM/Machine.cpp: Move old globals and update "r" before executing a
+        new script. That way, old globals stay at a constant offset from "r",
+        and previously optimized code still works.
+        
+        * VM/RegisterID.h: Added the ability to allocate a RegisterID before
+        initializing its index field. We use this for parameters now.
+
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::symbolTableGet): Changed the ungettable getter
+        ASSERT to account for the fact that symbol indexes are all negative.
+
+2008-04-05  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Geoffrey Garen.
+
+        Implement codegen for InNode.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitIn):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::InNode::emitCode):
+        * kjs/nodes.h:
+
+2008-04-05  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Oliver Hunt.
+
+        - Implement codegen for DeleteResolveNode, DeleteBracketNode, DeleteDotNode and DeleteValueNode.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitGetPropId):
+        (KJS::CodeGenerator::emitPutPropId):
+        (KJS::CodeGenerator::emitDeletePropId):
+        (KJS::CodeGenerator::emitDeletePropVal):
+        (KJS::CodeGenerator::emitPutPropIndex):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::DeleteResolveNode::emitCode):
+        (KJS::DeleteBracketNode::emitCode):
+        (KJS::DeleteDotNode::emitCode):
+        (KJS::DeleteValueNode::emitCode):
+        * kjs/nodes.h:
+
+2008-04-04  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Oliver Hunt.
+
+        - Implement codegen for Switch statements.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::pushJumpContext):
+        (KJS::CodeGenerator::popJumpContext):
+        (KJS::CodeGenerator::jumpContextForLabel):
+        * VM/CodeGenerator.h:
+        Rename LoopContext to JumpContext now that it used of Switch statements in addition
+        to loops.
+
+        * kjs/nodes.cpp:
+        (KJS::DoWhileNode::emitCode):
+        (KJS::WhileNode::emitCode):
+        (KJS::ForNode::emitCode):
+        (KJS::ForInNode::emitCode):
+        (KJS::ContinueNode::emitCode):
+        (KJS::BreakNode::emitCode):
+        (KJS::CaseBlockNode::emitCodeForBlock):
+        (KJS::SwitchNode::emitCode):
+        * kjs/nodes.h:
+        (KJS::CaseClauseNode::expr):
+        (KJS::CaseClauseNode::children):
+        (KJS::CaseBlockNode::):
+
+2008-04-03  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Sam.
+        
+        - fix crash in codegen from new nodes
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitConstruct):
+        * kjs/nodes.h:
+
+2008-04-03  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff.
+
+        * kjs/nodes.cpp:
+        (KJS::ReadModifyResolveNode::emitCode):
+        (KJS::ReadModifyBracketNode::emitCode):
+        * kjs/nodes.h:
+
+2008-04-02  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff.
+        
+        - take a shot at marking constant pools for global and eval code
+        
+        Geoff says this won't really work in all cases but is an ok stopgap.
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::mark):
+
+2008-04-02  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff.
+        
+        - fix 2x perf regression in 3d-morph
+        
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): If we subbed in null for the global object,
+        don't toObject it, since that will throw an exception (very slowly).
+
+2008-04-02  Maciej Stachowiak  <mjs@apple.com>
+
+        Rubber stamped by Geoff
+        
+        - fix Release build
+
+        * kjs/nodes.cpp:
+        (KJS::getNonLocalSymbol):
+
+2008-04-02  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Removed the last vestiges of LocalStorage from JSVariableObject and
+        JSGlobalObject.
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::saveLocalStorage): Save and restore from/to
+        registers. Use stub isReadOnly and isDontEnum methods for now, until
+        we really implement attributes in the symbol table.
+        (KJS::JSGlobalObject::restoreLocalStorage):
+        (KJS::JSGlobalObject::reset):
+
+        * kjs/JSVariableObject.cpp:
+        (KJS::JSVariableObject::getPropertyNames): Use stub isDontEnum method
+        for now, as above.
+        (KJS::JSVariableObject::getPropertyAttributes): ditto
+
+        * kjs/JSVariableObject.h: Removed LocalStorage from JSVariableObjectData.
+        Removed mark method, because subclasses implement different strategies for
+        marking registers.
+        (KJS::JSVariableObject::isReadOnly): Stub method
+        (KJS::JSVariableObject::isDontEnum): ditto
+
+        Changed the code below to ASSERT_NOT_REACHED() and return 0, since it
+        can no longer retrieve LocalStorage from the ExecState. (Eventually,
+        we'll just remove this code and all its friends, but that's a task for
+        later.)
+        
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::ExecState):
+        * kjs/function.cpp:
+        (KJS::ActivationImp::markChildren):
+        * kjs/function.h:
+        * kjs/nodes.cpp:
+        (KJS::getNonLocalSymbol):
+        (KJS::ScopeNode::optimizeVariableAccess):
+        (KJS::ProgramNode::processDeclarations):
+
+2008-04-01  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Got globals?
+        
+        To get things working, I had to roll out
+        http://trac.webkit.org/projects/webkit/changeset/31226 for the time
+        being.
+
+        * VM/CodeBlock.h: Removed obsolete function.
+        
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): For the sake of re-entrancy, we track
+        and restore the global object's old rOffset value. (No way to test this
+        yet, but I think it will work.)
+
+2008-04-01  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff.
+        
+        - mark the constant pool (at least for function code blocks)
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::mark):
+        * VM/CodeBlock.h:
+        * kjs/function.cpp:
+        (KJS::FunctionImp::mark):
+        * kjs/nodes.cpp:
+        (KJS::ScopeNode::mark):
+        * kjs/nodes.h:
+        (KJS::FuncExprNode::body):
+        (KJS::FuncDeclNode::body):
+
+2008-04-01  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Beth Dakin.
+        
+        Cleaned up a few loose ends.
+
+        * JavaScriptCore.exp: Export dumpRegisters, so it's visible to gdb even
+        if we don't explicitly call it in the source text.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): No need to call dumpRegisters anymore,
+        since that was just a hack for gdb's sake.
+
+        * kjs/JSActivation.h: Removed obsolete comment.
+
+        * VM/CodeGenerator.cpp: Added ASSERTs to verify that the localCount
+        we're given matches the number of locals actually allocated.
+
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::CodeGenerator): Changed "localCount" to include
+        the parameter count, since we're using the word "local" to mean
+        parameter, var, function, or "this". Renamed "m_nextLocal" to
+        "m_nextVar", since "m_nextLocal" doesn't contrast well with
+        "m_nextParameter".
+        
+        Also moved tracking of implicit "this" parameter from here...
+
+        * kjs/nodes.cpp:
+        (KJS::FunctionBodyNode::generateCode): ... to here
+        (KJS::ProgramNode::generateCode): ... and here
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump): Added missing "\n".
+
+2008-04-01  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver.
+
+        Bug 18274: ResolveNode::emitCode() doesn't make a new temporary when dst
+                   is 0, leading to incorrect codegen
+        <http://bugs.webkit.org/show_bug.cgi?id=18274>
+
+        * kjs/nodes.cpp:
+        (KJS::FunctionCallBracketNode::emitCode):
+        (KJS::FunctionCallDotNode::emitCode):
+
+2008-04-01  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - fix bug in for..in codegen (gotta use ident, not m_ident)
+
+        * kjs/nodes.cpp:
+        (KJS::ForInNode::emitCode):
+
+2008-04-01  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - Add suport for regexp literals
+
+        * VM/CodeBlock.cpp:
+        (KJS::regexpToSourceString):
+        (KJS::regexpName):
+        (KJS::CodeBlock::dump):
+        * VM/CodeBlock.h:
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::addRegExp):
+        (KJS::CodeGenerator::emitNewRegExp):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::RegExpNode::emitCode):
+        * kjs/nodes.h:
+
+2008-04-01  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff
+
+        Add support for for..in nodes
+        
+        Added two new opcodes to get_pnames and next_pname to handle iterating
+        over the set of properties on an object.  This iterator is explicitly
+        invalidated and the property name array is released on standard exit
+        from the loop, otherwise we rely on GC to do the clean up for us.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitNextPropertyName):
+        (KJS::CodeGenerator::emitGetPropertyNames):
+        * VM/CodeGenerator.h:
+        * VM/JSPropertyNameIterator.cpp: Added.
+        (KJS::JSPropertyNameIterator::JSPropertyNameIterator):
+        (KJS::JSPropertyNameIterator::type):
+        (KJS::JSPropertyNameIterator::toPrimitive):
+        (KJS::JSPropertyNameIterator::getPrimitiveNumber):
+        (KJS::JSPropertyNameIterator::toBoolean):
+        (KJS::JSPropertyNameIterator::toNumber):
+        (KJS::JSPropertyNameIterator::toString):
+        (KJS::JSPropertyNameIterator::toObject):
+        (KJS::JSPropertyNameIterator::mark):
+        (KJS::JSPropertyNameIterator::next):
+        (KJS::JSPropertyNameIterator::invalidate):
+        (KJS::JSPropertyNameIterator::~JSPropertyNameIterator):
+        (KJS::JSPropertyNameIterator::create):
+        * VM/JSPropertyNameIterator.h: Added.
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * VM/Register.h:
+        (KJS::Register::):
+        * kjs/PropertyNameArray.h:
+        * kjs/nodes.cpp:
+        (KJS::ForInNode::emitCode):
+        * kjs/nodes.h:
+        * kjs/value.h:
+
+2008-04-01  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Change CodeGenerator::emitCall() so it increments the reference count of
+        registers passed to it, and change its callers so they don't needlessly
+        increment the reference count of the registers they are passing.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitCall):
+        * kjs/nodes.cpp:
+        (KJS::FunctionCallResolveNode::emitCode):
+        (KJS::FunctionCallDotNode::emitCode):
+
+2008-04-01  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - generate call for PostIncDotNode
+
+        * kjs/nodes.cpp:
+        (KJS::PostIncDotNode::emitCode):
+        * kjs/nodes.h:
+
+2008-04-01  Maciej Stachowiak  <mjs@apple.com>
+
+        Build fix.
+        
+        - fix build (not sure how this ever worked?)
+
+        * kjs/nodes.cpp:
+        (KJS::FunctionCallBracketNode::emitCode):
+
+2008-04-01  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff.
+        
+        - generate code for FunctionCallBracketNode
+
+        * kjs/nodes.cpp:
+        (KJS::FunctionCallBracketNode::emitCode):
+        * kjs/nodes.h:
+
+2008-04-01  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Geoff.
+        
+        - Fix two crashing SunSpider tests
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): set up 'this' properly for native calls.
+        * kjs/list.h:
+        (KJS::List::List): Fix intialization of buffer and size from
+        vector, the initialization order was wrong.
+
+2008-04-01  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: marked ASSERT-only variables as UNUSED_PARAMs.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::symbolTableInitializeVariable):
+
+2008-04-01  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Next step toward global code: Moved get, put, and initializeVariable
+        functionality up into JSVariableObject, and changed JSActivation to
+        rely on it. 
+
+        * kjs/JSActivation.cpp:
+        (KJS::JSActivation::JSActivation):
+        (KJS::JSActivation::getOwnPropertySlot):
+        (KJS::JSActivation::put):
+        (KJS::JSActivation::initializeVariable):
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::valueAt):
+        (KJS::JSVariableObject::isReadOnly):
+        (KJS::JSVariableObject::symbolTableGet):
+        (KJS::JSVariableObject::symbolTablePut):
+        (KJS::JSVariableObject::symbolTableInitializeVariable):
+
+2008-04-01  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Sam.
+        
+        - fix HashTable assertion on some SunSpider tests
+        
+        Don't use -1 as the deleted value for JSValue*-keyed hashtables,
+        since it is a valid value (it's the immediate for -1).
+
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::JSValueHashTraits::emptyValue):
+        (KJS::CodeGenerator::JSValueHashTraits::deletedValue):
+        * kjs/JSImmediate.h:
+        (KJS::JSImmediate::impossibleValue):
+
+2008-04-01  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Maciej Stachowiak.
+
+        Add support for calling Native constructors like new Array(). 
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitConstruct):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::NewExprNode::emitCode):
+        * kjs/nodes.h:
+
+2008-04-01  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Sam.
+        
+        - add some missing toOpbject calls to avoid crashing when calling methods on primitives
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-04-01  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Changed Machine::dumpRegisters to take a pointer instead of a reference,
+        so gdb understands how to call it.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::dumpRegisters):
+        (KJS::Machine::privateExecute):
+        * VM/Machine.h:
+
+2008-03-31  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Fix CodeGenerator::addConstant() so it uses the functionExpressions
+        counter for function expressions, not the functions counter.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::addConstant):
+
+2008-03-31  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Geoffrey Garen.
+
+        Add emitCode support for TypeOfResolveNode and TypeOfValueNode.
+        Added new opcode op_type_of to handle them.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitNot):
+        (KJS::CodeGenerator::emitInstanceOf):
+        (KJS::CodeGenerator::emitTypeOf):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::jsTypeStringForValue):
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::TypeOfResolveNode::emitCode):
+        (KJS::TypeOfValueNode::emitCode):
+        * kjs/nodes.h:
+
+2008-03-31  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Oliver Hunt.
+
+        Fix non-computed goto version of isOpcode. op_end is a valid opcode.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::isOpcode):
+
+2008-03-31  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Added op_post_dec.
+
+2008-03-31  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Geoffrey Garen.
+
+        Add support for FunctionCallDotNode.
+
+        * kjs/nodes.cpp:
+        (KJS::FunctionCallDotNode::emitCode):
+        * kjs/nodes.h:
+
+2008-03-31  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Beth Dakin.
+
+        Next step toward global code: Removed more obsolete API, moved
+        saveLocalStorage and restoreLocalStorage to JSGlobalObject subclass,
+        since it's only intended for use there.
+        
+        * ChangeLog:
+        * JavaScriptCore.exp:
+        * kjs/Activation.h:
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::saveLocalStorage):
+        (KJS::JSGlobalObject::restoreLocalStorage):
+        * kjs/JSGlobalObject.h:
+        * kjs/JSVariableObject.cpp:
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
+        * kjs/function.cpp:
+        (KJS::ActivationImp::ActivationImp):
+
+2008-03-31  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Beth Dakin.
+
+        Next step toward global code: subclass JSActivation + JSActivationData
+        from JSVariableObject + JSVariableObjectData.
+        
+        JSActivation now relies on JSVariableObject for access to registers and
+        symbol table, and for some delete functionality, but not for anything
+        else yet.
+
+        (KJS::JSActivation::mark): Cleaned up the style here a little bit.
+
+2008-03-31  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Beth Dakin.
+        
+        Next step toward global code: store "rOffset" in JSVariableObjectData.
+
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
+
+2008-03-31  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Next steps toward global code:
+        
+        * Moved access to the register file into JSVariableObject.
+        
+        * Added more ASSERTs to indicate obsolete APIs there are just hanging
+        around to stave off build failures.
+
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::registers):
+        (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
+        (KJS::JSVariableObject::JSVariableObject):
+
+2008-03-31  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Oliver. Tweaked somewhat by Maciej.
+        
+        - implement codegen for ReadModifyResolveNode
+
+        * kjs/nodes.cpp:
+        (KJS::emitReadModifyAssignment):
+        (KJS::ReadModifyResolveNode::emitCode):
+        * kjs/nodes.h:
+
+2008-03-31  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Geoff.
+
+        Fix the build -- r31492 removed activation tear-off, but r31493 used it.
+
+        * kjs/nodes.cpp:
+        (KJS::FuncExprNode::makeFunction):
+
+2008-03-31  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Add support for FuncExprNode to SquirrelFish.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeBlock.h:
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::addConstant):
+        (KJS::CodeGenerator::emitNewFunctionExpression):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::FuncExprNode::emitCode):
+        (KJS::FuncExprNode::makeFunction):
+        * kjs/nodes.h:
+
+2008-03-31  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        First step toward global code: removed some obsolete JSGlobalObject
+        APIs, changing clients to ASSERT_NOT_REACHED.
+        
+        Activation tear-off and scope chain pushing is obsolete because we
+        statically detect whether an activation + scope node is required.
+        
+        The variableObject() and activationObject() accessors are obsolete
+        because they haven't been maintained, and they're mostly used by
+        node evaluation code, anyway.
+        
+        The localStorage() accessor is obsolete because everything is in
+        registers now, and it's mostly used by node evaluation code, anyway.
+
+2008-03-31  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Darin.
+        
+        - implement codegen for bracket accessor and bracket assign
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitGetPropVal):
+        (KJS::CodeGenerator::emitPutPropVal):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::BracketAccessorNode::emitCode):
+        (KJS::AssignBracketNode::emitCode):
+        * kjs/nodes.h:
+
+2008-03-31  Geoffrey Garen  <ggaren@apple.com>
+
+        Not reviewed.
+        
+        Removed FIXME that I just fixed.
+        
+        Added ASSERT to cover an error previously only covered by a FIXME.
+
+        * kjs/JSActivation.cpp:
+        (KJS::JSActivation::getOwnPropertySlot):
+
+2008-03-31  Geoffrey Garen  <ggaren@apple.com>
+
+        Not reviewed.
+
+        Fixed indentation inside op_call. (I had left this code badly indented
+        to make the behavior-changing diff clearer.)
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-03-31  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Fixed up logging of jump instructions to follow the following style:
+        
+        jump    offset(->absoluteTarget)
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+
+2008-03-31  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Changed the SymbolTable API to use int instead of size_t. It has been
+        using int internally for a while now (since squirrelfish symbols can
+        have negative indices).
+
+2008-03-31  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Add support for FunctionCallValueNode.
+
+        * kjs/nodes.cpp:
+        (KJS::FunctionCallValueNode::emitCode):
+        * kjs/nodes.h:
+
+2008-03-31  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        1) Implemented array literals
+        
+        2) Renamed op_object_get and op_object_put to op_get_prop_id and
+        op_put_prop_id in preparation for new variants.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitNewArray):
+        (KJS::CodeGenerator::emitGetPropId):
+        (KJS::CodeGenerator::emitPutPropId):
+        (KJS::CodeGenerator::emitPutPropIndex):
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::CodeGenerator):
+        (KJS::CodeGenerator::propertyNames):
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::ArrayNode::emitCode):
+        (KJS::PropertyListNode::emitCode):
+        (KJS::DotAccessorNode::emitCode):
+        (KJS::PostIncResolveNode::emitCode):
+        (KJS::PreIncResolveNode::emitCode):
+        (KJS::AssignResolveNode::emitCode):
+        (KJS::AssignDotNode::emitCode):
+        * kjs/nodes.h:
+
+2008-03-30  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Implemented native function calls. (Re-entering from native code back
+        to JS doesn't work yet, though.)
+
+        0.2% speedup overall, due to some inlining tweaks. 3.6% regression on
+        function-empty.js, since we're making a new virtual call and taking a
+        new branch inside every op_call.
+        
+        I adjusted the JavaScriptCore calling convention to minimize overhead,
+        like so:
+        
+        The machine calls a single virtual function, "getCallData", to get all
+        the data it needs for a function call. Native code still uses the old
+        "isObject()" check followed by an "implementsCall()" check, which
+        aliases to "getCallData". (We can optimize native code to use getCallData
+        at our leisure.)
+        
+        To supply a list of arguments, the machine calls a new List constructor
+        that just takes a pointer and a length, without copying. Native code
+        still appends to the list one argument at a time. (We can optimize
+        native code to use the new List constructor at our leisure.)
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): Changed resize() call to grow() call,
+        to encourage the compiler to inline the Vector code.
+
+        * kjs/CallData.h: Added.
+        (KJS::): CallData is a union because eventually native calls will stuff
+        a function pointer into it, to eliminate the callAsFunction virtual call.
+
+        * kjs/function.cpp:
+        (KJS::FunctionImp::callAsFunction): Changed this to an ASSERT since
+        it's not implemented yet.
+        
+        * kjs/list.h: Made the List class two-faced, to support the old way and
+        the new way during this transition phase: lists can be made read-only
+        with just a pointer and a legnth, or you can append to them one item
+        at a time.
+
+        * kjs/value.h:
+        (KJS::jsUndefined): Marked this function ALWAYS_INLINE for the benefit
+        of a certain compiler that doesn't know what's best for it.
+
+2008-03-30  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+
+        Dump code that codegen can't handle yet, so it's easier to prioritize missing nodes.
+        
+        * kjs/nodes.h:
+        (KJS::Node::emitCode):
+
+2008-03-30  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+
+        Improve dumping of bytecode and fix coding style accordingly.
+        
+        Registers are printed as lr1 for locals, tr1 for temp registers. Identifiers print as
+        foobar(@id0) and constants print as "foo"(@k1) or 312.4(@k2) or the like. Constant and
+        identifier tables are dumped for reference.
+        
+        * VM/CodeBlock.cpp:
+        (KJS::escapeQuotes):
+        (KJS::valueToSourceString):
+        (KJS::registerName):
+        (KJS::constantName):
+        (KJS::idName):
+        (KJS::printUnaryOp):
+        (KJS::printBinaryOp):
+        (KJS::CodeBlock::dump):
+        * VM/Machine.cpp:
+        (KJS::resolve):
+        (KJS::resolveBase):
+        (KJS::Machine::privateExecute):
+
+2008-03-30  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        Implement StringNode and VoidNode (both pretty trivial).
+
+        * kjs/nodes.cpp:
+        (KJS::StringNode::emitCode):
+        (KJS::VoidNode::emitCode):
+        * kjs/nodes.h:
+
+2008-03-30  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Sam.
+
+        Implement CommaNode.
+        
+        * kjs/nodes.cpp:
+        (KJS::CommaNode::emitCode):
+        * kjs/nodes.h:
+
+2008-03-30  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Adds support for dot notation and object literals.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitNewObject):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::ObjectLiteralNode::emitCode):
+        (KJS::PropertyListNode::emitCode):
+        (KJS::DotAccessorNode::emitCode):
+        (KJS::AssignDotNode::emitCode):
+        * kjs/nodes.h:
+
+2008-03-29  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Mark the register file. 
+        
+        It's a conservative mark for now, but once registers are typed, we can
+        do an exact mark.
+        
+        1.4% regression regardless of whether we actually do the marking.
+        GCC is is worth every penny.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): Most of the changes here are just for
+        the fact that "registers" is a pointer now.
+
+        * kjs/JSGlobalObject.cpp: The global object owns the register file now.
+
+2008-03-28  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 18204: SquirrelFish: continue/break do not correctly handle scope popping
+        <http://bugs.webkit.org/show_bug.cgi?id=18204>
+
+        We now track the scope depth as part of a loop context, and add an
+        extra instruction op_jump_scopes that is used to perform a jump across
+        dynamic scope boundaries.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitJumpScopes):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::ContinueNode::emitCode):
+        (KJS::BreakNode::emitCode):
+
+2008-03-28  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Geoffrey Garen.
+
+        Add emitCode support for ConditionalNode.
+
+        * kjs/nodes.cpp:
+        (KJS::ConditionalNode::emitCode):
+        * kjs/nodes.h:
+
+2008-03-28  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Responding to feedback, added some comments, fixed up a few names, and
+        clarified that "locals" always means all local variables, functions,
+        and parameters.
+
+2008-03-28  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        Added support for "this".
+        
+        Supply an implicit "this" value as the first argument to every function.
+        Alias the "this" keyword to that argument.
+        
+        1% regression overall, 2.5% regression on empty function calls. Seems
+        like a reasonable cost for now, since we're doing more work.
+        (Eventually, we might decide to create a version of op_call specialized
+        for a known null "this" value.)
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitCall):
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::CodeGenerator):
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * kjs/CommonIdentifiers.cpp:
+        (KJS::CommonIdentifiers::CommonIdentifiers):
+        * kjs/CommonIdentifiers.h:
+        * kjs/nodes.cpp:
+        (KJS::ThisNode::emitCode):
+        (KJS::FunctionCallResolveNode::emitCode):
+        * kjs/nodes.h:
+
+2008-03-28  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Bug 18192: Squirrelfish needs support for break and continue
+        <http://bugs.webkit.org/show_bug.cgi?id=18192>
+
+        Added a loop context stack to the code generator to provide the
+        correct jump labels for continue and goto.  Added logic to the
+        currently implemented loop constructs to manage entry and exit
+        from the loop contexts.  Finally, implemented codegen for break
+        and continue (and a pass through for LabelNode)
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::pushLoopContext):
+        (KJS::CodeGenerator::popLoopContext):
+        (KJS::CodeGenerator::loopContextForIdentifier):
+        (KJS::CodeGenerator::labelForContinue):
+        (KJS::CodeGenerator::labelForBreak):
+        * VM/CodeGenerator.h:
+        * kjs/nodes.cpp:
+        (KJS::DoWhileNode::emitCode):
+        (KJS::WhileNode::emitCode):
+        (KJS::ForNode::emitCode):
+        (KJS::ContinueNode::emitCode):
+        (KJS::BreakNode::emitCode):
+        (KJS::LabelNode::emitCode):
+        * kjs/nodes.h:
+
+2008-03-27  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Geoffrey Garen.
+
+        Add emitCode support for UnaryPlusNode, NegateNode, BitwiseNotNode and LogicalNotNode.
+
+        * VM/CodeBlock.cpp:
+        (KJS::printUnaryOp):
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitToJSNumber):
+        (KJS::CodeGenerator::emitNegate):
+        (KJS::CodeGenerator::emitBitNot):
+        (KJS::CodeGenerator::emitNot):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::UnaryPlusNode::emitCode):
+        (KJS::NegateNode::emitCode):
+        (KJS::BitwiseNotNode::emitCode):
+        (KJS::LogicalNotNode::emitCode):
+        * kjs/nodes.h:
+
+2008-03-27  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej Stachowiak.
+
+        Add support for LogicalAndNode and LogicalOrNode.
+
+        * kjs/nodes.cpp:
+        (KJS::LogicalAndNode::emitCode):
+        (KJS::LogicalOrNode::emitCode):
+        * kjs/nodes.h:
+
+2008-03-27  Sam Weinig  <sam@webkit.org>
+
+        Clean up code and debug output.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-03-27  Geoffrey Garen  <ggaren@apple.com>
+
+        Moved an ASSERT to a more logical place.
+
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-03-27  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Oliver Hunt.
+
+        Add emitCode support for InstanceOfNode.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitInstanceOf):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::InstanceOfNode::emitCode):
+        * kjs/nodes.h:
+
+2008-03-27  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Bug 18142: squirrelfish needs to support dynamic scoping/with
+        <http://bugs.webkit.org/show_bug.cgi?id=18142>
+
+        Add support for dynamic scoping and add code to handle 'with'
+        statements.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeBlock.h:
+        (KJS::CodeBlock::CodeBlock):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::getRegister):
+        (KJS::CodeGenerator::emitPushScope):
+        (KJS::CodeGenerator::emitPopScope):
+        * VM/CodeGenerator.h:
+        (KJS::CodeGenerator::CodeGenerator):
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::WithNode::emitCode):
+        * kjs/nodes.h:
+
+2008-03-27  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Geoffrey Garen.
+
+        Add emitCode support for NullNode, FalseNode, TrueNode, IfNode, IfElseNode, DoWhileNode and WhileNode
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump): Dump op_jfalse opcode.
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitJumpIfFalse): Identical to emitJumpIfTrue except it emits the op_jfalse opcode.
+        (KJS::CodeGenerator::emitLoad): Add and emitLoad override for booleans.
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute): Adds execution of op_jfalse. It is identical to op_jtrue, except the
+        the condition is reversed.
+        * VM/Opcode.h: Add op_jfalse.
+        * kjs/nodes.cpp:
+        (KJS::NullNode::emitCode): Added.
+        (KJS::FalseNode::emitCode): Added.
+        (KJS::TrueNode::emitCode): Added.
+        (KJS::IfNode::emitCode): Added.
+        (KJS::IfElseNode::emitCode): Added.
+        (KJS::DoWhileNode::emitCode): Added.
+        (KJS::WhileNode::emitCode): Added.
+        * kjs/nodes.h:
+
+2008-03-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Nixed an unused List.
+        
+        The calm before my stormy war against the List class.
+
+        * kjs/function_object.cpp:
+        (KJS::FunctionObjectImp::construct):
+
+2008-03-26  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Geoffrey Garen.
+
+        Adds support for EqualNode, NotEqualNode, StrictEqualNode, NotStrictEqualNode,
+        LessEqNode, GreaterNode, GreaterEqNode, MultNode, DivNode, ModNode, SubNode,
+        LeftShiftNode, RightShiftNode, UnsignedRightShiftNode, BitAndNode, BitXOrNode,
+        and BitOrNode.
+
+        * VM/CodeBlock.cpp:
+        (KJS::CodeBlock::dump):
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::emitEqual):
+        (KJS::CodeGenerator::emitNotEqual):
+        (KJS::CodeGenerator::emitStrictEqual):
+        (KJS::CodeGenerator::emitNotStrictEqual):
+        (KJS::CodeGenerator::emitLessEq):
+        (KJS::CodeGenerator::emitMult):
+        (KJS::CodeGenerator::emitDiv):
+        (KJS::CodeGenerator::emitMod):
+        (KJS::CodeGenerator::emitSub):
+        (KJS::CodeGenerator::emitLeftShift):
+        (KJS::CodeGenerator::emitRightShift):
+        (KJS::CodeGenerator::emitUnsignedRightShift):
+        (KJS::CodeGenerator::emitBitAnd):
+        (KJS::CodeGenerator::emitBitXOr):
+        (KJS::CodeGenerator::emitBitOr):
+        * VM/CodeGenerator.h:
+        * VM/Machine.cpp:
+        (KJS::jsLessEq):
+        (KJS::Machine::privateExecute):
+        * VM/Opcode.h:
+        * kjs/nodes.cpp:
+        (KJS::MultNode::emitCode):
+        (KJS::DivNode::emitCode):
+        (KJS::ModNode::emitCode):
+        (KJS::SubNode::emitCode):
+        (KJS::LeftShiftNode::emitCode):
+        (KJS::RightShiftNode::emitCode):
+        (KJS::UnsignedRightShiftNode::emitCode):
+        (KJS::GreaterNode::emitCode):
+        (KJS::LessEqNode::emitCode):
+        (KJS::GreaterEqNode::emitCode):
+        (KJS::EqualNode::emitCode):
+        (KJS::NotEqualNode::emitCode):
+        (KJS::StrictEqualNode::emitCode):
+        (KJS::NotStrictEqualNode::emitCode):
+        (KJS::BitAndNode::emitCode):
+        (KJS::BitXOrNode::emitCode):
+        (KJS::BitOrNode::emitCode):
+        * kjs/nodes.h:
+
+2008-03-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Only print debug dumps in debug builds.
+
+        * VM/CodeGenerator.cpp:
+        (KJS::CodeGenerator::generate):
+        * VM/Machine.cpp:
+        (KJS::Machine::privateExecute):
+
+2008-03-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Moved a few files around in the XCode project.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2008-03-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Made closures work.
+        
+        An activation object aliases to the register file until its associated
+        function returns, at which point it copies the registers for locals and
+        parameters into an independent storage buffer.
+
+2008-03-24  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Fixed recent 25% regression on simple for loop test. GCC seems to be
+        very finicky about the code that gets inlined into
+        Machine::privateExecute.
+
+        Everything in this patch is simply the result of experiment.
+        
+        The resolve and resolve_base opcodes do not seem to have gotten slower
+        from this change.
+
+        * VM/Machine.cpp:
+        (KJS::resolve):
+        (KJS::resolveBase):
+        (KJS::Machine::privateExecute):
+        * kjs/nodes.h:
+
+2008-03-24  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff Garen.
+
+        Bug 18059: squirrelfish needs to compile on platforms without computed goto
+        <http://bugs.webkit.org/show_bug.cgi?id=18059>
+
+        "Standard" macro style support for conditionalising the use of computed goto.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * VM/Machine.cpp:
+        (KJS::Machine::isOpcode):
+        (KJS::Machine::privateExecute):
+        * VM/Machine.h:
+        (KJS::Machine::getOpcode):
+        (KJS::Machine::getOpcodeID):
+        * VM/Opcode.h:
+        * wtf/Platform.h:
+
+2008-03-24  Geoffrey Garen  <ggaren@apple.com>
+
+        Moved my notes from nodes.h to the wiki.
+
+        * kjs/nodes.h:
+
+2008-03-24  Geoffrey Garen  <ggaren@apple.com>
+
+        SquirrelFish lives.
+        
+        Initial check-in of the code I've been carrying around. Lots of stuff
+        doesn't work. Plus a bunch of empty files.
+
+=== Start merge of squirrelfish ===
+
+2008-05-21  Darin Adler  <darin@apple.com>
+
+        - try to fix the Windows build
+
+        * profiler/Profiler.cpp:
+        (KJS::Profiler::stopProfiling): Use ptrdiff_t instead of the less-common but incredibly
+        similar ssize_t type.
+        * wtf/AVLTree.h:
+        (KJS::AVLTree::search): Added a typename for a dependent name that's a type.
+
+2008-05-21  Darin Adler  <darin@apple.com>
+
+        Reviewed by Anders.
+
+        - fix <rdar://problem/5952721> bug in JavaScript arguments object property lookup
+
+        Test: fast/js/arguments-bad-index.html
+
+        * kjs/function.cpp:
+        (KJS::IndexToNameMap::IndexToNameMap): Use unsigned instead of int.
+        (KJS::IndexToNameMap::isMapped): Use unsigned instead of int, and also use the
+        strict version of the numeric conversion function, since we don't want to allow
+        trailing junk.
+        (KJS::IndexToNameMap::unMap): Ditto.
+        (KJS::IndexToNameMap::operator[]): Ditto.
+        * kjs/function.h: Changed IndexToNameMap::size type from int to unsigned.
+
+2008-05-21  Timothy Hatcher  <timothy@apple.com>
+
+        Change the Profiler to allow multiple profiles to be running at
+        the same time. This can happen when you have nested console.profile()
+        calls. This required two changes. First, the Profiler needed to keep a
+        Vector of current profiles, instead of one. Second, a Profile needs
+        to keep track of the global ExecState it started in and the page group
+        identifier it is tracking.
+
+        The stopProfiling call now takes the same arguments as startProfiling.
+        This makes sure the correct profile is stopped. Passing a null UString
+        as the title will stop the last profile for the matching ExecState.
+
+        <rdar://problem/5951559> Multiple pages profiling can interfere with each other
+
+        Reviewed by Kevin McCullough.
+
+        * JavaScriptCore.exp: Added new exports. Removed old symbols.
+        * profiler/Profile.cpp:
+        (KJS::Profile::Profile): New constructor arguments for the
+        originatingGlobalExec and pageGroupIdentifier.
+        (KJS::Profile::stopProfiling): Set the m_originatingGlobalExec to null.
+        * profiler/Profile.h:
+        (KJS::Profile::create): Additional arguments.
+        (KJS::Profile::originatingGlobalExec): Return m_originatingGlobalExec.
+        (KJS::Profile::pageGroupIdentifier): Return m_pageGroupIdentifier.
+        * profiler/Profiler.cpp:
+        (KJS::Profiler::findProfile): Added. Finds a Profile that matches
+        the ExecState and title.
+        (KJS::Profiler::startProfiling): Return early if there is already
+        a Profile with the ExecState and title. If not, create a new profile
+        and append it to m_currentProfiles.
+        (KJS::Profiler::stopProfiling): Loops through m_currentProfiles
+        and find the one matching the ExecState and title. If one is found
+        call stopProfiling and return the Profile after removing it
+        from m_currentProfiles.
+        (KJS::dispatchFunctionToProfiles): Helper inline function to loop through
+        m_currentProfiles and call a Profile function.
+        (KJS::Profiler::willExecute): Call dispatchFunctionToProfiles.
+        (KJS::Profiler::didExecute): Ditto.
+        * profiler/Profiler.h:
+
+2008-05-21  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        <rdar://problem/5908520> REGRESSION (3.1.1-r33033): Crash in WebKit when opening or
+        refreshing page on people.com
+
+        The problem was that STL algorithms do not work with non-conformant comparators, and the
+        site used sort(function() { return 0.5 - Math.random(); } to randomly shuffle an array.
+
+        https://bugs.webkit.org/show_bug.cgi?id=18687
+        REGRESSION(r32220): ecma/Array/15.4.4.5-3.js test now fails in GMT(BST)
+
+        Besides relying on sort stability, this test was just broken, and kept failing with the
+        new stable sort.
+
+        Tests: fast/js/sort-randomly.html
+               fast/js/sort-stability.html
+               fast/js/comparefn-sort-stability.html
+
+        * kjs/avl_tree.h: Added an AVL tree implementation.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * wtf/AVLTree.h: Added.
+        Added an AVL tree implementation.
+
+        * kjs/array_instance.cpp:
+        (KJS::ArrayInstance::increaseVectorLength):
+        (KJS::ArrayInstance::sort):
+        (KJS::AVLTreeAbstractorForArrayCompare::get_less):
+        (KJS::AVLTreeAbstractorForArrayCompare::set_less):
+        (KJS::AVLTreeAbstractorForArrayCompare::get_greater):
+        (KJS::AVLTreeAbstractorForArrayCompare::set_greater):
+        (KJS::AVLTreeAbstractorForArrayCompare::get_balance_factor):
+        (KJS::AVLTreeAbstractorForArrayCompare::set_balance_factor):
+        (KJS::AVLTreeAbstractorForArrayCompare::compare_key_key):
+        (KJS::AVLTreeAbstractorForArrayCompare::compare_key_node):
+        (KJS::AVLTreeAbstractorForArrayCompare::compare_node_node):
+        (KJS::AVLTreeAbstractorForArrayCompare::null):
+        (KJS::ArrayInstance::compactForSorting):
+        
+        * kjs/array_instance.h: increaseVectorLength() now returns a bool to indicate whether it was
+        successful.
+
+        * wtf/Vector.h:
+        (WTF::Vector::Vector):
+        (WTF::::operator=):
+        (WTF::::fill):
+        Make these methods fail instead of crash when allocation fails, matching resize() and
+        reserveCapacity(), which already had this behavior. Callers need to check for null buffer
+        after making any Vector call that can try to allocate.
+
+        * tests/mozilla/ecma/Array/15.4.4.5-3.js: Fixed the test to use a consistent sort function,
+        as suggested in comments to a Mozilla bug filed about it (I'll keep tracking the bug to see
+        what the final resolution is).
+
+2008-05-20  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Tim.
+
+        <rdar://problem/5950867> JSProfiler: Allow the profiler to "Focus" a
+        profile node.
+        - Implements focus by adding the idea of a profileNode being visible and
+        adding the ability to reset all of the visible flags.
+
+        * profiler/Profile.h: 
+        (KJS::Profile::focus):
+        * profiler/ProfileNode.cpp:
+        (KJS::ProfileNode::ProfileNode): Initialize the visible flag.
+        (KJS::ProfileNode::setTreeVisible): Set the visibility of this node and
+        all of its descendents.
+        (KJS::ProfileNode::focus): Determine if this node should be visible when
+        focusing, if the functionName matches this node's function name or if any
+        of this node's children are visible.
+        (KJS::ProfileNode::restoreAll): Restore all nodes' visible flag.
+        (KJS::ProfileNode::debugPrintData):
+        * profiler/ProfileNode.h:
+        (KJS::ProfileNode::visible):
+        (KJS::ProfileNode::setVisible):
+
+2008-05-20  Timothy Hatcher  <timothy@apple.com>
+
+        Fixes a couple performance issues with the profiler. Also fixes
+        a regression where some nodes wouldn't be added to the tree.
+
+        Reviewed by Kevin McCullough.
+
+        * profiler/ProfileNode.cpp:
+        (KJS::ProfileNode::addChild): Compare callIdentifier instead
+        of functionName.
+        * profiler/ProfileNode.h: 
+        (CallIdentifier.operator==): Compare the CallIdentifiers in
+        an order that fails sooner for non-matches.
+        (CallIdentifier.callIdentifier): Return the CallIdentifier by
+        reference to prevent making a new copy each time.
+
+2008-05-20  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Darin.
+
+        <rdar://problem/5950796> JSProfiler: dump functions are in the code
+        Removed dump and logging functions from the Release version of the code
+        and renamed them to be obviously for debugging only.
+
+        * JavaScriptCore.exp:
+        * profiler/Profile.cpp:
+        (KJS::Profile::debugPrintData):
+        (KJS::Profile::debugPrintDataSampleStyle):
+        * profiler/Profile.h:
+        * profiler/ProfileNode.cpp:
+        (KJS::ProfileNode::debugPrintData):
+        (KJS::ProfileNode::debugPrintDataSampleStyle):
+        * profiler/ProfileNode.h:
+        * profiler/Profiler.cpp:
+        * profiler/Profiler.h:
+
+2008-05-20  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Adam.
+
+        <rdar://problem/5950538> JSProfiler: Keep track of non-JS execution time
+        We now have an extra node that represents the excess non-JS time.
+        - Also changed "SCRIPT" and "anonymous function" to be more consistent
+        with the debugger.
+
+        * profiler/ProfileNode.cpp:
+        (KJS::ProfileNode::stopProfiling): If this ProfileNode is the head node
+        create a new child that has the excess execution time.
+        (KJS::ProfileNode::calculatePercentages): Moved calculation of the
+        percentages into a function since it's called from multiple places.
+        * profiler/ProfileNode.h: Add the newly needed functions used above.
+        (KJS::ProfileNode::setTotalTime):
+        (KJS::ProfileNode::setSelfTime):
+        (KJS::ProfileNode::setNumberOfCalls):
+        * profiler/Profiler.cpp: renamed "SCRIPT" and "anonymous function" to be
+        consistent with the debugger and use constants that can be localized
+        more easily.
+        (KJS::getCallIdentifiers):
+        (KJS::getCallIdentifierFromFunctionImp):
+
+2008-05-20  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Tim.
+
+        <rdar://problem/5770054> JavaScript profiler (10928)
+        Removed only profiler-internal use of currentProfile since that concept
+        is changing.
+
+        * profiler/Profile.h: Now stopProfiling takes a time and bool as
+        arguments.  The time is used to calculate %s from and the bool tells
+        if this node is the head node and should be the one calculating the time.
+        (KJS::Profile::stopProfiling):
+        * profiler/ProfileNode.cpp: Ditto.
+        (KJS::ProfileNode::stopProfiling):
+        * profiler/ProfileNode.h: Ditto.
+
+2008-05-20  Kevin McCullough  <kmccullough@apple.com>
+
+        Accidentally turned on the profiler.
+
+        * kjs/config.h:
+
+
+2008-05-20  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Tim.
+
+        <rdar://problem/5770054> JavaScript profiler (10928)
+        Split function name into 3 parts so that the Web Inspector can link it to
+        the resource location from whence it came.
+
+        * kjs/ustring.cpp: Implemented operator> for UStrings
+        (KJS::operator>):
+        * kjs/ustring.h:
+        * profiler/Profile.cpp:
+        (KJS::Profile::Profile): Initialize all 3 values.
+        (KJS::Profile::willExecute): Use CallIdentifier struct.
+        (KJS::Profile::didExecute): Ditto.
+        * profiler/Profile.h: Ditto and remove unused function.
+        * profiler/ProfileNode.cpp:
+        (KJS::ProfileNode::ProfileNode): Use CallIdentifier struct.
+        (KJS::ProfileNode::willExecute): Ditto and fix an issue where we
+        restarted the m_startTime even though it was already started.
+        (KJS::ProfileNode::didExecute): Ditto.
+        (KJS::ProfileNode::findChild): Ditto.
+        (KJS::functionNameDescendingComparator): Ditto and use new comparator.
+        (KJS::functionNameAscendingComparator): Ditto.
+        (KJS::ProfileNode::printDataInspectorStyle): Use CallIdentifier struct.
+        (KJS::ProfileNode::printDataSampleStyle): Ditto.
+        * profiler/ProfileNode.h:
+        (KJS::CallIdentifier::CallIdentifier): Describe the CallIdentifier struct
+        (KJS::CallIdentifier::operator== ):
+        (KJS::ProfileNode::create): Use the CallIdentifier struct.
+        (KJS::ProfileNode::callIdentifier):
+        (KJS::ProfileNode::functionName): Now only return the function name, not
+        the url and line number too.
+        (KJS::ProfileNode::url):
+        (KJS::ProfileNode::lineNumber):
+        * profiler/Profiler.cpp: Use the CallIdentifier struct. 
+        (KJS::Profiler::startProfiling):
+        (KJS::Profiler::willExecute):
+        (KJS::Profiler::didExecute):
+        (KJS::getCallIdentifiers):
+        (KJS::getCallIdentifierFromFunctionImp):
+
+2008-05-20  Timothy Hatcher  <timothy@apple.com>
+
+        Rename sortFileName{Ascending,Descending} to
+        sortFunctionName{Ascending,Descending}.
+
+        Reviewed by Kevin McCullough.
+
+        * JavaScriptCore.exp:
+        * kjs/config.h:
+        * profiler/Profile.h:
+        * profiler/ProfileNode.cpp:
+        (KJS::functionNameDescendingComparator):
+        (KJS::ProfileNode::sortFunctionNameDescending):
+        (KJS::functionNameAscendingComparator):
+        (KJS::ProfileNode::sortFunctionNameAscending):
+        * profiler/ProfileNode.h:
+
+2008-05-19  Timothy Hatcher  <timothy@apple.com>
+
+        Make the profiler use higher than millisecond resolution time-stamps.
+
+        Reviewed by Kevin McCullough.
+
+        * kjs/DateMath.cpp:
+        (KJS::getCurrentUTCTime): Call getCurrentUTCTimeWithMicroseconds and
+        floor the result.
+        (KJS::getCurrentUTCTimeWithMicroseconds): Copied from the previous
+        implementation of getCurrentUTCTime without the floor call.
+        * kjs/DateMath.h: Addded getCurrentUTCTimeWithMicroseconds.
+        * profiler/ProfileNode.cpp:
+        (KJS::ProfileNode::ProfileNode): Use getCurrentUTCTimeWithMicroseconds.
+
+2008-05-19  Timothy Hatcher  <timothy@apple.com>
+
+        Fixes a bug in the profiler where call and apply would show up
+        and double the time spent in a function. We don't want to show call
+        and apply at all in the profiles. This change excludes them.
+
+        Reviewed by Kevin McCullough.
+
+        * profiler/ProfileNode.cpp:
+        (KJS::ProfileNode::stopProfiling): Remove a second for loop and
+        calculate self time in the existing loop.
+        * profiler/Profiler.cpp:
+        (KJS::shouldExcludeFunction): Helper inline function that returns
+        true in the current function in an InternalFunctionImp and it is 
+        has the functionName call or apply.
+        (KJS::Profiler::willExecute): Call shouldExcludeFunction and return
+        early if if returns true.
+        (KJS::Profiler::didExecute): Ditto.
+
+2008-05-19  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Tim.
+
+        <rdar://problem/5770054> JavaScript profiler (10928)
+        - Implement sorting by function name.
+
+        * JavaScriptCore.exp:
+        * profiler/Profile.h:
+        (KJS::Profile::sortFileNameDescending):
+        (KJS::Profile::sortFileNameAscending):
+        * profiler/ProfileNode.cpp:
+        (KJS::fileNameDescendingComparator):
+        (KJS::ProfileNode::sortFileNameDescending):
+        (KJS::fileNameAscendingComparator):
+        (KJS::ProfileNode::sortFileNameAscending):
+        * profiler/ProfileNode.h:
+
+2008-05-19  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Adam.
+
+        <rdar://problem/5770054> JavaScript profiler (10928)
+        - Pass the exec state to profiler when calling startProfiling so that if
+        profiling is started within an execution context that location is
+        recorded correctly.
+
+        * JavaScriptCore.exp:
+        * profiler/ProfileNode.cpp:
+        (KJS::ProfileNode::printDataInspectorStyle): Dump more info for debugging
+        purposes.
+        * profiler/Profiler.cpp:
+        (KJS::Profiler::startProfiling):
+        * profiler/Profiler.h:
+
+2008-05-19  Kevin McCullough  <kmccullough@apple.com>
+
+        Rubberstamped by Geoff.
+
+        Turn off the profiler because it is a performance regression.
+
+        * kjs/config.h:
+
+2008-05-19  Alp Toker  <alp@nuanti.com>
+
+        Reviewed by Anders and Beth.
+
+        http://bugs.webkit.org/show_bug.cgi?id=16495
+        [GTK] Accessibility support with ATK/AT-SPI
+
+        Initial ATK/AT-SPI accessibility support for the GTK+ port.
+
+        * wtf/Platform.h:
+
+2008-05-19  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Tim.
+
+        <rdar://problem/5770054> JavaScript profiler (10928)
+        -In an effort to make the profiler as efficient as possible instead of
+        prepending to a vector we keep the vector in reverse order and operate
+        over it backwards.
+
+        * profiler/Profile.cpp:
+        (KJS::Profile::willExecute):
+        (KJS::Profile::didExecute):
+        * profiler/ProfileNode.cpp:
+        (KJS::ProfileNode::didExecute):
+        (KJS::ProfileNode::endAndRecordCall):
+        * profiler/ProfileNode.h:
+        * profiler/Profiler.cpp:
+        (KJS::getStackNames):
+
+2008-05-16  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Tim.
+
+        <rdar://problem/5770054> JavaScript profiler (10928)
+        Implement sorting for the profiler.
+        I chose to sort the profileNodes in place since there is no reason they
+        need to retain their original order.
+
+        * JavaScriptCore.exp: Export the symbols.
+        * profiler/Profile.h: Add the different ways a profile can be sorted.
+        (KJS::Profile::sortTotalTimeDescending):
+        (KJS::Profile::sortTotalTimeAscending):
+        (KJS::Profile::sortSelfTimeDescending):
+        (KJS::Profile::sortSelfTimeAscending):
+        (KJS::Profile::sortCallsDescending):
+        (KJS::Profile::sortCallsAscending):
+        * profiler/ProfileNode.cpp: Implement those ways.
+        (KJS::totalTimeDescendingComparator):
+        (KJS::ProfileNode::sortTotalTimeDescending):
+        (KJS::totalTimeAscendingComparator):
+        (KJS::ProfileNode::sortTotalTimeAscending):
+        (KJS::selfTimeDescendingComparator):
+        (KJS::ProfileNode::sortSelfTimeDescending):
+        (KJS::selfTimeAscendingComparator):
+        (KJS::ProfileNode::sortSelfTimeAscending):
+        (KJS::callsDescendingComparator):
+        (KJS::ProfileNode::sortCallsDescending):
+        (KJS::callsAscendingComparator):
+        (KJS::ProfileNode::sortCallsAscending):
+        * profiler/ProfileNode.h: No longer use a Deque since it cannot be
+        sorted by std::sort and there was no reason not to use a Vector.  I
+        previously had though I would do prepending but am not.
+        (KJS::ProfileNode::selfTime):
+        (KJS::ProfileNode::totalPercent):
+        (KJS::ProfileNode::selfPercent):
+        (KJS::ProfileNode::children):
+        * profiler/Profiler.cpp: Removed these functions as they can be called
+        directoy on the Profile object after getting the Vector of them.
+        (KJS::getStackNames):
+        * profiler/Profiler.h:
+
+2008-05-15  Ariya Hidayat  <ariya.hidayat@trolltech.com>
+
+        Reviewed by Simon.
+
+        Since WebKitGtk is fully using autotools now, clean-up the .pro/.pri files
+        from gtk-port.
+
+        * JavaScriptCore.pro:
+        * kjs/testkjs.pro:
+
+2008-05-15  Kevin McCullough  <kmccullough@apple.com>
+
+        - Build fix.
+
+        * JavaScriptCore.exp:
+
+2008-05-15  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Tim.
+
+        <rdar://problem/5770054> JavaScript profiler (10928)
+        - Cache some values to save on computing them repetitively. This will be
+        a big savings when we sort since we won't have to walk the tree for
+        every comparison!
+        - We cache these values when we end profiling because otherwise we won't
+        know which profile to get the totalTime for the whole profile from without
+        retaining a reference to the head profile or looking up the profile from
+        the list of all profiles.
+        - Also it's safe to assume we won't be asked for these values while we
+        are still profiling since the WebInspector only get's profileNodes from
+        profiles that are in the allProfiles() list and a profile is only added
+        to that list after it has finished and these values will no longer
+        change.
+
+        * JavaScriptCore.exp:
+        * profiler/ProfileNode.cpp:
+        (KJS::ProfileNode::ProfileNode):
+        (KJS::ProfileNode::stopProfiling):
+        (KJS::ProfileNode::printDataInspectorStyle):
+        (KJS::ProfileNode::printDataSampleStyle):
+        (KJS::ProfileNode::endAndRecordCall):
+        * profiler/ProfileNode.h:
+        (KJS::ProfileNode::totalTime):
+        (KJS::ProfileNode::selfTime):
+        (KJS::ProfileNode::totalPercent):
+        (KJS::ProfileNode::selfPercent):
+        * profiler/Profiler.cpp:
+        (KJS::Profiler::stopProfiling):
+
+2008-05-15  Simon Hausmann  <shausman@trolltech.com>
+
+        Reviewed by Holger.
+
+        Fix compilation when compiling with MSVC and wchar_t support.
+
+        * wtf/unicode/qt4/UnicodeQt4.h:
+        (WTF::Unicode::foldCase):
+        (WTF::Unicode::umemcasecmp):
+
+2008-05-14  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Tim.
+
+        <rdar://problem/5770054> JavaScript profiler (10928)
+        - Turn on the profiler.
+
+        * kjs/config.h:
+
+2008-05-14  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Tim.
+
+        <rdar://problem/5770054> JavaScript profiler (10928)
+        - Expose the new profiler functions to the WebInspector.
+
+        * JavaScriptCore.exp:
+
+2008-05-14  Kevin McCullough  <kmccullough@apple.com>
+
+        Giving credit where credit is due.
+
+        * ChangeLog:
+
+2008-05-14  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Geoff and Sam.
+
+        <rdar://problem/5770054> JavaScript profiler (10928)
+        Add the ability to get percentages of total and self time for displaying
+        in the WebInspector.
+
+        * profiler/Profile.h:
+        (KJS::Profile::totalProfileTime):
+        * profiler/ProfileNode.cpp:
+        (KJS::ProfileNode::totalPercent):
+        (KJS::ProfileNode::selfPercent):
+        * profiler/ProfileNode.h:
+        * profiler/Profiler.h:
+        (KJS::Profiler::currentProfile):
+
+2008-05-14  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Sam.
+
+        <rdar://problem/5770054> JavaScript profiler (10928)
+        - Rename FunctionCallProfile to ProfileNode.
+
+        * GNUmakefile.am:
+        * JavaScriptCore.exp:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * profiler/FunctionCallProfile.cpp: Removed.
+        * profiler/FunctionCallProfile.h: Removed.
+        * profiler/Profile.cpp:
+        (KJS::Profile::Profile):
+        (KJS::Profile::willExecute):
+        * profiler/Profile.h:
+        (KJS::Profile::callTree):
+        * profiler/ProfileNode.cpp: Copied from profiler/FunctionCallProfile.cpp.
+        (KJS::ProfileNode::ProfileNode):
+        (KJS::ProfileNode::willExecute):
+        (KJS::ProfileNode::didExecute):
+        (KJS::ProfileNode::addChild):
+        (KJS::ProfileNode::findChild):
+        (KJS::ProfileNode::stopProfiling):
+        (KJS::ProfileNode::selfTime):
+        (KJS::ProfileNode::printDataInspectorStyle):
+        (KJS::ProfileNode::printDataSampleStyle):
+        (KJS::ProfileNode::endAndRecordCall):
+        * profiler/ProfileNode.h: Copied from profiler/FunctionCallProfile.h.
+        (KJS::ProfileNode::create):
+        (KJS::ProfileNode::children):
+        * profiler/Profiler.cpp:
+
+2008-05-14  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by John.
+
+        <rdar://problem/5770054> JavaScript profiler (10928)
+        - Have each FunctionCallProfile be able to return it's total and self time.
+
+        * JavaScriptCore.exp:
+        * profiler/FunctionCallProfile.cpp:
+        (KJS::FunctionCallProfile::selfTime):
+        * profiler/FunctionCallProfile.h:
+        (KJS::FunctionCallProfile::totalTime):
+
+2008-05-14  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        <rdar://problem/5934376> REGRESSION: A script fails because of a straw BOM character in it.
+
+        <https://bugs.webkit.org/show_bug.cgi?id=4931>
+        Unicode format characters (Cf) should be removed from JavaScript source
+
+        Of all Cf characters, we are only removing BOM, because this is what Firefox trunk has
+        settled upon, after extensive discussion and investigation.
+
+        Based on Darin's work on this bug.
+
+        Test: fast/js/removing-Cf-characters.html
+
+        * kjs/lexer.cpp:
+        (KJS::Lexer::setCode): Tweak formatting. Use a call to shift(4) to read in the
+        first characters, instead of having special case code here.
+        (KJS::Lexer::shift): Add a loop when reading a character to skip BOM characters.
+
+2008-05-13  Matt Lilek  <webkit@mattlilek.com>
+
+        Not reviewed, build fix.
+
+        * kjs/date_object.cpp:
+        (KJS::DateObjectFuncImp::callAsFunction):
+
+2008-05-13  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Sam.
+
+        <rdar://problem/5933644> Implement Date.now
+        
+        Implement Date.now which returns the number of milliseconds since the epoch.
+        
+        * kjs/CommonIdentifiers.h:
+        * kjs/date_object.cpp:
+        (KJS::DateObjectFuncImp::):
+        (KJS::DateObjectImp::DateObjectImp):
+        (KJS::DateObjectFuncImp::callAsFunction):
+
+2008-05-13  Kevin McCullough  <kmccullough@apple.com>
+
+        Giving credit where credit is due.
+
+        * ChangeLog:
+
+2008-05-13  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Adam and Geoff.
+
+        <rdar://problem/5770054> JavaScript profiler (10928)
+        Use PassRefPtrs instead of RefPtrs when appropriate.
+
+        * profiler/FunctionCallProfile.cpp:
+        (KJS::FunctionCallProfile::addChild):
+        * profiler/FunctionCallProfile.h:
+        * profiler/Profile.h:
+        (KJS::Profile::callTree):
+
+2008-05-13  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Sam.
+
+        <rdar://problem/5770054> JavaScript profiler (10928)
+        - Made some functions static (as per Adam) and changed from using raw
+        pointers to RefPtr for making these JavaScript Objects.
+
+        * profiler/FunctionCallProfile.cpp:
+        (KJS::FunctionCallProfile::addChild):
+        (KJS::FunctionCallProfile::findChild):
+        * profiler/FunctionCallProfile.h:
+        (KJS::FunctionCallProfile::create):
+        * profiler/Profile.cpp:
+        (KJS::Profile::Profile):
+        (KJS::Profile::willExecute):
+        (KJS::Profile::didExecute):
+        (KJS::functionNameCountPairComparator):
+        * profiler/Profile.h:
+        (KJS::Profile::create):
+        (KJS::Profile::title):
+        (KJS::Profile::callTree):
+        * profiler/Profiler.cpp:
+        (KJS::Profiler::startProfiling):
+        * profiler/Profiler.h:
+        (KJS::Profiler::allProfiles):
+        (KJS::Profiler::clearProfiles):
+
+2008-05-13  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoffrey Garen.
+
+        <rdar://problem/4949018> JavaScriptCore API claims to work with UTF8 strings, but only works
+        with ASCII strings
+        
+        * kjs/ustring.h:
+        * kjs/ustring.cpp:
+        (KJS::UString::Rep::createFromUTF8):
+        Added. Implementation adapted from JSStringCreateWithUTF8CString().
+
+        * API/JSStringRef.cpp:
+        (JSStringCreateWithUTF8CString):
+        * API/JSClassRef.cpp:
+        (OpaqueJSClass::OpaqueJSClass):
+        Use UString::Rep::createFromUTF8().
+
+2008-05-12  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Tim Hatcher.
+
+        <rdar://problem/4859666> WebKit needs availability macros in order to deprecate APIs
+
+        Create WebKit availability macros that key off the Mac OS X version being targeted to
+        determine the WebKit version being targeted.  Applications can define
+        WEBKIT_VERSION_MIN_REQUIRED before including WebKit headers in order to target a specific
+        version of WebKit.
+
+        The availability header is being added to JavaScriptCore rather than WebKit as JavaScriptCore
+        is the lowest-level portion of the public WebKit API.
+
+        * API/WebKitAvailability.h: Added.
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2008-05-12  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Maciej.
+
+        https://bugs.webkit.org/show_bug.cgi?id=18828
+        Reproducible crash with PAC file
+
+        Naively moving JavaScriptCore into thread-specific data was inappropriate in the face of
+        exiting JavaScriptCore API clients, which expect a different therading model. Temporarily
+        disabling ThreadSpecific implementation until this can be sorted out.
+
+        * wtf/ThreadSpecific.h:
+        (WTF::::ThreadSpecific):
+        (WTF::::~ThreadSpecific):
+        (WTF::::get):
+        (WTF::::set):
+
+2008-05-12  Alexey Proskuryakov  <ap@webkit.org>
+
+        Roll out recent  threading changes (r32807, r32810, r32819, r32822) to simplify
+        SquirrelFish merging.
+
+        * API/JSBase.cpp:
+        (JSGarbageCollect):
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::::staticFunctionGetter):
+        * API/JSClassRef.cpp:
+        (OpaqueJSClass::prototype):
+        * API/JSObjectRef.cpp:
+        (JSObjectMake):
+        (JSObjectMakeFunctionWithCallback):
+        (JSObjectMakeConstructor):
+        (JSObjectMakeFunction):
+        * API/JSValueRef.cpp:
+        (JSValueMakeNumber):
+        (JSValueMakeString):
+        * JavaScriptCore.exp:
+        * kjs/ExecState.h:
+        * kjs/InitializeThreading.cpp:
+        (KJS::initializeThreadingOnce):
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::~JSGlobalObject):
+        (KJS::JSGlobalObject::init):
+        (KJS::JSGlobalObject::put):
+        (KJS::JSGlobalObject::reset):
+        (KJS::JSGlobalObject::tearOffActivation):
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::head):
+        (KJS::JSGlobalObject::perThreadData):
+        * kjs/JSLock.cpp:
+        (KJS::JSLock::registerThread):
+        * kjs/JSLock.h:
+        (KJS::JSLock::JSLock):
+        * kjs/array_instance.cpp:
+        (KJS::ArrayInstance::ArrayInstance):
+        (KJS::ArrayInstance::lengthGetter):
+        * kjs/array_object.cpp:
+        (KJS::arrayProtoFuncToString):
+        (KJS::arrayProtoFuncToLocaleString):
+        (KJS::arrayProtoFuncJoin):
+        (KJS::arrayProtoFuncConcat):
+        (KJS::arrayProtoFuncPop):
+        (KJS::arrayProtoFuncPush):
+        (KJS::arrayProtoFuncShift):
+        (KJS::arrayProtoFuncSlice):
+        (KJS::arrayProtoFuncSplice):
+        (KJS::arrayProtoFuncUnShift):
+        (KJS::arrayProtoFuncFilter):
+        (KJS::arrayProtoFuncMap):
+        (KJS::arrayProtoFuncEvery):
+        (KJS::arrayProtoFuncForEach):
+        (KJS::arrayProtoFuncSome):
+        (KJS::arrayProtoFuncIndexOf):
+        (KJS::arrayProtoFuncLastIndexOf):
+        (KJS::ArrayObjectImp::ArrayObjectImp):
+        (KJS::ArrayObjectImp::construct):
+        * kjs/bool_object.cpp:
+        (KJS::BooleanPrototype::BooleanPrototype):
+        (KJS::booleanProtoFuncToString):
+        (KJS::BooleanObjectImp::BooleanObjectImp):
+        (KJS::BooleanObjectImp::construct):
+        * kjs/collector.cpp:
+        (KJS::allocateBlock):
+        (KJS::Collector::recordExtraCost):
+        (KJS::Collector::heapAllocate):
+        (KJS::Collector::allocate):
+        (KJS::Collector::allocateNumber):
+        (KJS::Collector::registerAsMainThread):
+        (KJS::onMainThread):
+        (KJS::PlatformThread::PlatformThread):
+        (KJS::getCurrentPlatformThread):
+        (KJS::Collector::Thread::Thread):
+        (KJS::destroyRegisteredThread):
+        (KJS::initializeRegisteredThreadKey):
+        (KJS::Collector::registerThread):
+        (KJS::Collector::markStackObjectsConservatively):
+        (KJS::Collector::markCurrentThreadConservativelyInternal):
+        (KJS::Collector::markCurrentThreadConservatively):
+        (KJS::suspendThread):
+        (KJS::resumeThread):
+        (KJS::getPlatformThreadRegisters):
+        (KJS::otherThreadStackPointer):
+        (KJS::Collector::markOtherThreadConservatively):
+        (KJS::protectedValues):
+        (KJS::Collector::protect):
+        (KJS::Collector::unprotect):
+        (KJS::Collector::collectOnMainThreadOnly):
+        (KJS::Collector::markProtectedObjects):
+        (KJS::Collector::markMainThreadOnlyObjects):
+        (KJS::Collector::sweep):
+        (KJS::Collector::collect):
+        (KJS::Collector::size):
+        (KJS::Collector::globalObjectCount):
+        (KJS::Collector::protectedGlobalObjectCount):
+        (KJS::Collector::protectedObjectCount):
+        (KJS::Collector::protectedObjectTypeCounts):
+        (KJS::Collector::isBusy):
+        (KJS::Collector::reportOutOfMemoryToAllExecStates):
+        * kjs/collector.h:
+        (KJS::Collector::cellBlock):
+        (KJS::Collector::cellOffset):
+        (KJS::Collector::isCellMarked):
+        (KJS::Collector::markCell):
+        (KJS::Collector::reportExtraMemoryCost):
+        * kjs/date_object.cpp:
+        (KJS::formatLocaleDate):
+        (KJS::DatePrototype::DatePrototype):
+        (KJS::DateObjectImp::DateObjectImp):
+        (KJS::DateObjectImp::construct):
+        (KJS::DateObjectImp::callAsFunction):
+        (KJS::DateObjectFuncImp::DateObjectFuncImp):
+        (KJS::DateObjectFuncImp::callAsFunction):
+        (KJS::dateProtoFuncToString):
+        (KJS::dateProtoFuncToUTCString):
+        (KJS::dateProtoFuncToDateString):
+        (KJS::dateProtoFuncToTimeString):
+        (KJS::dateProtoFuncToLocaleString):
+        (KJS::dateProtoFuncToLocaleDateString):
+        (KJS::dateProtoFuncToLocaleTimeString):
+        (KJS::dateProtoFuncValueOf):
+        (KJS::dateProtoFuncGetTime):
+        (KJS::dateProtoFuncGetFullYear):
+        (KJS::dateProtoFuncGetUTCFullYear):
+        (KJS::dateProtoFuncToGMTString):
+        (KJS::dateProtoFuncGetMonth):
+        (KJS::dateProtoFuncGetUTCMonth):
+        (KJS::dateProtoFuncGetDate):
+        (KJS::dateProtoFuncGetUTCDate):
+        (KJS::dateProtoFuncGetDay):
+        (KJS::dateProtoFuncGetUTCDay):
+        (KJS::dateProtoFuncGetHours):
+        (KJS::dateProtoFuncGetUTCHours):
+        (KJS::dateProtoFuncGetMinutes):
+        (KJS::dateProtoFuncGetUTCMinutes):
+        (KJS::dateProtoFuncGetSeconds):
+        (KJS::dateProtoFuncGetUTCSeconds):
+        (KJS::dateProtoFuncGetMilliSeconds):
+        (KJS::dateProtoFuncGetUTCMilliseconds):
+        (KJS::dateProtoFuncGetTimezoneOffset):
+        (KJS::dateProtoFuncSetTime):
+        (KJS::setNewValueFromTimeArgs):
+        (KJS::setNewValueFromDateArgs):
+        (KJS::dateProtoFuncSetYear):
+        (KJS::dateProtoFuncGetYear):
+        * kjs/error_object.cpp:
+        (KJS::ErrorPrototype::ErrorPrototype):
+        (KJS::errorProtoFuncToString):
+        (KJS::ErrorObjectImp::ErrorObjectImp):
+        (KJS::ErrorObjectImp::construct):
+        (KJS::NativeErrorPrototype::NativeErrorPrototype):
+        (KJS::NativeErrorImp::NativeErrorImp):
+        (KJS::NativeErrorImp::construct):
+        * kjs/function.cpp:
+        (KJS::FunctionImp::lengthGetter):
+        (KJS::FunctionImp::construct):
+        (KJS::Arguments::Arguments):
+        (KJS::ActivationImp::createArgumentsObject):
+        (KJS::encode):
+        (KJS::decode):
+        (KJS::globalFuncParseInt):
+        (KJS::globalFuncParseFloat):
+        (KJS::globalFuncEscape):
+        (KJS::globalFuncUnescape):
+        (KJS::PrototypeFunction::PrototypeFunction):
+        (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
+        * kjs/function_object.cpp:
+        (KJS::FunctionPrototype::FunctionPrototype):
+        (KJS::functionProtoFuncToString):
+        (KJS::FunctionObjectImp::FunctionObjectImp):
+        (KJS::FunctionObjectImp::construct):
+        * kjs/internal.cpp:
+        (KJS::StringImp::toObject):
+        * kjs/internal.h:
+        (KJS::StringImp::StringImp):
+        (KJS::NumberImp::operator new):
+        * kjs/list.cpp:
+        (KJS::List::markSet):
+        (KJS::List::markProtectedListsSlowCase):
+        (KJS::List::expandAndAppend):
+        * kjs/list.h:
+        (KJS::List::List):
+        (KJS::List::~List):
+        (KJS::List::markProtectedLists):
+        * kjs/lookup.h:
+        (KJS::staticFunctionGetter):
+        (KJS::cacheGlobalObject):
+        * kjs/math_object.cpp:
+        (KJS::MathObjectImp::getValueProperty):
+        (KJS::mathProtoFuncAbs):
+        (KJS::mathProtoFuncACos):
+        (KJS::mathProtoFuncASin):
+        (KJS::mathProtoFuncATan):
+        (KJS::mathProtoFuncATan2):
+        (KJS::mathProtoFuncCeil):
+        (KJS::mathProtoFuncCos):
+        (KJS::mathProtoFuncExp):
+        (KJS::mathProtoFuncFloor):
+        (KJS::mathProtoFuncLog):
+        (KJS::mathProtoFuncMax):
+        (KJS::mathProtoFuncMin):
+        (KJS::mathProtoFuncPow):
+        (KJS::mathProtoFuncRandom):
+        (KJS::mathProtoFuncRound):
+        (KJS::mathProtoFuncSin):
+        (KJS::mathProtoFuncSqrt):
+        (KJS::mathProtoFuncTan):
+        * kjs/nodes.cpp:
+        (KJS::ParserRefCounted::ParserRefCounted):
+        (KJS::ParserRefCounted::ref):
+        (KJS::ParserRefCounted::deref):
+        (KJS::ParserRefCounted::refcount):
+        (KJS::ParserRefCounted::deleteNewObjects):
+        (KJS::Node::handleException):
+        (KJS::NumberNode::evaluate):
+        (KJS::StringNode::evaluate):
+        (KJS::ArrayNode::evaluate):
+        (KJS::PostIncResolveNode::evaluate):
+        (KJS::PostIncLocalVarNode::evaluate):
+        (KJS::PostDecResolveNode::evaluate):
+        (KJS::PostDecLocalVarNode::evaluate):
+        (KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
+        (KJS::PostIncBracketNode::evaluate):
+        (KJS::PostDecBracketNode::evaluate):
+        (KJS::PostIncDotNode::evaluate):
+        (KJS::PostDecDotNode::evaluate):
+        (KJS::typeStringForValue):
+        (KJS::LocalVarTypeOfNode::evaluate):
+        (KJS::TypeOfResolveNode::evaluate):
+        (KJS::TypeOfValueNode::evaluate):
+        (KJS::PreIncLocalVarNode::evaluate):
+        (KJS::PreIncResolveNode::evaluate):
+        (KJS::PreDecLocalVarNode::evaluate):
+        (KJS::PreDecResolveNode::evaluate):
+        (KJS::PreIncConstNode::evaluate):
+        (KJS::PreDecConstNode::evaluate):
+        (KJS::PostIncConstNode::evaluate):
+        (KJS::PostDecConstNode::evaluate):
+        (KJS::PreIncBracketNode::evaluate):
+        (KJS::PreDecBracketNode::evaluate):
+        (KJS::PreIncDotNode::evaluate):
+        (KJS::PreDecDotNode::evaluate):
+        (KJS::NegateNode::evaluate):
+        (KJS::BitwiseNotNode::evaluate):
+        (KJS::MultNode::evaluate):
+        (KJS::DivNode::evaluate):
+        (KJS::ModNode::evaluate):
+        (KJS::addSlowCase):
+        (KJS::add):
+        (KJS::AddNumbersNode::evaluate):
+        (KJS::AddStringsNode::evaluate):
+        (KJS::AddStringLeftNode::evaluate):
+        (KJS::AddStringRightNode::evaluate):
+        (KJS::SubNode::evaluate):
+        (KJS::LeftShiftNode::evaluate):
+        (KJS::RightShiftNode::evaluate):
+        (KJS::UnsignedRightShiftNode::evaluate):
+        (KJS::BitXOrNode::evaluate):
+        (KJS::BitOrNode::evaluate):
+        (KJS::valueForReadModifyAssignment):
+        (KJS::ForInNode::execute):
+        (KJS::TryNode::execute):
+        (KJS::FuncDeclNode::makeFunction):
+        (KJS::FuncExprNode::evaluate):
+        * kjs/nodes.h:
+        * kjs/number_object.cpp:
+        (KJS::NumberPrototype::NumberPrototype):
+        (KJS::numberProtoFuncToString):
+        (KJS::numberProtoFuncToLocaleString):
+        (KJS::numberProtoFuncToFixed):
+        (KJS::numberProtoFuncToExponential):
+        (KJS::numberProtoFuncToPrecision):
+        (KJS::NumberObjectImp::NumberObjectImp):
+        (KJS::NumberObjectImp::getValueProperty):
+        (KJS::NumberObjectImp::construct):
+        (KJS::NumberObjectImp::callAsFunction):
+        * kjs/object.cpp:
+        (KJS::JSObject::call):
+        (KJS::JSObject::get):
+        (KJS::JSObject::put):
+        (KJS::JSObject::defineGetter):
+        (KJS::JSObject::defineSetter):
+        (KJS::JSObject::putDirect):
+        (KJS::Error::create):
+        * kjs/object.h:
+        * kjs/object_object.cpp:
+        (KJS::ObjectPrototype::ObjectPrototype):
+        (KJS::objectProtoFuncToLocaleString):
+        (KJS::objectProtoFuncToString):
+        (KJS::ObjectObjectImp::ObjectObjectImp):
+        (KJS::ObjectObjectImp::construct):
+        * kjs/property_map.h:
+        (KJS::SavedProperty::SavedProperty):
+        (KJS::SavedProperty::init):
+        (KJS::SavedProperty::~SavedProperty):
+        (KJS::SavedProperty::name):
+        (KJS::SavedProperty::value):
+        (KJS::SavedProperty::attributes):
+        * kjs/protect.h:
+        (KJS::gcProtect):
+        (KJS::gcUnprotect):
+        * kjs/regexp_object.cpp:
+        (KJS::RegExpPrototype::RegExpPrototype):
+        (KJS::regExpProtoFuncToString):
+        (KJS::RegExpImp::getValueProperty):
+        (KJS::RegExpObjectImp::RegExpObjectImp):
+        (KJS::RegExpObjectImp::arrayOfMatches):
+        (KJS::RegExpObjectImp::getBackref):
+        (KJS::RegExpObjectImp::getLastParen):
+        (KJS::RegExpObjectImp::getLeftContext):
+        (KJS::RegExpObjectImp::getRightContext):
+        (KJS::RegExpObjectImp::getValueProperty):
+        (KJS::RegExpObjectImp::createRegExpImp):
+        * kjs/regexp_object.h:
+        * kjs/string_object.cpp:
+        (KJS::StringInstance::StringInstance):
+        (KJS::StringInstance::lengthGetter):
+        (KJS::StringInstance::indexGetter):
+        (KJS::stringInstanceNumericPropertyGetter):
+        (KJS::StringPrototype::StringPrototype):
+        (KJS::replace):
+        (KJS::stringProtoFuncCharAt):
+        (KJS::stringProtoFuncCharCodeAt):
+        (KJS::stringProtoFuncConcat):
+        (KJS::stringProtoFuncIndexOf):
+        (KJS::stringProtoFuncLastIndexOf):
+        (KJS::stringProtoFuncMatch):
+        (KJS::stringProtoFuncSearch):
+        (KJS::stringProtoFuncReplace):
+        (KJS::stringProtoFuncSlice):
+        (KJS::stringProtoFuncSplit):
+        (KJS::stringProtoFuncSubstr):
+        (KJS::stringProtoFuncSubstring):
+        (KJS::stringProtoFuncToLowerCase):
+        (KJS::stringProtoFuncToUpperCase):
+        (KJS::stringProtoFuncToLocaleLowerCase):
+        (KJS::stringProtoFuncToLocaleUpperCase):
+        (KJS::stringProtoFuncLocaleCompare):
+        (KJS::stringProtoFuncBig):
+        (KJS::stringProtoFuncSmall):
+        (KJS::stringProtoFuncBlink):
+        (KJS::stringProtoFuncBold):
+        (KJS::stringProtoFuncFixed):
+        (KJS::stringProtoFuncItalics):
+        (KJS::stringProtoFuncStrike):
+        (KJS::stringProtoFuncSub):
+        (KJS::stringProtoFuncSup):
+        (KJS::stringProtoFuncFontcolor):
+        (KJS::stringProtoFuncFontsize):
+        (KJS::stringProtoFuncAnchor):
+        (KJS::stringProtoFuncLink):
+        (KJS::StringObjectImp::StringObjectImp):
+        (KJS::StringObjectImp::construct):
+        (KJS::StringObjectImp::callAsFunction):
+        (KJS::StringObjectFuncImp::StringObjectFuncImp):
+        (KJS::StringObjectFuncImp::callAsFunction):
+        * kjs/string_object.h:
+        (KJS::StringInstanceThatMasqueradesAsUndefined::StringInstanceThatMasqueradesAsUndefined):
+        * kjs/testkjs.cpp:
+        (GlobalObject::GlobalObject):
+        (functionGC):
+        (functionRun):
+        (functionReadline):
+        (kjsmain):
+        * kjs/ustring.h:
+        * kjs/value.cpp:
+        (KJS::JSCell::operator new):
+        (KJS::jsString):
+        (KJS::jsOwnedString):
+        (KJS::jsNumberCell):
+        * kjs/value.h:
+        (KJS::jsNaN):
+        (KJS::jsNumber):
+        (KJS::jsNumberFromAnd):
+        (KJS::JSCell::marked):
+        (KJS::JSCell::mark):
+        (KJS::JSValue::toJSNumber):
+        * wtf/ThreadSpecific.h:
+        (WTF::T):
+
+2008-05-10  Julien Chaffraix  <jchaffraix@webkit.org>
+
+        Qt & wx build fix.
+
+        * JavaScriptCore.pri: Add profiler/Profile.cpp.
+        * JavaScriptCoreSources.bkl: Ditto.
+
+2008-05-10  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
+
+        Reviewed by Maciej.
+
+        Gtk+ build fix
+
+        * GNUmakefile.am: Add Profile.cpp in _sources
+
+2008-05-09  Brady Eidson  <beidson@apple.com>
+
+        Build Fix.  Kevin is an idiot.  
+        ("My name is Kevin McCullough and I approve this message.")
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2008-05-09  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Tim.
+
+        -<rdar://problem/5770054> JavaScript profiler (10928)
+        -Add Profile class so that all profiles can be stored and retrieved by
+        the WebInspector when that time comes.
+
+        * JavaScriptCore.exp: Export the new function signatures.
+        * JavaScriptCore.xcodeproj/project.pbxproj: Add the new files to the
+        project
+        * profiler/Profile.cpp: Added. This class represents a single run of the
+        profiler.
+        (KJS::Profile::Profile):
+        (KJS::Profile::willExecute):
+        (KJS::Profile::didExecute):
+        (KJS::Profile::printDataInspectorStyle):
+        (KJS::functionNameCountPairComparator):
+        (KJS::Profile::printDataSampleStyle):
+        * profiler/Profile.h: Added. Ditto
+        (KJS::Profile::stopProfiling):
+        * profiler/Profiler.cpp: Now the profiler keeps track of many profiles
+        but only runs one at a time.
+        (KJS::Profiler::startProfiling):
+        (KJS::Profiler::stopProfiling):
+        (KJS::Profiler::willExecute):
+        (KJS::Profiler::didExecute):
+        (KJS::Profiler::printDataInspectorStyle):
+        (KJS::Profiler::printDataSampleStyle):
+        * profiler/Profiler.h: Ditto.
+        (KJS::Profiler::~Profiler):
+        (KJS::Profiler::allProfiles):
+        (KJS::Profiler::clearProfiles):
+
+2008-05-08  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Mark.
+
+        Enable NPAPI plug-ins on 64-bit.
+        
+        * wtf/Platform.h:
+
+2008-05-07  Julien Chaffraix  <jchaffraix@webkit.org>
+
+        Reviewed by Adam Roben.
+
+        wx & Gtk build fix.
+
+        Add SIZE_MAX definition for the wx port.
+
+        * os-win32/stdint.h:
+
+2008-05-07  Ariya Hidayat  <ariya.hidayat@trolltech.com>
+
+        Reviewed by Simon.
+
+        Support for isMainThread in the Qt port.
+
+        * wtf/ThreadingQt.cpp:
+        (WTF::initializeThreading): Adjusted.
+        (WTF::isMainThread): Added.
+
+2008-05-05  Darin Adler  <darin@apple.com>
+
+        Reviewed by John Sullivan.
+
+        - fix debug-only leak seen on buildbot
+
+        * wtf/HashTable.h:
+        (WTF::HashTable::checkKey): After writing an empty value in, but before constructing a
+        deleted value on top of it, call the destructor so the empty value doesn't leak.
+
+2008-05-02  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoffrey Garen.
+
+        Get rid of static data in nodes.cpp (well, at least of non-debug one).
+
+        No measurable change on SunSpider.
+
+        * kjs/InitializeThreading.cpp:
+        (KJS::initializeThreadingOnce):
+        * kjs/nodes.cpp:
+        (KJS::newTrackedObjects):
+        (KJS::trackedObjectExtraRefCounts):
+        (KJS::initializeNodesThreading):
+        (KJS::ParserRefCounted::ParserRefCounted):
+        (KJS::ParserRefCounted::ref):
+        (KJS::ParserRefCounted::deref):
+        (KJS::ParserRefCounted::refcount):
+        (KJS::ParserRefCounted::deleteNewObjects):
+        * kjs/nodes.h:
+        Made newTrackedObjects and trackedObjectExtraRefCounts per-thread.
+
+2008-05-02  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Move call stack depth counter to global object.
+
+        * kjs/ExecState.h: (KJS::ExecState::functionCallDepth): Added a recursion depth counter to
+        per-thread data.
+        * kjs/JSGlobalObject.cpp: (KJS::JSGlobalObject::init): Initialize PerThreadData.functionCallDepth.
+        * kjs/JSGlobalObject.h: (KJS::JSGlobalObject::perThreadData): Made the result non-const.
+
+        * kjs/object.cpp:
+        (KJS::throwStackSizeExceededError): Moved throwError to a separate function, since it is now
+        the only thing in JSObject::call that needs a PIC branch.
+        (KJS::JSObject::call): Use a per-thread variable instead of local static for recursion depth
+        tracking.
+
+2008-05-02  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Make JavaScriptGlue and JavaScriptCore API functions implicitly call initializeThreading
+        for the sake of non-WebKit clients.
+
+        * API/JSBase.cpp:
+        (JSGarbageCollect):
+        * API/JSContextRef.cpp:
+        (JSGlobalContextCreate):
+        These are the JavaScriptCore API bottlenecks. There are a few other JSStringRef
+        and JSClassRef functions that can be called earlier, but they do not do anything that
+        requires initializeThreading.
+
+        * kjs/InitializeThreading.cpp:
+        (KJS::doInitializeThreading):
+        (KJS::initializeThreading):
+        On Darwin, make the initialization happen under pthread_once, since there is no guarantee
+        that non-WebKit clients won't try to call this function re-entrantly.
+
+        * kjs/InitializeThreading.h:
+        * wtf/Threading.h:
+        Spell out initializeThreading contract.
+
+        * wtf/ThreadingPthreads.cpp: (WTF::isMainThread): Make sure that results are correct on
+        Darwin, even if threading was initialized from a secondary thread.
+
+2008-05-02  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoffrey Garen.
+
+        https://bugs.webkit.org/show_bug.cgi?id=18826
+        Make JavaScript heap per-thread
+
+        * wtf/ThreadSpecific.h: Make sure to initialize POD thread-specific varaibles, too
+        (replaced "new T" with "new T()").
+
+        * kjs/collector.h: Renamed Collector to Heap, made the heap per-thread. Removed support for
+        multithreaded access to a heap.
+        (KJS::CollectorBlock): Removed collectOnMainThreadOnly bitmap, added a reference to owner heap.
+        (KJS::SmallCellCollectorBlock): Ditto.
+        (KJS::Heap::markListSet): Moved from a static variable in List.cpp to a per-thread one here.
+        (KJS::Heap::heap): Added a method to find which heap a JSValue is allocated in.
+
+        * kjs/collector.cpp: Changed "const size_t" constants to #defines, to avoid a PIC branch
+        (gcc was using one to access a constant used in std::max(), because it takes a reference,
+        even though std::max() itself was inlined).
+        (KJS::Heap::threadHeap): JS heap is now per-thread.
+        (KJS::Heap::Heap): Zero-initialize the heap.
+        (KJS::allocateBlock): Added NEVER_INLINE, because this function uses a PIC branch, so
+        inlining it in Heap::heapAllocate() is bad for performance, now that the latter doesn't
+        use any global data.
+        (KJS::Heap::heapAllocate): Initialize Block::heap.
+        (KJS::Heap::markCurrentThreadConservatively): Moved into markStackObjectsConservatively(),
+        as GC only works with a current thread's heap now.
+        (KJS::Heap::sweep): Removed collectOnMainThreadOnly checks.
+        (KJS::Heap::collect): Ditto.
+
+        * kjs/JSLock.cpp:
+        * kjs/JSLock.h:
+        (KJS::JSLock::JSLock):
+        Removed registerThread(), as the heap no longer cares.
+
+        * kjs/InitializeThreading.cpp: (KJS::initializeThreading): Initialize new per-thread
+        variables in Heap and JSGlobalObject.
+
+        * kjs/ExecState.h: (KJS::ExecState::heap): Added a heap pointer for faster access to
+        per-thread heap, and an accessor for it.
+
+        * kjs/JSGlobalObject.h: Made JSGlobalObject linked list per-thread.
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::~JSGlobalObject): Fixed a bug in linked list handling. It only worked
+        right if the removed object was the head one!
+        (KJS::JSGlobalObject::head): Return a per-thread list head.
+        (KJS::JSGlobalObject::init): Store a reference to per-thread heap.
+        (KJS::JSGlobalObject::reset): Pass ExecState to functions that need it.
+        (KJS::JSGlobalObject::tearOffActivation): Ditto.
+        (KJS::JSGlobalObject::operator new): JSGlobalObject allocation cannot use an ExecState,
+        so it needs a custom operator new that directly accesses per-thread heap.
+
+        * kjs/list.h:
+        (KJS::List::List): Replaced m_isInMarkSet boolean with an actual pointer to the set, since it
+        is no longer a single static object.
+        (KJS::List::~List): Ditto.
+        * kjs/list.cpp:
+        (KJS::List::markSet): Removed, this is now stored in Heap.
+        (KJS::List::markProtectedLists): Take a reference to the list.
+        (KJS::List::expandAndAppend): Ask the current thread heap for a mark set reference.
+
+        * kjs/protect.h:
+        (KJS::gcProtect):
+        (KJS::gcUnprotect):
+        Use the newly added Heap::heap() method to find out which heap the value to be (un)protected
+        belongs to.
+
+        * kjs/property_map.h: Removed unused SavedProperty class.
+
+        * JavaScriptCore.exp:
+        * API/JSBase.cpp:
+        (JSGarbageCollect):
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::::staticFunctionGetter):
+        * API/JSClassRef.cpp:
+        (OpaqueJSClass::prototype):
+        * API/JSObjectRef.cpp:
+        (JSObjectMake):
+        (JSObjectMakeFunctionWithCallback):
+        (JSObjectMakeConstructor):
+        (JSObjectMakeFunction):
+        * API/JSValueRef.cpp:
+        (JSValueMakeNumber):
+        (JSValueMakeString):
+        * kjs/array_instance.cpp:
+        (KJS::ArrayInstance::ArrayInstance):
+        (KJS::ArrayInstance::lengthGetter):
+        * kjs/array_object.cpp:
+        (KJS::arrayProtoFuncToString):
+        (KJS::arrayProtoFuncToLocaleString):
+        (KJS::arrayProtoFuncJoin):
+        (KJS::arrayProtoFuncConcat):
+        (KJS::arrayProtoFuncPop):
+        (KJS::arrayProtoFuncPush):
+        (KJS::arrayProtoFuncShift):
+        (KJS::arrayProtoFuncSlice):
+        (KJS::arrayProtoFuncSplice):
+        (KJS::arrayProtoFuncUnShift):
+        (KJS::arrayProtoFuncFilter):
+        (KJS::arrayProtoFuncMap):
+        (KJS::arrayProtoFuncEvery):
+        (KJS::arrayProtoFuncForEach):
+        (KJS::arrayProtoFuncSome):
+        (KJS::arrayProtoFuncIndexOf):
+        (KJS::arrayProtoFuncLastIndexOf):
+        (KJS::ArrayObjectImp::ArrayObjectImp):
+        (KJS::ArrayObjectImp::construct):
+        * kjs/bool_object.cpp:
+        (KJS::BooleanPrototype::BooleanPrototype):
+        (KJS::booleanProtoFuncToString):
+        (KJS::BooleanObjectImp::BooleanObjectImp):
+        (KJS::BooleanObjectImp::construct):
+        * kjs/date_object.cpp:
+        (KJS::formatLocaleDate):
+        (KJS::DatePrototype::DatePrototype):
+        (KJS::DateObjectImp::DateObjectImp):
+        (KJS::DateObjectImp::construct):
+        (KJS::DateObjectImp::callAsFunction):
+        (KJS::DateObjectFuncImp::DateObjectFuncImp):
+        (KJS::DateObjectFuncImp::callAsFunction):
+        (KJS::dateProtoFuncToString):
+        (KJS::dateProtoFuncToUTCString):
+        (KJS::dateProtoFuncToDateString):
+        (KJS::dateProtoFuncToTimeString):
+        (KJS::dateProtoFuncToLocaleString):
+        (KJS::dateProtoFuncToLocaleDateString):
+        (KJS::dateProtoFuncToLocaleTimeString):
+        (KJS::dateProtoFuncValueOf):
+        (KJS::dateProtoFuncGetTime):
+        (KJS::dateProtoFuncGetFullYear):
+        (KJS::dateProtoFuncGetUTCFullYear):
+        (KJS::dateProtoFuncToGMTString):
+        (KJS::dateProtoFuncGetMonth):
+        (KJS::dateProtoFuncGetUTCMonth):
+        (KJS::dateProtoFuncGetDate):
+        (KJS::dateProtoFuncGetUTCDate):
+        (KJS::dateProtoFuncGetDay):
+        (KJS::dateProtoFuncGetUTCDay):
+        (KJS::dateProtoFuncGetHours):
+        (KJS::dateProtoFuncGetUTCHours):
+        (KJS::dateProtoFuncGetMinutes):
+        (KJS::dateProtoFuncGetUTCMinutes):
+        (KJS::dateProtoFuncGetSeconds):
+        (KJS::dateProtoFuncGetUTCSeconds):
+        (KJS::dateProtoFuncGetMilliSeconds):
+        (KJS::dateProtoFuncGetUTCMilliseconds):
+        (KJS::dateProtoFuncGetTimezoneOffset):
+        (KJS::dateProtoFuncSetTime):
+        (KJS::setNewValueFromTimeArgs):
+        (KJS::setNewValueFromDateArgs):
+        (KJS::dateProtoFuncSetYear):
+        (KJS::dateProtoFuncGetYear):
+        * kjs/error_object.cpp:
+        (KJS::ErrorPrototype::ErrorPrototype):
+        (KJS::errorProtoFuncToString):
+        (KJS::ErrorObjectImp::ErrorObjectImp):
+        (KJS::ErrorObjectImp::construct):
+        (KJS::NativeErrorPrototype::NativeErrorPrototype):
+        (KJS::NativeErrorImp::NativeErrorImp):
+        (KJS::NativeErrorImp::construct):
+        * kjs/function.cpp:
+        (KJS::FunctionImp::lengthGetter):
+        (KJS::FunctionImp::construct):
+        (KJS::Arguments::Arguments):
+        (KJS::ActivationImp::createArgumentsObject):
+        (KJS::encode):
+        (KJS::decode):
+        (KJS::globalFuncParseInt):
+        (KJS::globalFuncParseFloat):
+        (KJS::globalFuncEscape):
+        (KJS::globalFuncUnescape):
+        (KJS::PrototypeFunction::PrototypeFunction):
+        (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
+        * kjs/function_object.cpp:
+        (KJS::FunctionPrototype::FunctionPrototype):
+        (KJS::functionProtoFuncToString):
+        (KJS::FunctionObjectImp::FunctionObjectImp):
+        (KJS::FunctionObjectImp::construct):
+        * kjs/internal.cpp:
+        (KJS::StringImp::toObject):
+        * kjs/internal.h:
+        (KJS::StringImp::StringImp):
+        (KJS::NumberImp::operator new):
+        * kjs/lookup.h:
+        (KJS::staticFunctionGetter):
+        (KJS::cacheGlobalObject):
+        * kjs/math_object.cpp:
+        (KJS::MathObjectImp::getValueProperty):
+        (KJS::mathProtoFuncAbs):
+        (KJS::mathProtoFuncACos):
+        (KJS::mathProtoFuncASin):
+        (KJS::mathProtoFuncATan):
+        (KJS::mathProtoFuncATan2):
+        (KJS::mathProtoFuncCeil):
+        (KJS::mathProtoFuncCos):
+        (KJS::mathProtoFuncExp):
+        (KJS::mathProtoFuncFloor):
+        (KJS::mathProtoFuncLog):
+        (KJS::mathProtoFuncMax):
+        (KJS::mathProtoFuncMin):
+        (KJS::mathProtoFuncPow):
+        (KJS::mathProtoFuncRandom):
+        (KJS::mathProtoFuncRound):
+        (KJS::mathProtoFuncSin):
+        (KJS::mathProtoFuncSqrt):
+        (KJS::mathProtoFuncTan):
+        * kjs/nodes.cpp:
+        (KJS::Node::handleException):
+        (KJS::NumberNode::evaluate):
+        (KJS::StringNode::evaluate):
+        (KJS::ArrayNode::evaluate):
+        (KJS::PostIncResolveNode::evaluate):
+        (KJS::PostIncLocalVarNode::evaluate):
+        (KJS::PostDecResolveNode::evaluate):
+        (KJS::PostDecLocalVarNode::evaluate):
+        (KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
+        (KJS::PostIncBracketNode::evaluate):
+        (KJS::PostDecBracketNode::evaluate):
+        (KJS::PostIncDotNode::evaluate):
+        (KJS::PostDecDotNode::evaluate):
+        (KJS::typeStringForValue):
+        (KJS::LocalVarTypeOfNode::evaluate):
+        (KJS::TypeOfResolveNode::evaluate):
+        (KJS::TypeOfValueNode::evaluate):
+        (KJS::PreIncLocalVarNode::evaluate):
+        (KJS::PreIncResolveNode::evaluate):
+        (KJS::PreDecLocalVarNode::evaluate):
+        (KJS::PreDecResolveNode::evaluate):
+        (KJS::PreIncConstNode::evaluate):
+        (KJS::PreDecConstNode::evaluate):
+        (KJS::PostIncConstNode::evaluate):
+        (KJS::PostDecConstNode::evaluate):
+        (KJS::PreIncBracketNode::evaluate):
+        (KJS::PreDecBracketNode::evaluate):
+        (KJS::PreIncDotNode::evaluate):
+        (KJS::PreDecDotNode::evaluate):
+        (KJS::NegateNode::evaluate):
+        (KJS::BitwiseNotNode::evaluate):
+        (KJS::MultNode::evaluate):
+        (KJS::DivNode::evaluate):
+        (KJS::ModNode::evaluate):
+        (KJS::addSlowCase):
+        (KJS::add):
+        (KJS::AddNumbersNode::evaluate):
+        (KJS::AddStringsNode::evaluate):
+        (KJS::AddStringLeftNode::evaluate):
+        (KJS::AddStringRightNode::evaluate):
+        (KJS::SubNode::evaluate):
+        (KJS::LeftShiftNode::evaluate):
+        (KJS::RightShiftNode::evaluate):
+        (KJS::UnsignedRightShiftNode::evaluate):
+        (KJS::BitXOrNode::evaluate):
+        (KJS::BitOrNode::evaluate):
+        (KJS::valueForReadModifyAssignment):
+        (KJS::ForInNode::execute):
+        (KJS::TryNode::execute):
+        (KJS::FuncDeclNode::makeFunction):
+        (KJS::FuncExprNode::evaluate):
+        * kjs/number_object.cpp:
+        (KJS::NumberPrototype::NumberPrototype):
+        (KJS::numberProtoFuncToString):
+        (KJS::numberProtoFuncToLocaleString):
+        (KJS::numberProtoFuncToFixed):
+        (KJS::numberProtoFuncToExponential):
+        (KJS::numberProtoFuncToPrecision):
+        (KJS::NumberObjectImp::NumberObjectImp):
+        (KJS::NumberObjectImp::getValueProperty):
+        (KJS::NumberObjectImp::construct):
+        (KJS::NumberObjectImp::callAsFunction):
+        * kjs/object.cpp:
+        (KJS::JSObject::defineGetter):
+        (KJS::JSObject::defineSetter):
+        (KJS::JSObject::putDirect):
+        (KJS::Error::create):
+        * kjs/object.h:
+        * kjs/object_object.cpp:
+        (KJS::ObjectPrototype::ObjectPrototype):
+        (KJS::objectProtoFuncToLocaleString):
+        (KJS::objectProtoFuncToString):
+        (KJS::ObjectObjectImp::ObjectObjectImp):
+        (KJS::ObjectObjectImp::construct):
+        * kjs/regexp_object.cpp:
+        (KJS::RegExpPrototype::RegExpPrototype):
+        (KJS::regExpProtoFuncToString):
+        (KJS::RegExpImp::getValueProperty):
+        (KJS::RegExpObjectImp::RegExpObjectImp):
+        (KJS::RegExpObjectImp::arrayOfMatches):
+        (KJS::RegExpObjectImp::getBackref):
+        (KJS::RegExpObjectImp::getLastParen):
+        (KJS::RegExpObjectImp::getLeftContext):
+        (KJS::RegExpObjectImp::getRightContext):
+        (KJS::RegExpObjectImp::getValueProperty):
+        (KJS::RegExpObjectImp::createRegExpImp):
+        * kjs/regexp_object.h:
+        * kjs/string_object.cpp:
+        (KJS::StringInstance::StringInstance):
+        (KJS::StringInstance::lengthGetter):
+        (KJS::StringInstance::indexGetter):
+        (KJS::stringInstanceNumericPropertyGetter):
+        (KJS::StringPrototype::StringPrototype):
+        (KJS::replace):
+        (KJS::stringProtoFuncCharAt):
+        (KJS::stringProtoFuncCharCodeAt):
+        (KJS::stringProtoFuncConcat):
+        (KJS::stringProtoFuncIndexOf):
+        (KJS::stringProtoFuncLastIndexOf):
+        (KJS::stringProtoFuncMatch):
+        (KJS::stringProtoFuncSearch):
+        (KJS::stringProtoFuncReplace):
+        (KJS::stringProtoFuncSlice):
+        (KJS::stringProtoFuncSplit):
+        (KJS::stringProtoFuncSubstr):
+        (KJS::stringProtoFuncSubstring):
+        (KJS::stringProtoFuncToLowerCase):
+        (KJS::stringProtoFuncToUpperCase):
+        (KJS::stringProtoFuncToLocaleLowerCase):
+        (KJS::stringProtoFuncToLocaleUpperCase):
+        (KJS::stringProtoFuncLocaleCompare):
+        (KJS::stringProtoFuncBig):
+        (KJS::stringProtoFuncSmall):
+        (KJS::stringProtoFuncBlink):
+        (KJS::stringProtoFuncBold):
+        (KJS::stringProtoFuncFixed):
+        (KJS::stringProtoFuncItalics):
+        (KJS::stringProtoFuncStrike):
+        (KJS::stringProtoFuncSub):
+        (KJS::stringProtoFuncSup):
+        (KJS::stringProtoFuncFontcolor):
+        (KJS::stringProtoFuncFontsize):
+        (KJS::stringProtoFuncAnchor):
+        (KJS::stringProtoFuncLink):
+        (KJS::StringObjectImp::StringObjectImp):
+        (KJS::StringObjectImp::construct):
+        (KJS::StringObjectImp::callAsFunction):
+        (KJS::StringObjectFuncImp::StringObjectFuncImp):
+        (KJS::StringObjectFuncImp::callAsFunction):
+        * kjs/string_object.h:
+        (KJS::StringInstanceThatMasqueradesAsUndefined::StringInstanceThatMasqueradesAsUndefined):
+        * kjs/testkjs.cpp:
+        (GlobalObject::GlobalObject):
+        (functionGC):
+        (functionRun):
+        (functionReadline):
+        (kjsmain):
+        * kjs/ustring.h:
+        * kjs/value.cpp:
+        (KJS::JSCell::operator new):
+        (KJS::jsString):
+        (KJS::jsOwnedString):
+        (KJS::jsNumberCell):
+        * kjs/value.h:
+        (KJS::jsNaN):
+        (KJS::jsNumber):
+        (KJS::jsNumberFromAnd):
+        (KJS::JSCell::marked):
+        (KJS::JSCell::mark):
+        (KJS::JSValue::toJSNumber):
+        Removed collectOnMainThreadOnly, as this is the only way to collect now. Replaced calls to
+        static Collector methods with calls to per-thread Heap ones.
+
+2008-05-02  Dan Bernstein  <mitz@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        - Mac build fix
+
+        * wtf/StrHash.h: Added header guards and removed #include "config.h".
+
+2008-05-01  Ada Chan  <adachan@apple.com>
+
+        #include <wtf/StrHash.h> in identifier.cpp.
+
+        Reviewed by Maciej.
+
+        * kjs/identifier.cpp:
+
+2008-05-01  Steve Falkenburg  <sfalken@apple.com>
+
+        Build fix.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2008-05-01  Sam Weinig  <sam@webkit.org>
+
+        Fix build.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2008-05-01  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Darin.
+
+        <rdar://problem/5770054> JavaScript profiler (10928)
+        - Fix "sample" output so that it can be imported into Instruments
+        - Also keep track of number of times a function is profiled.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj: Add StrHash.h which needed
+        to be pulled out of identifier.cpp so that it could be used by the
+        profiler and identifiers.
+        * kjs/identifier.cpp: Ditto.
+        * profiler/FunctionCallProfile.cpp:
+        (KJS::FunctionCallProfile::printDataInspectorStyle): Inspector style
+        printing should show microseconds.
+        (KJS::FunctionCallProfile::printDataSampleStyle): Sample style printing
+        now counts the number of times a function is in the stack tree and does
+        not print microseconds since that does not make sense for a sampler.
+        * profiler/FunctionCallProfile.h: Keep track of number of times a
+        function is profiled.
+        (KJS::FunctionCallProfile::numberOfCalls):
+        * profiler/Profiler.cpp:
+        (KJS::functionNameCountPairComparator): Comparator for sort function in
+        printDataSampleStyle.
+        (KJS::Profiler::printDataSampleStyle): Print the number of times that a
+        function is listed in the stack tree in order of most times listed.
+        * wtf/HashCountedSet.h: Added copyToVector since it didn't exist and is
+        a more standard way to copy a HashSet to a Vector. I added on variant
+        that takes a pair as the Vector's type and so the HashCountedSet simply
+        fills in that pair with its internal pair, and another variant that
+        takes a Vector of the type of the HashCountedSet and only fills in the
+        Vector with the first element of the pair.
+        (WTF::copyToVector):
+        * wtf/StrHash.h: Added.
+        (WTF::):
+
+2008-04-29  David Kilzer  <ddkilzer@apple.com>
+
+        BUILD FIX for ENABLE(DASHBOARD_SUPPORT)
+
+        * wtf/Platform.h: Defined ENABLE(DASHBOARD_SUPPORT) to 1 only for
+        PLATFORM(MAC) and PLATFORM(WIN).  Changed default to 0 for other
+        ports.
+
+2008-04-29  Greg Bolsinga  <bolsinga@apple.com>
+
+        Reviewed by Darin.
+
+        Wrapped Dashboard code with ENABLE(DASHBOARD_SUPPORT)
+
+        * wtf/Platform.h:
+
+2008-04-29  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Geoff.
+
+        -<rdar://problem/5770054> JavaScript profiler (10928)
+        -Keep call count.
+
+        * profiler/FunctionCallProfile.cpp:
+        (KJS::FunctionCallProfile::FunctionCallProfile):
+        (KJS::FunctionCallProfile::didExecute): Implements call count and fixed a bug where a stackIndex
+        of 0 was causing the assert to be hit.
+        (KJS::FunctionCallProfile::stopProfiling):
+        (KJS::FunctionCallProfile::endAndRecordCall):
+        * profiler/FunctionCallProfile.h:
+
+2008-04-29  Simon Hausmann  <hausmann@webkit.org>
+
+        Qt/Windows build fix. The externally declared hash tables are actually
+        declared const and the const is mangled in the symbol name, so when
+        importing they also need to be marked const.
+
+        When compiling without MULTIPLE_THREADS use a const HashTable&
+        instead of a HashTable& in ThreadClassInfoHashTables to avoid
+        initializing the latter with a const reference.
+
+        * kjs/JSGlobalObject.cpp:
+
+2008-04-28  Alexey Proskuryakov  <ap@webkit.org>
+
+        Windows build fix.
+
+        * kjs/ExecState.h: For whatever reason, MSVC couldn't generate a default constructor for
+        a struct that had a "const List" member. Removing the const qulifier makes the problem go away.
+
+2008-04-28  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Fix run-webkit-tests --threading
+        and provisionally fix <https://bugs.webkit.org/show_bug.cgi?id=18661>
+        Proxy server issue in Sunday's Nightly
+
+        Changed ClassInfo objects for built-in objects to hold a getter function returning
+        a per-thread instance. This makes it safe to share these ClassInfo objects between threads -
+        and these are the only ones that need to be shared.
+
+        * kjs/lexer.cpp:
+        (KJS::Lexer::Lexer):
+        (KJS::Lexer::~Lexer):
+        * kjs/lexer.h:
+        Made mainTable a member of Lexer, so that it no longer needs to be shared between threads.
+
+        * kjs/object.cpp:
+        (KJS::JSObject::deleteProperty):
+        (KJS::JSObject::findPropertyHashEntry):
+        (KJS::JSObject::propertyIsEnumerable):
+        (KJS::JSObject::getPropertyAttributes):
+        (KJS::JSObject::getPropertyNames):
+        * kjs/object.h:
+        (KJS::ClassInfo::propHashTable):
+        Added a new classPropHashTableGetterFunction field to ClassInfo. If it is non-zero, the
+        static table is not used.
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::ThreadClassInfoHashTables::ThreadClassInfoHashTables): This new class holds per-thread
+        HashTables for built-in classes. The old static structs are copied to create per-thread
+        instances.
+        (KJS::JSGlobalObject::threadClassInfoHashTables): An accessor/initializer for the above.
+        (KJS::JSGlobalObject::init): Copy per-thread data into a single structure for faster access.
+        Also, construct globalExec.
+        (KJS::JSGlobalObject::reset): Adapted for globalExec now being an OwnPtr.
+        (KJS::JSGlobalObject::mark): Ditto.
+        (KJS::JSGlobalObject::globalExec): Ditto.
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Made JSGlobalObject::JSGlobalObjectData::globalExec an OwnPtr, so that it can
+        be initialized from JSGlobalObject::init() after them. Otherwise, ExecState constructor was
+        trying to access half-initialized JSGlobalObject to make its own copy of these table
+        references, and failed.
+        (KJS::JSGlobalObject::JSGlobalObject): Pass "this" value to init() to create globalExec.
+        (KJS::JSGlobalObject::perThreadData): An accessor for per-thread data.
+
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::ExecState):
+        * kjs/ExecState.h:
+        (KJS::ExecState::propertyNames):
+        (KJS::ExecState::emptyList):
+        (KJS::ExecState::arrayTable):
+        (KJS::ExecState::dateTable):
+        (KJS::ExecState::mathTable):
+        (KJS::ExecState::numberTable):
+        (KJS::ExecState::RegExpImpTable):
+        (KJS::ExecState::RegExpObjectImpTable):
+        (KJS::ExecState::stringTable):
+        * kjs/ExecStateInlines.h:
+        (KJS::ExecState::ExecState):
+        Each ExecState holds its own reference to per-thread data, for even faster access. Moved
+        m_emptyList and m_propertyNames to the same structure, making ExecState faster to construct
+        and take less space on the stack.
+
+        * kjs/InitializeThreading.cpp: (KJS::initializeThreading): Initialize thread-static data
+        added to JSGlobalObject.
+
+        * API/JSCallbackConstructor.cpp:
+        * API/JSCallbackFunction.cpp:
+        * API/JSCallbackObject.cpp:
+        * JavaScriptCore.exp:
+        * kjs/JSVariableObject.cpp:
+        (KJS::JSVariableObject::getPropertyAttributes):
+        * kjs/JSVariableObject.h:
+        * kjs/array_instance.cpp:
+        * kjs/array_object.cpp:
+        (KJS::ArrayPrototype::getOwnPropertySlot):
+        * kjs/bool_object.cpp:
+        * kjs/create_hash_table:
+        * kjs/date_object.cpp:
+        (KJS::DatePrototype::getOwnPropertySlot):
+        (KJS::DateObjectImp::DateObjectImp):
+        * kjs/error_object.cpp:
+        * kjs/function.cpp:
+        * kjs/function_object.cpp:
+        (KJS::FunctionPrototype::FunctionPrototype):
+        * kjs/internal.cpp:
+        * kjs/lookup.h:
+        * kjs/math_object.cpp:
+        (KJS::MathObjectImp::getOwnPropertySlot):
+        * kjs/number_object.cpp:
+        (KJS::NumberObjectImp::getOwnPropertySlot):
+        * kjs/object_object.cpp:
+        (KJS::ObjectPrototype::ObjectPrototype):
+        * kjs/regexp_object.cpp:
+        (KJS::RegExpPrototype::RegExpPrototype):
+        (KJS::RegExpImp::getOwnPropertySlot):
+        (KJS::RegExpImp::put):
+        (KJS::RegExpObjectImp::getOwnPropertySlot):
+        (KJS::RegExpObjectImp::put):
+        * kjs/string_object.cpp:
+        (KJS::StringPrototype::getOwnPropertySlot):
+        Adjust for the above changes.
+
+2008-04-28  Darin Adler  <darin@apple.com>
+
+        Reviewed by Adam.
+
+        - make sure RefPtr's default hash doesn't ref/deref when computing the hash
+        - remove remnants of the hash table storage type optimization
+
+        * wtf/HashFunctions.h: Used "using" to get the hash and equal functions
+        from PtrHash<P*> into PtrHash<RefPtr<P>>.
+
+        * wtf/HashMap.h: Replaced uses of PairBaseHashTraits with PairHashTraits.
+        Eliminated storage-related typedefs. Removed constructor, destructor,
+        copy constructor, and destructor since the compiler-generated ones are
+        fine. Removed refAll and derefAll. Took out unnnecessary typecasts.
+        Removed use of RefCounter.
+
+        * wtf/HashSet.h: Eliminated storage-related typedefs. Removed constructor,
+        destructor, copy constructor, and destructor since the compiler-generated
+        ones are fine. Removed refAll and derefAll. Removed unneeded template
+        arguents from HashSetTranslatorAdapter. Eliminated unneeded HashSetTranslator
+        template.
+
+        * wtf/HashTable.h: Tweaked formatting. Removed NeedsRef, RefCounterBase,
+        RefCounter, HashTableRefCounterBase, HashTableRefCounter, and Assigner
+        class templates.
+
+        * wtf/HashTraits.h: Removed StorageTraits, needsRef, PairBaseHashTraits,
+        and HashKeyStorageTraits.
+
+        * wtf/RefPtrHashMap.h: Made all the same fixes as in HashMap. Also made
+        the corresponding changes to RefPtrHashMapRawKeyTranslator.
+
+2008-04-28  Darin Adler  <darin@apple.com>
+
+        Reviewed by Mitz.
+
+        - fix assertion hit every time you view www.apple.com
+
+        * kjs/PropertyNameArray.cpp:
+        (KJS::PropertyNameArray::add): Changed assertion to allow null and empty strings.
+        Now to find out why we have a property named "" and if that's a bug!
+
+2008-04-27  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        Fix crash inside PtrHash::hash when loading a page.
+
+        * wtf/HashFunctions.h: Explicitly use the superclass implementation of hash to avoid infinite recursion.
+
+2008-04-27  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - fix <rdar://problem/5657459> REGRESSION: JavaScriptCore no longer builds with
+          GCC 4.2 due to pointer aliasing warnings
+
+        Fix this by removing the HashTable optimizations that allowed us to share a back end
+        implementation between hash tables with integers, pointers, RefPtr, and String objects
+        as keys. The way it worked was incompatible with strict aliasing.
+
+        This increases code size. On Mac OS X we'll have to regenerate .order files to avoid
+        slowing down Safari startup times.
+
+        This creates a slight slowdown in SunSpider, mitigated by the following four speedups:
+
+        - speed up array put slightly by moving a branch (was already done for get)
+
+        - speed up symbol table access by adding a function named inlineGet to HashMap
+          and using that in symbolTableGet/Put
+
+        - speed up PropertyNameArray creation by reducing the amount of reference count
+          churn and uniqueness checking when adding names and not doing any allocation at
+          all when building small arrays
+
+        - speed up conversion of strings to floating point numbers by eliminating the
+          malloc/free of the buffer for the ASCII copy of the string; a way to make
+          things even faster would be to change strtod to take a UTF-16 string
+
+        Note that there is considerable unused complexity now in HashSet/Map/Table to support
+        "storage types", which is no longer used. Will do in a separate patch.
+
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::JSCallbackObject<Base>::getPropertyNames): Removed explicit cast to Identifier to
+        take advantage of the new PropertyNameArray::add overload and avoid reference count churn.
+        * API/JSObjectRef.cpp:
+        (JSPropertyNameAccumulatorAddName): Ditto.
+        * JavaScriptCore.exp: Updated PropertyNameArray::add entry point name.
+
+        * kjs/JSVariableObject.cpp: Removed now-unneeded IdentifierRepHashTraits::nullRepPtr
+        definition (see below).
+        (KJS::JSVariableObject::getPropertyNames): Removed explicit cast to Identifier.
+
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::symbolTableGet): Use inlineGet for speed. Also changed to do
+        early exit instead of nesting the body inside an if.
+        (KJS::JSVariableObject::symbolTablePut): Ditto.
+
+        * kjs/PropertyNameArray.cpp:
+        (KJS::PropertyNameArray::add): Changed implementation to take a raw pointer instead of
+        a reference to an identifier. Do uniqueness checking by searching the vector when the
+        vector is short, only building the set once the vector is large enough.
+
+        * kjs/PropertyNameArray.h: Added an overload of add for a raw pointer, and made the old
+        add function call that one. Added an addKnownUnique function for use when the new
+        name is known to be different from any other in the array. Changed the vector to have
+        an inline capacity of 20.
+
+        * kjs/SymbolTable.h: Changed IdentifierRepHash to inherit from the default hash for
+        a RefPtr so we don't have to define so much. Added an overload of the hash function for
+        a raw pointer as required by the new RefPtrHashMap. Got rid of the now-unneeded
+        IdentifierRepHashTraits -- the default traits now work fine. Added a definition of
+        empthValueIsZero to SymbolTableIndexHashTraits; not having it was incorrect, but harmless.
+
+        * kjs/array_instance.cpp:
+        (KJS::ArrayInstance::put): Move the maxArrayIndex check inside the branch that checks
+        the index against the length, as done in the get function.
+
+        * kjs/function.cpp:
+        (KJS::globalFuncKJSPrint): Changed to use the new getCString instead of cstring.
+
+        * kjs/internal.cpp: Removed printInfo debugging function, a client of cstring.
+        If we need a debugging function we can easily make a better one and we haven't
+        used this one in a long time.
+        * kjs/internal.h: Ditto.
+
+        * kjs/object.cpp:
+        (KJS::JSObject::getPropertyNames): Removed explicit cast to Identifier.
+        * kjs/property_map.cpp:
+        (KJS::PropertyMap::getEnumerablePropertyNames): Ditto. Also added a special case for
+        the case where the propertyNames array is empty -- in that case we know we're adding
+        a set of names that are non-overlapping so we can use addKnownUnique.
+        * kjs/ustring.cpp:
+        (KJS::UString::getCString): Replaces cstring. Puts the C string into a CStringBuffer,
+        which is a char Vector with an inline capacity. Also returns a boolean to indicate if
+        the converion was lossy, which eliminates the need for a separate is8Bit call.
+        (KJS::UString::toDouble): Changed to call getCString instead of cstring.
+        * kjs/ustring.h: Ditto.
+
+        * wtf/HashFunctions.h: Overload the hash and equal functions for RefPtr's default
+        hash to take raw pointers. This works with the changes to RefPtrHashMap to avoid
+        introducing refcount churn.
+
+        * wtf/HashMap.h: Removed special code to convert the deleted value to the empty value
+        when writing a new value into the map. This is now handled elsewhere.
+        (WTF::HashMap::get): Removed code that checks for an empty hash table before calling
+        HashTable::lookup; it's slightly more efficient to do this check inside lookup.
+
+        * wtf/HashTable.h:
+        (WTF::HashTable::isDeletedBucket): Changed to use isDeletedValue instead of using
+        deletedValue and the equality operator.
+        (WTF::HashTable::deleteBucket): Changed to use constructDeletedValue instead of
+        using deletedValue and the assignment operator.
+        (WTF::HashTable::checkKey): Added. Factors out the check for values that are empty
+        or deleted keys that's used in various functions below.
+        (WTF::HashTable::lookup): Changed to use checkKey, check for a 0 table, and also
+        made public for use by RefPtrHashMap.
+        (WTF::HashTable::lookupForWriting): Changed to use checkKey.
+        (WTF::HashTable::fullLookupForWriting): Changed to use checkKey.
+        (WTF::HashTable::add): Changed to use checkKey, and call initializeBucket on a
+        deleted bucket before putting a new entry into it.
+        (WTF::HashTable::addPassingHashCode): Ditto.
+        (WTF::HashTable::deallocateTable): Check isDeletedBucket before calling ~ValueType.
+
+        * wtf/HashTraits.h: Got ridd of all the HashTraits specialization for the integer
+        types, since GeneicHashTraitsBase already deals with integers separately. Put the
+        deleted value support into GenericHashTraitsBase. Changed FloatHashTraits to
+        inherit from GenericHashTraits, and define construct/isDeletedValue rather than
+        deletedValue. Removed the ref and deref functions from RefPtr's HashTraits, and
+        defined construct/isDeletedValue. Eliminated DeletedValueAssigner. Changed
+        PairHashTraits to define construct/isDeletedValue, and also merged
+        PairBaseHashTraits in with PairHashTraits. Got rid of all specialization of
+        HashKeyStorageTraits. We'll remove that, and the needsRef data member, later.
+
+        * wtf/RefPtr.h: Added HashTableDeletedValueType, an enum type with a single value,
+        HashTableDeletedValue. Used that type to make a new constructor to construct
+        deleted values and also added an isHashTableDeletedValue function.
+
+        * wtf/RefPtrHashMap.h: Added RefPtrHashMapRawKeyTranslator and used it to implement
+        the raw pointer functions. This is a way to continue to avoid refcount thrash. We
+        can't use the old way because it depended on the underlying map using a non-RefPtr
+        type.
+        (WTF::HashMap::find): Use find with RefPtrHashMapRawKeyTranslator.
+        (WTF::HashMap::contains): Use contains with RefPtrHashMapRawKeyTranslator.
+        (WTF::HashMap::inlineAdd): Use add with RefPtrHashMapRawKeyTranslator.
+        (WTF::HashMap::get): Removed code that checks for an empty hash table before calling
+        HashTable::lookup; it's slightly more efficient to do this check inside lookup.
+        (WTF::HashMap::inlineGet): Added. Just like get, but marked inline for use in the
+        symbol table code.
+
+2008-04-25  Sam Weinig  <sam@webkit.org>
+
+        Rubber-stamped by Mark Rowe.
+
+        Remove SavedBuiltins and SavedProperties classes and the methods used to
+        save data to them.  The CachedPage now stores a the JSGlobalObject in full.
+
+        * JavaScriptCore.exp:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/JSGlobalObject.cpp:
+        * kjs/JSGlobalObject.h:
+        * kjs/JSVariableObject.cpp:
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::localStorage):
+        * kjs/SavedBuiltins.h: Removed.
+        * kjs/object.h:
+        * kjs/property_map.cpp:
+        * kjs/property_map.h:
+
+2008-04-25  Mark Rowe  <mrowe@apple.com>
+
+        Rubber-stamped by Sam Weinig.
+
+        Add some content to an empty ICU header file to prevent verification errors.
+
+        * icu/unicode/utf_old.h:
+
+2008-04-25  David Kilzer  <ddkilzer@apple.com>
+
+        <rdar://problem/5819422> REGRESSION: Wrong line number passed to -willLeaveCallFrame
+
+        Patch by George Dicker and Michael Kahl.  Reviewed by Darin.
+
+        When -[NSObject(WebScriptDebugDelegate) webView:willLeaveCallFrame:sourceId:line:forWebFrame:]
+        is invoked, the first line number of the function is returned instead of the last
+        line number.  This regressed in r28458.
+
+        * kjs/nodes.cpp:
+        (KJS::FunctionBodyNodeWithDebuggerHooks::execute): Pass lastLine() instead of lineNo()
+        when calling Debugger::returnEvent().
+
+2008-04-25  Darin Adler  <darin@apple.com>
+
+        Done with Stephanie Lewis.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj: Prepare for compilation with gcc 4.2 by
+        adding -fno-strict-aliasing to CollatorICU.cpp.
+
+2008-04-24  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Geoffrey Garen.
+
+        Add a #define to easily enable collecting on every allocation to aid
+        debugging GC bugs.
+
+        * kjs/collector.cpp:
+        (KJS::Collector::heapAllocate):
+
+2008-04-24  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Adam and Sam.
+
+        -<rdar://problem/5770054> JavaScript profiler (10928)
+        -Only profile the page group that starts profiling to avoid profiling
+        tools that shouldn't be profiled unless explicitly requested to.
+
+        * JavaScriptCore.exp: Export new signature.
+        * kjs/JSGlobalObject.cpp: Add unique identifiers to the JSGlobalObject.
+        (KJS::JSGlobalObject::init):
+        * kjs/JSGlobalObject.h: Ditto.
+        (KJS::JSGlobalObject::setPageGroupIdentifier):
+        (KJS::JSGlobalObject::pageGroupIdentifier):
+        * profiler/Profiler.cpp: Check the identifier of the page group of the
+        lexical global exec state and only profile if it matches the given page
+        group identifier.
+        (KJS::Profiler::startProfiling):
+        (KJS::Profiler::willExecute):
+        (KJS::Profiler::didExecute):
+        * profiler/Profiler.h: Ditto.
+        (KJS::Profiler::Profiler):
+
+2008-04-24  Julien Chaffraix  <jchaffraix@webkit.org>
+
+        Reviewed by Simon.
+
+        Bug 15940: Implement threading API for Qt
+        https://bugs.webkit.org/show_bug.cgi?id=15940
+
+        Original patch by Justin Haygood, tweaked by me.
+
+        * JavaScriptCore.pri:
+        * wtf/ThreadingQt.cpp: Added.
+        (WTF::threadMapMutex):
+        (WTF::threadMap):
+        (WTF::establishIdentifierForThread):
+        (WTF::clearThreadForIdentifier):
+        (WTF::threadForIdentifier):
+        (WTF::initializeThreading):
+        (WTF::ThreadPrivate::getReturnValue):
+        (WTF::ThreadPrivate::ThreadPrivate):
+        (WTF::ThreadPrivate::run):
+        (WTF::createThread):
+        (WTF::waitForThreadCompletion): return !res to return
+        0 on success (to match the pthreads implementation).
+        (WTF::detachThread):
+        (WTF::identifierByQthreadHandle):
+        (WTF::currentThread):
+        (WTF::Mutex::Mutex):
+        (WTF::Mutex::~Mutex):
+        (WTF::Mutex::lock):
+        (WTF::Mutex::tryLock):
+        (WTF::Mutex::unlock):
+        (WTF::ThreadCondition::ThreadCondition):
+        (WTF::ThreadCondition::~ThreadCondition):
+        (WTF::ThreadCondition::wait):
+        (WTF::ThreadCondition::timedWait):
+        (WTF::ThreadCondition::signal):
+
+2008-04-22  Darin Adler  <darin@apple.com>
+
+        Reviewed by Anders.
+
+        - simplify use of HashTraits to prepare for some upcoming hash table changes
+
+        * kjs/SymbolTable.h: Made SymbolTableIndexHashTraits derive from HashTraits<size_t>
+        and specialize only the empty value.
+
+2008-04-23  Holger Hans Peter Freyther  <zecke@selfish.org>
+
+        Reviewed by Simon.
+
+        Removed the #define for USE_SYSTEM_MALLOC that we set in WebKit.pri
+        already.
+
+        * wtf/Platform.h:
+
+2008-04-21  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Adam.
+
+        <rdar://problem/5770054> JavaScript profiler (10928)
+        - When stop profiling is called we need to stop the timers on all the
+        functions that are still running.
+
+        * profiler/FunctionCallProfile.cpp:
+        (KJS::FunctionCallProfile::didExecute):
+        (KJS::FunctionCallProfile::stopProfiling):
+        * profiler/FunctionCallProfile.h:
+        * profiler/Profiler.cpp:
+        (KJS::Profiler::stopProfiling):
+
+2008-04-21  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Move collector main thread initialization from WebKit/win to KJS::initializeThreading.
+
+        * kjs/InitializeThreading.cpp:
+        (KJS::initializeThreading):
+
+2008-04-21  Adam Roben  <aroben@apple.com>
+
+        MSVC build fix
+
+        Reviewed by Alexey Proskuryakov.
+
+        * kjs/ustring.h:
+        (KJS::UString::cost): Disable a warning about assigning a 32-bit
+        size_t into a 31-bit size_t.
+
+2008-04-21  Simon Hausmann  <hausmann@webkit.org>
+
+        Reviewed by Lars.
+
+        Made convertValueToQVariant accessible from within WebKit/qt/Api
+
+        * bindings/qt/qt_runtime.h:
+
+2008-04-21  Holger Hans Peter Freyther  <holger.freyther@trolltech.com>
+
+        Reviewed by Simon.
+
+        Build fix for Qt 4.3
+
+        * When building WebCore/internal make sure the QT_[BEGIN,END]_NAMESPACE is
+        always defined. Do this by adding defines to the compiler line
+        * For users of our API this is not feasible. Every public header file should
+        include qwebkitglobal.h. Define the QT_BEGIN_NAMESPACE and QT_END_NAMESPACE
+        when we are building everything < 4.4.0 and don't have them defined.
+
+        * kjs/testkjs.pro:
+
+2008-04-19  Matt Lilek  <webkit@mattlilek.com>
+
+        Not reviewed, Windows build fix - copy the profiler headers in all
+        configurations, not just Debug_Internal.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2008-04-19  Mike Hommey  <glandium@debian.org>
+
+        Reviewed by Alp Toker.
+
+        Don't build testkjs with rpath.
+
+        * GNUmakefile.am:
+
+2008-04-18  Kevin Ollivier  <kevino@theolliviers.com>
+
+        wx build fixes. Rename LocalStorage.h to LocalStorageEntry.h
+        to avoid header detection issues between WebCore/storage/LocalStorage.h 
+        and it, and add $(PROFILER_SOURCES) to the wx JSCore build.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * jscore.bkl:
+        * kjs/ExecState.h:
+        * kjs/JSVariableObject.h:
+        * kjs/LocalStorage.h: Removed.
+        * kjs/LocalStorageEntry.h: Copied from JavaScriptCore/kjs/LocalStorage.h.
+        * kjs/function.h:
+
+2008-04-18 Jan  Michael Alonzo  <jmalonzo@unpluggable.com>
+
+        Reviewed by Alp Toker.
+
+        http://bugs.webkit.org/show_bug.cgi?id=16620
+        [GTK] Autotools make dist and make check support
+
+        Cleanups.
+
+        * GNUmakefile.am:
+
+2008-04-18  Jon Honeycutt  <jhoneycutt@apple.com>
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Windows
+        build fix.
+
+2008-04-11  Mark Rowe  <mrowe@apple.com>
+
+        Rubber-stamped by Antti Koivisto.
+
+        Silence GCC 4.3 warnings by removing extraneous consts.
+
+        * kjs/ustring.cpp:
+        * kjs/ustring.h:
+
+2008-04-18  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Sam.
+
+        -<rdar://problem/5770054> JavaScript profiler (10928)
+        - Use Deque instead of Vector since the profiler uses prepend a lot
+        and deque is faster at that.
+
+        * profiler/FunctionCallProfile.h:
+        (KJS::FunctionCallProfile::milliSecs): Corrected the name to match
+        its output.
+        * wtf/Deque.h:
+        (WTF::deleteAllValues):
+
+2008-04-18  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Sam and Adam.
+
+        -<rdar://problem/5770054> JavaScript profiler (10928)
+        - Cleaned up the header file and made some functions static, added
+        a new, sane, printing function, and fixed a few minor bugs.
+
+        * JavaScriptCore.exp:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * profiler/FunctionCallProfile.cpp:
+        (KJS::FunctionCallProfile::didExecute): Removed assertion that time is
+        > 0 because at ms resolution that may not be true and only cross-
+        platform way to get time differences is in ms.
+        (KJS::FunctionCallProfile::printDataInspectorStyle): Added a new
+        printing function for dumping data in a sane style.
+        (KJS::FunctionCallProfile::printDataSampleStyle): Fixed a bug where we
+        displayed too much precision when printing our floats. Also added logic
+        to make sure we don't display 0 because that doesn't make sense for a
+        sampling profile.
+        * profiler/FunctionCallProfile.h:
+        * profiler/Profiler.cpp: Moved functions that could be static into the
+        implementation, and chaned the ASSERTs to early returns.  I did this
+        because console.profile() is a JS function and so was being profiled
+        but asserting because the profiler had not been started! In the future
+        I would like to put the ASSERTs back and not profile the calls to
+        console.profile() and console.profileEnd().
+        (KJS::Profiler::willExecute):
+        (KJS::Profiler::didExecute):
+        (KJS::getStackNames): Fixed a bug where the wrong ExecState was being
+        used.
+        (KJS::getFunctionName):
+        (KJS::Profiler::printDataInspectorStyle):
+        * profiler/Profiler.h:
+
+2008-04-18  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Fix leaks during plugin tests (which actually excercise background JS), and potential
+        PAC brokenness that was not reported, but very likely.
+
+        The leaks shadowed a bigger problem with Identifier destruction. Identifier::remove involves
+        an IdentifierTable lookup, which is now a per-thread instance. Since garbage collection can
+        currently happen on a different thread than allocation, a wrong table was used.
+
+        No measurable change on SunSpider total, ~1% variation on individual tests.
+
+        * kjs/ustring.cpp:
+        (KJS::UString::Rep::create):
+        (KJS::UString::Rep::destroy):
+        * kjs/ustring.h:
+        Replaced isIdentifier with a pointer to IdentifierTable, so that destruction can be done
+        correctly. Took one bit from reportedCost, to avoid making UString::Rep larger (performance
+        effect was measurable on SunSpider).
+
+        * kjs/identifier.cpp:
+        (KJS::IdentifierTable::IdentifierTable):
+        (KJS::IdentifierTable::~IdentifierTable):
+        (KJS::IdentifierTable::add):
+        (KJS::IdentifierTable::remove):
+        Make IdentifierTable a real class. Its destructor needs to zero out outstanding references,
+        because some identifiers may briefly outlive it during thread destruction, and we don't want
+        them to use their stale pointers.
+
+        (KJS::LiteralIdentifierTable):
+        (KJS::Identifier::add):
+        Now that LiteralIdentifierTable is per-thread and can be destroyed not just during application
+        shutdown, it is not appropriate to simply bump refcount for strings that get there; changed
+        the table to hold RefPtrs.
+
+        (KJS::CStringTranslator::translate):
+        (KJS::UCharBufferTranslator::translate):
+        (KJS::Identifier::addSlowCase):
+        (KJS::Identifier::remove):
+        * kjs/identifier.h:
+        (KJS::Identifier::add):
+        Use and update UString::Rep::identifierTable as appropriate. Updating it is now done in
+        IdentifierTable::add, not in translators.
+
+2008-04-18  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Get rid of static compareWithCompareFunctionArguments in array_instance.cpp.
+
+        No change on SunSpider, CelticKane or iBench JavaScript. It is probable that in some cases,
+        merge sort is still faster, but more investigation is needed to determine a new cutoff.
+        Or possibly, it would be better to do what FIXME says (change to tree sort).
+
+        Also, made arguments a local variable - not sure why it was a member of
+        CompareWithCompareFunctionArguments.
+
+        * kjs/array_instance.cpp:
+        (KJS::CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
+        (KJS::CompareWithCompareFunctionArguments::operator()):
+        (KJS::ArrayInstance::sort):
+
+2008-04-18  Simon Hausmann  <hausmann@webkit.org>
+
+        Build fix for gcc 4.3. Include stdio.h for printf.
+
+        * profiler/FunctionCallProfile.cpp:
+        * profiler/Profiler.cpp:
+
+2008-04-17  Jon Honeycutt  <jhoneycutt@apple.com>
+
+        Reviewed by mrowe.
+
+        * wtf/Platform.h: Add HAVE_ACCESSIBILITY to Platform.h.
+
+2008-04-17  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Maciej.
+
+        Thread static data destructors are not guaranteed to be called in any particular order;
+        turn ThreadSpecific into a phoenix-style singleton to avoid accessing freed memory when
+        deleted objects are interdependent (e.g. CommonIdentifiers and internal identifier tables).
+
+        No change on SunSpider.
+
+        * wtf/ThreadSpecific.h:
+        (WTF::ThreadSpecific::Data::Data):
+        (WTF::::get):
+        (WTF::::set):
+        (WTF::::destroy):
+
+2008-04-15  Srinivas Rao. M Hamse  <msrinirao@gmail.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        - gcc 3.x build fix
+
+        * kjs/nodes.h: CallerType definition made public for gcc 3.x compilation
+
+2008-04-16  Brady Eidson  <beidson@apple.com>
+
+        Reviewed by Sam Weinig
+
+        Change ThreadSafeShared to act like RefCounted by starting out with a single ref by default
+
+        * wtf/Threading.h:
+        (WTF::ThreadSafeShared::ThreadSafeShared):
+
+2008-04-16  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Geoffrey Garen.
+
+        - To keep the behavior of the WebKit and JavaScriptCore API's the same,
+          we need to hide the fact that the global object and the window object
+          are no longer the same thing, and the the global object now changes on
+          navigations.  To do this, only the wrapper should ever be exposed.  This
+          fixes the two remaining spots where the internal global object is exposed,
+          the windowScriptObject returned from [WebFrame windowObject] and the object
+          return by calling JSContextGetGlobalObject on [WebFrame globalContext].
+
+        * API/JSContextRef.cpp:
+        (JSContextGetGlobalObject):
+        This is a bit of a hack, this returns the "this" representation of the globalObject
+        which will be the WrapperWindow for WebCore and the globalObject for non-WebCore.
+
+        * API/JSObjectRef.cpp:
+        (JSObjectSetProperty):
+        Call the new putWithAttributes method instead of relying on lower-level calls.
+        This is needed so that the window wrapper can forward the calls.
+
+        * JavaScriptCore.exp:
+        * kjs/Activation.h:
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::putWithAttributes):
+        * kjs/JSGlobalObject.h:
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::symbolTablePutWithAttributes):
+        * kjs/function.cpp:
+        (KJS::ActivationImp::putWithAttributes):
+        * kjs/nodes.cpp:
+        (KJS::ConstDeclNode::handleSlowCase):
+        (KJS::ConstDeclNode::evaluateSingle):
+        (KJS::EvalNode::processDeclarations):
+        * kjs/object.cpp:
+        (KJS::JSObject::putWithAttributes):
+        * kjs/object.h:
+        Rename initializeVariable to putWithAttributes and move it down to JSObject so it
+        can be used for JSObjectSetProperty.
+
+2008-04-16  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Sam and Geoff.
+
+        -<rdar://problem/5770054> JavaScript profiler (10928)
+        Inital profiler prototype
+
+        * GNUmakefile.am: Added new files to project
+        * JavaScriptCore.pri: Ditto
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto
+        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto
+        * JavaScriptCoreSources.bkl: Ditto
+        * kjs/config.h: Put compiling flag in here.
+        * kjs/function.cpp: Instrument calling the function eval().
+        (KJS::eval):
+        * kjs/interpreter.cpp: Instrument evaluating global scopes.
+        (KJS::Interpreter::evaluate):
+        * kjs/object.cpp: Instrument JS function calls.
+        (KJS::JSObject::call):
+        * profiler: Added.
+        * profiler/FunctionCallProfile.cpp: Added.
+        (KJS::FunctionCallProfile::FunctionCallProfile):
+        (KJS::FunctionCallProfile::~FunctionCallProfile):
+        (KJS::FunctionCallProfile::willExecute): Call right before the JS function or executing context is executed to start the profiler's timer.
+        (KJS::FunctionCallProfile::didExecute): Call right after the JS function or executing context is executed to stop the profiler's timer.
+        (KJS::FunctionCallProfile::addChild): Add a child to the current FunctionCallProfile if it isn't already a child of the current FunctionalCallProfile.
+        (KJS::FunctionCallProfile::findChild): Return the child that matches the given name if there is one.
+        (KJS::FunctionCallProfile::printDataSampleStyle): Print the current profiled information in a format that matches sample's output.
+        * profiler/FunctionCallProfile.h: Added.
+        (KJS::FunctionCallProfile::FunctionCallProfile):
+        (KJS::FunctionCallProfile::~FunctionCallProfile):
+        (KJS::FunctionCallProfile::functionName):
+        (KJS::FunctionCallProfile::microSecs):
+        * profiler/Profiler.cpp: Added.
+        (KJS::Profiler::profiler):
+        (KJS::Profiler::sharedProfiler): Return global singleton (may change due to multi-threading concerns)
+        (KJS::Profiler::startProfiling): Don't start collecting profiling information until the user starts the profiler. Also don't clear old prfiled data until the profiler is restarted.
+        (KJS::Profiler::stopProfiling): Stop collecting profile information.
+        (KJS::Profiler::willExecute): Same as above. 
+        (KJS::Profiler::didExecute): Same as above.
+        (KJS::Profiler::insertStackNamesInTree): Follow the stack of the given names and if a sub-stack is not in the current tree, add it.
+        (KJS::Profiler::getStackNames): Get the names from the different passed in parameters and order them as a stack.
+        (KJS::Profiler::getFunctionName): Get the function name from the given parameter.
+        (KJS::Profiler::printDataSampleStyle): Print the current profiled information in a format that matches sample's output.
+        (KJS::Profiler::debugLog):
+        * profiler/Profiler.h: Added.
+        (KJS::Profiler::Profiler):
+
+2008-04-16  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Darin Adler.
+
+        - Remove kjs_ prefix from strtod, dtoa, and freedtoa and put it
+          in the KJS namespace.
+        - Make strtod, dtoa, and freedtoa c++ functions instead of extern "C".
+        - Remove mode switching from dtoa.  ~2% improvement on test 26. 
+        - Removes all unnecessary #defines from dtoa code.
+
+        * JavaScriptCore.exp:
+        * kjs/dtoa.cpp:
+        (KJS::ulp):
+        (KJS::b2d):
+        (KJS::d2b):
+        (KJS::ratio):
+        (KJS::strtod):
+        (KJS::freedtoa):
+        (KJS::dtoa):
+        * kjs/dtoa.h:
+        * kjs/function.cpp:
+        (KJS::parseInt):
+        * kjs/lexer.cpp:
+        (KJS::Lexer::lex):
+        * kjs/number_object.cpp:
+        (KJS::integer_part_noexp):
+        (KJS::numberProtoFuncToExponential):
+        * kjs/ustring.cpp:
+        (KJS::UString::from):
+        (KJS::UString::toDouble):
+
+2008-04-16  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Get rid of static execForCompareByStringForQSort in array_instance.cpp.
+
+        No change on SunSpider, CelticKane or iBench JavaScript.
+
+        * kjs/array_instance.cpp:
+        (KJS::ArraySortComparator::ArraySortComparator):
+        (KJS::ArraySortComparator::operator()):
+        (KJS::ArrayInstance::sort):
+        Switch slow case to std::sort, so that ExecState can be passed in a comparator.
+
+2008-04-16  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Adam Roben.
+
+        MSVC build fix.
+
+        * kjs/CommonIdentifiers.cpp:
+        * kjs/CommonIdentifiers.h:
+        * kjs/Parser.cpp:
+        * kjs/Parser.h:
+        * kjs/identifier.cpp:
+        * kjs/lexer.h:
+        * wtf/ThreadSpecific.h:
+
+2008-04-16  Alexey Proskuryakov  <ap@webkit.org>
+
+        Build fix.
+
+        * kjs/date_object.cpp:
+        * kjs/date_object.h:
+        Don't include DateMath.h from date_object.h, as the latter is used from WebCore, while
+        where the former is not available.
+
+2008-04-16  Holger Hans Peter Freyther  <zecke@selfish.org>
+
+        Unreviewed build fix for MSVC. It does not want to have
+        WTF in the KJS namespace.
+
+        * kjs/CommonIdentifiers.h:
+
+2008-04-16  Holger Hans Peter Freyther  <zecke@selfish.org>
+
+        Unreviewed build fix for gcc.
+
+        ::msToGregorianDateTime  is not known to it.
+
+        * kjs/date_object.cpp:
+        (KJS::DateInstance::msToGregorianDateTime):
+
+2008-04-16  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Oliver Hunt.
+
+        Initialize threadMapMutex safely (as already done in ThreadingWin).
+
+        * wtf/ThreadingGtk.cpp:
+        (WTF::threadMapMutex):
+        (WTF::initializeThreading):
+        * wtf/ThreadingPthreads.cpp:
+        (WTF::threadMapMutex):
+        (WTF::initializeThreading):
+
+2008-04-16  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Adam Roben.
+
+        Cache Gregorian date/time structure on DateInstance objects for 1.027x SunSpider speedup
+        (1.65x on date-format-xparb, 1.13x on date-format-tofte).
+
+        * kjs/DateMath.h:
+        (KJS::GregorianDateTime::copyFrom): Added. It presumably makes sense to keep GregorianDateTime
+        Noncopyable, so it's not just operator=.
+
+        * kjs/date_object.h: Added a per-object cache.
+
+        * kjs/date_object.cpp:
+        (KJS::DateInstance::DateInstance):
+        (KJS::DateInstance::msToGregorianDateTime):
+        (KJS::dateProtoFuncToString):
+        (KJS::dateProtoFuncToUTCString):
+        (KJS::dateProtoFuncToDateString):
+        (KJS::dateProtoFuncToTimeString):
+        (KJS::dateProtoFuncToLocaleString):
+        (KJS::dateProtoFuncToLocaleDateString):
+        (KJS::dateProtoFuncToLocaleTimeString):
+        (KJS::dateProtoFuncGetFullYear):
+        (KJS::dateProtoFuncGetUTCFullYear):
+        (KJS::dateProtoFuncToGMTString):
+        (KJS::dateProtoFuncGetMonth):
+        (KJS::dateProtoFuncGetUTCMonth):
+        (KJS::dateProtoFuncGetDate):
+        (KJS::dateProtoFuncGetUTCDate):
+        (KJS::dateProtoFuncGetDay):
+        (KJS::dateProtoFuncGetUTCDay):
+        (KJS::dateProtoFuncGetHours):
+        (KJS::dateProtoFuncGetUTCHours):
+        (KJS::dateProtoFuncGetMinutes):
+        (KJS::dateProtoFuncGetUTCMinutes):
+        (KJS::dateProtoFuncGetSeconds):
+        (KJS::dateProtoFuncGetUTCSeconds):
+        (KJS::dateProtoFuncGetTimezoneOffset):
+        (KJS::setNewValueFromTimeArgs):
+        (KJS::setNewValueFromDateArgs):
+        (KJS::dateProtoFuncSetYear):
+        (KJS::dateProtoFuncGetYear):
+        Use the cache when converting.
+
+2008-04-16  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Implement an abstraction for thread-specific storage, use it to get rid of some static objects.
+
+        SunSpider results were not conclusive, possibly up to 0.2% slowdown.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+        Added ThreadSpecific.h
+
+        * wtf/ThreadSpecific.h: Added.
+        (WTF::::ThreadSpecific):
+        (WTF::::~ThreadSpecific):
+        (WTF::::get):
+        (WTF::::set):
+        (WTF::::destroy):
+        (WTF::T):
+        (WTF::::operator):
+        Only implemented for platforms that use pthreads.
+
+        * kjs/CommonIdentifiers.cpp:
+        (KJS::CommonIdentifiers::shared):
+        * kjs/CommonIdentifiers.h:
+        * kjs/InitializeThreading.cpp:
+        (KJS::initializeThreading):
+        * kjs/Parser.cpp:
+        (KJS::parser):
+        * kjs/Parser.h:
+        * kjs/identifier.cpp:
+        (KJS::identifierTable):
+        (KJS::literalIdentifierTable):
+        (KJS::Identifier::initializeIdentifierThreading):
+        * kjs/identifier.h:
+        * kjs/lexer.cpp:
+        (KJS::lexer):
+        * kjs/lexer.h:
+        Make static instances per-thread.
+
+2008-04-15  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Adam.
+
+        Add ENABLE_OFFLINE_WEB_APPLICATIONS to FEATURE_DEFINES.
+        
+        * Configurations/JavaScriptCore.xcconfig:
+
+2008-04-15  Andre Poenitz  <andre.poenitz@trolltech.com>
+
+        Reviewed by Simon.
+
+        Fix compilation with Qt namespaces
+
+        Qt can be configured to have all of its classes inside a specified namespaces.
+        This is for example used in plugin/component environments like Eclipse.
+
+        This change makes it possible to let the Qt port compile against a namespaced
+        Qt by the use of macros Qt provides to properly forward declare Qt classes in
+        the namespace.
+
+        * wtf/unicode/qt4/UnicodeQt4.h:
+
+2008-04-14  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Adam.
+
+        Don't leak the prototype class.
+        
+        * API/JSClassRef.cpp:
+        (OpaqueJSClass::create):
+
+2008-04-14  Steve Falkenburg  <sfalken@apple.com>
+
+        Fix build.
+
+        * wtf/ThreadingWin.cpp:
+
+2008-04-14  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Adam Roben.
+
+        https://bugs.webkit.org/show_bug.cgi?id=18488
+        FastMalloc doesn't release thread-specific data on Windows
+
+        * wtf/ThreadingWin.cpp:
+        (WTF::threadMapMutex): (WTF::initializeThreading): Call threadMapMutex once to initialize the static safely.
+        (WTF::ThreadFunctionInvocation::ThreadFunctionInvocation): Added a structure to wrap thread entry point and arguments.
+        (WTF::wtfThreadEntryPoint): Make sure to end all WTF threads with pthread_exit(), to give pthreads-win32 a chance to call
+        destructors of thread-specific data.
+        (WTF::createThread): Use _beginthreadex instead of CreateThread, because MSDN says so. Also removed a call to CreateEvent,
+        for which I could see no reason at all.
+
+2008-04-14  Alexey Proskuryakov  <ap@webkit.org>
+
+        Touched a file to make JavaScriptCore.vcproj rebuild.
+
+        * wtf/MathExtras.h:
+
+2008-04-14  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        Rubberstamped by Alexey Proskuryakov.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable
+        the "potentially uninitialized variable" warning for grammar.cpp, as
+        it seems to be incorrect. yylval gets initialized by the lexer, but
+        MSVC doesn't seem to understand this.
+
+2008-04-11  Antti Koivisto  <antti@apple.com>
+
+        Reviewed by Maciej.
+        
+        Add default hash for pairs of hashable types.
+
+        * wtf/HashFunctions.h:
+        (WTF::PairHash::hash):
+        (WTF::PairHash::equal):
+        (WTF::):
+
+2008-04-11  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoff.
+
+        Make DateMath.cpp thread safe.
+
+        No measurable change on SunSpider (should be a very small speedup).
+
+        * kjs/DateMath.cpp:
+        (KJS::mimimumYearForDST): (KJS::equivalentYearForDST): Got rid of double caching of the
+        same precomputed value.
+        (KJS::calculateUTCOffset): (KJS::getUTCOffset): Factored actual UTC offset calculation code
+        out of getUTCOffset(), and notification setup into initDateMath().
+
+        (KJS::initDateMath): Added.
+
+        * kjs/DateMath.h:
+        * kjs/InitializeThreading.cpp:
+        (KJS::initializeThreading):
+        Added initDateMath().
+
+2008-04-11  Alexey Proskuryakov  <ap@webkit.org>
+
+        Windows build fix.
+
+        * kjs/grammar.y:
+
+2008-04-11  Alexey Proskuryakov  <ap@webkit.org>
+
+        Tiger build fix. Forward declaring a union didn't work for whatever reason, make the
+        parameters void*.
+
+        * kjs/grammar.y:
+        * kjs/lexer.cpp:
+        (kjsyylex):
+        (KJS::Lexer::lex):
+        * kjs/lexer.h:
+
+2008-04-11  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoff.
+
+        Generate a pure (re-entrant) parser with Bison.
+
+        No change on SunSpider.
+
+        * kjs/Parser.cpp:
+        (KJS::Parser::parse):
+        * kjs/grammar.y:
+        * kjs/lexer.cpp:
+        (kjsyylex):
+        (KJS::Lexer::lex):
+        * kjs/lexer.h:
+        Pass state as function arguments, instead of global data. Don't call lexer() as often as
+        before, as this function is about to become slower due to thread-specific storage.
+
+        * kjs/function.cpp:
+        (KJS::isStrWhiteSpace): Don't call isSeparatorSpace() for 8-bit characters, as these are
+        already taken care of. This is a small speedup, compensating for a small slowdown caused
+        by switching Bison mode.
+
+2008-04-10  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Geoff.
+
+        https://bugs.webkit.org/show_bug.cgi?id=18402
+        REGRESSION: visited element handling is incorrect in nested join/toString calls
+
+        No change on SunSpider total, possibly a tiny improvement (about 0.1%).
+
+        Test: fast/js/array-tostring-and-join.html
+
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::visitedElements): Store visited elements HashSet here, making it
+        common to toString/toLocalizedString/join again.
+
+        * kjs/array_object.cpp:
+        (KJS::arrayProtoFuncToString):
+        (KJS::arrayProtoFuncToLocaleString):
+        (KJS::arrayProtoFuncJoin):
+        Got rid of static variables. Replaced UString with Vector to avoid O(n^2) behavior and
+        regain performance.
+
+        * wtf/Vector.h:
+        (WTF::::resize):
+        (WTF::::grow):
+        (WTF::::reserveCapacity):
+        (WTF::::append):
+        (WTF::::insert):
+        Added null checks, so that Vector methods don't crash when out of memory. The caller should
+        check that data pointer is not null before proceeding.
+
+2008-04-10  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        Fix https://bugs.webkit.org/show_bug.cgi?id=18367 and the many dupes.
+        Bug 18367: Crash during celtic kane js speed 2007 test
+
+        GCC 4.2 on x86_64 Linux decided to reorder the local variables in markCurrentThreadConservatively's
+        stack frame.  This lead to the range of addresses the collector treated as stack to exclude the
+        contents of volatile registers that markCurrentThreadConservatively forces onto the stack.  This was
+        leading to objects being prematurely collected if the only reference to them was via a register at
+        the time a collection occurred.
+
+        The fix for this is to move the calculation of the top of the stack into a NEVER_INLINE function
+        that is called from markCurrentThreadConservatively.  This forces the dummy variable we use for
+        determining the top of stack to be in a different stack frame which prevents the compiler from
+        reordering it relative to the registers that markCurrentThreadConservatively forces onto the stack.
+
+        * kjs/collector.cpp:
+        (KJS::Collector::markCurrentThreadConservativelyInternal):
+        (KJS::Collector::markCurrentThreadConservatively):
+        * kjs/collector.h:
+
+2008-04-10  Adam Roben  <aroben@apple.com>
+
+        VC++ Express build fix
+
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Link against user32.lib so
+        that anyone who links against WTF.lib will get user32.lib
+        automatically.
+
+2008-04-09  Adam Roben  <aroben@apple.com>
+
+        VC++ Express build fix
+
+        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Link against
+        user32.lib.
+
+2008-04-09  Adam Roben  <aroben@apple.com>
+
+        Build fix
+
+        * JavaScriptCore.exp: Export isMainThread.
+
+2008-04-09  Adam Roben  <aroben@apple.com>
+
+        Build fix
+
+        * wtf/AlwaysInline.h: Make sure to #include Platform.h before using
+        the macros it defines.
+
+2008-04-08  Mark Rowe  <mrowe@apple.com>
+
+        Export WTF::initializeThreading() from JavaScriptCore.
+
+        * JavaScriptCore.exp:
+
+2008-04-04  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Geoffrey Garen.
+
+        First step in implementing the "split window"
+
+        - Add a GlobalThisValue to ExecState which should be used 
+          in places that used to implement the "use the global object
+          as this if null" rule.
+        - Factor out lookupGetter/lookupSetter into virtual methods 
+          on JSObject so that they can be forwarded.
+        - Make defineGetter/defineSetter virtual methods for the same
+          reason.
+        - Have PrototypeReflexiveFunction store the globalObject used
+          to create it so that it can be used to get the correct thisObject
+          for eval.
+
+        * API/JSObjectRef.cpp:
+        (JSObjectCallAsFunction):
+        * JavaScriptCore.exp:
+        * kjs/Activation.h:
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::ExecState):
+        (KJS::GlobalExecState::GlobalExecState):
+        * kjs/ExecState.h:
+        (KJS::ExecState::globalThisValue):
+        * kjs/ExecStateInlines.h:
+        (KJS::ExecState::ExecState):
+        (KJS::FunctionExecState::FunctionExecState):
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::reset):
+        (KJS::JSGlobalObject::toGlobalObject):
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData):
+        (KJS::JSGlobalObject::JSGlobalObject):
+        * kjs/array_instance.cpp:
+        (KJS::CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
+        (KJS::compareWithCompareFunctionForQSort):
+        * kjs/array_object.cpp:
+        (KJS::arrayProtoFuncSort):
+        (KJS::arrayProtoFuncFilter):
+        (KJS::arrayProtoFuncMap):
+        (KJS::arrayProtoFuncEvery):
+        (KJS::arrayProtoFuncForEach):
+        (KJS::arrayProtoFuncSome):
+        * kjs/function.cpp:
+        (KJS::FunctionImp::callAsFunction):
+        (KJS::ActivationImp::toThisObject):
+        (KJS::globalFuncEval):
+        (KJS::PrototypeReflexiveFunction::PrototypeReflexiveFunction):
+        (KJS::PrototypeReflexiveFunction::mark):
+        * kjs/function.h:
+        (KJS::PrototypeReflexiveFunction::cachedGlobalObject):
+        * kjs/function_object.cpp:
+        (KJS::functionProtoFuncApply):
+        (KJS::functionProtoFuncCall):
+        * kjs/nodes.cpp:
+        (KJS::ExpressionNode::resolveAndCall):
+        (KJS::FunctionCallValueNode::evaluate):
+        (KJS::LocalVarFunctionCallNode::inlineEvaluate):
+        (KJS::ScopedVarFunctionCallNode::inlineEvaluate):
+        (KJS::FunctionCallBracketNode::evaluate):
+        (KJS::FunctionCallDotNode::inlineEvaluate):
+        * kjs/object.cpp:
+        (KJS::JSObject::call):
+        (KJS::JSObject::put):
+        (KJS::tryGetAndCallProperty):
+        (KJS::JSObject::lookupGetter):
+        (KJS::JSObject::lookupSetter):
+        (KJS::JSObject::toThisObject):
+        (KJS::JSObject::toGlobalObject):
+        (KJS::JSObject::fillGetterPropertySlot):
+        * kjs/object.h:
+        * kjs/object_object.cpp:
+        (KJS::objectProtoFuncLookupGetter):
+        (KJS::objectProtoFuncLookupSetter):
+        * kjs/string_object.cpp:
+        (KJS::replace):
+
+2008-04-08  Brady Eidson  <beidson@apple.com>
+
+        Encourage Windows to rebuild - AGAIN...
+
+        * kjs/DateMath.cpp:
+
+2008-04-08  Adam Roben  <aroben@apple.com>
+
+        Mac build fix
+
+        * JavaScriptCore.exp: Add callOnMainThread, and sorted the list.
+
+2008-04-08  Brady Eidson  <beidson@apple.com>
+
+        Rubberstamped by Adam Roben
+        
+        Touch some files to *strongly* encourage Windows to rebuilt with DOM_STORAGE enabled
+
+        * kjs/DateMath.cpp:
+
+2008-04-08  Adam Roben  <aroben@apple.com>
+
+        Move callOnMainThread to WTF
+
+        Reviewed by Alexey Proskuryakov.
+
+        * GNUmakefile.am:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        Added new files.
+
+        * wtf/MainThread.cpp:
+        * wtf/MainThread.h:
+        * wtf/gtk/MainThreadGtk.cpp:
+        * wtf/mac/MainThreadMac.mm:
+        * wtf/qt/MainThreadQt.cpp:
+        * wtf/win/MainThreadWin.cpp:
+        * wtf/wx/MainThreadWx.cpp:
+        Moved here from WebCore/platform. Replaced all instances of "WebCore"
+        with "WTF".
+
+        * kjs/bool_object.cpp: Touched to force JavaScriptCore.vcproj to
+        build.
+        to the WTF namespace.
+        * wtf/ThreadingWin.cpp:
+        (WTF::initializeThreading): Call initializeMainThread.
+
+2008-04-07  Brady Eidson  <beidson@apple.com>
+
+        Add "ENABLE_DOM_STORAGE" to keep in sync with the rest of the project
+
+        * Configurations/JavaScriptCore.xcconfig:
+
+2008-04-07  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        * wtf/ThreadingWin.cpp: Back out some changes I didn't mean to land.
+
+2008-04-07  Adam Roben  <aroben@apple.com>
+
+        Add WTF::isMainThread
+
+        Reviewed by Alexey Proskuryakov.
+
+        * wtf/Threading.h: Declare the new function.
+        * wtf/ThreadingGtk.cpp:
+        (WTF::initializeThreading): Initialize the main thread identifier.
+        (WTF::isMainThread): Added.
+        * wtf/ThreadingNone.cpp: Ditto ThreadingGtk.cpp.
+        (WTF::initializeThreading):
+        (WTF::isMainThread):
+        * wtf/ThreadingPthreads.cpp: Ditto.
+        (WTF::initializeThreading):
+        (WTF::isMainThread):
+        * wtf/ThreadingWin.cpp: Ditto.
+        (WTF::initializeThreading):
+        (WTF::isMainThread):
+
+2008-04-06  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Make UString thread-safe.
+
+        No change on SunSpider total, although individual tests have changed a lot, up to 3%.
+
+        * kjs/InitializeThreading.cpp: (KJS::initializeThreading): Call UString::null() to initialize
+        a static.
+        
+        * kjs/identifier.cpp:
+        (KJS::CStringTranslator::translate):
+        (KJS::UCharBufferTranslator::translate):
+        Use "true" for a boolean value instead of 1, because it's C++.
+
+        * kjs/ustring.h:
+        (KJS::CString::adopt): Added a method to create from a char* buffer without copying.
+        (KJS::UString::Rep::ref): Removed an assertion for JSLock::lockCount, as it's no longer
+        necessary to hold JSLock when working with strings.
+        (KJS::UString::Rep::deref): Ditto.
+        (KJS::UString::Rep::isStatic): Added a field to quickly determine that this is an empty
+        or null static string.
+
+        * kjs/ustring.cpp:
+        (KJS::): Removed normalStatBufferSize and statBufferSize, as there is no reason to have such
+        an advanced implementation of a debug-only ascii() method. Removed a long-obsolete comment
+        about UChar.
+        (KJS::UString::Rep::createCopying): Removed an assertion for JSLock::lockCount.
+        (KJS::UString::Rep::create): Ditto.
+        (KJS::UString::Rep::destroy): Ditto. Do not do anything for static null and empty strings,
+        as refcounting is not reliable for those. Reordered branches for a noticeable speed gain -
+        apparently this functiton is hot enough for SunSpider to see an effect from this!
+        (KJS::UString::null): Moved a star, added a comment.
+        (KJS::UString::cstring): Reimplemented to not call ascii(), which is not thread-safe.
+        (KJS::UString::ascii): Simplified statBuffer handling logic.
+        (KJS::UString::toDouble): Use cstring() instead of ascii().
+
+2008-04-02  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        Ensure that debug symbols are generated for x86_64 and ppc64 builds.
+
+        * Configurations/Base.xcconfig:
+
+2008-04-01  Christian Dywan  <christian@imendio.com>
+
+        Build fix for GCC 4.3.
+
+        * wtf/unicode/icu/CollatorICU.cpp: include string.h
+
+2008-04-01  Alexey Proskuryakov  <ap@webkit.org>
+
+        Rubber-stamped by Darin.
+
+        Turn off using 64-bit arithmetic on 32-bit hardware, as dtoa own code is faster than
+        compiler-provided emulation.
+
+        1% speedup on Acid3 test 26.
+
+        * kjs/dtoa.cpp:
+
+2008-04-01  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Make MathExtras.h thread safe.
+
+        * kjs/math_object.cpp:
+        (KJS::mathProtoFuncRandom): If threading is enabled, rely on initializeThreading to call
+        wtf_random_init().
+
+        * wtf/Threading.h:
+        * wtf/ThreadingGtk.cpp:
+        (WTF::initializeThreading):
+        * wtf/ThreadingNone.cpp:
+        (WTF::initializeThreading):
+        * wtf/ThreadingPthreads.cpp:
+        (WTF::initializeThreading):
+        * wtf/ThreadingWin.cpp:
+        (WTF::initializeThreading):
+        Call wtf_random_init(); made the function non-inline to avoid having to include too many
+        headers in Threading.h.
+
+2008-03-31  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by darin.
+
+        Make matching of regexps using ^ much faster
+        http://bugs.webkit.org/show_bug.cgi?id=18086
+
+        * pcre/pcre_compile.cpp:
+        (compileBranch):
+        (branchNeedsLineStart):
+        * pcre/pcre_exec.cpp:
+        (match):
+        (jsRegExpExecute):
+        * pcre/pcre_internal.h:
+
+2008-03-29  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Oliver Hunt.
+
+        <rdar://problem/5829556> REGRESSION: Leak in KJS::initializeThreading()
+
+        * kjs/InitializeThreading.cpp: (KJS::initializeThreading): There is no guarantee that
+        initializeThreading() is called only once; check that the mutex hasn't been already allocated.
+
+2008-03-29  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Bug 17924: Crash in KJS::ConstDeclNode::evaluate with |with| and |const|
+        <http://bugs.webkit.org/show_bug.cgi?id=17924>
+        <rdar://problem/5806933>
+
+        It turns out this is trivially avoidable if we just match firefox's
+        semantics and ensure that an assignment in a const declaration always
+        writes to the variable object.
+
+        * kjs/nodes.cpp:
+        (KJS::ConstDeclNode::handleSlowCase):
+
+2008-03-28  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Sam Weinig.
+
+        Fix a dtoa thread safety issue.
+
+        WebCore can call kjs_strtod without holding JS lock, but we didn't have thread safety
+        compiled in for dtoa.
+
+        This is a 0.5% regression on SunSpider, which Sam Weinig has volunteered to cover with
+        his recent improvement.
+
+        * kjs/dtoa.cpp:
+        (Bigint::Balloc):
+        (Bigint::Bfree):
+        Changed to use fastMalloc/fastDelete - they are much faster than the dtoa custom version was
+        in the presence of locking (but somewhat slower in single-threaded case).
+        (Bigint::pow5mult): Got rid of the dreaded double-checked locking anti-pattern (had to
+        restructure the code to avoid significant performance implications).
+        (Bigint::lshift): Rewrote to avoid an allocation, if possible.
+
+        (Bigint::rv_alloc):
+        (Bigint::kjs_freedtoa):
+        (Bigint::kjs_dtoa):
+        Check for USE(MULTIPLE_THREADS), not dtoa legacy MULTIPLE_THREADS.
+
+        * kjs/InitializeThreading.cpp: Added.
+        (KJS::initializeThreading):
+        * kjs/InitializeThreading.h: Added.
+        Initialize threading at KJS level, if enabled.
+
+        * kjs/dtoa.h: Expose dtoa mutex for KJS::initializeThreading.
+
+        * kjs/testkjs.cpp: (kjsmain): Call initializeThreading.
+
+        * JavaScriptCore.exp: Export KJS::initializeThreading.
+
+        * GNUmakefile.am:
+        * JavaScriptCore.exp:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCoreSources.bkl:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        Added InitializeThreading.{h,cpp}.
+
+        * wtf/Threading.h: Removed a using directive for WTF::initializeThreading - it is only
+        to be called from KJS::initializeThreading, and having it in the global namespace is useless.
+
+2008-03-28  Brady Eidson  <beidson@apple.com>
+
+        Reviewed by Darin
+
+        Export Unicode/UTF8.h and convertUTF16ToUTF8() for more flexible conversion in WebCore
+
+        * JavaScriptCore.exp:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2008-03-27  Darin Adler  <darin@apple.com>
+
+        Reviewed by Mark Rowe.
+
+        <rdar://problem/5826236> Regular expressions with large nested repetition counts can have their
+        compiled length calculated incorrectly.
+
+        * pcre/pcre_compile.cpp:
+        (multiplyWithOverflowCheck):
+        (calculateCompiledPatternLength): Check for overflow when dealing with nested repetition counts
+        and bail with an error rather than returning incorrect results.
+
+2008-03-26  Mark Rowe  <mrowe@apple.com>
+
+        Rubber-stamped by Brady Eidson.
+
+        Update FEATURE_DEFINES to be consistent with the other locations in which it is defined.
+
+        * Configurations/JavaScriptCore.xcconfig:
+
+2008-03-26  Adam Roben  <aroben@apple.com>
+
+        Fix Bug 18060: Assertion failure (JSLock not held) beneath
+        JSCallbackObject<Base>::toString
+
+        <http://bugs.webkit.org/show_bug.cgi?id=18060>
+
+        Reviewed by Geoff Garen.
+
+        Bug fix:
+
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::JSCallbackObject<Base>::toString): Make the DropAllLocks
+        instance only be in scope while calling convertToType.
+
+        Test:
+
+        * API/testapi.c:
+        (MyObject_convertToType): Implement type conversion to string.
+        * API/testapi.js: Add a test for type conversion to string.
+
+2008-03-26  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        * kjs/array_instance.cpp: Touched this.
+        * wtf/HashFunctions.h:
+        (WTF::intHash): Added 8- and 16-bit versions of intHash.
+
+2008-03-26  Adam Roben  <aroben@apple.com>
+
+        Force JSC headers to be copied by touching a file
+
+        * kjs/array_instance.cpp:
+        (KJS::ArrayInstance::getPropertyNames):
+
+2008-03-26  Adam Roben  <aroben@apple.com>
+
+        Windows build fix after r31324
+
+        Written with Darin.
+
+        Added HashTable plumbing to support using wchar_t as a key type.
+
+        * wtf/HashFunctions.h:
+        * wtf/HashTraits.h:
+        (WTF::):
+
+2008-03-26  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Darin.
+
+        - JSC part of fix for "SVG multichar glyph matching matches longest instead of first (affects Acid3 test 79)"
+        http://bugs.webkit.org/show_bug.cgi?id=18118
+
+        * wtf/HashFunctions.h:
+        (WTF::):
+        * wtf/HashTraits.h:
+        (WTF::):
+
+2008-03-26  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Cache C string identifiers by address, not value, assuming that C strings can only
+        be literals.
+
+        1% speedup on Acid3 test 26.
+
+        * kjs/identifier.cpp:
+        (KJS::literalIdentifierTable):
+        (KJS::Identifier::add):
+        Added a new table to cache UString::Reps created from C strings by address. Elements are
+        never removed from this cache, as only predefined identifiers can get there.
+
+        * kjs/identifier.h:
+        (KJS::Identifier::Identifier): Added a warning.
+
+2008-03-26  Alexey Proskuryakov  <ap@webkit.org>
+
+        Rubber-stamped by Maciej.
+
+        An assertion was failing in function-toString-object-literals.html when parsing 1e-500.
+        The condition existed before, and got uncovered by turning compiled-out dtoa checks into
+        ASSERTs.
+
+        The assertion was verifying that the caller wasn't constructing a Bigint from 0.
+        This might have had some reason behind it originally, but I couldn't find any,
+        and this doesn't look like a reasonable requirement.
+
+        * kjs/dtoa.cpp: (d2b): Removed the assertion (two copies in different code paths).
+
+2008-03-25  Adam Roben  <aroben@apple.com>
+
+        Fix Bug 18077: Integrate testapi.c into the Windows build
+
+        <http://bugs.webkit.org/show_bug.cgi?id=18077>
+
+        Reviewed by Steve Falkenburg.
+
+        * JavaScriptCore.vcproj/testapi/testapi.vcproj: Added.
+
+2008-03-25  Adam Roben  <aroben@apple.com>
+
+        Make testapi.c compile under MSVC
+
+        Currently you must compile testapi.c as C++ code since MSVC does not
+        support many C features that GCC does.
+
+        Reviewed by Steve Falkenburg.
+
+        * API/testapi.c:
+        (nan): Added an implementation of this for MSVC.
+        (assertEqualsAsUTF8String): Use malloc instead of dynamically-sized
+        stack arrays.
+        (assertEqualsAsCharactersPtr): Ditto.
+        (print_callAsFunction): Ditto.
+        (main): Ditto, and explicitly cast from UniChar* to JSChar*.
+
+2008-03-25  Adam Roben  <aroben@apple.com>
+
+        Stop using JavaScriptCore's custom stdbool.h and stdint.h on Windows
+
+        We can't remove the os-win32 directory yet because other ports (at
+        least wx) are still relying on it.
+
+        Reviewed by Steve Falkenburg.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+          - Made all the include paths match the one for the Debug
+            configuration (these got out of sync in r30797)
+          - Removed os-win32 from the include path
+          - Removed os-win32 from the directories we copy to $WebKitOutputDir.
+          - Removed stdint.h from the project
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
+        Delete the files that we may have previously copied from the os-win32
+        directory.
+
+2008-03-25  Alexey Proskuryakov  <ap@webkit.org>
+
+        Windows build fix.
+
+        * kjs/dtoa.cpp: Include stdint.h.
+
+2008-03-25  Alexey Proskuryakov  <ap@webkit.org>
+
+        Rubber-stamped by Darin.
+
+        Cleanup dtoa.cpp style.
+
+        * kjs/dtoa.cpp:
+        (Bigint::Balloc):
+        (Bigint::Bfree):
+        (Bigint::multadd):
+        (Bigint::s2b):
+        (Bigint::hi0bits):
+        (Bigint::lo0bits):
+        (Bigint::i2b):
+        (Bigint::mult):
+        (Bigint::pow5mult):
+        (Bigint::lshift):
+        (Bigint::cmp):
+        (Bigint::diff):
+        (Bigint::ulp):
+        (Bigint::b2d):
+        (Bigint::d2b):
+        (Bigint::ratio):
+        (Bigint::):
+        (Bigint::match):
+        (Bigint::hexnan):
+        (Bigint::kjs_strtod):
+        (Bigint::quorem):
+        (Bigint::rv_alloc):
+        (Bigint::nrv_alloc):
+        (Bigint::kjs_freedtoa):
+        (Bigint::kjs_dtoa):
+        * kjs/dtoa.h:
+
+2008-03-24  Darin Adler  <darin@apple.com>
+
+        Reviewed by Sam.
+
+        - convert a JavaScript immediate number to a string more efficiently
+
+        2% speedup of Acid3 test 26
+
+        * kjs/JSImmediate.cpp:
+        (KJS::JSImmediate::toString): Take advantage of the fact that all immediate
+        numbers are integers, and use the faster UString function for formatting integers
+        instead of the slower one that works for floating point. I think this is a leftover
+        from when immediate numbers were floating point.
+
+2008-03-23  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Darin Adler.
+
+        Fix http://bugs.webkit.org/show_bug.cgi?id=18048
+        The "thisObject" parameter to JSEvaluateScript is not used properly
+
+        Making passing a thisObject to JSEvaluateScript actually set the thisObject of the created
+        ExecState.
+
+        * API/testapi.c:
+        (main): Add tests for setting the thisObject when calling JSEvaluateScript.
+
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::ExecState): Assign the thisObject to m_thisValue and remove the comment. 
+
+2008-03-22  Jesse Ruderman  <jruderman@gmail.com>
+
+        Reviewed by Sam Weinig.  Landed by eseidel.
+        
+        Make testkjs flush stdout after printing.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/testkjs.cpp:
+        (functionPrint):
+
+2008-03-21  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Optimise lookup of Math, undefined, NaN and Infinity
+
+        Added a method to JSVariableObject to allow us to inject DontDelete properties
+        into the symbol table and localStorage.  This results in a 0.4% progression in
+        SunSpider, with a 8% gain in math-partial-sums.
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::reset):
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::symbolTableInsert):
+
+2008-03-21  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff Garen.
+
+        Global properties that use LocalStorage are not correctly listed as enumerable.
+
+        The problem was caused by JSObject::getPropertyAttributes not being aware
+        of the JSVariableObject SymbolTable.  The fix is to make getPropertyAttributes
+        virtual and override in JSVariableObject.  This does not produce any performance
+        regression.
+
+        * JavaScriptCore.exp:
+        * kjs/JSVariableObject.cpp:
+        (KJS::JSVariableObject::getPropertyNames):
+        (KJS::JSVariableObject::getPropertyAttributes):
+        * kjs/JSVariableObject.h:
+        * kjs/object.h:
+
+2008-03-21  Arkadiusz Miskiewicz  <arekm@maven.pl>
+
+        Webkit does not build on linux powerpc
+
+        <http://bugs.webkit.org/show_bug.cgi?id=17019>
+
+        Reviewed by David Kilzer.
+
+        * wtf/TCSpinLock.h:
+        (TCMalloc_SpinLock::Unlock):
+
+2008-03-21  Rodney Dawes  <dobey@wayofthemonkey.com>
+
+        Reviewed by Holger.
+
+        http://bugs.webkit.org/show_bug.cgi?id=17981
+
+        Add javascriptcore_cppflags to Programs_minidom_CPPFLAGS.
+
+        * GNUmakefile.am:
+
+2008-03-21  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Oliver Hunt.
+
+        Consolidate static identifier initializers within CommonIdentifiers.
+
+        No reliably measurable change on SunSpider; maybe a tiny improvement (within 0.2%).
+
+        * kjs/CommonIdentifiers.h: Added static identifiers that were lazily initialized
+        throughout the code.
+
+        * kjs/date_object.cpp:
+        (KJS::DateObjectImp::DateObjectImp):
+        * kjs/function_object.cpp:
+        (KJS::FunctionPrototype::FunctionPrototype):
+        * kjs/object_object.cpp:
+        (KJS::ObjectPrototype::ObjectPrototype):
+        * kjs/regexp_object.cpp:
+        (KJS::RegExpPrototype::RegExpPrototype):
+        Use the values from CommonIdentifiers. 
+
+        * kjs/lookup.h: Caching the identifier in a static wasn't a win on SunSpider, removed it.
+
+        * kjs/value.h:
+        (KJS::jsNaN): We already have a shared NaN value, no need for a duplicate here.
+
+        * wtf/MathExtras.h:
+        (wtf_atan2): Having local variables for numeric_limits constants is good for readability,
+        but there is no reason to keep them static.
+
+        * JavaScriptCore.exp: Don't needlessly export JSGlobalObject::s_head.
+
+2008-03-20  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Fix for leak introduced by inline ScopeChainNode use
+
+        To avoid any extra branches when managing an inline ScopeChainNode
+        in the ScopeChain the inline node gets inserted with a refcount of
+        2.  This meant than when the ScopeChain was destroyed the ScopeChainNodes
+        above the inline node would be leaked.
+
+        We resolve this by manually popping the inline node in the
+        FunctionExecState destructor.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/ExecStateInlines.h:
+        (KJS::FunctionExecState::~FunctionExecState):
+        * kjs/scope_chain.h:
+        (KJS::ScopeChain::popInlineScopeNode):
+
+2008-03-20  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Ensure that the defines in FEATURE_DEFINES are sorted so that they will match the default settings of build-webkit.
+        This will prevent the world from being rebuilt if you happen to switch between building in Xcode and with build-webkit on the
+        command-line.
+
+        * Configurations/JavaScriptCore.xcconfig:
+
+2008-03-20  David Krause  <david.krause@gmail.com>
+
+        Reviewed by David Kilzer.
+
+        Fix http://bugs.webkit.org/show_bug.cgi?id=17923
+        Bug 17923: ARM platform endian defines inaccurate
+
+        * wtf/Platform.h: 
+        Replaced !defined(__ARMEL__) check with !defined(__VFP_FP__)
+        for PLATFORM(MIDDLE_ENDIAN)
+
+2008-03-20  Maciej Stachowiak  <mjs@apple.com>
+
+        - fix build
+
+        * JavaScriptCore.xcodeproj/project.pbxproj: install Activation.h as private
+
+2008-03-20  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - reduce function call overhead for 1.014x speedup on SunSpider
+
+        I moved some functions from ExecState.cpp to ExecStateInline.h and
+        from JSGlobalObject.cpp to JSGlobalObject.h, and declared them
+        inline; machine function call overhead for these was hurting JS
+        funcion call overhead.
+        
+        * kjs/ExecState.cpp:
+        * kjs/ExecStateInlines.h: Added.
+        (KJS::ExecState::ExecState):
+        (KJS::ExecState::~ExecState):
+        (KJS::FunctionExecState::FunctionExecState):
+        (KJS::FunctionExecState::~FunctionExecState):
+        * kjs/JSGlobalObject.cpp:
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::pushActivation):
+        (KJS::JSGlobalObject::checkActivationCount):
+        (KJS::JSGlobalObject::popActivation):
+        * kjs/function.cpp:
+
+2008-03-19  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Avoid heap allocating the root scope chain node for eval and closure free functions
+
+        Maciej suggested using an inline ScopeChainNode for functions that don't use eval
+        or closures as they are unable to ever capture the scope chain.  This gives us a 2.4%
+        win in sunspider, a 15% win in controlflow-recursive, and big (>5%) wins in a number 
+        of other tests.
+
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::ExecState):
+        * kjs/ExecState.h:
+        * kjs/scope_chain.h:
+        (KJS::ScopeChain::push):
+
+2008-03-19  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Fix release build.
+
+        * kjs/JSGlobalObject.cpp:  Add missing #include.
+
+2008-03-19  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Anders Carlsson.
+
+        Fix for <rdar://problem/5785694>
+        Crash occurs at KJS::Collector::collect() when loading web clip widgets with a PAC file
+
+        Make the activeExecStates stack per JSGlobalObject instead of static to ensure
+        thread safety.
+
+        * JavaScriptCore.exp:
+        * kjs/ExecState.cpp:
+        (KJS::InterpreterExecState::InterpreterExecState):
+        (KJS::InterpreterExecState::~InterpreterExecState):
+        (KJS::EvalExecState::EvalExecState):
+        (KJS::EvalExecState::~EvalExecState):
+        (KJS::FunctionExecState::FunctionExecState):
+        (KJS::FunctionExecState::~FunctionExecState):
+        * kjs/ExecState.h:
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::mark):
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::activeExecStates):
+        * kjs/collector.cpp:
+        (KJS::Collector::collect):
+        (KJS::Collector::reportOutOfMemoryToAllExecStates): Iterate all JSGlobalObjects and report
+        the OutOfMemory condition to all the ExecStates in each.
+
+2008-03-19  Jasper Bryant-Greene  <jasper@unix.geek.nz>
+
+        Reviewed by Maciej Stachowiak.
+
+        Fix http://bugs.webkit.org/show_bug.cgi?id=17941
+        Bug 17941: C++-style comments in JavaScriptCore API
+
+        * API/JSBase.h:
+        Remove C++-style comments from public JavaScriptCore API, replacing
+        with standard C90 block comments.
+
+2008-03-19  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        Fix http://bugs.webkit.org/show_bug.cgi?id=17939
+        Bug 17939: Crash decompiling "const a = 1, b;"
+
+        * kjs/nodes2string.cpp:
+        (KJS::ConstDeclNode::streamTo): Null-check the correct variable.
+
+2008-03-18  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Mark Rowe.
+
+        Bug 17929: Incorrect decompilation with |const|, comma
+        http://bugs.webkit.org/show_bug.cgi?id=17929
+
+        There were actually two bugs here. First we weren't correctly handling const
+        nodes with multiple declarations. The second issue was caused by us not 
+        giving the correct precedence to the initialisers.
+
+        * kjs/nodes2string.cpp:
+        (KJS::ConstDeclNode::streamTo):
+
+2008-03-18  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - Speed up JavaScript built-in properties by changing the
+          hash table to take advantage of the identifier objects
+
+        5% speedup for Acid3 test 26
+
+        * JavaScriptCore.exp: Updated.
+        * kjs/create_hash_table: Compute size of hash table large enough so that there
+        are no collisions, but don't generate the hash table.
+        * kjs/identifier.h: Made the add function that returns a PassRefPtr public.
+        * kjs/lexer.cpp:
+        (KJS::Lexer::lex): Updated for change to HashTable interface.
+        * kjs/lookup.cpp:
+        (KJS::HashTable::changeKeysToIdentifiers): Added. Finds the identifier for
+        each property so the equality comparision can be done with pointer comparision.
+        * kjs/lookup.h: Made the key be a union of char* with UString::Rep* so it can
+        hold identifiers. Added a keysAreIdentifiers flag to the HashTable. Changed
+        the Lookup functions to be member functions of HashTable instead.
+        * kjs/object.cpp:
+        (KJS::JSObject::deleteProperty): Update for change to HashTable.
+        (KJS::JSObject::findPropertyHashEntry): Ditto.
+        (KJS::JSObject::getPropertyAttributes): Ditto.
+        (KJS::JSObject::getPropertyNames): Ditto.
+
+2008-03-18  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        Fix http://bugs.webkit.org/show_bug.cgi?id=17925 and http://bugs.webkit.org/show_bug.cgi?id=17927.
+        - Bug 17925: Crash in KJS::JSObject::put after setting this.__proto__
+        - Bug 17927: Hang after attempting to create circular __proto__
+
+        * kjs/object.cpp:
+        (KJS::JSObject::put): Silently ignore attempts to set __proto__ to a non-object, non-null value.
+        Return after setting the exception when an attempt to set a cyclic __proto__ is detected so that
+        the cyclic value is not set.
+
+2008-03-18  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - inline ActivationImp::init for 0.8% SunSpider speedup
+
+        * kjs/Activation.h:
+        (KJS::ActivationImp::init): Moved here from function.cpp
+        * kjs/function.cpp:
+
+2008-03-18  Simon Hausmann  <hausmann@webkit.org>
+
+        Fix the Qt build.
+
+        Including config.h like in the other .cpp files gets the #ifdeffery
+        correct for rand_s.
+
+        * kjs/JSWrapperObject.cpp:
+
+2008-03-17  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        JavaScriptCore changes to support a WebCore speedup.
+
+        * JavaScriptCore.exp: Export the UString::Rep::computeHash function.
+        * wtf/HashSet.h: Added a find and contains function that take a translator,
+        like the add function.
+
+2008-03-18  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - a few micro-optimizations for 1.2% SunSpider speedup
+
+        * kjs/function.cpp:
+        (KJS::FunctionImp::callAsFunction): check for Return completion before Throw,
+        it is more likely.
+        * kjs/object.cpp:
+        (KJS::JSObject::put): When walking prototype chain, instead of
+        checking isObject (a virtual call), compare to jsNull (compare to
+        a constant) since null is the only non-object that can be in a
+        prototype chain.
+
+2008-03-17  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Optimise multi-scope function call resolution
+
+        Refactor multiscope variable resolution and use to add
+        optimised FunctionCallResolveNode subclasses.  
+
+        2.6% gain in sunspider performance, *25%* gain in controlflow-recursive
+
+        * kjs/nodes.cpp:
+        (KJS::getSymbolTableEntry):
+        (KJS::ResolveNode::optimizeVariableAccess):
+        (KJS::getNonLocalSymbol):
+        (KJS::ExpressionNode::resolveAndCall):
+        (KJS::FunctionCallResolveNode::optimizeVariableAccess):
+        (KJS::FunctionCallResolveNode::inlineEvaluate):
+        (KJS::ScopedVarFunctionCallNode::inlineEvaluate):
+        (KJS::ScopedVarFunctionCallNode::evaluate):
+        (KJS::ScopedVarFunctionCallNode::evaluateToNumber):
+        (KJS::ScopedVarFunctionCallNode::evaluateToBoolean):
+        (KJS::ScopedVarFunctionCallNode::evaluateToInt32):
+        (KJS::ScopedVarFunctionCallNode::evaluateToUInt32):
+        (KJS::NonLocalVarFunctionCallNode::inlineEvaluate):
+        (KJS::NonLocalVarFunctionCallNode::evaluate):
+        (KJS::NonLocalVarFunctionCallNode::evaluateToNumber):
+        (KJS::NonLocalVarFunctionCallNode::evaluateToBoolean):
+        (KJS::NonLocalVarFunctionCallNode::evaluateToInt32):
+        (KJS::NonLocalVarFunctionCallNode::evaluateToUInt32):
+        * kjs/nodes.h:
+        (KJS::ScopedVarFunctionCallNode::):
+        (KJS::NonLocalVarFunctionCallNode::):
+
+2008-03-17  David Kilzer  <ddkilzer@apple.com>
+
+        Don't define PLATFORM(MIDDLE_ENDIAN) on little endian ARM.
+
+        Reviewed by Darin.
+
+        See <http://bugs.webkit.org/show_bug.cgi?id=15416#c13>.
+
+        * wtf/Platform.h: Added check for !defined(__ARMEL__) when defining
+        PLATFORM(MIDDLE_ENDIAN).
+
+2008-03-17  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff, Darin and Weinig.
+
+        Add fast multi-level scope lookup
+        
+        Add logic and AST nodes to provide rapid variable resolution across
+        static scope boundaries.  This also adds logic that allows us to skip
+        any static scopes that do not contain the variable to be resolved.
+        
+        This results in a ~2.5% speedup in SunSpider, and gives a 25-30% speedup
+        in some simple and ad hoc closure and global variable access tests.
+
+        * JavaScriptCore.exp:
+        * kjs/Activation.h:
+        * kjs/JSGlobalObject.cpp:
+        * kjs/JSGlobalObject.h:
+        * kjs/JSVariableObject.cpp:
+        * kjs/JSVariableObject.h:
+        * kjs/function.cpp:
+        (KJS::ActivationImp::isDynamicScope):
+        * kjs/nodes.cpp:
+        (KJS::ResolveNode::optimizeVariableAccess):
+        (KJS::ScopedVarAccessNode::inlineEvaluate):
+        (KJS::ScopedVarAccessNode::evaluate):
+        (KJS::ScopedVarAccessNode::evaluateToNumber):
+        (KJS::ScopedVarAccessNode::evaluateToBoolean):
+        (KJS::ScopedVarAccessNode::evaluateToInt32):
+        (KJS::ScopedVarAccessNode::evaluateToUInt32):
+        (KJS::NonLocalVarAccessNode::inlineEvaluate):
+        (KJS::NonLocalVarAccessNode::evaluate):
+        (KJS::NonLocalVarAccessNode::evaluateToNumber):
+        (KJS::NonLocalVarAccessNode::evaluateToBoolean):
+        (KJS::NonLocalVarAccessNode::evaluateToInt32):
+        (KJS::NonLocalVarAccessNode::evaluateToUInt32):
+        (KJS::IfElseNode::optimizeVariableAccess):
+        (KJS::ScopeNode::optimizeVariableAccess):
+        * kjs/nodes.h:
+        (KJS::ScopedVarAccessNode::):
+        (KJS::NonLocalVarAccessNode::):
+        * kjs/object.h:
+
+ 2008-03-16  weihongzeng  <weihong.zeng@hotmail.com>
+ 
+         Reviewed by Darin Adler.
+ 
+         http://bugs.webkit.org/show_bug.cgi?id=15416
+         Add support for mixed-endian processors
+ 
+         * kjs/dtoa.cpp: Add IEEE_ARM, triggered by PLATFORM(MIDDLE_ENDIAN).
+ 
+2008-03-16  Kevin Ollivier  <kevino@theolliviers.com>
+
+        Rubber stamped by Darin.
+
+        Add set-webkit-configuration support for wx port, and centralize
+        build dir location setting.
+
+        http://bugs.webkit.org/show_bug.cgi?id=17790
+
+        * jscore.bkl:
+
+2008-03-14  Steve Falkenburg  <sfalken@apple.com>
+
+        PGO build fixes.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2008-03-14  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Add logic to track whether a function uses a locally scoped eval or requires a closure
+        
+        Now that we limit eval we can track those uses of eval that operate
+        in the local scope and functions that require a closure.  We track
+        this information during initial parsing to avoid yet another tree
+        walk.
+
+        * JavaScriptCore.exp:
+        * kjs/NodeInfo.h:
+        * kjs/Parser.cpp:
+        (KJS::Parser::didFinishParsing):
+        * kjs/Parser.h:
+        (KJS::Parser::parse):
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::ScopeNode::ScopeNode):
+        (KJS::ProgramNode::ProgramNode):
+        (KJS::ProgramNode::create):
+        (KJS::EvalNode::EvalNode):
+        (KJS::EvalNode::create):
+        (KJS::FunctionBodyNode::FunctionBodyNode):
+        (KJS::FunctionBodyNode::create):
+        * kjs/nodes.h:
+        (KJS::ScopeNode::):
+        (KJS::ScopeNode::usesEval):
+        (KJS::ScopeNode::needsClosure):
+
+2008-03-14  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Beth Dakin.
+
+        Fixed another problem with Vector::shrinkCapacity.
+        
+        moveOverlapping isn't good enough for the case where the buffer hasn't
+        changed, because it still destroys the contents of the buffer.
+
+        * wtf/Vector.h:
+        (WTF::::shrinkCapacity): Changed to explicitly check whether the call
+        to allocateBuffer produced a new buffer. If it didn't, there's no need
+        to move.
+
+2008-03-14  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Beth Dakin.
+        
+        Fixed a few problems with Vector::shrinkCapacity that I noticed in testing.
+
+        * wtf/Vector.h:
+        (WTF::VectorBufferBase::deallocateBuffer): Clear our m_buffer pointer
+        when we deallocate m_buffer, in case we're not asked to reallocate a new
+        buffer. (Otherwise, we would use a stale m_buffer if we were asked to
+        perform any operations after shrinkCapacity was called.)
+        
+        (WTF::VectorBuffer::allocateBuffer): Made VectorBuffer with inline
+        capacity aware that calls to allocateBuffer might be shrinks, rather
+        than grows, so we shouldn't allocate a new buffer on the heap unless
+        our inline buffer is too small.
+        
+        (WTF::::shrinkCapacity): Call resize() instead of just setting m_size,
+        so destructors run. Call resize before reallocating the buffer to make
+        sure that we still have access to the objects we need to destroy. Call
+        moveOverlapping instead of move, since a call to allocateBuffer on an
+        inline buffer may produce identical storage.
+
+2008-03-14  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Get rid of a localime() call on platforms that have better alternatives.
+
+        * kjs/DateMath.h: Added getLocalTime();
+
+        * kjs/DateMath.cpp:
+        (KJS::getLocalTime):
+        (KJS::getDSTOffsetSimple):
+        Implementation moved from getDSTOffsetSimple().
+
+        * kjs/date_object.cpp:
+        (KJS::DateObjectImp::callAsFunction): Switched to getLocalTime().
+
+2008-03-14  David D. Kilzer  <ddkilzer@apple.com>
+
+        Unify concept of enabling the Mac Java bridge.
+
+        Reviewed by Darin and Anders.
+
+        * wtf/Platform.h: Define ENABLE_MAC_JAVA_BRIDGE here.
+
+2008-03-13  Mark Mentovai  <mark@moxienet.com>
+
+        Reviewed by eseidel.  Landed by eseidel.
+
+        * wtf/FastMalloc.cpp: #include <wtf/HashSet.h> outside of any
+        namespaces.
+
+2008-03-13  Mark Mentovai  <mark@moxienet.com>
+
+        Reviewed by eseidel.  Landed by eseidel.
+
+        * pcre/pcre_exec.cpp: Fix misnamed variable, allowing -DDEBUG build
+        to succeed.
+        * wtf/ThreadingPthreads.cpp: #include <sys/time.h> for gettimeofday
+        in non-pch build.
+
+2008-03-13  Steve Falkenburg  <sfalken@apple.com>
+
+        PGO build fixes.
+        
+        Disable PGO for normal release builds.
+        Added work-in-progress Release_PGOInstrument/Release_PGOOptimize targets.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2008-03-13  Beth Dakin  <bdakin@apple.com>
+
+        Reviewed by Geoff.
+
+        Adding new functionality to Vector. Currently all of the shrink and 
+        resize functions on Vector only shrink the size of the Vector, not 
+        the capacity. For the Vector to take up as little memory as 
+        possible, though, it is necessary to be able to shrink the capacity 
+        as well. So this patch adds that functionality. 
+
+        I need this for a speed up I am working on, and Geoff wants to use 
+        it in a speed up he is working on also, so he asked me to commit it 
+        now. 
+
+        * wtf/Vector.h:
+        (WTF::VectorBufferBase::allocateBuffer):
+        (WTF::::shrinkCapacity):
+
+2008-03-13  Simon Hausmann  <hausmann@webkit.org>
+
+        Reviewed by Adam Roben.
+
+        Attempt at fixing the Qt/Windows build bot. Quote using double-quotes
+        instead of single quotes.
+
+        * pcre/dftables:
+
+2008-03-12  Steve Falkenburg  <sfalken@apple.com>
+
+        Build fix.
+
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+
+2008-03-12  Alp Toker  <alp@atoker.com>
+
+        Another autotools testkjs build fix attempt.
+
+        * GNUmakefile.am:
+
+2008-03-12  Alp Toker  <alp@atoker.com>
+
+        Attempt to fix the autotools testkjs build on systems with
+        non-standard include paths.
+
+        * GNUmakefile.am:
+
+2008-03-11  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        <rdar://problem/5787743> REGRESSION: Crash at WTF::Collator::CreateCollator() running fast/js/kde/StringObject.html on Windows
+
+        * wtf/unicode/icu/CollatorICU.cpp:
+        (WTF::Collator::createCollator): Check for null (== user default) m_locale before calling strcmp.
+
+2008-03-11  Steve Falkenburg  <sfalken@apple.com>
+
+        Disable LTCG/PGO for grammar.cpp and nodes.cpp.
+        PGO on these files causes us to hang.
+        
+        Copy newer vsprops files from relative WebKitLibraries path to environment variable based path.
+        
+        Reviewed by Oliver.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
+
+2008-03-10  Darin Adler  <darin@apple.com>
+
+        - Windows build fix
+
+        * kjs/function.cpp: (KJS::decode): Initialize variable.
+
+2008-03-10  Brent Fulgham  <bfulgham@gmail.com>
+
+        Windows build fix
+
+        Reviewed by Adam.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
+        Set the PATH to include Cygwin before running touch.
+
+2008-03-10  Eric Seidel  <eric@webkit.org>
+
+        Build fix for JSC on windows.
+
+        * API/JSStringRefCF.cpp:
+        (JSStringCreateWithCFString):
+        * kjs/function.cpp:
+        (KJS::decode):
+        * kjs/nodes2string.cpp:
+        (KJS::escapeStringForPrettyPrinting):
+
+2008-03-10  Eric Seidel  <eric@webkit.org>
+        
+        No review, build fix only.
+        
+        Attempt to fix the windows build?
+
+        * kjs/ustring.h: change unsigned short to UChar
+
+2008-03-10  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Darin.
+
+        Remove KJS::UChar, use ::UChar instead
+        http://bugs.webkit.org/show_bug.cgi?id=17017
+
+        * API/JSStringRef.cpp:
+        (JSStringCreateWithCharacters):
+        (JSStringCreateWithUTF8CString):
+        * API/JSStringRefCF.cpp:
+        (JSStringCreateWithCFString):
+        * JavaScriptCore.exp:
+        * kjs/Parser.h:
+        * kjs/function.cpp:
+        (KJS::decode):
+        (KJS::parseInt):
+        (KJS::parseFloat):
+        (KJS::globalFuncEscape):
+        (KJS::globalFuncUnescape):
+        * kjs/function_object.cpp:
+        (KJS::FunctionObjectImp::construct):
+        * kjs/identifier.cpp:
+        (KJS::Identifier::equal):
+        (KJS::CStringTranslator::translate):
+        * kjs/interpreter.h:
+        * kjs/lexer.cpp:
+        (KJS::Lexer::setCode):
+        (KJS::Lexer::shift):
+        (KJS::Lexer::lex):
+        (KJS::Lexer::convertUnicode):
+        (KJS::Lexer::makeIdentifier):
+        * kjs/lookup.cpp:
+        (KJS::keysMatch):
+        * kjs/nodes2string.cpp:
+        (KJS::escapeStringForPrettyPrinting):
+        (KJS::SourceStream::operator<<):
+        * kjs/regexp.cpp:
+        (KJS::RegExp::RegExp):
+        (KJS::RegExp::match):
+        * kjs/string_object.cpp:
+        (KJS::substituteBackreferences):
+        (KJS::stringProtoFuncCharCodeAt):
+        (KJS::stringProtoFuncToLowerCase):
+        (KJS::stringProtoFuncToUpperCase):
+        (KJS::stringProtoFuncToLocaleLowerCase):
+        (KJS::stringProtoFuncToLocaleUpperCase):
+        * kjs/ustring.cpp:
+        (KJS::UString::Rep::computeHash):
+        (KJS::UString::UString):
+        (KJS::UString::append):
+        (KJS::UString::ascii):
+        (KJS::UString::operator=):
+        (KJS::UString::is8Bit):
+        (KJS::UString::toStrictUInt32):
+        (KJS::UString::find):
+        (KJS::operator==):
+        (KJS::operator<):
+        (KJS::compare):
+        (KJS::UString::UTF8String):
+        * kjs/ustring.h:
+        * pcre/pcre.h:
+
+2008-03-09  Steve Falkenburg  <sfalken@apple.com>
+
+        Stop Windows build if an error occurs in a prior project.
+
+        Rubber stamped by Darin.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
+
+2008-03-09  J¸rg Billeter  <j@bitron.ch>
+
+        Reviewed by Alp Toker.
+
+        Conditionalise ICU for Unicode in the GTK+ port.
+
+        * wtf/Platform.h:
+
+2008-03-07  David D. Kilzer  <ddkilzer@apple.com>
+
+        Unify concept of enabling Netscape Plug-in API (NPAPI).
+
+        Reviewed by Darin.
+
+        * wtf/Platform.h: Define ENABLE_NETSCAPE_PLUGIN_API here.
+
+2008-03-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        Fixed <rdar://problem/5689093> Stricter (ES4) eval semantics
+        
+        The basic rule is:
+        
+        - "eval(s)" is treated as an operator that gives the ES3 eval behavior.
+            ... but only if there is no overriding declaration of "eval" in scope.
+        - All other invocations treat eval as a function that evaluates a
+        script in the context of its "this" object.
+            ... but if its "this" object is not the global object it was
+            originally associated with, eval throws an exception.
+        
+        Because only expressions of the form "eval(s)" have access to local
+        scope, the compiler can now statically determine whether a function
+        needs local scope to be dynamic.
+
+        * kjs/nodes.h: Added FunctionCallEvalNode. It works just like
+        FuncationCallResolveNode, except it statically indicates that the node
+        may execute eval in the ES3 way.
+        * kjs/nodes.cpp:
+        * kjs/nodes2string.cpp:
+
+        * tests/mozilla/expected.html: This patch happens to fix a Mozilla JS
+        test, but it's a bit of a pyrrhic victory. The test intends to test
+        Mozilla's generic API for calling eval on any object, but, in reality,
+        we only support calling eval on the global object.
+
+2008-03-06  Steve Falkenburg  <sfalken@apple.com>
+
+        Build fix.
+
+        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
+
+2008-03-06  Steve Falkenburg  <sfalken@apple.com>
+
+        Build fix.
+
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+
+2008-03-06  Alp Toker  <alp@atoker.com>
+
+        Fix the build fix in r30845 to support out-of-tree builds.
+
+        * GNUmakefile.am:
+
+2008-03-06  Steve Falkenburg  <sfalken@apple.com>
+
+        Build fix.
+
+        * wtf/ThreadingWin.cpp:
+        (WTF::ThreadCondition::timedWait):
+
+2008-03-06  Darin Adler  <darin@apple.com>
+
+        - another small step towards fixing the Qt build
+
+        * JavaScriptCore.pri: Remove more references to the now-obsolete bindings directory.
+
+2008-03-06  Darin Adler  <darin@apple.com>
+
+        - a small step towards fixing the Qt build
+
+        * JavaScriptCore.pri: Remove references to files no longer present in JavaScriptCore/bindings.
+
+2008-03-06  Brady Eidson  <beidson@apple.com>
+
+        Gtk Build fix
+
+        * wtf/ThreadingGtk.cpp:
+        (WTF::ThreadCondition::timedWait):
+
+2008-03-06  Alexey Proskuryakov  <ap@webkit.org>
+
+        Wx build fix.
+
+        * wtf/unicode/icu/CollatorICU.cpp:
+        (WTF::Collator::userDefault): Put ICU workaround under both PLATFORM(DARWIN) and
+        PLATFORM(CF) checks, so that each port can decide if it wants to use CF on Mac for it.
+
+2008-03-06  Brady Eidson <beidson@apple.com>
+
+        Reviewed by Darin
+
+        Add a timedWait() method to ThreadCondition
+
+        * JavaScriptCore.exp:
+
+        * wtf/Threading.h:
+
+        * wtf/ThreadingGtk.cpp:
+        (WTF::ThreadCondition::timedWait):
+
+        * wtf/ThreadingNone.cpp:
+        (WTF::ThreadCondition::timedWait):
+
+        * wtf/ThreadingPthreads.cpp:
+        (WTF::ThreadCondition::timedWait):
+
+        * wtf/ThreadingWin.cpp:
+        (WTF::ThreadCondition::timedWait): Needs implementation
+
+2008-03-06  Alexey Proskuryakov  <ap@webkit.org>
+
+        More build fixes.
+
+        * jscore.bkl: Add the wtf/unicode directory.
+        * wtf/unicode/CollatorDefault.cpp:
+        (WTF::Collator::userDefault): Use a constructor that does exist.
+        * wtf/unicode/icu/CollatorICU.cpp: Mac build fix for case-sensitive file systems.
+
+2008-03-06  Darin Adler  <darin@apple.com>
+
+        - try to fix the Qt build
+
+        * JavaScriptCore.pri: Add the wtf/unicode directory.
+
+2008-03-06  Darin Adler  <darin@apple.com>
+
+        - try to fix the GTK build
+
+        * GNUmakefile.am: Add a -I for the wtf/unicode directory.
+
+2008-03-06  Darin Adler  <darin@apple.com>
+
+        - try to fix the Mac build
+
+        * icu/unicode/parseerr.h: Copied from ../WebCore/icu/unicode/parseerr.h.
+        * icu/unicode/ucol.h: Copied from ../WebCore/icu/unicode/ucol.h.
+        * icu/unicode/uloc.h: Copied from ../WebCore/icu/unicode/uloc.h.
+        * icu/unicode/unorm.h: Copied from ../WebCore/icu/unicode/unorm.h.
+        * icu/unicode/uset.h: Copied from ../WebCore/icu/unicode/uset.h.
+
+2008-03-06  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        <rdar://problem/5687269> Need to create a Collator abstraction for WebCore and JavaScriptCore
+
+        * wtf/Threading.h:
+        (WTF::initializeThreading):
+        * wtf/ThreadingGtk.cpp:
+        (WTF::initializeThreading):
+        * wtf/ThreadingNone.cpp:
+        * wtf/ThreadingPthreads.cpp:
+        * wtf/ThreadingWin.cpp:
+        Added AtomicallyInitializedStatic.
+
+        * kjs/string_object.cpp: (KJS::localeCompare): Changed to use Collator.
+
+        * GNUmakefile.am:
+        * JavaScriptCore.exp:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        Added new fiiles to projects.
+
+        * wtf/unicode/Collator.h: Added.
+        (WTF::Collator::):
+        * wtf/unicode/CollatorDefault.cpp: Added.
+        (WTF::Collator::Collator):
+        (WTF::Collator::~Collator):
+        (WTF::Collator::setOrderLowerFirst):
+        (WTF::Collator::collate):
+        * wtf/unicode/icu/CollatorICU.cpp: Added.
+        (WTF::cachedCollatorMutex):
+        (WTF::Collator::Collator):
+        (WTF::Collator::~Collator):
+        (WTF::Collator::setOrderLowerFirst):
+        (WTF::Collator::collate):
+        (WTF::Collator::createCollator):
+        (WTF::Collator::releaseCollator):
+
+2008-03-05  Kevin Ollivier  <kevino@theolliviers.com>
+
+        Fix the wx build after the bindings move.
+
+        * JavaScriptCoreSources.bkl:
+        * jscore.bkl:
+
+2008-03-05  Alp Toker  <alp@atoker.com>
+
+        GTK+ build fix for breakage introduced in r30800.
+
+        Track moved bridge sources from JavaScriptCore to WebCore.
+
+        * GNUmakefile.am:
+
+2008-03-05  Brent Fulgham  <bfulgham@gmail.com>
+
+        Reviewed by Adam Roben.
+
+        Remove definition of WTF_USE_SAFARI_THEME from wtf/Platform.h
+        because the PLATFORM(CG) flag is not set until config.h has
+        already included this file.
+
+        * wtf/Platform.h:  Remove useless definition of WTF_USE_SAFARI_THEME
+
+2008-03-05  Brady Eidson  <beidson@apple.com>
+
+        Reviewed by Alexey and Mark Rowe
+
+        Fix for <rdar://problem/5778247> - Reproducible crash on storage/execute-sql-args.html
+
+        DatabaseThread::unscheduleDatabaseTasks() manually filters through a MessageQueue,
+        removing particular items for Databases that were shutting down.
+
+        This filtering operation is not atomic, and therefore causes a race condition with the
+        MessageQueue waking up and reading from the message queue.  
+
+        The end result was an attempt to dereference a null DatabaseTask.  Timing-wise, this never
+        seemed to happen in a debug build, otherwise an assertion would've caught it.  Replacing that
+        assertion with a crash in a release build is what revealed this bug.
+
+        * wtf/MessageQueue.h:
+        (WTF::::waitForMessage): Tweak the waiting logic to check the queue's empty state then go back
+          to sleep if the queue was empty - checking m_killed each time it wakes up.
+
+2008-03-05  David D. Kilzer  <ddkilzer@apple.com>
+
+        Remove unused header includes from interpreter.cpp.
+
+        Reviewed by Darin.
+
+        * kjs/interpreter.cpp: Remove unused header includes.
+
+2008-03-05  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Sam.
+        
+        Remove bindings/.
+
+        * bindings: Removed.
+
+2008-03-05  Anders Carlsson  <andersca@apple.com>
+
+        Don't build bindings/ anymore.
+        
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2008-03-05  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Geoff.
+
+        Don't build JavaScriptCore/bindings.
+        
+        * JavaScriptCore.exp:
+        Export a couple of new functions. 
+        
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        Remove bindings/
+        
+        * kjs/config.h:
+        No need to define HAVE_JNI anymore.
+        
+        * kjs/interpreter.cpp:
+        Remove unnecessary include.
+
+2008-03-05  David D. Kilzer  <ddkilzer@apple.com>
+
+        Allow override of default script file name using command-line argument.
+
+        Reviewed by Adele.
+
+        * API/minidom.c:
+        (main): Allow first command-line argument to override the default script
+        file name of "minidom.js".
+        * API/testapi.c:
+        (main): Allow first command-line argument to override the default script
+        file name of "testapi.js".
+
+2008-03-04  Mark Rowe  <mrowe@apple.com>
+
+        Mac build fix.
+
+        * JavaScriptCore.exp:  Add new symbol to exports file.
+
+2008-03-03  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Anders.
+
+        Make ForInNode check for the timeout interrupt
+
+        * kjs/nodes.cpp:
+        (KJS::ForInNode::execute):
+
+2008-03-02  Brent Fulgham  <bfulgham@gmail.com>
+
+        Reviewed by Alp Toker.
+
+        http://bugs.webkit.org/show_bug.cgi?id=17415
+        GTK Build (using autotools) on Mac OS (DarwinPorts) Fails
+
+        Add -lstdc++ to link flags for minidom program.  This corrects
+        a build error for the GTK+ on Mac OS.
+
+        * GNUmakefile.am:
+
+2008-03-01  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Tim Hatcher.
+
+        Update Xcode configuration to support building debug and release from the mysterious future.
+
+        * Configurations/Base.xcconfig:
+        * Configurations/DebugRelease.xcconfig:
+
+2008-02-29  Brent Fulgham  <bfulgham@gmail.com>
+
+        http://bugs.webkit.org/show_bug.cgi?id=17483
+        Implement scrollbars on Windows (Cairo)
+
+        Reviewed by Adam Roben.
+
+        * wtf/Platform.h:
+
+2008-02-29  Adam Roben  <aroben@apple.com>
+
+        Remove unused DebuggerImp::abort and DebuggerImp::aborted
+
+        Reviewed by Tim and Sam.
+
+        * kjs/function_object.cpp:
+        (KJS::FunctionObjectImp::construct):
+        * kjs/internal.h:
+        (KJS::DebuggerImp::DebuggerImp):
+        * kjs/nodes.cpp:
+        (KJS::Node::handleException):
+        (KJS::FunctionBodyNodeWithDebuggerHooks::execute):
+
+2008-02-28  Eric Christopher  <echristo@apple.com>
+
+        Reviewed by Geoffrey Garen.
+
+        ** TOTAL **:          1.005x as fast    2867.6ms +/- 0.4%  2853.2ms +/- 0.3%    significant
+
+        * kjs/nodes.cpp: Tell the compiler that exceptions are unexpected (for
+        the sake of branch prediction and code organization).
+
+2008-02-27  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Sam Weinig.
+
+        http://bugs.webkit.org/show_bug.cgi?id=17030
+        Small buffer overflow within initialization
+
+        * kjs/date_object.cpp:
+        (KJS::DateObjectFuncImp::callAsFunction):
+        (KJS::parseDate):
+        Remove unnecessary and incorrect memset() calls - GregorianDateTime can initialize itself.
+
+2008-02-25  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Dan Bernstein.
+
+        - Add a variant of remove that takes a position and a length.
+
+        * wtf/Vector.h:
+        (WTF::Vector::remove):
+
+2008-02-25  Mark Mentovai  <mark@moxienet.com>
+
+        Reviewed by Mark Rowe.
+
+        Enable CollectorHeapIntrospector to build by itself, as well as in an AllInOneFile build.
+        http://bugs.webkit.org/show_bug.cgi?id=17538
+
+        * kjs/CollectorHeapIntrospector.cpp: Provide "using" declaration for
+          WTF::RemoteMemoryReader.
+        * kjs/collector.h: Move CollectorHeap declaration here...
+        * kjs/collector.cpp: ... from here.
+
+2008-02-25  Darin Adler  <darin@apple.com>
+
+        Reviewed by Adam.
+
+        * JavaScriptCore.exp: Sort the contents of this file.
+
+2008-02-25  Adam Roben  <aroben@apple.com>
+
+        MSVC build fix
+
+        * kjs/testkjs.cpp:
+        (functionQuit): Don't add a return statement after exit(0) for MSVC.
+
+2008-02-24  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Mark Rowe.
+
+        http://bugs.webkit.org/show_bug.cgi?id=17529
+        Add support for reading from stdin from testkjs
+
+        * kjs/testkjs.cpp:
+        (GlobalObject::GlobalObject): Add readline function to global object.
+        (functionReadline): Added. Reads characters from stdin until a '\n' or
+        EOF is encountered. The input is returned as a String to the caller.
+
+2008-02-24  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Mark Rowe.
+
+        http://bugs.webkit.org/show_bug.cgi?id=17528
+        Give testkjs a bath
+
+        * JavaScriptCore.exp:
+        * JavaScriptCore.xcodeproj/project.pbxproj: Make the testkjs.cpp use 4 space indentation.
+        * kjs/testkjs.cpp:
+        (StopWatch::getElapsedMS):
+        (GlobalObject::className):
+        (GlobalObject::GlobalObject):
+        Rename GlobalImp to GlobalObject and setup the global functions
+        in the GlobalObject's constructor. Also, use static functions for
+        the implementation so we can use the standard PrototypeFunction
+        class and remove TestFunctionImp.
+        (functionPrint): Move print() functionality here.
+        (functionDebug): Move debug() functionality here.
+        (functionGC): Move gc() functionality here.
+        (functionVersion): Move version() functionality here.
+        (functionRun): Move run() functionality here.
+        (functionLoad): Move load() functionality here.
+        (functionQuit): Move quit() functionality here.
+        (prettyPrintScript): Fix indentation.
+        (runWithScripts): Since all the functionality of createGlobalObject is
+        now in the GlobalObject constructor, just call new here.
+        (parseArguments): Fix indentation.
+        (kjsmain): Ditto
+        (fillBufferWithContentsOfFile): Ditto.
+
+2008-02-24  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Oliver Hunt and Mark Rowe.
+
+        http://bugs.webkit.org/show_bug.cgi?id=17505
+        Add support for getting command line arguments in testkjs
+
+        - This slightly changes the behavior of parsing arguments by requiring
+          a '-f' before all files. 
+
+        * kjs/testkjs.cpp:
+        (createGlobalObject): Add a global property called 'arguments' which
+        contains an array with the parsed arguments as strings.
+        (runWithScripts): Pass in the arguments vector so that it can be passed
+        to the global object.
+        (parseArguments): Change parsing rules to require a '-f' before any script
+        file. After all '-f' and '-p' arguments have been parsed, the remaining
+        are added to the arguments vector and exposed to the script. If there is a
+        chance of ambiguity (the user wants to pass the string '-f' to the script),
+        the string '--' can be used separate the options from the pass through 
+        arguments.
+        (kjsmain):
+
+2008-02-24  Dan Bernstein  <mitz@apple.com>
+
+        Reviewed by Darin Adler.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=17511
+          REGRESSION: Reproducible crash in SegmentedSubstring::SegmentedSubstring(SegmentedSubstring const&)
+
+        * wtf/Deque.h:
+        (WTF::::expandCapacityIfNeeded): Fixed the case where m_start and m_end
+        are both zero but the buffer capacity is non-zero.
+        (WTF::::prepend): Added validity checks.
+
+2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
+
+        Rubber stamped by Darin.
+
+        Add separator '\' after libJavaScriptCore_la_LIBADD and cleanup
+        whitespaces introduced in the previous commit.
+
+        * GNUmakefile.am: 
+
+2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
+
+        * GNUmakefile.am: Add GLOBALDEPS for testkjs and minidom.
+
+2008-02-23  Darin Adler  <darin@apple.com>
+
+        Reviewed by Anders.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=17496
+          make Deque use a circular array; add iterators
+
+        * wtf/Deque.h: Wrote an all-new version of this class that uses a circular
+        buffer. Growth policy is identical to vector. Added iterators.
+
+        * wtf/Vector.h: Made two small refinements while using this to implement
+        Deque: Made VectorBufferBase derive from Noncopyable, which would have
+        saved me some debugging time if it had been there. Renamed Impl and
+        m_impl to Buffer and m_buffer.
+
+2008-02-23  Darin Adler  <darin@apple.com>
+
+        Reviewed by Anders.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=17067
+          eliminate attributes parameter from JSObject::put for speed/clarity
+
+        * API/JSCallbackObject.h: Removed attribute arguments.
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::JSCallbackObject<Base>::put): Ditto.
+        * API/JSObjectRef.cpp:
+        (JSObjectSetProperty): Use initializeVariable or putDirect when necessary
+        to set attribute values.
+        * JavaScriptCore.exp: Updated.
+        * bindings/objc/objc_runtime.h: Removed attribute arguments.
+        * bindings/objc/objc_runtime.mm:
+        (ObjcFallbackObjectImp::put): Ditto.
+        * bindings/runtime_array.cpp:
+        (RuntimeArray::put): Ditto.
+        * bindings/runtime_array.h: Ditto.
+        * bindings/runtime_object.cpp:
+        (RuntimeObjectImp::put): Ditto.
+        * bindings/runtime_object.h: Ditto. Also removed canPut which was only
+        called from one place in WebCore that can use hasProperty instead.
+
+        * kjs/Activation.h: Removed attribute argument from put and added the new
+        initializeVariable function that's used to put variables in variable objects.
+        Also made isActivationObject a const member.
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::put): Removed attribute argument.
+        (KJS::JSGlobalObject::initializeVariable): Added. Used to give variables
+        their initial values, which can include the read-only property.
+        (KJS::JSGlobalObject::reset): Removed obsolete comments about flags.
+        Removed Internal flag, which is no longer needed.
+        * kjs/JSGlobalObject.h: More of the same.
+
+        * kjs/JSVariableObject.h: Added pure virtual initializeVariable function.
+        (KJS::JSVariableObject::symbolTablePut): Removed checkReadOnly flag; we always
+        check read-only.
+        (KJS::JSVariableObject::symbolTableInitializeVariable): Added.
+
+        * kjs/array_instance.cpp:
+        (KJS::ArrayInstance::put): Removed attribute argument.
+        * kjs/array_instance.h: Ditto.
+
+        * kjs/function.cpp:
+        (KJS::FunctionImp::put): Ditto.
+        (KJS::Arguments::put): Ditto.
+        (KJS::ActivationImp::put): Ditto.
+        (KJS::ActivationImp::initializeVariable): Added.
+        * kjs/function.h: Removed attribute arguments.
+
+        * kjs/function_object.cpp:
+        (KJS::FunctionObjectImp::construct): Removed Internal flag.
+
+        * kjs/lookup.h:
+        (KJS::lookupPut): Removed attributes argument. Also changed to use putDirect
+        instead of calling JSObject::put.
+        (KJS::cacheGlobalObject): Ditto.
+
+        * kjs/nodes.cpp:
+        (KJS::ConstDeclNode::handleSlowCase): Call initializeVariable to initialize
+        the constant.
+        (KJS::ConstDeclNode::evaluateSingle): Ditto.
+        (KJS::TryNode::execute): Use putDirect to set up the new object.
+        (KJS::FunctionBodyNode::processDeclarations): Removed Internal.
+        (KJS::ProgramNode::processDeclarations): Ditto.
+        (KJS::EvalNode::processDeclarations): Call initializeVariable to initialize
+        the variables and functions.
+        (KJS::FuncDeclNode::makeFunction): Removed Internal.
+        (KJS::FuncExprNode::evaluate): Ditto.
+
+        * kjs/object.cpp: Removed canPut, which was only being used in one code path,
+        not the normal high speed one.
+        (KJS::JSObject::put): Removed attribute argument. Moved the logic from
+        canPut here, in the one code ath that was still using it.
+        * kjs/object.h: Removed Internal attribute, ad canPut function. Removed the
+        attributes argument to the put function. Made isActivationObject const.
+
+        * kjs/regexp_object.cpp:
+        (KJS::RegExpImp::put): Removed attributes argument.
+        (KJS::RegExpImp::putValueProperty): Ditto.
+        (KJS::RegExpObjectImp::put): Ditto.
+        (KJS::RegExpObjectImp::putValueProperty): Ditto.
+        * kjs/regexp_object.h: Ditto.
+
+        * kjs/string_object.cpp:
+        (KJS::StringInstance::put): Removed attributes argument.
+        * kjs/string_object.h: Ditto.
+
+2008-02-23  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
+
+        Not reviewed, Gtk build fix.
+
+        * kjs/testkjs.pro:
+
+2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
+
+        Windows build fix - move ThreadCondition implementation from WebCore to WTF.
+
+        * wtf/ThreadingWin.cpp:
+        (WTF::ThreadCondition::ThreadCondition):
+        (WTF::ThreadCondition::~ThreadCondition):
+        (WTF::ThreadCondition::wait):
+        (WTF::ThreadCondition::signal):
+        (WTF::ThreadCondition::broadcast):
+
+2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
+
+        Touch some files, hoping that Windows build bot will create JSC headers.
+
+        * kjs/AllInOneFile.cpp:
+        * kjs/array_instance.cpp:
+        * wtf/HashTable.cpp:
+
+2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
+
+        Qt/Wx build fix - this file was still in a wrong namespace, too.
+
+        * wtf/ThreadingNone.cpp:
+
+2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
+
+        More build fixing - fix mismatched braces.
+
+        * JavaScriptCore.pri:
+
+2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
+
+        Wx and Gtk build fixes.
+
+        * JavaScriptCore.pri: Don't try to compile ThreadingPthreads.
+        * wtf/ThreadingGtk.cpp: Use a correct namespace.
+
+2008-02-23  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        Move basic threading support from WebCore to WTF.
+
+        Added mutex protection to MessageQueue::killed() for paranoia sake.
+
+        * GNUmakefile.am:
+        * JavaScriptCore.exp:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * wtf/Locker.h: Copied from WebCore/platform/Locker.h.
+        * wtf/MessageQueue.h: Copied from WebCore/platform/MessageQueue.h.
+        (WTF::::killed):
+        * wtf/Threading.h: Copied from WebCore/platform/Threading.h.
+        * wtf/ThreadingGtk.cpp: Copied from WebCore/platform/gtk/ThreadingGtk.cpp.
+        (WebCore::createThread):
+        * wtf/ThreadingNone.cpp: Copied from WebCore/platform/ThreadingNone.cpp.
+        * wtf/ThreadingPthreads.cpp: Copied from WebCore/platform/pthreads/ThreadingPthreads.cpp.
+        (WTF::createThread):
+        * wtf/ThreadingWin.cpp: Copied from WebCore/platform/win/ThreadingWin.cpp.
+        (WTF::createThread):
+        (WTF::Mutex::Mutex):
+        (WTF::Mutex::~Mutex):
+        (WTF::Mutex::lock):
+        (WTF::Mutex::tryLock):
+        (WTF::Mutex::unlock):
+
+2008-02-22  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Partial fix for <rdar://problem/5744037> Gmail out of memory (17455)
+        
+        I'm removing KJS_MEM_LIMIT for the following reasons:
+        
+        - We have a few reports of KJS_MEM_LIMIT breaking important web
+        applications, like GMail and Google Reader. (For example, if you
+        simply open 12 GMail tabs, tab #12 will hit the limit.)
+
+        - Firefox has no discernable JS object count limit, so any limit, even
+        a large one, is a potential compatibility problem.
+        
+        - KJS_MEM_LIMIT does not protect against malicious memory allocation,
+        since there are many ways to maliciously allocate memory without
+        increasing the JS object count.
+        
+        - KJS_MEM_LIMIT is already mostly broken, since it only aborts the
+        script that breaches the limit, not any subsequent scripts.
+        
+        - We've never gotten bug reports about websites that would have
+        benefited from an unbroken KJS_MEM_LIMIT. The initial check-in of
+        KJS_MEM_LIMIT (KJS revision 80061) doesn't mention a website that
+        needed it.
+        
+        - Any website that brings you anywhere close to crashing due to the
+        number of live JS objects will almost certainly put up the "slow
+        script" dialog at least 20 times beforehand.
+
+        * kjs/collector.cpp:
+        (KJS::Collector::collect):
+        * kjs/collector.h:
+        * kjs/nodes.cpp:
+        (KJS::TryNode::execute):
+
+2008-02-22  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Alexey P.
+
+        <rdar://problem/5759327> REGRESSION: while(NaN) acts like while(true)
+
+        Fix yet another case where we incorrectly relied on implicit double
+        to bool coercion.
+
+        * kjs/nodes.cpp:
+        (KJS::PostDecLocalVarNode::evaluateToBoolean):
+
+2008-02-20  Michael Knaup  <michael.knaup@mac.com>
+
+        Reviewed by Darin.
+
+        Fix for Bug 16753: date set methods with no args should result in NaN (Acid3 bug)
+        The set values result in NaN now when called with no args, NaN or +/- inf values.
+        The setYear, setFullYear and setUTCFullYear methods used on NaN dates work as 
+        descripted in the standard.
+
+        * kjs/date_object.cpp:
+        (KJS::fillStructuresUsingTimeArgs):
+        (KJS::fillStructuresUsingDateArgs):
+        (KJS::setNewValueFromTimeArgs):
+        (KJS::setNewValueFromDateArgs):
+        (KJS::dateProtoFuncSetYear):
+
+2008-02-19  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Darin.
+
+        Change OpaqueJSClass and RootObject to start with a ref count of 1.
+        
+        * API/JSClassRef.cpp:
+        (OpaqueJSClass::OpaqueJSClass):
+        (OpaqueJSClass::createNoAutomaticPrototype):
+        (OpaqueJSClass::create):
+        * API/JSClassRef.h:
+        * API/JSObjectRef.cpp:
+        (JSClassCreate):
+        * bindings/runtime_root.cpp:
+        (KJS::Bindings::RootObject::create):
+        (KJS::Bindings::RootObject::RootObject):
+
+2008-02-19  Darin Adler  <darin@apple.com>
+
+        Rubber stamped by Anders.
+
+        - removed explicit initialization to 1 for RefCounted; that's now the default
+
+        * kjs/regexp.cpp:
+        (KJS::RegExp::RegExp): Removed RefCounted initializer.
+
+2008-02-19  Darin Adler  <darin@apple.com>
+
+        Reviewed by Anders.
+
+        - next step for http://bugs.webkit.org/show_bug.cgi?id=17257
+          start ref counts at 1 instead of 0 for speed
+
+        * wtf/RefCounted.h:
+        (WTF::RefCounted::RefCounted): Have refcounts default to 1. This allows us to start
+        removing the explicit initialization of RefCounted from classes and eventually we
+        can remove the ability to have the initial count of 0 entirely.
+
+2008-02-18  Samuel Weinig  <sam@webkit.org>
+
+        Reviewed by Geoff Garen.
+
+        Fix for http://bugs.webkit.org/show_bug.cgi?id=17419
+        Remove CompatMode from JavaScriptCore as it is never set to anything other than NativeMode
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::init):
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::setDebugger):
+        * kjs/date_object.cpp:
+        (KJS::dateProtoFuncGetYear):
+
+2008-02-18  Darin Adler  <darin@apple.com>
+
+        Reviewed by Sam.
+
+        * wtf/ASCIICType.h:
+        (WTF::toASCIIHexValue): Added.
+
+2008-02-17  Darin Adler  <darin@apple.com>
+
+        * wtf/ListHashSet.h: (WTF::swap): Removed stray return statement.
+
+2008-02-15  Adam Roben  <aroben@apple.com>
+
+        Make JavaScriptCore's FEATURE_DEFINES match WebCore's
+
+        Reviewed by Mark.
+
+        * Configurations/JavaScriptCore.xcconfig:
+
+2008-02-14  Stephanie Lewis <slewis@apple.com>
+
+        Reviewed by Geoff.
+
+        Update order files.
+
+        * JavaScriptCore.order:
+
+2008-02-14  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Fixed <rdar://problem/5737835> nee http://bugs.webkit.org/show_bug.cgi?id=17329
+        Crash in JSGlobalObject::popActivation when inserting hyperlink in Wordpress (17329)
+        
+        Don't reset the "activations" stack in JSGlobalObject::reset, since we
+        might be executing a script during the call to reset, and the script
+        needs to safely run to completion.
+        
+        Instead, initialize the "activations" stack when the global object is
+        created, and subsequently rely on pushing and popping during normal
+        execution to maintain the stack's state.
+        
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::init):
+        (KJS::JSGlobalObject::reset):
+
+2008-02-13  Bernhard Rosenkraenzer  <bero@arklinux.org>
+
+        Reviewed by Darin.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=17339
+          JavaScriptCore does not build with gcc 4.3
+
+        * kjs/interpreter.cpp: Add include of <unistd.h>, since that's where
+        getpid() comes from.
+
+2008-02-13  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Alexey P.
+
+        <rdar://problem/5737003> REGRESSION (r27747): can't browse pictures on fastcupid.com
+
+        When converting numeric values to booleans we need to account for NaN
+
+        * kjs/nodes.cpp:
+        (KJS::MultNode::evaluateToBoolean):
+        (KJS::ModNode::evaluateToBoolean):
+
+2008-02-08  Samuel Weinig  <sam@webkit.org>
+
+        Reviewed by Brady Eidson.
+
+        <rdar://problem/5659216> REGRESSION: PLT 0.3% slower due to r28868 (caching ClassNodeList and NamedNodeList)
+
+        - Tweak the statements in isASCIISpace to account for the statistical distribution of
+          usage in the PLT.
+
+        .4% speedup on my machine.  Stephanie's machine shows this as .3% speedup.
+
+        * wtf/ASCIICType.h:
+        (WTF::isASCIISpace): 
+
+2008-02-11  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Anders Carlsson.
+
+        Fixes for:
+        <rdar://problem/5735497> Match Firefox's cross-domain model more accurately by return the built-in version of functions even if they have been overridden
+        <rdar://problem/5735443> Crash when setting the Window objects prototype to a custom Object and then calling a method on it
+
+        - Expose the native Object.prototype.toString implementation so that it can be used for cross-domain
+          toString calling.
+
+        * JavaScriptCore.exp:
+        * kjs/object_object.cpp:
+        * kjs/object_object.h:
+
+2008-02-10  Darin Adler  <darin@apple.com>
+
+        Rubber stamped by Eric.
+
+        * kjs/ExecState.h:
+        (KJS::ExecState::takeException): Added.
+
+2008-02-10  Darin Adler  <darin@apple.com>
+
+        Reviewed by Eric.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=17256
+          eliminate default ref. count of 0 in RefCounted class
+
+        * wtf/RefCounted.h:
+        (WTF::RefCounted::RefCounted): Remove default of 0.
+
+2008-02-10  Darin Adler  <darin@apple.com>
+
+        Reviewed by Eric.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=17256
+          Make clients of RefCounted explicitly set the count to 0.
+
+        * API/JSClassRef.cpp:
+        (OpaqueJSClass::OpaqueJSClass):
+        * bindings/runtime_root.cpp:
+        (KJS::Bindings::RootObject::RootObject):
+
+2008-02-09  Darin Adler  <darin@apple.com>
+
+        Reviewed by Mitz.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=17256
+          Change RegExp to start its ref count at 1, not 0
+
+        We'll want to do this to every RefCounted class, one at a time.
+
+        * kjs/nodes.h:
+        (KJS::RegExpNode::RegExpNode): Use RegExp::create instead of new RegExp.
+        * kjs/regexp.cpp:
+        (KJS::RegExp::RegExp): Marked inline, set initial ref count to 1.
+        (KJS::RegExp::create): Added. Calls new RegExp then adopts the initial ref.
+        * kjs/regexp.h: Reformatted. Made the constructors private. Added static
+        create functions that return objects already wrapped in PassRefPtr.
+        * kjs/regexp_object.cpp:
+        (KJS::regExpProtoFuncCompile): Use RegExp::create instead of new RegExp.
+        (KJS::RegExpObjectImp::construct): Ditto.
+        * kjs/string_object.cpp:
+        (KJS::stringProtoFuncMatch): Ditto.
+        (KJS::stringProtoFuncSearch): Ditto.
+
+2008-02-08  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        <rdar://problem/5731773> REGRESSION (r28973): Extraneous parentheses in function.toString()
+        https://bugs.webkit.org/show_bug.cgi?id=17214
+
+        Make a subclass of CommaNode to provide the correct precedence for each expression in
+        a variable declaration list.
+
+        * kjs/grammar.y:
+        * kjs/nodes.h:
+        (KJS::VarDeclCommaNode::):
+
+2008-02-08  Darin Adler  <darin@apple.com>
+
+        Reviewed by Oliver.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=17247
+          Labelled continue/break can fail in some cases
+
+        Test: fast/js/continue-break-multiple-labels.html
+
+        * kjs/nodes.h:
+        (KJS::StatementNode::pushLabel): Made this virtual.
+        (KJS::LabelNode::pushLabel): Forward pushLabel calls to the statement inside.
+
+2008-02-08  Darin Adler  <darin@apple.com>
+
+        Reviewed by Eric.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=15003
+          Function.prototype.constructor should not be DontDelete/ReadOnly (Acid3 bug)
+
+        Test: fast/js/constructor-attributes.html
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::reset): Remove unwanted attributes from "constructor".
+        * kjs/function_object.cpp:
+        (KJS::FunctionObjectImp::construct): Ditto.
+        * kjs/nodes.cpp:
+        (KJS::FuncDeclNode::makeFunction): Ditto.
+        (KJS::FuncExprNode::evaluate): Ditto.
+
+2008-02-06  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Added an ASSERT to catch refCount underflow, since it caused a leak in
+        my last check-in.
+
+        * wtf/RefCounted.h:
+        (WTF::RefCounted::deref):
+
+2008-02-06  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+
+        PLT speedup related to <rdar://problem/5659272> REGRESSION: PLT .4%
+        slower due to r28884 (global variable symbol table optimization)
+        
+        Tweaked RefCounted::deref() to be a little more efficient.
+
+        1% - 1.5% speedup on my machine. .7% speedup on Stephanie's machine.
+        
+        * wtf/RefCounted.h:
+        (WTF::RefCounted::deref): Don't modify m_refCount if we're just going
+        to delete the object anyway. Also, use a simple == test, which might be
+        faster than <= on some hardware.
+
+2008-02-06  Darin Adler  <darin@apple.com>
+
+        Reviewed by Sam.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=17094
+          Array.prototype functions create length properties with DontEnum/DontDelete
+
+        Test results match Gecko with very few obscure exceptions that seem to be
+        bugs in Gecko.
+
+        Test: fast/js/array-functions-non-arrays.html
+
+        * kjs/array_object.cpp:
+        (KJS::arrayProtoFuncConcat):  Removed DontEnum and DontDelete from the call
+        to set length.
+        (KJS::arrayProtoFuncPop): Ditto. Also added missing call to deleteProperty,
+        which is not needed for real arrays, but is needed for non-arrays.
+        (KJS::arrayProtoFuncPush): Ditto.
+        (KJS::arrayProtoFuncShift): Ditto.
+        (KJS::arrayProtoFuncSlice): Ditto.
+        (KJS::arrayProtoFuncSort): Removed incorrect call to set length when
+        the array has no elements.
+        (KJS::arrayProtoFuncSplice): Removed DontEnum and DontDelete from the call
+        to set length.
+        (KJS::arrayProtoFuncUnShift): Ditto. Also added a check for 0 arguments to
+        make behavior match the specification in that case.
+        * kjs/nodes.cpp:
+        (KJS::ArrayNode::evaluate): Removed DontEnum and DontDelete from the call
+        to set length.
+
+2008-02-06  Darin Adler  <darin@apple.com>
+
+        Reviewed by Sam.
+
+        - replace calls to put to set up properties with calls to putDirect, to
+          prepare for a future change where put won't take attributes any more,
+          and for a slight performance boost
+
+        * API/JSObjectRef.cpp:
+        (JSObjectMakeConstructor): Use putDirect instead of put.
+        * kjs/CommonIdentifiers.h: Removed lastIndex.
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::reset): Use putDirect instead of put.
+        * kjs/array_object.cpp:
+        (KJS::arrayProtoFuncConcat): Took out extra call to get length (unused).
+        (KJS::ArrayObjectImp::ArrayObjectImp): Use putDirect instead of put.
+        * kjs/error_object.cpp:
+        (KJS::ErrorPrototype::ErrorPrototype): Use putDirect instead of put.
+        * kjs/function.cpp:
+        (KJS::Arguments::Arguments): Use putDirect instead of put.
+        (KJS::PrototypeFunction::PrototypeFunction): Use putDirect instead of put.
+        * kjs/function_object.cpp:
+        (KJS::FunctionObjectImp::construct): Use putDirect instead of put.
+        * kjs/nodes.cpp:
+        (KJS::FuncDeclNode::makeFunction): Use putDirect instead of put.
+        (KJS::FuncExprNode::evaluate): Use putDirect instead of put.
+        * kjs/regexp_object.cpp:
+        (KJS::regExpProtoFuncCompile): Use setLastIndex instead of put(lastIndex).
+        (KJS::RegExpImp::match): Get and set lastIndex by using m_lastIndex instead of
+        calling get and put.
+        * kjs/regexp_object.h:
+        (KJS::RegExpImp::setLastIndex): Added.
+        * kjs/string_object.cpp:
+        (KJS::stringProtoFuncMatch): Use setLastIndex instead of put(lastIndex).
+
+2008-02-05  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Anders Carlsson.
+
+        Fix for http://bugs.webkit.org/show_bug.cgi?id=8080
+        NodeList (and other DOM lists) items are not enumeratable using for..in
+
+        * JavaScriptCore.exp:
+
+2008-02-05  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        Update versioning to support the mysterious future.
+
+        * Configurations/Version.xcconfig: Add SYSTEM_VERSION_PREFIX_1060.
+
+2008-02-04  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Oliver Hunt.
+
+        Fixes Bug 16889: REGRESSION (r29425): Canvas-based graphing calculator fails to run
+              Bug 17015: REGRESSION (r29414-29428): www.fox.com "shows" menu fails to render
+              Bug 17164: REGRESSION: JavaScript pop-up menu appears at wrong location when hovering image at http://news.chinatimes.com/
+
+        <http://bugs.webkit.org/show_bug.cgi?id=16889>
+        <rdar://problem/5696255>
+
+        <http://bugs.webkit.org/show_bug.cgi?id=17015>
+
+        <http://bugs.webkit.org/show_bug.cgi?id=17164>
+        <rdar://problem/5720947>
+
+        The ActivationImp tear-off (r29425) introduced a problem with ReadModify
+        nodes that first resolve a slot, call valueForReadModifyNode(), and then
+        store a value in the previously resolved slot. Since valueForReadModifyNode()
+        may cause a tear-off, the slot needs to be resolved again, but this was
+        not happening with the existing code.
+
+        * kjs/nodes.cpp:
+        (KJS::ReadModifyLocalVarNode::evaluate):
+        (KJS::ReadModifyResolveNode::evaluate):
+
+2008-02-04  Cameron McCormack <cam@mcc.id.au>
+
+        Reviewed by Geoff Garen.
+
+        Remove some unneccesary UNUSED_PARAMs.  Clarify ownership rule of return value of JSObjectCopyPropertyNames.
+
+        * API/JSNode.c:
+        (JSNode_appendChild):
+        (JSNode_removeChild):
+        (JSNode_replaceChild):
+        (JSNode_getNodeType):
+        (JSNode_getFirstChild):
+        * API/JSNodeList.c:
+        (JSNodeList_length):
+        * API/JSObjectRef.h:
+
+2008-02-04  Rodney Dawes  <dobey@wayofthemonkey.com>
+
+        Reviewed by Alp Toker and Mark Rowe.
+
+        Fix http://bugs.webkit.org/show_bug.cgi?id=17175.
+        Bug 17175: Use of C++ compiler flags in CFLAGS
+
+        * GNUmakefile.am: Use global_cxxflags as well as global_cflags in CXXFLAGS.
+
+2008-02-04  Alp Toker  <alp@atoker.com>
+
+        Rubber-stamped by Mark Rowe.
+
+        Remove all trailing whitespace in the GTK+ port and related
+        components.
+
+        * GNUmakefile.am:
+
+2008-02-02  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff Garen.
+
+        PLT speedup related to <rdar://problem/5659272> REGRESSION: PLT .4%
+        slower due to r28884 (global variable symbol table optimization)
+
+        Geoff's theory is that the slowdown was due to copying hash tables when
+        putting things into the back/forward cache. If that's true, then this
+        should fix the problem.
+
+        (According to Geoff's measurements, in a PLT that exaggerates the
+        importance of symbol table saving during cached page creation, this
+        patch is a ~3X speedup in cached page creation, and a 9% speedup overall.)
+
+        * JavaScriptCore.exp: Updated.
+
+        * kjs/JSVariableObject.cpp:
+        (KJS::JSVariableObject::saveLocalStorage): Updated for changes to SavedProperty,
+        which has been revised to avoid initializing each SavedProperty twice when building
+        the array. Store the property names too, so we don't have to store the symbol table
+        separately. Do this by iterating the symbol table instead of the local storage vector.
+        (KJS::JSVariableObject::restoreLocalStorage): Ditto. Restore the symbol table as
+        well as the local storage vector.
+
+        * kjs/JSVariableObject.h: Removed save/restoreSymbolTable and do that work inside
+        save/restoreLocalStorage instead. Made restoreLocalStorage a non-const member function
+        that takes a const reference to a SavedProperties object.
+
+        * kjs/LocalStorage.h: Changed attributes to be unsigned instead of int to match
+        other declarations of attributes elsewhere.
+
+        * kjs/property_map.cpp:
+        (KJS::SavedProperties::SavedProperties): Updated for data member name change.
+        (KJS::PropertyMap::save): Updated for data member name change and to use the new
+        inline init function instead of setting the fields directly. This allows us to
+        skip initializing the SavedProperty objects when first allocating the array, and
+        just do it when we're actually setting up the individual elements.
+        (KJS::PropertyMap::restore): Updated for SavedProperty changes.
+
+        * kjs/property_map.h: Changed SavedProperty from a struct to a class. Set it up so
+        it does not get initialized at construction time to avoid initializing twice when
+        creating an array of SavedProperty. Removed the m_ prefixes from the members of
+        the SavedProperties struct. Generally we use m_ for class members and not struct.
+
+2008-02-02  Tony Chang  <idealisms@gmail.com>
+
+        Reviewed by darin.  Landed by eseidel.
+
+        Add #define guards for WIN32_LEAN_AND_MEAN and _CRT_RAND_S.
+
+        * kjs/config.h:
+        * wtf/FastMalloc.cpp:
+        * wtf/TCSpinLock.h:
+
+2008-01-28  Sam Weinig  <sam@webkit.org>
+
+        Rubber-stamped by Darin Adler.
+
+        - Fix whitespace in nodes.h/cpp and nodes2string.cpp.
+
+        (NOTE: Specific changed functions elided for space and clarity)
+        * kjs/nodes.cpp:
+        * kjs/nodes.h:
+        * kjs/nodes2string.cpp:
+
+2008-01-27  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Oliver Hunt.
+
+        Patch for http://bugs.webkit.org/show_bug.cgi?id=17025
+        nodes.h/cpp has been rolling around in the mud - lets hose it down
+
+        - Rename member variables to use the m_ prefix.
+
+        (NOTE: Specific changed functions elided for space and clarity)
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        * kjs/nodes.h:
+        * kjs/nodes2string.cpp:
+
+2008-01-27  Darin Adler  <darin@apple.com>
+
+        Reviewed by Oliver.
+
+        - fix <rdar://problem/5657450> REGRESSION: const is broken
+
+        Test: fast/js/const.html
+
+        SunSpider said this was 0.3% slower. And I saw some Shark samples in
+        JSGlobalObject::put -- not a lot but a few. We may be able to regain the
+        speed, but for now we will take that small hit for correctness sake.
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::put): Pass the checkReadOnly flag in to symbolTablePut
+        instead of passing attributes.
+
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::symbolTablePut): Removed the code to set attributes
+        here, since we only set attributes when creating a property. Added the code
+        to check read-only here, since we need that to implement const!
+
+        * kjs/function.cpp:
+        (KJS::ActivationImp::put): Pass the checkReadOnly flag in to symbolTablePut
+        instead of passing attributes.
+
+        * kjs/nodes.cpp:
+        (KJS::isConstant): Added.
+        (KJS::PostIncResolveNode::optimizeVariableAccess): Create a PostIncConstNode
+        if optimizing for a local variable and the variable is constant.
+        (KJS::PostDecResolveNode::optimizeVariableAccess): Ditto. But PostDecConstNode.
+        (KJS::PreIncResolveNode::optimizeVariableAccess): Ditto. But PreIncConstNode.
+        (KJS::PreDecResolveNode::optimizeVariableAccess): Ditto. But PreDecConstNode.
+        (KJS::PreIncConstNode::evaluate): Return the value + 1.
+        (KJS::PreDecConstNode::evaluate): Return the value - 1.
+        (KJS::PostIncConstNode::evaluate): Return the value converted to a number.
+        (KJS::PostDecConstNode::evaluate): Ditto.
+        (KJS::ReadModifyResolveNode::optimizeVariableAccess): Create a ReadModifyConstNode
+        if optimizing for a local variable and the variable is constant.
+        (KJS::AssignResolveNode::optimizeVariableAccess): Ditto. But AssignConstNode.
+        (KJS::ScopeNode::optimizeVariableAccess): Pass the local storage to the
+        node optimizeVariableAccess functions, since that's where we need to look to
+        figure out if a variable is constant.
+        (KJS::FunctionBodyNode::processDeclarations): Moved the call to
+        optimizeVariableAccess until after localStorage is set up.
+        (KJS::ProgramNode::processDeclarations): Ditto.
+
+        * kjs/nodes.h: Fixed the IsConstant and HasInitializer values. They are used
+        as flag masks, so a value of 0 will not work for IsConstant. Changed the
+        first parameter to optimizeVariableAccess to be a const reference to a symbol
+        table and added a const reference to local storage. Added classes for const
+        versions of local variable access: PostIncConstNode, PostDecConstNode,
+        PreIncConstNode, PreDecConstNode, ReadModifyConstNode, and AssignConstNode.
+
+        * kjs/object.cpp:
+        (KJS::JSObject::put): Tweaked comments a bit, and changed the checkReadOnly
+        expression to match the form used at the two other call sites.
+
+2008-01-27  Darin Adler  <darin@apple.com>
+
+        Reviewed by Oliver.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=16498
+          ''.constructor.toString() gives [function]
+
+        Test: fast/js/function-names.html
+
+        * kjs/array_object.cpp:
+        (KJS::ArrayObjectImp::ArrayObjectImp): Use the class name as the constructor's function name.
+        * kjs/bool_object.cpp:
+        (KJS::BooleanObjectImp::BooleanObjectImp): Ditto.
+        * kjs/date_object.cpp:
+        (KJS::DateObjectImp::DateObjectImp): Ditto.
+        * kjs/error_object.cpp:
+        (KJS::ErrorPrototype::ErrorPrototype): Make the error object be an Error.
+        (KJS::ErrorObjectImp::ErrorObjectImp): Use the class name as the constructor's function name.
+        (KJS::NativeErrorPrototype::NativeErrorPrototype): Take const UString&.
+        (KJS::NativeErrorImp::NativeErrorImp): Use the prototype's name as the constructor's function
+        name.
+        * kjs/error_object.h: Change ErrorPrototype to inherit from ErrorInstance. Change the
+        NativeErrorImp constructor to take a NativeErrorPrototype pointer for its prototype.
+        * kjs/function.h: Removed unneeded constructor for internal functions without names.
+        We want to avoid those!
+        * kjs/function_object.cpp:
+        (KJS::functionProtoFuncToString): Removed code that writes out just [function] for functions
+        that have no names. There's no reason to do that.
+        (KJS::FunctionObjectImp::FunctionObjectImp): Use the class name as the constructor's
+        function name.
+        * kjs/internal.cpp: Removed the unused constructor.
+        * kjs/number_object.cpp:
+        (KJS::fractionalPartToString): Marked static for internal linkage.
+        (KJS::exponentialPartToString): Ditto.
+        (KJS::numberProtoFuncToPrecision): Removed an unneeded else.
+        (KJS::NumberObjectImp::NumberObjectImp): Use the class name as the constructor's
+        function name.
+        (KJS::NumberObjectImp::getValueProperty): Tweaked formatting.
+        * kjs/object_object.cpp:
+        (KJS::ObjectObjectImp::ObjectObjectImp): Use "Object" for the function name.
+        * kjs/regexp_object.cpp:
+        (KJS::RegExpObjectImp::RegExpObjectImp): Use "RegExp" for the function name.
+        * kjs/string_object.cpp:
+        (KJS::StringObjectImp::StringObjectImp): Use the class name as the constructor's
+        function name.
+
+2008-01-26  Darin Adler  <darin@apple.com>
+
+        Reviewed by Oliver.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=17027
+          Incorrect Function.toString behaviour with read/modify/write operators performed on negative numbers
+
+        Test: fast/js/function-toString-parentheses.html
+
+        The problem here was that a NumberNode with a negative number in it had the wrong
+        precedence. It's not a primary expression, it's a unary operator with a primary
+        expression after it.
+
+        Once the precedence of NumberNode was fixed, the cases from bug 17020 were also
+        fixed without trying to treat bracket nodes like dot nodes. That wasn't needed.
+        The reason we handle numbers before dot nodes specially is that the dot is a
+        legal character in a number. The same is not true of a bracket. Eventually we
+        could get smarter, and only add the parentheses when there is actual ambiguity.
+        There is none if the string form of the number already has a dot in it, or if
+        it's a number with a alphabetic name like infinity or NAN.
+
+        * kjs/nodes.h: Renamed back from ObjectAccess to DotExpr.
+        (KJS::NumberNode::precedence): Return PrecUnary for negative numbers, since
+        they serialize as a unary operator, not a primary expression.
+        * kjs/nodes2string.cpp:
+        (KJS::SourceStream::operator<<): Clear m_numberNeedsParens if this adds
+        parens; one set is enough.
+        (KJS::bracketNodeStreamTo): Remove unneeded special flag here. Normal
+        operator precedence suffices.
+        (KJS::NewExprNode::streamTo): Ditto.
+
+2008-01-26  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej and Darin.
+
+        Fix for http://bugs.webkit.org/show_bug.cgi?id=17020
+        Function.toString does not parenthesise numbers for the bracket accessor
+
+        It turns out that logic was there for all of the dot accessor nodes to make numbers be
+        parenthesised properly, so it was a trivial extension to extend that to the bracket nodes.
+        I renamed the enum type to reflect the fact that it is now used for both dot and bracket
+        accessors.
+
+        * kjs/nodes2string.cpp:
+        (KJS::bracketNodeStreamTo):
+        (KJS::BracketAccessorNode::streamTo):
+
+2008-01-26  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Darin.
+
+        Fix Bug 17018: Incorrect code generated from Function.toString for get/setters in object literals
+
+        Don't quote getter and setter names during output, as that is simply wrong.
+
+        * kjs/nodes2string.cpp:
+        (KJS::PropertyNode::streamTo):
+
+2008-01-26  Darin Adler  <darin@apple.com>
+
+        Reviewed by Eric Seidel.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=16860
+          a bit of cleanup after the Activation optimization
+
+        * JavaScriptCore.exp: Export the GlobalExecState constructor instead of
+        the global flavor of the ExecState constructor. It'd probably be cleaner
+        to not export either one, but JSGlobalObject inlines the code that
+        constructs the ExecState. If we changed that, we could remove this export.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj: Re-sorted a few things and
+        put the new source files into the kjs group rather than at the top level.
+
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::ExecState): Marked inline and updated for data member
+        name changes. This is now only for use for the derived classes. Also removed
+        code that sets the unused m_savedExec data member for the global case. That
+        data member is only used for the other two types.
+        (KJS::ExecState::~ExecState): Marked inline and removed all the code.
+        The derived class destructors now inclde the appropriate code.
+        (KJS::ExecState::lexicalGlobalObject): Removed unneeded special case for
+        an empty scope chain. The bottom function already returns 0 for that case,
+        so the general case code handles it fine. Also changed to use data members
+        directly rather than calling functions.
+        (KJS::GlobalExecState::GlobalExecState): Added. Calls through to the base
+        class constructor.
+        (KJS::GlobalExecState::~GlobalExecState): Added.
+        (KJS::InterpreterExecState::InterpreterExecState): Added. Moved code to
+        manipulate activeExecStates here since we don't want to have to check for the
+        special case of globalExec.
+        (KJS::InterpreterExecState::~InterpreterExecState): Added.
+        (KJS::EvalExecState::EvalExecState): Added.
+        (KJS::EvalExecState::~EvalExecState): Added.
+        (KJS::FunctionExecState::FunctionExecState): Added.
+        (KJS::FunctionExecState::~FunctionExecState): Added.
+
+        * kjs/ExecState.h: Tweaked the header, includes, and declarations a bit.
+        Made ExecState inherit from Noncopyable. Reformatted some comments and
+        made them a bit more brief. Rearranged declarations a little bit and removed
+        unused savedExec function. Changed seenLabels function to return a reference
+        rather than a pointer. Made constructors and destructor protected, and also
+        did the same with all data members. Renamed m_thisVal to m_thisValue and
+        ls to m_labelStack. Added three new derived classes for each of the
+        types of ExecState. The primary goal here was to remove a branch from the
+        code in the destructor, but it's also clearer than overloading the arguments
+        to the ExecState constructor.
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::getCurrentTime): Fixed formatting.
+        (KJS::JSGlobalObject::pushActivation): Removed parentheses that don't make
+        the expression clearer -- other similar sites didn't have these parentheses,
+        even the one a couple lines earlier that sets stackEntry.
+        (KJS::JSGlobalObject::tearOffActivation): Got rid of unneeded static_cast
+        (I think I mentioned this during patch review) and used an early exit so that
+        the entire contents of the function aren't nested inside an if statement.
+        Also removed the check of codeType, instead checking Activation for 0.
+        For now, I kept the codeType check, but inside an assertion.
+
+        * kjs/JSGlobalObject.h: Changed type of globalExec to GlobalExecState.
+        * kjs/function.cpp:
+        (KJS::FunctionImp::callAsFunction): Changed type to FunctionExecState.
+        (KJS::GlobalFuncImp::callAsFunction): Changed type to EvalExecState.
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::evaluate): Changed type to GlobalExecState.
+
+        * kjs/nodes.cpp:
+        (KJS::ContinueNode::execute): Changed code since seenLabels() returns a
+        reference now instead of a pointer.
+        (KJS::BreakNode::execute): Ditto.
+        (KJS::LabelNode::execute): Ditto.
+
+2008-01-26  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Mark Rowe.
+
+        Cleanup node2string a little.
+        - Remove some unnecessary branching.
+        - Factor out bracket and dot streaming into static inline functions.
+
+        * kjs/nodes.h:
+        * kjs/nodes2string.cpp:
+        (KJS::bracketNodeStreamTo):
+        (KJS::dotNodeStreamTo):
+        (KJS::FunctionCallBracketNode::streamTo):
+        (KJS::FunctionCallDotNode::streamTo):
+        (KJS::PostIncBracketNode::streamTo):
+        (KJS::PostDecBracketNode::streamTo):
+        (KJS::PostIncDotNode::streamTo):
+        (KJS::PostDecDotNode::streamTo):
+        (KJS::DeleteBracketNode::streamTo):
+        (KJS::DeleteDotNode::streamTo):
+        (KJS::PreIncBracketNode::streamTo):
+        (KJS::PreDecBracketNode::streamTo):
+        (KJS::PreIncDotNode::streamTo):
+        (KJS::PreDecDotNode::streamTo):
+        (KJS::ReadModifyBracketNode::streamTo):
+        (KJS::AssignBracketNode::streamTo):
+        (KJS::ReadModifyDotNode::streamTo):
+        (KJS::AssignDotNode::streamTo):
+        (KJS::WhileNode::streamTo):
+
+2008-01-26  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Darin Adler.
+
+        Fix http://bugs.webkit.org/show_bug.cgi?id=17001
+        Bug 17001: Build error with Gtk port on Mac OS X
+
+        If both XP_MACOSX and XP_UNIX are defined then X11.h and Carbon.h will both be included.
+        These provide conflicting definitions for a type named 'Cursor'.  As XP_UNIX is set by
+        the build system when targeting X11, it doesn't make sense for XP_MACOSX to also be set
+        in this instance.
+
+        * bindings/npapi.h: Don't define XP_MACOSX if XP_UNIX is defined.
+
+2008-01-26  Darin Adler  <darin@apple.com>
+
+        Reviewed by Oliver.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=17013
+          JSC can't round trip certain for-loops
+
+        Test: fast/js/toString-for-var-decl.html
+
+        * kjs/nodes.h: Added PlaceholderTrueNode so we can put nodes into
+        for loops without injecting the word "true" into them (nice, but not
+        the bug fix). Fixed ForNode constructor so expr1WasVarDecl is set
+        only when there is an expression, since it's common for the actual
+        variable declaration to be moved by the parser.
+
+        * kjs/nodes2string.cpp:
+        (KJS::PlaceholderTrueNode::streamTo): Added. Empty.
+
+2008-01-25  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Fix for bug 17012: REGRESSION: JSC can't round trip an object literal
+
+        Add logic to ensure that object literals and function expressions get
+        parentheses when necessary.
+
+        * kjs/nodes.h:
+        * kjs/nodes2string.cpp:
+        (KJS::SourceStream::operator<<):
+
+2008-01-24  Steve Falkenburg  <sfalken@apple.com>
+
+        Build fix.
+
+        * JavaScriptCore.vcproj/JavaScriptCore.sln:
+
+2008-01-24  Steve Falkenburg  <sfalken@apple.com>
+
+        Build fix.
+
+        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
+
+2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
+
+        Reviewed by Simon.
+
+        Fix QDateTime to JS Date conversion.
+        Several conversion errors (some UTC related, some month
+        offset related) and the conversion distance for Date
+        to DateTime conversion weights were fixed (it should never
+        be better to convert a JS Number into a Date rather than
+        an int).
+        
+        * bindings/qt/qt_runtime.cpp:
+        (KJS::Bindings::convertValueToQVariant):
+        (KJS::Bindings::convertQVariantToValue):
+
+2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
+
+        Reviewed by Simon.
+
+        Add support for calling QObjects.
+        Add support for invokeDefaultMethod (via a call to
+        a specific slot), and also allow using it as a
+        constructor, like QtScript.
+        
+
+        * bindings/qt/qt_class.cpp:
+        (KJS::Bindings::QtClass::fallbackObject):
+        * bindings/qt/qt_instance.cpp:
+        (KJS::Bindings::QtRuntimeObjectImp::construct):
+        (KJS::Bindings::QtInstance::QtInstance):
+        (KJS::Bindings::QtInstance::~QtInstance):
+        (KJS::Bindings::QtInstance::implementsCall):
+        (KJS::Bindings::QtInstance::invokeDefaultMethod):
+        * bindings/qt/qt_instance.h:
+        * bindings/qt/qt_runtime.cpp:
+        (KJS::Bindings::findMethodIndex):
+        (KJS::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
+        (KJS::Bindings::QtRuntimeMetaMethod::callAsFunction):
+        * bindings/qt/qt_runtime.h:
+
+2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
+
+        Reviewed by Simon.
+
+        Code style cleanups.
+        Add spaces before/after braces in inline function.
+
+        * bindings/qt/qt_instance.h:
+
+2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
+
+        Reviewed by Simon.
+
+        Code style cleanups.
+        Remove spaces and unneeded declared parameter names.
+
+        * bindings/qt/qt_instance.cpp:
+        (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
+
+2008-01-24  Michael Goddard  <michael.goddard@trolltech.com>
+
+        Reviewed by Simon.
+
+        Clear stale RuntimeObjectImps.
+        Since other objects can have refs to the QtInstance,
+        we can't rely on the QtInstance being deleted when the
+        RuntimeObjectImp is invalidate or deleted.  This
+        could result in a stale JSObject being returned for
+        a valid Instance.
+
+        * bindings/qt/qt_instance.cpp:
+        (KJS::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp):
+        (KJS::Bindings::QtRuntimeObjectImp::~QtRuntimeObjectImp):
+        (KJS::Bindings::QtRuntimeObjectImp::invalidate):
+        (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
+        (KJS::Bindings::QtInstance::getRuntimeObject):
+        * bindings/runtime.cpp:
+        (KJS::Bindings::Instance::createRuntimeObject):
+        * bindings/runtime.h:
+
+2008-01-23  Alp Toker  <alp@atoker.com>
+
+        Rubber-stamped by Mark Rowe.
+
+        Remove whitespace after -I in automake include lists.
+
+        * GNUmakefile.am:
+
+2008-01-23  Michael Goddard <michael.goddard@trolltech.com>
+
+        Reviewed by Lars Knoll <lars@trolltech.com>.
+
+        Reworked the JavaScriptCore Qt bindings:
+        
+        * Add initial support for string and variant arrays, as well
+        as sub QObjects in the JS bindings.
+        
+        * Don't expose fields marked as not scriptable by moc.
+        
+        * Add support for dynamic properties and accessing named
+        QObject children of an object (like QtScript and older
+        IE DOM style JS).
+        * Add support for custom toString methods.
+        
+        * Fine tune some bindings to be closer to QtScript.
+        Make void functions return undefined, and empty/
+        null QStrings return a zero length string.
+        
+        * Create framework for allowing more direct method calls.
+        Since RuntimeMethod doesn't allow us to add additional
+        methods/properties to a function, add these classes.
+        Start prototyping object.signal.connect(...).
+        
+        * Add signal support to the Qt bindings.
+        Allow connecting to signals (object.signal.connect(slot)),
+        disconnecting, and emitting signals.  Currently chooses
+        the first signal that matches the name, so this will need
+        improvement.
+        
+        * Add property names, and resolve signals closer to use.
+        Enumerating properties now returns some of the Qt properties
+        and signals.  Slots and methods aren't quite present.  Also,
+        resolve signal connections etc. closer to the time of use, so
+        we can do more dynamic resolution based on argument type etc.
+        Still picks the first one with the same name, at the moment.
+        
+        * Make signature comparison code consistent.
+        Use the same code for checking meta signatures in
+        the method and fallback getters, and avoid a
+        QByteArray construction when we can.
+        
+        * Fix minor memory leak, and handle pointers better.
+        Delete the private object in the dtors, and use RefPtrs
+        for holding Instances etc.
+        
+        * Handle method lookup better.
+        Allow invocation time method lookup based on the arguments,
+        which is closer to QtScript behaviour.  Also, cache the
+        method lists and delete them in the QtClass dtor (stops
+        a memory leak).
+        
+        * Improve JS to Qt data type conversions.
+        Add some support for Date & RegExp JS objects,
+        and provide some metrics on the quality of the
+        conversion.
+        
+        * A couple of fixes for autotest failures.
+        Better support for converting lists, read/write only
+        QMetaProperty support, modified slot search order...)
+
+        * bindings/qt/qt_class.cpp:
+        (KJS::Bindings::QtClass::QtClass):
+        (KJS::Bindings::QtClass::~QtClass):
+        (KJS::Bindings::QtClass::name):
+        (KJS::Bindings::QtClass::fallbackObject):
+        (KJS::Bindings::QtClass::methodsNamed):
+        (KJS::Bindings::QtClass::fieldNamed):
+        * bindings/qt/qt_class.h:
+        * bindings/qt/qt_instance.cpp:
+        (KJS::Bindings::QtInstance::QtInstance):
+        (KJS::Bindings::QtInstance::~QtInstance):
+        (KJS::Bindings::QtInstance::getRuntimeObject):
+        (KJS::Bindings::QtInstance::getClass):
+        (KJS::Bindings::QtInstance::implementsCall):
+        (KJS::Bindings::QtInstance::getPropertyNames):
+        (KJS::Bindings::QtInstance::invokeMethod):
+        (KJS::Bindings::QtInstance::invokeDefaultMethod):
+        (KJS::Bindings::QtInstance::stringValue):
+        (KJS::Bindings::QtInstance::booleanValue):
+        (KJS::Bindings::QtInstance::valueOf):
+        (KJS::Bindings::QtField::name):
+        (KJS::Bindings::QtField::valueFromInstance):
+        (KJS::Bindings::QtField::setValueToInstance):
+        * bindings/qt/qt_instance.h:
+        (KJS::Bindings::QtInstance::getBindingLanguage):
+        (KJS::Bindings::QtInstance::getObject):
+        * bindings/qt/qt_runtime.cpp:
+        (KJS::Bindings::QWKNoDebug::QWKNoDebug):
+        (KJS::Bindings::QWKNoDebug::~QWKNoDebug):
+        (KJS::Bindings::QWKNoDebug::operator<<):
+        (KJS::Bindings::):
+        (KJS::Bindings::valueRealType):
+        (KJS::Bindings::convertValueToQVariant):
+        (KJS::Bindings::convertQVariantToValue):
+        (KJS::Bindings::QtRuntimeMethod::QtRuntimeMethod):
+        (KJS::Bindings::QtRuntimeMethod::~QtRuntimeMethod):
+        (KJS::Bindings::QtRuntimeMethod::codeType):
+        (KJS::Bindings::QtRuntimeMethod::execute):
+        (KJS::Bindings::QtRuntimeMethodData::~QtRuntimeMethodData):
+        (KJS::Bindings::QtRuntimeMetaMethodData::~QtRuntimeMetaMethodData):
+        (KJS::Bindings::QtRuntimeConnectionMethodData::~QtRuntimeConnectionMethodData):
+        (KJS::Bindings::QtMethodMatchType::):
+        (KJS::Bindings::QtMethodMatchType::QtMethodMatchType):
+        (KJS::Bindings::QtMethodMatchType::kind):
+        (KJS::Bindings::QtMethodMatchType::isValid):
+        (KJS::Bindings::QtMethodMatchType::isVariant):
+        (KJS::Bindings::QtMethodMatchType::isMetaType):
+        (KJS::Bindings::QtMethodMatchType::isUnresolved):
+        (KJS::Bindings::QtMethodMatchType::isMetaEnum):
+        (KJS::Bindings::QtMethodMatchType::enumeratorIndex):
+        (KJS::Bindings::QtMethodMatchType::variant):
+        (KJS::Bindings::QtMethodMatchType::metaType):
+        (KJS::Bindings::QtMethodMatchType::metaEnum):
+        (KJS::Bindings::QtMethodMatchType::unresolved):
+        (KJS::Bindings::QtMethodMatchType::typeId):
+        (KJS::Bindings::QtMethodMatchType::name):
+        (KJS::Bindings::QtMethodMatchData::QtMethodMatchData):
+        (KJS::Bindings::QtMethodMatchData::isValid):
+        (KJS::Bindings::QtMethodMatchData::firstUnresolvedIndex):
+        (KJS::Bindings::indexOfMetaEnum):
+        (KJS::Bindings::findMethodIndex):
+        (KJS::Bindings::findSignalIndex):
+        (KJS::Bindings::QtRuntimeMetaMethod::QtRuntimeMetaMethod):
+        (KJS::Bindings::QtRuntimeMetaMethod::mark):
+        (KJS::Bindings::QtRuntimeMetaMethod::callAsFunction):
+        (KJS::Bindings::QtRuntimeMetaMethod::getOwnPropertySlot):
+        (KJS::Bindings::QtRuntimeMetaMethod::lengthGetter):
+        (KJS::Bindings::QtRuntimeMetaMethod::connectGetter):
+        (KJS::Bindings::QtRuntimeMetaMethod::disconnectGetter):
+        (KJS::Bindings::QtRuntimeConnectionMethod::QtRuntimeConnectionMethod):
+        (KJS::Bindings::QtRuntimeConnectionMethod::callAsFunction):
+        (KJS::Bindings::QtRuntimeConnectionMethod::getOwnPropertySlot):
+        (KJS::Bindings::QtRuntimeConnectionMethod::lengthGetter):
+        (KJS::Bindings::QtConnectionObject::QtConnectionObject):
+        (KJS::Bindings::QtConnectionObject::~QtConnectionObject):
+        (KJS::Bindings::QtConnectionObject::metaObject):
+        (KJS::Bindings::QtConnectionObject::qt_metacast):
+        (KJS::Bindings::QtConnectionObject::qt_metacall):
+        (KJS::Bindings::QtConnectionObject::execute):
+        (KJS::Bindings::QtConnectionObject::match):
+        (KJS::Bindings::::QtArray):
+        (KJS::Bindings::::~QtArray):
+        (KJS::Bindings::::rootObject):
+        (KJS::Bindings::::setValueAt):
+        (KJS::Bindings::::valueAt):
+        * bindings/qt/qt_runtime.h:
+        (KJS::Bindings::QtField::):
+        (KJS::Bindings::QtField::QtField):
+        (KJS::Bindings::QtField::fieldType):
+        (KJS::Bindings::QtMethod::QtMethod):
+        (KJS::Bindings::QtMethod::name):
+        (KJS::Bindings::QtMethod::numParameters):
+        (KJS::Bindings::QtArray::getLength):
+        (KJS::Bindings::QtRuntimeMethod::d_func):
+        (KJS::Bindings::QtRuntimeMetaMethod::d_func):
+        (KJS::Bindings::QtRuntimeConnectionMethod::d_func):
+        (KJS::Bindings::):
+        * bindings/runtime.cpp:
+        (KJS::Bindings::Instance::createBindingForLanguageInstance):
+        (KJS::Bindings::Instance::createRuntimeObject):
+        (KJS::Bindings::Instance::reallyCreateRuntimeObject):
+        * bindings/runtime.h:
+
+2008-01-22  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Darin and Adam.
+
+        <rdar://problem/5688975>
+        div element on microsoft site has wrong left offset.
+        
+        Return true even if NPN_GetProperty returns null or undefined. This matches Firefox 
+        (and is what the Silverlight plug-in expects).
+        
+        * bindings/NP_jsobject.cpp:
+        (_NPN_GetProperty):
+
+2008-01-21  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Fixed http://bugs.webkit.org/show_bug.cgi?id=16909
+        REGRESSION: Amazon.com crash (ActivationImp)
+        
+        (and a bunch of other crashes)
+        
+        Plus, a .7% SunSpider speedup to boot.
+        
+        Replaced the buggy currentExec and savedExec mechanisms with an
+        explicit ExecState stack.
+
+        * kjs/collector.cpp:
+        (KJS::Collector::collect): Explicitly mark the ExecState stack.
+
+        (KJS::Collector::reportOutOfMemoryToAllExecStates): Slight change in
+        behavior: We no longer throw an exception in any global ExecStates,
+        since global ExecStates are more like pseudo-ExecStates, and aren't
+        used for script execution. (It's unclear what would happen if you left
+        an exception waiting around in a global ExecState, but it probably
+        wouldn't be good.)
+
+2008-01-21  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
+
+        Reviewed by Alp Toker.
+
+        http://bugs.webkit.org/show_bug.cgi?id=16955
+        Get errors when cross-compile webkit-gtk
+
+        * GNUmakefile.am: removed ICU_CFLAGS
+
+2008-01-18  Kevin McCullough  <kmccullough@apple.com>
+
+        - Build fix.
+
+        * kjs/ustring.h:
+
+2008-01-18  Kevin McCullough  <kmccullough@apple.com>
+
+        - Build fix.
+
+        * kjs/ustring.cpp:
+        * kjs/ustring.h:
+        (KJS::UString::cost):
+
+2008-01-18  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Geoff.
+
+        - Correctly report cost of appended strings to trigger GC.
+
+        * kjs/ustring.cpp:
+        (KJS::UString::Rep::create):
+        (KJS::UString::UString): Don't create unnecssary objects.
+        (KJS::UString::cost): Report cost if necessary but also keep track of 
+        reported cost.
+        * kjs/ustring.h:
+
+2008-01-18  Simon Hausmann  <hausmann@webkit.org>
+
+        Reviewed by Holger.
+
+        Fix return type conversions from Qt slots to JS values.
+        
+        This also fixes fast/dom/open-and-close-by-DOM.html, which called
+        layoutTestController.windowCount().
+        
+        When constructing the QVariant that holds the return type we cannot
+        use the QVarian(Type) constuctor as that will create a null variant.
+        We have to use the QVariant(Type, void *) constructor instead, just
+        like in QMetaObject::read() for example.
+        
+
+        * bindings/qt/qt_instance.cpp:
+        (KJS::Bindings::QtInstance::getRuntimeObject):
+
+2008-01-18  Prasanth Ullattil  <prasanth.ullattil@trolltech.com>
+
+        Reviewed by Simon Hausmann <hausmann@webkit.org>.
+
+        Fix compilation on Win64(2): Implemented currentThreadStackBase on X86-64 on Windows
+        
+
+        * kjs/collector.cpp:
+        (KJS::Collector::heapAllocate):
+
+2008-01-18  Prasanth Ullattil  <prasanth.ullattil@trolltech.com>
+
+        Reviewed by Simon Hausmann <hausmann@webkit.org>.
+
+        Fix compilation on Win64(1): Define WTF_PLATFORM_X86_64 correctly on Win64.
+        
+
+        * wtf/Platform.h:
+
+2008-01-17  Antti Koivisto  <antti@apple.com>
+
+        Fix Windows build.
+
+        * kjs/regexp_object.cpp:
+        (KJS::regExpProtoFuncToString):
+
+2008-01-16  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Darin.
+
+        Fix for http://bugs.webkit.org/show_bug.cgi?id=16901
+        Convert remaining JS function objects to use the new PrototypeFunction class
+
+        - Moves Boolean, Function, RegExp, Number, Object and Global functions to their
+          own static function implementations so that they can be used with the
+          PrototypeFunction class.  SunSpider says this is 1.003x as fast.
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::reset):
+        * kjs/array_object.h:
+        * kjs/bool_object.cpp:
+        (KJS::BooleanInstance::BooleanInstance):
+        (KJS::BooleanPrototype::BooleanPrototype):
+        (KJS::booleanProtoFuncToString):
+        (KJS::booleanProtoFuncValueOf):
+        (KJS::BooleanObjectImp::BooleanObjectImp):
+        (KJS::BooleanObjectImp::implementsConstruct):
+        (KJS::BooleanObjectImp::construct):
+        (KJS::BooleanObjectImp::callAsFunction):
+        * kjs/bool_object.h:
+        (KJS::BooleanInstance::classInfo):
+        * kjs/error_object.cpp:
+        (KJS::ErrorPrototype::ErrorPrototype):
+        (KJS::errorProtoFuncToString):
+        * kjs/error_object.h:
+        * kjs/function.cpp:
+        (KJS::globalFuncEval):
+        (KJS::globalFuncParseInt):
+        (KJS::globalFuncParseFloat):
+        (KJS::globalFuncIsNaN):
+        (KJS::globalFuncIsFinite):
+        (KJS::globalFuncDecodeURI):
+        (KJS::globalFuncDecodeURIComponent):
+        (KJS::globalFuncEncodeURI):
+        (KJS::globalFuncEncodeURIComponent):
+        (KJS::globalFuncEscape):
+        (KJS::globalFuncUnEscape):
+        (KJS::globalFuncKJSPrint):
+        (KJS::PrototypeFunction::PrototypeFunction):
+        * kjs/function.h:
+        * kjs/function_object.cpp:
+        (KJS::FunctionPrototype::FunctionPrototype):
+        (KJS::functionProtoFuncToString):
+        (KJS::functionProtoFuncApply):
+        (KJS::functionProtoFuncCall):
+        * kjs/function_object.h:
+        * kjs/number_object.cpp:
+        (KJS::NumberPrototype::NumberPrototype):
+        (KJS::numberProtoFuncToString):
+        (KJS::numberProtoFuncToLocaleString):
+        (KJS::numberProtoFuncValueOf):
+        (KJS::numberProtoFuncToFixed):
+        (KJS::numberProtoFuncToExponential):
+        (KJS::numberProtoFuncToPrecision):
+        * kjs/number_object.h:
+        (KJS::NumberInstance::classInfo):
+        (KJS::NumberObjectImp::classInfo):
+        (KJS::NumberObjectImp::):
+        * kjs/object_object.cpp:
+        (KJS::ObjectPrototype::ObjectPrototype):
+        (KJS::objectProtoFuncValueOf):
+        (KJS::objectProtoFuncHasOwnProperty):
+        (KJS::objectProtoFuncIsPrototypeOf):
+        (KJS::objectProtoFuncDefineGetter):
+        (KJS::objectProtoFuncDefineSetter):
+        (KJS::objectProtoFuncLookupGetter):
+        (KJS::objectProtoFuncLookupSetter):
+        (KJS::objectProtoFuncPropertyIsEnumerable):
+        (KJS::objectProtoFuncToLocaleString):
+        (KJS::objectProtoFuncToString):
+        * kjs/object_object.h:
+        * kjs/regexp_object.cpp:
+        (KJS::RegExpPrototype::RegExpPrototype):
+        (KJS::regExpProtoFuncTest):
+        (KJS::regExpProtoFuncExec):
+        (KJS::regExpProtoFuncCompile):
+        (KJS::regExpProtoFuncToString):
+        * kjs/regexp_object.h:
+
+2008-01-16  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej & Darin.
+
+        Fixes Bug 16868: Gmail crash
+          and Bug 16871: Crash when loading apple.com/startpage
+
+        <http://bugs.webkit.org/show_bug.cgi?id=16868>
+        <rdar://problem/5686108>
+
+        <http://bugs.webkit.org/show_bug.cgi?id=16871>
+        <rdar://problem/5686670>
+
+        Adds ActivationImp tear-off for cross-window eval() and fixes an
+        existing garbage collection issue exposed by the ActivationImp tear-off
+        patch (r29425) that can occur when an ExecState's m_callingExec is
+        different than its m_savedExec.
+
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::mark):
+        * kjs/function.cpp:
+        (KJS::GlobalFuncImp::callAsFunction):
+
+2008-01-16  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Oliver.
+
+        Clean up MathObjectImp, it needed a little scrubbing.
+
+        * kjs/math_object.cpp:
+        (KJS::MathObjectImp::MathObjectImp):
+        (KJS::MathObjectImp::getOwnPropertySlot):
+        (KJS::MathObjectImp::getValueProperty):
+        (KJS::mathProtoFuncACos):
+        (KJS::mathProtoFuncASin):
+        (KJS::mathProtoFuncATan):
+        (KJS::mathProtoFuncATan2):
+        (KJS::mathProtoFuncCos):
+        (KJS::mathProtoFuncExp):
+        (KJS::mathProtoFuncLog):
+        (KJS::mathProtoFuncSin):
+        (KJS::mathProtoFuncSqrt):
+        (KJS::mathProtoFuncTan):
+        * kjs/math_object.h:
+        (KJS::MathObjectImp::classInfo):
+        (KJS::MathObjectImp::):
+
+2008-01-16  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Geoffrey Garen.
+
+        Rename Lexer variable bol to atLineStart.
+
+        * kjs/lexer.cpp:
+        (KJS::Lexer::Lexer):
+        (KJS::Lexer::setCode):
+        (KJS::Lexer::nextLine):
+        (KJS::Lexer::lex):
+        * kjs/lexer.h:
+
+2008-01-16  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Geoffrey Garen and Anders Carlsson.
+
+        Remove uses of KJS_PURE_ECMA as we don't ever build with it defined,
+        and we have many features that are not included in the ECMA spec.
+
+        * kjs/lexer.cpp:
+        (KJS::Lexer::Lexer):
+        (KJS::Lexer::setCode):
+        (KJS::Lexer::nextLine):
+        (KJS::Lexer::lex):
+        * kjs/lexer.h:
+        * kjs/string_object.cpp:
+        * kjs/string_object.h:
+
+2008-01-15  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Geoffrey Garen.
+
+        Fix <rdar://problem/5595552> r27608 introduced a 20% increase in JS binary size, 4% increase in WebCore binary size
+
+        - This changes the way JS functions that use Lookup tables are handled.  Instead of using
+          one class per function, which allowed specialization of the virtual callAsFunction
+          method, we now use one class, PrototypeFunction, which takes a pointer to a static
+          function to use as the implementation.  This significantly decreases the binary size
+          of JavaScriptCore (about 145k on an Intel only build) while still keeping some of the
+          speedup r27608 garnered (SunSpider says this is 1.005x as slow, which should leave some
+          wiggle room from the original 1% speedup) and keeps the functions implementations in separate
+          functions to help with optimizations.
+
+        * JavaScriptCore.exp:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/array_object.cpp:
+        (KJS::arrayProtoFuncToString):
+        (KJS::arrayProtoFuncToLocaleString):
+        (KJS::arrayProtoFuncJoin):
+        (KJS::arrayProtoFuncConcat):
+        (KJS::arrayProtoFuncPop):
+        (KJS::arrayProtoFuncPush):
+        (KJS::arrayProtoFuncReverse):
+        (KJS::arrayProtoFuncShift):
+        (KJS::arrayProtoFuncSlice):
+        (KJS::arrayProtoFuncSort):
+        (KJS::arrayProtoFuncSplice):
+        (KJS::arrayProtoFuncUnShift):
+        (KJS::arrayProtoFuncFilter):
+        (KJS::arrayProtoFuncMap):
+        (KJS::arrayProtoFuncEvery):
+        (KJS::arrayProtoFuncForEach):
+        (KJS::arrayProtoFuncSome):
+        (KJS::arrayProtoFuncIndexOf):
+        (KJS::arrayProtoFuncLastIndexOf):
+        * kjs/array_object.h:
+        * kjs/date_object.cpp:
+        (KJS::DatePrototype::getOwnPropertySlot):
+        (KJS::dateProtoFuncToString):
+        (KJS::dateProtoFuncToUTCString):
+        (KJS::dateProtoFuncToDateString):
+        (KJS::dateProtoFuncToTimeString):
+        (KJS::dateProtoFuncToLocaleString):
+        (KJS::dateProtoFuncToLocaleDateString):
+        (KJS::dateProtoFuncToLocaleTimeString):
+        (KJS::dateProtoFuncValueOf):
+        (KJS::dateProtoFuncGetTime):
+        (KJS::dateProtoFuncGetFullYear):
+        (KJS::dateProtoFuncGetUTCFullYear):
+        (KJS::dateProtoFuncToGMTString):
+        (KJS::dateProtoFuncGetMonth):
+        (KJS::dateProtoFuncGetUTCMonth):
+        (KJS::dateProtoFuncGetDate):
+        (KJS::dateProtoFuncGetUTCDate):
+        (KJS::dateProtoFuncGetDay):
+        (KJS::dateProtoFuncGetUTCDay):
+        (KJS::dateProtoFuncGetHours):
+        (KJS::dateProtoFuncGetUTCHours):
+        (KJS::dateProtoFuncGetMinutes):
+        (KJS::dateProtoFuncGetUTCMinutes):
+        (KJS::dateProtoFuncGetSeconds):
+        (KJS::dateProtoFuncGetUTCSeconds):
+        (KJS::dateProtoFuncGetMilliSeconds):
+        (KJS::dateProtoFuncGetUTCMilliseconds):
+        (KJS::dateProtoFuncGetTimezoneOffset):
+        (KJS::dateProtoFuncSetTime):
+        (KJS::dateProtoFuncSetMilliSeconds):
+        (KJS::dateProtoFuncSetUTCMilliseconds):
+        (KJS::dateProtoFuncSetSeconds):
+        (KJS::dateProtoFuncSetUTCSeconds):
+        (KJS::dateProtoFuncSetMinutes):
+        (KJS::dateProtoFuncSetUTCMinutes):
+        (KJS::dateProtoFuncSetHours):
+        (KJS::dateProtoFuncSetUTCHours):
+        (KJS::dateProtoFuncSetDate):
+        (KJS::dateProtoFuncSetUTCDate):
+        (KJS::dateProtoFuncSetMonth):
+        (KJS::dateProtoFuncSetUTCMonth):
+        (KJS::dateProtoFuncSetFullYear):
+        (KJS::dateProtoFuncSetUTCFullYear):
+        (KJS::dateProtoFuncSetYear):
+        (KJS::dateProtoFuncGetYear):
+        * kjs/date_object.h:
+        * kjs/function.cpp:
+        (KJS::PrototypeFunction::PrototypeFunction):
+        (KJS::PrototypeFunction::callAsFunction):
+        * kjs/function.h:
+        * kjs/lookup.h:
+        (KJS::HashEntry::):
+        (KJS::staticFunctionGetter):
+        * kjs/math_object.cpp:
+        (KJS::mathProtoFuncAbs):
+        (KJS::mathProtoFuncACos):
+        (KJS::mathProtoFuncASin):
+        (KJS::mathProtoFuncATan):
+        (KJS::mathProtoFuncATan2):
+        (KJS::mathProtoFuncCeil):
+        (KJS::mathProtoFuncCos):
+        (KJS::mathProtoFuncExp):
+        (KJS::mathProtoFuncFloor):
+        (KJS::mathProtoFuncLog):
+        (KJS::mathProtoFuncMax):
+        (KJS::mathProtoFuncMin):
+        (KJS::mathProtoFuncPow):
+        (KJS::mathProtoFuncRandom):
+        (KJS::mathProtoFuncRound):
+        (KJS::mathProtoFuncSin):
+        (KJS::mathProtoFuncSqrt):
+        (KJS::mathProtoFuncTan):
+        * kjs/math_object.h:
+        * kjs/string_object.cpp:
+        (KJS::stringProtoFuncToString):
+        (KJS::stringProtoFuncValueOf):
+        (KJS::stringProtoFuncCharAt):
+        (KJS::stringProtoFuncCharCodeAt):
+        (KJS::stringProtoFuncConcat):
+        (KJS::stringProtoFuncIndexOf):
+        (KJS::stringProtoFuncLastIndexOf):
+        (KJS::stringProtoFuncMatch):
+        (KJS::stringProtoFuncSearch):
+        (KJS::stringProtoFuncReplace):
+        (KJS::stringProtoFuncSlice):
+        (KJS::stringProtoFuncSplit):
+        (KJS::stringProtoFuncSubstr):
+        (KJS::stringProtoFuncSubstring):
+        (KJS::stringProtoFuncToLowerCase):
+        (KJS::stringProtoFuncToUpperCase):
+        (KJS::stringProtoFuncToLocaleLowerCase):
+        (KJS::stringProtoFuncToLocaleUpperCase):
+        (KJS::stringProtoFuncLocaleCompare):
+        (KJS::stringProtoFuncBig):
+        (KJS::stringProtoFuncSmall):
+        (KJS::stringProtoFuncBlink):
+        (KJS::stringProtoFuncBold):
+        (KJS::stringProtoFuncFixed):
+        (KJS::stringProtoFuncItalics):
+        (KJS::stringProtoFuncStrike):
+        (KJS::stringProtoFuncSub):
+        (KJS::stringProtoFuncSup):
+        (KJS::stringProtoFuncFontcolor):
+        (KJS::stringProtoFuncFontsize):
+        (KJS::stringProtoFuncAnchor):
+        (KJS::stringProtoFuncLink):
+        * kjs/string_object.h:
+
+2008-01-15  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Adam Roben.
+        
+        Some tweaks to our headerdoc, suggested by David Gatwood on the docs
+        team.
+
+        * API/JSBase.h:
+        * API/JSObjectRef.h:
+        * API/JSStringRef.h:
+        * API/JSValueRef.h:
+
+2008-01-15  Alp Toker  <alp@atoker.com>
+
+        Rubber-stamped by Anders.
+
+        Make the HTTP backend configurable in the GTK+ port. curl is currently
+        the only option.
+
+        * wtf/Platform.h: Don't hard-code WTF_USE_CURL for GTK
+
+2008-01-15  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Beth Dakin.
+
+        Remove unneeded variable.
+
+        * kjs/string_object.cpp:
+        (KJS::StringProtoFuncSubstr::callAsFunction):
+
+2008-01-14  Steve Falkenburg  <sfalken@apple.com>
+
+        Use shared vsprops for most vcproj properties.
+        
+        Reviewed by Darin.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add missing Debug_Internal config.
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Add missing Debug_Internal config.
+        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
+
+2008-01-14  Adam Roben  <aroben@apple.com>
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
+        some headers that were missing from the vcproj so their contents will
+        be included in Find in Files.
+
+2008-01-14  Adam Roben  <aroben@apple.com>
+
+        Fix Bug 16871: Crash when loading apple.com/startpage
+
+        <http://bugs.webkit.org/show_bug.cgi?id=16871>
+        <rdar://problem/5686670>
+
+        Patch written by Darin, reviewed by me.
+
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::mark): Call ActivationImp::markChildren if our
+        m_activation is on the stack. This is what ScopeChain::mark also does,
+        but apparently in some cases it's possible for an ExecState's
+        ActivationImp to not be in any ScopeChain.
+
+2008-01-14  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Oliver.
+
+        -<rdar://problem/5622667> REGRESSION (Leopard-ToT): Endless loading loop
+        trying to view techreport.com comments
+        - We need to set values in the map, because if they are already in the
+        map they will not be reset when we use add().
+
+        * kjs/array_instance.cpp:
+        (KJS::ArrayInstance::put):
+
+2008-01-14  Darin Adler  <darin@apple.com>
+
+        Reviewed by Adam.
+
+        - re-speed-up the page load test (my StringImpl change slowed it down)
+
+        * wtf/RefCounted.h:
+        (WTF::RefCounted::RefCounted): Allow derived classes to start with a reference
+        count other than 0. Eventually everyone will want to start with a 1. This is a
+        staged change. For now, there's a default of 0, and you can specify 1. Later,
+        there will be no default and everyone will have to specify. And then later, there
+        will be a default of 1. Eventually, we can take away even the option of starting
+        with 0!
+
+        * wtf/Vector.h:
+        (WTF::Vector::Vector): Sped up creation of non-empty vectors by removing the
+        overhead of first constructing something empty and then calling resize.
+        (WTF::Vector::clear): Sped up the common case of calling clear on an empty
+        vector by adding a check for that case.
+        (WTF::Vector::releaseBuffer): Marked this function inline and removed a branch
+        in the case of vectors with no inline capacity (normal vectors) by leaving out
+        the code to copy the inline buffer in that case.
+
+2008-01-14  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by David Kilzer.
+
+        http://bugs.webkit.org/show_bug.cgi?id=16787
+        array.splice() with 1 element not working
+
+        Test: fast/js/array-splice.html
+
+        * kjs/array_object.cpp:
+        (KJS::ArrayProtoFuncSplice::callAsFunction): Implement this Mozilla extension, and fix
+        some other edge cases.
+
+2008-01-13  Steve Falkenburg  <sfalken@apple.com>
+
+        Share common files across projects.
+        
+        Unify vsprops files
+        Debug:          common.vsprops, debug.vsprops
+        Debug_Internal: common.vsprops, debug.vsprops, debug_internal.vsprops
+        Release:        common.vsprops, release.vsprops
+        
+        Shared properties can go into common.vsprops, shared debug settings can go into debug.vsprops.
+        debug_internal.vsprops will be mostly empty except for file path prefix modifiers.
+
+        Reviewed by Adam Roben.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+        * JavaScriptCore.vcproj/debug.vsprops: Removed.
+        * JavaScriptCore.vcproj/debug_internal.vsprops: Removed.
+        * JavaScriptCore.vcproj/release.vsprops: Removed.
+        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
+
+2008-01-13  Marius Bugge Monsen  <mbm@trolltech.com>
+
+        Contributions and review by Adriaan de Groot,
+        Simon Hausmann, Eric Seidel, and Darin Adler.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=16590
+          Compilation fixes for Solaris.
+
+        * kjs/DateMath.h:
+        (KJS::GregorianDateTime::GregorianDateTime): Use the WIN_OS code path
+        for SOLARIS too, presumably because Solaris also lacks the tm_gtoff and tm_zone
+        fields.
+        (KJS::GregorianDateTime::operator tm): Ditto.
+
+        * kjs/collector.cpp:
+        (KJS::currentThreadStackBase): Use thr_stksegment on Solaris.
+
+        * wtf/MathExtras.h:
+        (isfinite): Implement for Solaris.
+        (isinf): Ditto.
+        (signbit): Ditto. But this one is wrong, so I added a FIXME.
+
+        * wtf/Platform.h: Define PLATFORM(SOLARIS) when "sun" or "__sun" is defined.
+
+2008-01-13  Michael Goddard  <michael.goddard@trolltech.com>
+
+        Reviewed by Anders Carlsson.
+
+        Add binding language type to Instance.
+        Allows runtime determination of the type of an
+        Instance, to allow safe casting.  Doesn't actually
+        add any safe casting yet, though.
+
+        Add a helper function to get an Instance from a JSObject*.
+        Given an object and the expected binding language, see if
+        the JSObject actually wraps an Instance of the given type
+        and return it.  Otherwise return 0.
+
+        Move RuntimeObjectImp creations into Instance.
+        Make the ctor protected, and Instance a friend class, so
+        that all creation of RuntimeObjectImps goes through
+        one place.
+
+        Remove copy ctor/assignment operator for QtInstance.
+        Instance itself is Noncopyable, so QtInstance doesn't
+        need to have these.
+
+        Add caching for QtInstance and associated RuntimeObjectImps.
+        Push any dealings with QtLanguage bindings into QtInstance,
+        and cache them there, rather than in the Instance layer.  Add
+        a QtRuntimeObjectImp to help with caching.
+
+        * JavaScriptCore.exp:
+        * bindings/c/c_instance.h:
+        * bindings/jni/jni_instance.h:
+        * bindings/objc/objc_instance.h:
+        * bindings/qt/qt_instance.cpp:
+        (KJS::Bindings::QtRuntimeObjectImp::QtRuntimeObjectImp):
+        (KJS::Bindings::QtRuntimeObjectImp::~QtRuntimeObjectImp):
+        (KJS::Bindings::QtRuntimeObjectImp::invalidate):
+        (KJS::Bindings::QtRuntimeObjectImp::removeFromCache):
+        (KJS::Bindings::QtInstance::QtInstance):
+        (KJS::Bindings::QtInstance::~QtInstance):
+        (KJS::Bindings::QtInstance::getQtInstance):
+        (KJS::Bindings::QtInstance::getRuntimeObject):
+        * bindings/qt/qt_instance.h:
+        (KJS::Bindings::QtInstance::getBindingLanguage):
+        * bindings/runtime.cpp:
+        (KJS::Bindings::Instance::createBindingForLanguageInstance):
+        (KJS::Bindings::Instance::createRuntimeObject):
+        (KJS::Bindings::Instance::getInstance):
+        * bindings/runtime.h:
+        * bindings/runtime_object.h:
+        (KJS::RuntimeObjectImp::getInternalInstance):
+
+2008-01-12  Alp Toker  <alp@atoker.com>
+
+        Reviewed by Mark Rowe.
+
+        Hide non-public symbols in GTK+/autotools release builds.
+
+        * GNUmakefile.am:
+
+2008-01-12  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Mark Rowe.
+
+        Fix http://bugs.webkit.org/show_bug.cgi?id=16852
+        Fixes leaking of ActivationStackNode objects.
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::deleteActivationStack):
+        (KJS::JSGlobalObject::~JSGlobalObject):
+        (KJS::JSGlobalObject::init):
+        (KJS::JSGlobalObject::reset):
+        * kjs/JSGlobalObject.h:
+
+2008-01-12  Darin Adler  <darin@apple.com>
+
+        - try to fix Qt Windows build
+
+        * pcre/dftables: Remove reliance on the list form of Perl pipes.
+
+2008-01-12  Darin Adler  <darin@apple.com>
+
+        - try to fix Qt build
+
+        * kjs/function.cpp: Added include of scope_chain_mark.h.
+        * kjs/scope_chain_mark.h: Added multiple-include guards.
+
+2008-01-12  Mark Rowe  <mrowe@apple.com>
+
+        Another Windows build fix.
+
+        * kjs/Activation.h:
+
+2008-01-12  Mark Rowe  <mrowe@apple.com>
+
+        Attempted Windows build fix.  Use struct consistently when forward-declaring
+        ActivationStackNode and StackActivation.
+
+        * kjs/Activation.h:
+        * kjs/JSGlobalObject.h:
+
+2008-01-12  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Fixes a problem with the ActivationImp tear-off patch (r29425) where
+        some of the calls to JSGlobalObject::tearOffActivation() were using
+        the wrong test to determine whether it should leave a relic behind.
+
+        * kjs/function.cpp:
+        (KJS::FunctionImp::argumentsGetter):
+        (KJS::ActivationImp::getOwnPropertySlot):
+
+2008-01-11  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Fixed <rdar://problem/5665251> REGRESSION (r28880-r28886): Global
+        variable access (16644)
+        
+        This bug was caused by var declarations shadowing built-in properties of
+        the global object.
+        
+        To match Firefox, we've decided that var declarations will never shadow
+        built-in properties of the global object or its prototypes. We used to
+        behave more like IE, which allows shadowing, but walking that line got
+        us into trouble with websites that sent us down the Firefox codepath.
+
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::symbolTableGet): New code to support calling
+        hasProperty before the variable object is fully initialized (so you
+        can call it during initialization).
+
+        * kjs/nodes.cpp:.
+        (KJS::ProgramNode::initializeSymbolTable): Always do a full hasProperty
+        check when looking for duplicates, not getDirect, since it only checks
+        the property map, and not hasOwnProperty, since it doesn't check
+        prototypes.
+        (KJS::EvalNode::processDeclarations): ditto
+
+        * kjs/property_slot.h:
+        (KJS::PropertySlot::ungettableGetter): Best function name evar.
+
+2008-01-11  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Maciej.
+
+        Optimized ActivationImp allocation, so that activation records are now
+        first allocated on an explicitly managed stack and only heap allocated
+        when necessary. Roughly a 5% improvement on SunSpider, and a larger
+        improvement on benchmarks that use more function calls.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/Activation.h: Added.
+        (KJS::ActivationImp::ActivationData::ActivationData):
+        (KJS::ActivationImp::ActivationImp):
+        (KJS::ActivationImp::classInfo):
+        (KJS::ActivationImp::isActivationObject):
+        (KJS::ActivationImp::isOnStack):
+        (KJS::ActivationImp::d):
+        (KJS::StackActivation::StackActivation):
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::ExecState):
+        (KJS::ExecState::~ExecState):
+        * kjs/ExecState.h:
+        (KJS::ExecState::replaceScopeChainTop):
+        (KJS::ExecState::setActivationObject):
+        (KJS::ExecState::setLocalStorage):
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::reset):
+        (KJS::JSGlobalObject::pushActivation):
+        (KJS::JSGlobalObject::checkActivationCount):
+        (KJS::JSGlobalObject::popActivationHelper):
+        (KJS::JSGlobalObject::popActivation):
+        (KJS::JSGlobalObject::tearOffActivation):
+        * kjs/JSGlobalObject.h:
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::JSVariableObjectData::JSVariableObjectData):
+        (KJS::JSVariableObject::JSVariableObject):
+        * kjs/function.cpp:
+        (KJS::FunctionImp::argumentsGetter):
+        (KJS::ActivationImp::ActivationImp):
+        (KJS::ActivationImp::~ActivationImp):
+        (KJS::ActivationImp::init):
+        (KJS::ActivationImp::getOwnPropertySlot):
+        (KJS::ActivationImp::markHelper):
+        (KJS::ActivationImp::mark):
+        (KJS::ActivationImp::ActivationData::ActivationData):
+        (KJS::GlobalFuncImp::callAsFunction):
+        * kjs/function.h:
+        * kjs/nodes.cpp:
+        (KJS::PostIncResolveNode::evaluate):
+        (KJS::PostDecResolveNode::evaluate):
+        (KJS::PreIncResolveNode::evaluate):
+        (KJS::PreDecResolveNode::evaluate):
+        (KJS::ReadModifyResolveNode::evaluate):
+        (KJS::AssignResolveNode::evaluate):
+        (KJS::WithNode::execute):
+        (KJS::TryNode::execute):
+        (KJS::FunctionBodyNode::processDeclarations):
+        (KJS::FuncExprNode::evaluate):
+        * kjs/object.h:
+        * kjs/scope_chain.h:
+        (KJS::ScopeChain::replace):
+        * kjs/scope_chain_mark.h: Added.
+        (KJS::ScopeChain::mark):
+
+2008-01-11  Simon Hausmann  <hausmann@webkit.org>
+
+        Reviewed by Mark Rowe.
+
+        Fix the (clean) qmake build. For generating chartables.c we don't
+        depend on a separate input source file anymore, the dftables perl
+        script is enough. So use that instead as value for the .input
+        variable, to ensure that qmake also generates a rule to call dftables.
+
+        * pcre/pcre.pri:
+
+2008-01-10  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by John Sullivan.
+
+        Fixed some world leak reports:
+        * <rdar://problem/5669436> PLT complains about world leak of 1 JavaScript
+        Interpreter after running cvs-base suite
+
+        * <rdar://problem/5669423> PLT complains about world leak if browser
+        window is open when PLT starts
+        
+        * kjs/collector.h: Added the ability to distinguish between global
+        objects and GC-protected global objects, since we only consider the
+        latter to be world leaks.
+        * kjs/collector.cpp:
+
+2008-01-11  Mark Rowe  <mrowe@apple.com>
+
+        Silence qmake warning about ctgen lacking input.
+
+        Rubber-stamped by Alp Toker.
+
+        * pcre/pcre.pri:
+
+2008-01-10  David Kilzer  <ddkilzer@apple.com>
+
+        dftables should be rewritten as a script
+
+        <http://bugs.webkit.org/show_bug.cgi?id=16818>
+        <rdar://problem/5681463>
+
+        Reviewed by Darin.
+
+        Rewrote the dftables utility in Perl.  Attempted to switch all
+        build systems to call the script directly instead of building
+        a binary first.  Only the Xcode build was able to be tested.
+
+        * DerivedSources.make: Added pcre directory to VPATH and changed
+        to invoke dftables directly.
+        * GNUmakefile.am: Removed build information and changed to invoke
+        dftables directly.
+        * JavaScriptCore.vcproj/JavaScriptCore.sln: Removed reference to
+        dftables project.
+        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Ditto.
+        * JavaScriptCore.vcproj/dftables: Removed.
+        * JavaScriptCore.vcproj/dftables/dftables.vcproj: Removed.
+        * JavaScriptCore.xcodeproj/project.pbxproj: Removed dftables target.
+        * jscore.bkl: Removed dftables executable definition.
+        * pcre/dftables: Copied from JavaScriptCore/pcre/dftables.cpp.
+        * pcre/dftables.cpp: Removed.
+        * pcre/dftables.pro: Removed.
+        * pcre/pcre.pri: Removed references to dftables.cpp and changed to
+        invoke dftables directly.
+
+2008-01-10  Dan Bernstein  <mitz@apple.com>
+
+        Reviewed by Darin Adler.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=16782
+          <rdar://problem/5675331> REGRESSION(r29266): Reproducible crash in fast/replaced/image-map.html
+
+        The crash resulted from a native object (DumpRenderTree's
+        EventSender) causing its wrapper to be invalidated (by clicking a
+        link that replaced the document in the window) and consequently
+        deallocated. The fix is to use RefPtrs to protect the native object
+        from deletion by self-invalidation.
+
+        * bindings/runtime_method.cpp:
+        (RuntimeMethod::callAsFunction):
+        * bindings/runtime_object.cpp:
+        (RuntimeObjectImp::fallbackObjectGetter):
+        (RuntimeObjectImp::fieldGetter):
+        (RuntimeObjectImp::methodGetter):
+        (RuntimeObjectImp::put):
+        (RuntimeObjectImp::defaultValue):
+        (RuntimeObjectImp::callAsFunction):
+
+2008-01-07  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        Turn testIsInteger assertions into compile-time asserts and move them into HashTraits.h
+        where possible.
+
+        * kjs/testkjs.cpp:
+        * wtf/HashTraits.h:
+
+2008-01-07  Nikolas Zimmermann  <zimmermann@kde.org>
+
+        Reviewed by Mark.
+
+        Enable SVG_FONTS by default.
+
+        * Configurations/JavaScriptCore.xcconfig:
+
+2008-01-07  Darin Adler  <darin@apple.com>
+
+        Rubber stamped by David Kilzer.
+
+        - get rid of empty fpconst.cpp
+
+        * GNUmakefile.am: Remove fpconst.cpp.
+        * JavaScriptCore.pri: Ditto.
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto.
+        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
+        * JavaScriptCoreSources.bkl: Ditto.
+
+        * kjs/fpconst.cpp: Removed.
+
+2008-01-07  Darin Adler  <darin@apple.com>
+
+        Reviewed by David Kilzer.
+
+        - fix alignment problem with NaN and Inf globals
+
+        * kjs/fpconst.cpp: Move the contents of this file from here back to
+        value.cpp. The reason this was in a separate file is that the DARWIN
+        version of this used a declaration of the globals with a different
+        type to avoid creating "init routines". That's no longer necessary for
+        DARWIN and was never necessary for the non-DARWIN code path.
+        To make this patch easy to merge, I didn't actually delete this file
+        yet. We'll do that in a separate changeset.
+
+        * kjs/value.cpp: If C99's NAN and INFINITY are present, then use them,
+        othrewise use the union trick from fpconst.cpp. I think it would be
+        better to eliminate KJS::NaN and KJS::Inf and just use NAN and INFINITY
+        directly or std::numeric_limits<double>::quiet_nan() and
+        std::numeric_limits<double>::infinity(). But when I tried that, it
+        slowed down SunSpider. Someone else could do that cleanup if they
+        could do it without slowing down the engine.
+
+2008-01-07  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added
+        JavaScript.h to the project.
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make:
+        Copy JavaScript.h to WEBKITOUTPUTDIR.
+
+2008-01-07  Timothy Hatcher  <timothy@apple.com>
+
+        Reviewed by Darin.
+
+        Fix Mac build.
+
+        * API/JSNode.c:
+        * API/JSNode.h:
+        * API/JSNodeList.c:
+        * API/JSNodeList.h:
+        * API/JavaScript.h:
+        * API/JavaScriptCore.h:
+        * API/minidom.c:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2008-01-07  Alp Toker  <alp@atoker.com>
+
+        Reviewed by Darin.
+
+        http://bugs.webkit.org/show_bug.cgi?id=16029
+        JavaScriptCore.h is not suitable for platforms other than Mac OS X
+
+        Introduce a new JavaScriptCore/JavaScript.h public API header. This
+        should be used by all new portable code using the JavaScriptCore API.
+
+        JavaScriptCore/JavaScriptCore.h will remain for compatibility with
+        existing applications that depend on it including JSStringRefCF.h
+        which isn't portable.
+
+        Also add minidom to the GTK+/autotools build since we can now support
+        it on all platforms.
+
+        * API/JSNode.h:
+        * API/JSNodeList.h:
+        * API/JavaScript.h: Added.
+        * API/JavaScriptCore.h:
+        * ForwardingHeaders/JavaScriptCore/JavaScript.h: Added.
+        * GNUmakefile.am:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2008-01-06  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Abstract all DateObject.set* functions in preparation for fixing:
+        http://bugs.webkit.org/show_bug.cgi?id=16753
+        
+        SunSpider had random changes here and there but was overall a wash.
+
+        * kjs/date_object.cpp:
+        (KJS::fillStructuresUsingTimeArgs):
+        (KJS::setNewValueFromTimeArgs):
+        (KJS::setNewValueFromDateArgs):
+        (KJS::DateProtoFuncSetMilliSeconds::callAsFunction):
+        (KJS::DateProtoFuncSetUTCMilliseconds::callAsFunction):
+        (KJS::DateProtoFuncSetSeconds::callAsFunction):
+        (KJS::DateProtoFuncSetUTCSeconds::callAsFunction):
+        (KJS::DateProtoFuncSetMinutes::callAsFunction):
+        (KJS::DateProtoFuncSetUTCMinutes::callAsFunction):
+        (KJS::DateProtoFuncSetHours::callAsFunction):
+        (KJS::DateProtoFuncSetUTCHours::callAsFunction):
+        (KJS::DateProtoFuncSetDate::callAsFunction):
+        (KJS::DateProtoFuncSetUTCDate::callAsFunction):
+        (KJS::DateProtoFuncSetMonth::callAsFunction):
+        (KJS::DateProtoFuncSetUTCMonth::callAsFunction):
+        (KJS::DateProtoFuncSetFullYear::callAsFunction):
+        (KJS::DateProtoFuncSetUTCFullYear::callAsFunction):
+
+2008-01-06  Nikolas Zimmermann  <zimmermann@kde.org>
+
+        Reviewed by Dan.
+
+        Add new helper function isArabicChar - SVG Fonts support needs it.
+
+        * wtf/unicode/icu/UnicodeIcu.h:
+        (WTF::Unicode::isArabicChar):
+        * wtf/unicode/qt4/UnicodeQt4.h:
+        (WTF::Unicode::isArabicChar):
+
+2008-01-06  Alp Toker  <alp@atoker.com>
+
+        Reviewed by Mark Rowe.
+
+        Use $(EXEEXT) to account for the .exe extension in the GTK+ Windows
+        build. (This is already done correctly in DerivedSources.make.) Issue
+        noticed by Mikkel when building in Cygwin.
+
+        Add a missing slash. This was a hack from the qmake build system that
+        isn't necessary with autotools.
+
+        * GNUmakefile.am:
+
+2008-01-05  Darin Adler  <darin@apple.com>
+
+        * API/JSRetainPtr.h: One more file that needed the change below.
+
+2008-01-05  Darin Adler  <darin@apple.com>
+
+        * wtf/OwnPtr.h: OwnPtr needs the same fix as RefPtr below.
+
+2008-01-05  Adam Roben  <aroben@apple.com>
+
+        Build fix.
+
+        Reviewed by Maciej.
+
+        * wtf/RetainPtr.h: Use PtrType instead of T* because of the
+        RemovePointer magic.
+
+2008-01-05  Darin Adler  <darin@apple.com>
+
+        Rubber stamped by Maciej Stachowiak.
+
+        - cut down own PIC branches by using a pointer-to-member-data instead of a
+          pointer-to-member-function in WTF smart pointers
+
+        * wtf/OwnArrayPtr.h:
+        * wtf/OwnPtr.h:
+        * wtf/PassRefPtr.h:
+        * wtf/RefPtr.h:
+        * wtf/RetainPtr.h:
+        Use a pointer to the m_ptr member instead of the get member.
+        The GCC compiler generates better code for this idiom.
+
+2008-01-05  Henry Mason  <hmason@mac.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        http://bugs.webkit.org/show_bug.cgi?id=16738
+        Bug 16738: Collector block offset could be stored as an cell offset instead of a byte offset
+
+        Gives a 0.4% SunSpider boost and prettier code.
+
+        * kjs/collector.cpp: Switched to cell offsets from byte offsets
+        (KJS::Collector::heapAllocate):
+        (KJS::Collector::sweep):
+
+2008-01-04  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        Have the two malloc zones print useful diagnostics if their free method are unexpectedly invoked.
+        Due to <rdar://problem/5671357> this can happen if an application attempts to free a pointer that
+        was not allocated by any registered malloc zone on the system.
+
+        * kjs/CollectorHeapIntrospector.h:
+        * wtf/FastMalloc.cpp:
+
+2008-01-04  Alp Toker  <alp@atoker.com>
+
+        GTK+ autotools build fix. Terminate empty rules.
+
+        * GNUmakefile.am:
+
+2008-01-03  Simon Hausmann  <hausmann@webkit.org>
+
+        Reviewed by Mark Rowe.
+
+        Fix compilation with gcc 4.3: limits.h is needed for INT_MAX.
+
+        * pcre/pcre_exec.cpp:
+
+2008-01-03  Darin Adler  <darin@apple.com>
+
+        * tests/mozilla/expected.html: The fix for bug 16696 also fixed a test
+        case, ecma_3/RegExp/perlstress-002.js, so updated results to expect
+        that test to succeed.
+
+2008-01-02  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=16696
+          JSCRE fails fails to match Acid3 regexp
+
+        Test: fast/regex/early-acid3-86.html
+
+        The problem was with the cutoff point between backreferences and octal
+        escape sequences. We need to determine the cutoff point by counting the
+        total number of capturing brackets, which requires an extra pass through
+        the expression when compiling it.
+
+        * pcre/pcre_compile.cpp:
+        (CompileData::CompileData): Added numCapturingBrackets. Removed some
+        unused fields.
+        (compileBranch): Use numCapturingBrackets when calling checkEscape.
+        (calculateCompiledPatternLength): Use numCapturingBrackets when calling
+        checkEscape, and also store the bracket count at the end of the compile.
+        (jsRegExpCompile): Call calculateCompiledPatternLength twice -- once to
+        count the number of brackets and then a second time to calculate the length.
+
+2008-01-02  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=16696
+          JSCRE fails fails to match Acid3 regexp
+
+        Test: fast/regex/early-acid3-86.html
+
+        The problem was with the cutoff point between backreferences and octal
+        escape sequences. We need to determine the cutoff point by counting the
+        total number of capturing brackets, which requires an extra pass through
+        the expression when compiling it.
+
+        * pcre/pcre_compile.cpp:
+        (CompileData::CompileData): Added numCapturingBrackets. Removed some
+        unused fields.
+        (compileBranch): Use numCapturingBrackets when calling checkEscape.
+        (calculateCompiledPatternLength): Use numCapturingBrackets when calling
+        checkEscape, and also store the bracket count at the end of the compile.
+        (jsRegExpCompile): Call calculateCompiledPatternLength twice -- once to
+        count the number of brackets and then a second time to calculate the length.
+
+2008-01-02  David Kilzer <ddkilzer@webkit.org>
+
+        Reviewed and landed by Darin.
+
+        * kjs/nodes.cpp:
+        (KJS::DoWhileNode::execute): Added a missing return.
+
+2008-01-02  Darin Adler  <darin@apple.com>
+
+        - try to fix Qt build
+
+        * wtf/unicode/qt4/UnicodeQt4.h:
+        (WTF::Unicode::foldCase): Add some missing const.
+
+2008-01-02  Alice Liu  <alice.liu@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        need to export ASCIICType.h for use in DRT
+
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+        * wtf/ASCIICType.h:
+        (WTF::isASCIIUpper):
+
+2008-01-02  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Beth Dakin.
+
+        Cleanup error_object.h/cpp.
+
+        * kjs/JSGlobalObject.cpp:
+        (KJS::JSGlobalObject::reset):
+        * kjs/error_object.cpp:
+        (KJS::ErrorInstance::ErrorInstance):
+        (KJS::ErrorPrototype::ErrorPrototype):
+        (KJS::ErrorProtoFuncToString::ErrorProtoFuncToString):
+        (KJS::ErrorProtoFuncToString::callAsFunction):
+        (KJS::ErrorObjectImp::ErrorObjectImp):
+        (KJS::ErrorObjectImp::implementsConstruct):
+        (KJS::ErrorObjectImp::construct):
+        (KJS::ErrorObjectImp::callAsFunction):
+        (KJS::NativeErrorPrototype::NativeErrorPrototype):
+        (KJS::NativeErrorImp::NativeErrorImp):
+        (KJS::NativeErrorImp::implementsConstruct):
+        (KJS::NativeErrorImp::construct):
+        (KJS::NativeErrorImp::callAsFunction):
+        (KJS::NativeErrorImp::mark):
+        * kjs/error_object.h:
+        (KJS::ErrorInstance::classInfo):
+        (KJS::NativeErrorImp::classInfo):
+
+2008-01-02  Mark Rowe  <mrowe@apple.com>
+
+        Rubber-stamped by Alp Toker.
+
+        * GNUmakefile.am: Add missing dependency on grammar.y.
+
+2008-01-01  Darin Adler  <darin@apple.com>
+
+        Reviewed by Eric.
+
+        - fix for http://bugs.webkit.org/show_bug.cgi?id=16695
+          JSC allows non-identifier codepoints in identifiers (affects Acid3)
+
+        Test: fast/js/kde/parse.html
+
+        * kjs/lexer.cpp:
+        (KJS::Lexer::lex): Added additional states to distinguish Unicode escapes at the
+        start of identifiers from ones inside identifiers. Rejected characters that don't pass
+        the isIdentStart and isIdentPart tests.
+        (KJS::Lexer::convertUnicode): Removed incorrect FIXME comment.
+
+        * kjs/lexer.h: Added new states to distinguish \u escapes at the start of identifiers
+        from \u escapes inside identifiers.
+
+2008-01-01  Darin Adler  <darin@apple.com>
+
+        - rolled scope chain optimization out; it was breaking the world
+
+2008-01-01  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=16685
+          eliminate List::empty() to cut down on PIC branches
+
+        Also included one other speed-up -- remove the call to reserveCapacity from
+        FunctionBodyNode::processDeclarations in all but the most unusual cases.
+
+        Together these make SunSpider 1.016x as fast.
+
+        * JavaScriptCore.exp: Updated.
+        * kjs/ExecState.cpp:
+        (KJS::globalEmptyList): Added. Called only when creating global ExecState
+        instances.
+        (KJS::ExecState::ExecState): Broke constructor up into three separate functions,
+        for the three separate node types. Also went through each of the three and
+        streamlined as much as possible, removing dead code. This prevents us from having
+        to access the global in the function body version of the constructor.
+
+        * kjs/ExecState.h: Added emptyList(). Replaced the constructor with a set of
+        three that are specific to the different node types that can create new execution
+        state objects.
+
+        * kjs/array_object.cpp:
+        (KJS::ArrayProtoFuncToLocaleString::callAsFunction): Use exec->emptyList() instead
+        of List::empty().
+        (KJS::ArrayProtoFuncConcat::callAsFunction): Ditto.
+        (KJS::ArrayProtoFuncSlice::callAsFunction): Ditto.
+        (KJS::ArrayProtoFuncSplice::callAsFunction): Ditto.
+        (KJS::ArrayProtoFuncFilter::callAsFunction): Ditto.
+        * kjs/function.cpp:
+        (KJS::FunctionImp::callAsFunction): Updated to call new ExecState constructor.
+        (KJS::GlobalFuncImp::callAsFunction): Ditto (for eval).
+        * kjs/function_object.cpp:
+        (FunctionObjectImp::construct): Use exec->emptyList() instead of List::empty().
+
+        * kjs/list.cpp: Removed List::empty.
+        * kjs/list.h: Ditto.
+
+        * kjs/nodes.cpp:
+        (KJS::ElementNode::evaluate): Use exec->emptyList() instead of List::empty().
+        (KJS::ArrayNode::evaluate): Ditto.
+        (KJS::ObjectLiteralNode::evaluate): Ditto.
+        (KJS::PropertyListNode::evaluate): Ditto.
+        (KJS::FunctionBodyNode::processDeclarations): Another speed-up. Check the capacity
+        before calling reserveCapacity, because it doesn't get inlined the local storage
+        vector is almost always big enough -- saving the function call overhead is a big
+        deal.
+        (KJS::FuncDeclNode::makeFunction): Use exec->emptyList() instead of List::empty().
+        (KJS::FuncExprNode::evaluate): Ditto.
+        * kjs/object.cpp:
+        (KJS::tryGetAndCallProperty): Ditto.
+        * kjs/property_slot.cpp:
+        (KJS::PropertySlot::functionGetter): Ditto.
+        * kjs/string_object.cpp:
+        (KJS::StringProtoFuncSplit::callAsFunction): Ditto.
+
+2008-01-01  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=16648
+          REGRESSION (r28165): Yuku.com navigation prints "jsRegExpExecute failed with result -2"
+          <rdar://problem/5646486> REGRESSION (r28165): Layout test fast/regex/test1 fails intermittently
+
+        Fixes 34 failing test cases in the fast/regex/test1.html test.
+
+        Restored the stack which prevents infinite loops for brackets that match the empty
+        string; it had been removed as an optimization.
+
+        Unfortunately, restoring this stack causes the regular expression test in SunSpider
+        to be 1.095x as slow and the overall test to be 1.004x as slow. Maybe we can find
+        a correct optimization to restore the speed!
+
+        It's possible the original change was on the right track but just off by one.
+
+        * pcre/pcre_exec.cpp: Add back eptrblock, but name it BracketChainNode.
+        (MatchStack::pushNewFrame): Add back the logic needed here.
+        (startNewGroup): Ditto.
+        (match): Ditto.
+
+2008-01-01  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=16683
+          speed up function calls by making ScopeChain::push cheaper
+
+        This gives a 1.019x speedup on SunSpider.
+
+        After doing this, I realized this probably will be obsolete when the optimization
+        to avoid creating an activation object is done. When we do that one we should check
+        if rolling this out will speed things up, since this does add overhead at the time
+        you copy the scope chain.
+
+        * kjs/object.h: Removed the ScopeChain::release function. It was
+        marked inline, and called in exactly one place, so moved it there.
+        No idea why it was in this header file!
+
+        * kjs/scope_chain.cpp: Removed the overload of the ScopeChain::push
+        function that takes another ScopeChain. It was unused. I think we used
+        it over in WebCore at one point, but not any more.
+
+        * kjs/scope_chain.h: Changed ScopeChainNode into a struct rather than
+        a class, got rid of its constructor so we can have one that's uninitialized,
+        and moved the refCount into a derived struct, ScopeChainHeapNode. Made _node
+        mutable so it can be changed in the moveToHeap function. Changed the copy
+        constructor and assignment operator to call moveToHeap, since the top node
+        can't be shared when it's embedded in another ScopeChain object. Updated
+        functions as needed to handle the case where the first object isn't on the
+        heap or to add casts for cases where it's guaranteed to be. Changed the push
+        function to always put the new node into the ScopeChain object; it will get
+        put onto the heap when needed later.
+
+2008-01-01  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        Fixed slight logic error in reserveCapacity, where we would reallocate
+        the storage buffer unnecessarily.
+
+        * wtf/Vector.h:
+        (WTF::::reserveCapacity): No need to grow the buffer if newCapacity is
+        equal to capacity().
+
+2008-01-01  Darin Adler  <darin@apple.com>
+
+        Reviewed by Oliver.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=16684
+          eliminate debugger overhead from function body execution
+
+        Speeds SunSpider up 1.003x. That's a small amount, but measurable.
+
+        * JavaScriptCore.exp: Updated.
+        * kjs/Parser.h:
+        (KJS::Parser::parse): Create the node with a static member function named create() instead
+        of using new explicitly.
+
+        * kjs/grammar.y: Changed calls to new FunctionBodyNode to use FunctionBodyNode::create().
+
+        * kjs/nodes.cpp:
+        (KJS::ProgramNode::create): Added. Calls new.
+        (KJS::EvalNode::create): Ditto.
+        (KJS::FunctionBodyNode::create): Ditto, but creates FunctionBodyNodeWithDebuggerHooks
+        when a debugger is present.
+        (KJS::FunctionBodyNode::execute): Removed debugger hooks.
+        (KJS::FunctionBodyNodeWithDebuggerHooks::FunctionBodyNodeWithDebuggerHooks): Added.
+        (KJS::FunctionBodyNodeWithDebuggerHooks::execute): Calls the debugger, then the code,
+        then the debugger again.
+
+        * kjs/nodes.h: Added create functions, made the constructors private and protected.
+
+2007-12-30  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        More small cleanup to array_object.cpp
+
+        * kjs/array_object.cpp:
+        (KJS::ArrayProtoFuncToString::callAsFunction):
+        (KJS::ArrayProtoFuncToLocaleString::callAsFunction):
+        (KJS::ArrayProtoFuncJoin::callAsFunction):
+        (KJS::ArrayProtoFuncConcat::callAsFunction):
+        (KJS::ArrayProtoFuncReverse::callAsFunction):
+        (KJS::ArrayProtoFuncShift::callAsFunction):
+        (KJS::ArrayProtoFuncSlice::callAsFunction):
+        (KJS::ArrayProtoFuncSort::callAsFunction):
+        (KJS::ArrayProtoFuncSplice::callAsFunction):
+        (KJS::ArrayProtoFuncUnShift::callAsFunction):
+        (KJS::ArrayProtoFuncFilter::callAsFunction):
+        (KJS::ArrayProtoFuncMap::callAsFunction):
+        (KJS::ArrayProtoFuncEvery::callAsFunction):
+
+2007-12-30  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Apply wkstyle to array_object.cpp
+
+        * kjs/array_object.cpp:
+        (KJS::ArrayPrototype::ArrayPrototype):
+        (KJS::ArrayPrototype::getOwnPropertySlot):
+        (KJS::ArrayProtoFuncConcat::callAsFunction):
+        (KJS::ArrayProtoFuncPop::callAsFunction):
+        (KJS::ArrayProtoFuncReverse::callAsFunction):
+        (KJS::ArrayProtoFuncShift::callAsFunction):
+        (KJS::ArrayProtoFuncSlice::callAsFunction):
+        (KJS::ArrayProtoFuncSort::callAsFunction):
+        (KJS::ArrayProtoFuncSplice::callAsFunction):
+        (KJS::ArrayProtoFuncUnShift::callAsFunction):
+        (KJS::ArrayProtoFuncFilter::callAsFunction):
+        (KJS::ArrayProtoFuncMap::callAsFunction):
+        (KJS::ArrayProtoFuncEvery::callAsFunction):
+        (KJS::ArrayProtoFuncLastIndexOf::callAsFunction):
+        (KJS::ArrayObjectImp::ArrayObjectImp):
+        (KJS::ArrayObjectImp::implementsConstruct):
+        (KJS::ArrayObjectImp::construct):
+        (KJS::ArrayObjectImp::callAsFunction):
+
+2007-12-30  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Remove maxInt/minInt, replacing with std:max/min<int>()
+
+        * kjs/array_object.cpp:
+        (KJS::ArrayProtoFuncSplice::callAsFunction):
+        * kjs/operations.cpp:
+        * kjs/operations.h:
+
+2007-12-30  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+        
+        Update Number.toString to properly throw exceptions.
+        Cleanup code in Number.toString implementation.
+
+        * kjs/number_object.cpp:
+        (KJS::numberToString):
+        * kjs/object.cpp:
+        (KJS::Error::create): Remove bogus debug lines.
+
+2007-12-28  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Oliver.
+
+        ASSERT when debugging via Drosera due to missed var lookup optimization.
+        http://bugs.webkit.org/show_bug.cgi?id=16634
+        
+        No test case possible.
+
+        * kjs/nodes.cpp:
+        (KJS::BreakpointCheckStatement::optimizeVariableAccess):
+        * kjs/nodes.h:
+
+2007-12-28  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Oliver.
+
+        Fix (-0).toFixed() and re-factor a little
+        Fix (-0).toExponential() and printing of trailing 0s in toExponential
+        Fix toPrecision(nan) handling
+        http://bugs.webkit.org/show_bug.cgi?id=16640
+
+        * kjs/number_object.cpp:
+        (KJS::numberToFixed):
+        (KJS::fractionalPartToString):
+        (KJS::numberToExponential):
+        (KJS::numberToPrecision):
+
+2007-12-28  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        More changes to make number code readable
+
+        * kjs/number_object.cpp:
+        (KJS::integer_part_noexp):
+        (KJS::numberToFixed):
+        (KJS::numberToExponential):
+
+2007-12-28  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        More small cleanups to toPrecision
+
+        * kjs/number_object.cpp:
+        (KJS::numberToPrecision):
+
+2007-12-28  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        More small attempts to make number code readable
+
+        * kjs/number_object.cpp:
+        (KJS::exponentialPartToString):
+        (KJS::numberToExponential):
+        (KJS::numberToPrecision):
+
+2007-12-28  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Break out callAsFunction implementations into static functions
+
+        * kjs/number_object.cpp:
+        (KJS::numberToString):
+        (KJS::numberToFixed):
+        (KJS::numberToExponential):
+        (KJS::numberToPrecision):
+        (KJS::NumberProtoFunc::callAsFunction):
+
+2007-12-28  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Apply wkstyle/astyle and fix placement of *
+
+        * kjs/number_object.cpp:
+        (KJS::NumberInstance::NumberInstance):
+        (KJS::NumberPrototype::NumberPrototype):
+        (KJS::NumberProtoFunc::NumberProtoFunc):
+        (KJS::integer_part_noexp):
+        (KJS::intPow10):
+        (KJS::NumberProtoFunc::callAsFunction):
+        (KJS::NumberObjectImp::NumberObjectImp):
+        (KJS::NumberObjectImp::getOwnPropertySlot):
+        (KJS::NumberObjectImp::getValueProperty):
+        (KJS::NumberObjectImp::implementsConstruct):
+        (KJS::NumberObjectImp::construct):
+        (KJS::NumberObjectImp::callAsFunction):
+        * kjs/object.cpp:
+        (KJS::JSObject::put):
+
+2007-12-27  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        ASSERT in JavaScriptCore while viewing WICD test case
+        http://bugs.webkit.org/show_bug.cgi?id=16626
+        
+        * kjs/nodes.cpp:
+        (KJS::ForInNode::execute): move KJS_CHECK_EXCEPTION to proper place
+
+2007-12-26  Jan Michael Alonzo  <jmalonzo@unpluggable.com>
+
+        Reviewed by Alp Toker.
+
+        http://bugs.webkit.org/show_bug.cgi?id=16390
+        Use autotools or GNU make as the build system for the GTK port
+
+        * GNUmakefile.am: Added.
+
+2007-12-25  Maciej Stachowiak  <mjs@apple.com>
+        
+        Reviewed by Oliver.
+                
+        - Remove unnecessary redundant check from property setting
+        http://bugs.webkit.org/show_bug.cgi?id=16602
+                
+        1.3% speedup on SunSpider.
+        
+        * kjs/object.cpp:
+        (KJS::JSObject::put): Don't do canPut check when not needed; let
+        the PropertyMap handle it.        
+        (KJS::JSObject::canPut): Don't check the static property
+        table. lookupPut does that already.
+        
+2007-12-24  Alp Toker  <alp@atoker.com>
+
+        Fix builds that don't use AllInOneFile.cpp following breakage
+        introduced in r28973.
+
+        * kjs/grammar.y:
+
+2007-12-24  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Eric.
+
+        - Optimize variable declarations
+        http://bugs.webkit.org/show_bug.cgi?id=16585
+        
+        3.5% speedup on SunSpider.
+
+        var statements now result in either assignments or empty statements.
+        
+        This allows a couple of optimization opportunities:
+        - No need to branch at runtime to check if there is an initializer
+        - EmptyStatementNodes can be removed entirely (also done in this patch)
+        - Assignment expressions get properly optimized for local variables
+        
+        This patch also includes some code cleanup:
+        - Most of the old VarStatement/VarDecl logic is now only used for const declarations, 
+          thus it is renamed appropriately
+        - AssignExprNode is gone
+        
+        * JavaScriptCore.exp:
+        * kjs/NodeInfo.h:
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::SourceElements::append):
+        (KJS::ConstDeclNode::ConstDeclNode):
+        (KJS::ConstDeclNode::optimizeVariableAccess):
+        (KJS::ConstDeclNode::handleSlowCase):
+        (KJS::ConstDeclNode::evaluateSingle):
+        (KJS::ConstDeclNode::evaluate):
+        (KJS::ConstStatementNode::optimizeVariableAccess):
+        (KJS::ConstStatementNode::execute):
+        (KJS::VarStatementNode::optimizeVariableAccess):
+        (KJS::VarStatementNode::execute):
+        (KJS::ForInNode::ForInNode):
+        (KJS::ForInNode::optimizeVariableAccess):
+        (KJS::ForInNode::execute):
+        (KJS::FunctionBodyNode::initializeSymbolTable):
+        (KJS::ProgramNode::initializeSymbolTable):
+        (KJS::FunctionBodyNode::processDeclarations):
+        (KJS::ProgramNode::processDeclarations):
+        (KJS::EvalNode::processDeclarations):
+        * kjs/nodes.h:
+        (KJS::DeclarationStacks::):
+        (KJS::StatementNode::):
+        (KJS::ConstDeclNode::):
+        (KJS::ConstStatementNode::):
+        (KJS::EmptyStatementNode::):
+        (KJS::VarStatementNode::):
+        (KJS::ForNode::):
+        * kjs/nodes2string.cpp:
+        (KJS::ConstDeclNode::streamTo):
+        (KJS::ConstStatementNode::streamTo):
+        (KJS::ScopeNode::streamTo):
+        (KJS::VarStatementNode::streamTo):
+        (KJS::ForNode::streamTo):
+        (KJS::ForInNode::streamTo):
+
+2007-12-21  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        * JavaScriptCore.exp: Remove unused symbol to prevent a weak external symbol
+        being generated in JavaScriptCore.framework.
+
+2007-12-21  Darin Adler  <darin@apple.com>
+
+        Requested by Maciej.
+
+        * kjs/nodes.h: Use the new NEVER_INLINE here and eliminate the old
+        KJS_NO_INLINE. We don't want to have two, and we figured it was better
+        to keep the one that's in WTF.
+
+2007-12-21  Darin Adler  <darin@apple.com>
+
+        Reviewed by Eric.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=16561
+          remove debugger overhead from non-debugged JavaScript execution
+
+        1.022x as fast on SunSpider.
+
+        * JavaScriptCore.exp: Updated.
+
+        * kjs/NodeInfo.h: Renamed SourceElementsStub to SourceElements,
+        since that more accurately describes the role of this object, which
+        is a reference-counted wrapper for a Vector.
+
+        * kjs/Parser.cpp:
+        (KJS::Parser::didFinishParsing): Changed parameter type to SourceElements,
+        and use plain assignment instead of set.
+        * kjs/Parser.h: Changed parameter type of didFinishParsing to a
+        SourceElements. Also changed m_sourceElements; we now use a RefPtr instead
+        of an OwnPtr as well.
+
+        * kjs/grammar.y: Got rid of all the calls to release() on SourceElements.
+        That's now handed inside the constructors for various node types, since we now
+        use vector swapping instead.
+
+        * kjs/nodes.cpp:
+        (KJS::Node::rethrowException): Added NEVER_INLINE, because this was getting inlined
+        and we want exception handling out of the normal code flow.
+        (KJS::SourceElements::append): Moved here from the header. This now handles
+        creating a BreakpointCheckStatement for each statement in the debugger case.
+        That way we can get breakpoint handling without having it in every execute function.
+        (KJS::BreakpointCheckStatement::BreakpointCheckStatement): Added.
+        (KJS::BreakpointCheckStatement::execute): Added. Contains the code that was formerly
+        in the StatementNode::hitStatement function and the KJS_BREAKPOINT macro.
+        (KJS::BreakpointCheckStatement::streamTo): Added.
+        (KJS::ArgumentListNode::evaluateList): Use KJS_CHECKEXCEPTIONVOID since the return
+        type is void.
+        (KJS::VarStatementNode::execute): Removed KJS_BREAKPOINT.
+        (KJS::BlockNode::BlockNode): Changed parameter type to SourceElements.
+        Changed code to use release since the class now contains a vector rather than
+        a vector point.
+        (KJS::BlockNode::optimizeVariableAccess): Updated since member is now a vector
+        rather than a vector pointer.
+        (KJS::BlockNode::execute): Ditto.
+        (KJS::ExprStatementNode::execute): Removed KJS_BREAKPOINT.
+        (KJS::IfNode::execute): Ditto.
+        (KJS::IfElseNode::execute): Ditto.
+        (KJS::DoWhileNode::execute): Ditto.
+        (KJS::WhileNode::execute): Ditto.
+        (KJS::ContinueNode::execute): Ditto.
+        (KJS::BreakNode::execute): Ditto.
+        (KJS::ReturnNode::execute): Ditto.
+        (KJS::WithNode::execute): Ditto.
+        (KJS::CaseClauseNode::optimizeVariableAccess): Updated since member is now a vector
+        rather than a vector pointer.
+        (KJS::CaseClauseNode::executeStatements): Ditto.
+        (KJS::SwitchNode::execute): Removed KJS_BREAKPOINT.
+        (KJS::ThrowNode::execute): Ditto.
+        (KJS::TryNode::execute): Ditto.
+        (KJS::ScopeNode::ScopeNode): Changed parameter type to SourceElements.
+        (KJS::ProgramNode::ProgramNode): Ditto.
+        (KJS::EvalNode::EvalNode): Ditto.
+        (KJS::FunctionBodyNode::FunctionBodyNode): Ditto.
+        (KJS::ScopeNode::optimizeVariableAccess): Updated since member is now a vector
+        rather than a vector pointer.
+
+        * kjs/nodes.h: Removed hitStatement. Renamed SourceElements to StatementVector.
+        Renamed SourceElementsStub to SourceElements and made it derive from
+        ParserRefCounted rather than from Node, hold a vector rather than a pointer to
+        a vector, and changed the release function to swap with another vector rather
+        than the pointer idiom. Updated BlockNode and CaseClauseNode to hold actual
+        vectors instead of pointers to vectors. Added BreakpointCheckStatement.
+
+        * kjs/nodes2string.cpp:
+        (KJS::statementListStreamTo): Changed to work on a vector instead of a pointer
+        to a vector.
+        (KJS::BlockNode::streamTo): Ditto.
+        (KJS::CaseClauseNode::streamTo):  Ditto.
+
+        * wtf/AlwaysInline.h: Added NEVER_INLINE.
+        * wtf/PassRefPtr.h: Tweaked formatting. Added clear() function that matches the
+        ones in OwnPtr and auto_ptr.
+        * wtf/RefPtr.h: Ditto.
+
+2007-12-21  Darin Adler  <darin@apple.com>
+
+        - fix broken regression tests
+
+        The broken tests were fast/js/do-while-expression-value.html and
+        fast/js/while-expression-value.html.
+
+        * kjs/nodes.cpp: Check in the correct version of this file. I had accidentally landed
+        an old version of my patch for bug 16471.
+        (KJS::statementListExecute): The logic here was backwards. Have to set the value
+        even for non-normal execution results.
+
+2007-12-20  Alexey Proskuryakov  <ap@webkit.org>
+
+        Windows build fix
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Copy npruntime_internal.h
+        to WebKitBuild.
+
+2007-12-20  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by mjs.
+        
+        Split IfNode into IfNode and IfElseNode for speedup.
+        http://bugs.webkit.org/show_bug.cgi?id=16470
+        
+        SunSpider claims this is 1.003x as fast as before.
+        (This required running with --runs 15 to get consistent enough results to tell!)
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::IfNode::optimizeVariableAccess):
+        (KJS::IfNode::execute):
+        (KJS::IfNode::getDeclarations):
+        (KJS::IfElseNode::optimizeVariableAccess):
+        (KJS::IfElseNode::execute):
+        (KJS::IfElseNode::getDeclarations):
+        * kjs/nodes.h:
+        (KJS::IfNode::):
+        (KJS::IfElseNode::):
+        * kjs/nodes2string.cpp:
+        (KJS::IfNode::streamTo):
+        (KJS::IfElseNode::streamTo):
+
+2007-12-20  Darin Adler  <darin@apple.com>
+
+        Reviewed by Sam.
+
+        * wtf/OwnPtr.h:
+        (WTF::operator==): Added.
+        (WTF::operator!=): Added.
+
+2007-12-20  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        AST optimization: Avoid NULL-checking ForNode's child nodes.
+        
+        0.6% speedup on SunSpider.
+        
+        This is a proof of concept patch that demonstrates how to optimize
+        grammar productions with optional components, like
+        
+            for (optional; optional; optional) {
+                ...
+            }
+            
+        The parser emits NULL for an optional component that is not present.
+
+        Instead of checking for a NULL child at execution time, a node that
+        expects an optional component to be present more often than not checks
+        for a NULL child at construction time, and substitutes a viable
+        alternative node in its place.
+
+        (We'd like the parser to start emitting NULL a lot more once we teach
+        it to emit NULL for certain no-op productions like EmptyStatement and
+        VariableStatement, so, as a foundation, it's important for nodes with
+        NULL optional components to be fast.)
+
+        * kjs/Parser.cpp:
+        (KJS::Parser::didFinishParsing): Check for NULL SourceElements. Also,
+        moved didFinishParsing into the .cpp file because adding a branch while
+        it was in the header file caused a substantial and inexplicable
+        performance regression. (Did I mention that GCC is crazy?)
+
+        * kjs/grammar.y:
+
+        * kjs/nodes.cpp:
+        (KJS::BlockNode::BlockNode): Check for NULL SourceElements.
+        (KJS::ForNode::optimizeVariableAccess): No need to check for NULL here.
+        (KJS::ForNode::execute): No need to check for NULL here.
+        * kjs/nodes.h:
+        (KJS::ForNode::): Check for NULL SourceElements. Substitute a TrueNode
+        because it's semantically harmless, and it evaluates to boolean in an
+        efficient manner.
+
+2007-12-20  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Slight logic reordering in JSImmediate::from(double)
+
+        This gives a 0.6% improvement in SunSpider.
+
+        * kjs/JSImmediate.h:
+        (KJS::JSImmediate::from):
+
+2007-12-20  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by mjs.
+
+        Fix major Array regression introduced by 28899.
+
+        SunSpider claims this is at least 1.37x as fast as pre-regression. :)
+
+        * kjs/array_instance.cpp: make Arrays fast again!
+
+2007-12-20  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Geoff, then re-rubber-stamped by Geoff after final search/replace and testing.
+
+        Small reworking of Date code for 4% speedup on Date tests (0.2% overall)
+        http://bugs.webkit.org/show_bug.cgi?id=16537
+
+        Make msToYear human-readable
+        Make msToDayInMonth slightly more readable and avoid recalculating msToYear
+        Remove use of isInLeapYear to avoid calling msToYear
+        Remove dayInYear call by changing msToDayInMonth to dayInMonthFromDayInYear
+        Remove more duplicate calls to dayInYear and getUTCOffset for further speedup
+
+        * kjs/DateMath.cpp:
+        (KJS::daysFrom1970ToYear):
+        (KJS::msToYear):
+        (KJS::monthFromDayInYear):
+        (KJS::checkMonth):
+        (KJS::dayInMonthFromDayInYear):
+        (KJS::dateToDayInYear):
+        (KJS::getDSTOffsetSimple):
+        (KJS::getDSTOffset):
+        (KJS::gregorianDateTimeToMS):
+        (KJS::msToGregorianDateTime):
+
+2007-12-20  Rodney Dawes  <dobey@wayofthemonkey.com>
+
+        Reviewed by Darin Adler.
+
+        Proxy includes of npruntime.h or npapi.h through npruntime_internal.h
+        Include stdio.h in npapi.h for the use of FILE with XP_UNIX defined
+        This is for building with X11, as some type and enum names conflict
+        with #define names in X11 headers.
+        http://bugs.webkit.org/show_bug.cgi?id=15669
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * bindings/NP_jsobject.h:
+        * bindings/npapi.h:
+        * bindings/npruntime.cpp:
+        * bindings/npruntime_impl.h:
+        * bindings/npruntime_priv.h:
+        * bindings/npruntime_internal.h:
+        * bindings/testbindings.cpp:
+        * bindings/c/c_class.h:
+        * bindings/c/c_runtime.h:
+        * bindings/c/c_utility.h:
+
+2007-12-20  Darin Adler  <darin@apple.com>
+
+        - re-fix http://bugs.webkit.org/show_bug.cgi?id=16471
+          Completions need to be smaller (or not exist at all)
+
+        Same patch as last time with the test failures problem fixed.
+
+        * kjs/function.cpp:
+        (KJS::GlobalFuncImp::callAsFunction): Make sure to check the completion
+        type from newExec to see if the execute raised an exception.
+
+2007-12-20  Darin Adler  <darin@apple.com>
+
+        - roll out that last change -- it was causing test failures;
+          I'll check it back in after fixing them
+
+2007-12-20  Darin Adler  <darin@apple.com>
+
+        Reviewed by Eric.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=16471
+          Completions need to be smaller (or not exist at all)
+
+        SuSpider shows 2.4% speedup.
+
+        Stop using completions in the execution engine.
+        Instead, the completion type and label target are both
+        stored in the ExecState.
+
+        * API/JSContextRef.cpp: Removed unneeded include of "completion.h".
+        * bindings/runtime_method.cpp: Removed unused execute function.
+        * bindings/runtime_method.h: Ditto.
+
+        * kjs/ExecState.h: Added completionType, breakOrContinueTarget,
+        setCompletionType, setNormalCompletion, setBreakCompletion,
+        setContinueCompletion, setReturnValueCompletion, setThrowCompletion,
+        setInterruptedCompletion, m_completionType, and m_breakOrContinueTarget.
+
+        * kjs/completion.h: Removed constructor and getter for target
+        for break and continue from Completion. This class is now only
+        used for the public API to Interpreter and such.
+
+        * kjs/date_object.h: Removed unused execute function.
+
+        * kjs/function.cpp:
+        (KJS::FunctionImp::callAsFunction): Removed some unneeded
+        exception processing. Updated to call the new execute function
+        and to get the completion type from the ExecState. Merged in
+        the execute function, which repeated some of the same logic and
+        was called only from here.
+        (KJS::GlobalFuncImp::callAsFunction): More of the same for eval.
+        * kjs/function.h: Removed execute.
+
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::evaluate): Added code to convert the result of
+        execut into a Completion.
+
+        * kjs/nodes.cpp:
+        (KJS::Node::setErrorCompletion): Renamed from createErrorCompletion.
+        Now sets the completion type in the ExecState.
+        (KJS::Node::rethrowException): Now sets the completion type in the
+        ExecState.
+        (KJS::StatementNode::hitStatement): Now sets the completion type in
+        the ExecState.
+        (KJS::VarStatementNode::execute): Updated to put completion type in
+        the ExecState instead of a Completion object.
+        (KJS::statementListExecute): Ditto. Also changed the for loop to use
+        indices instead of iterators.
+        (KJS::BlockNode::execute): Updated return type.
+        (KJS::EmptyStatementNode::execute): Updated to put completion type in
+        the ExecState instead of a Completion object.
+        (KJS::ExprStatementNode::execute): Ditto.
+        (KJS::IfNode::execute): Ditto.
+        (KJS::DoWhileNode::execute): Ditto. Also streamlined the logic a little
+        to make the normal case a little faster and moved the end outside the
+        loop so that "break" can do a break.
+        (KJS::WhileNode::execute): Ditto.
+        (KJS::ForNode::execute): Ditto.
+        (KJS::ForInNode::execute): Ditto.
+        (KJS::ContinueNode::execute): Updated to put completion type in
+        the ExecState instead of a Completion object.
+        (KJS::BreakNode::execute): Ditto.
+        (KJS::ReturnNode::execute): Ditto.
+        (KJS::WithNode::execute): Ditto.
+        (KJS::CaseClauseNode::executeStatements): Ditto. Also renamed to have
+        execute in its name to reflect the fact that it's a member of the same
+        family of functions.
+        (KJS::CaseBlockNode::executeBlock): Ditto.
+        (KJS::SwitchNode::execute): Ditto.
+        (KJS::LabelNode::execute): Ditto.
+        (KJS::ThrowNode::execute): Ditto.
+        (KJS::TryNode::execute): Ditto.
+        (KJS::ProgramNode::execute): Ditto.
+        (KJS::EvalNode::execute): Ditto.
+        (KJS::FunctionBodyNode::execute): Ditto.
+        (KJS::FuncDeclNode::execute): Ditto.
+
+        * kjs/nodes.h: Renamed setErrorCompletion to createErrorCompletion, made
+        hitStatement protected, changed return value of execute to a JSValue,
+        renamed evalStatements to executeStatements, and evalBlock to executeBlock.
+
+        * kjs/number_object.h: Removed unused execute function.
+
+2007-12-20  Geoffrey Garen  <ggaren@apple.com>
+
+        Added Radar number.
+
+        * kjs/nodes.cpp:
+        (KJS::ProgramNode::processDeclarations):
+
+2007-12-20  Geoffrey Garen  <ggaren@apple.com>
+
+        Linux build fix: config.h has to come first.
+
+        * kjs/error_object.cpp:
+
+2007-12-19  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Optimized global access to global variables, using a symbol table.
+        
+        SunSpider reports a 1.5% overall speedup, a 6.2% speedup on 3d-morph,
+        and a whopping 33.1% speedup on bitops-bitwise-and.
+
+        * API/JSCallbackObjectFunctions.h: Replaced calls to JSObject:: with
+        calls to Base::, since JSObject is not always our base class. This
+        was always a bug, but the bug is even more apparent after some of my
+        changes.
+
+        (KJS::::staticFunctionGetter): Replaced use of getDirect with call to
+        getOwnPropertySlot. Global declarations are no longer stored in the
+        property map, so a call to getDirect is insufficient for finding
+        override properties.
+
+        * API/testapi.c: 
+        * API/testapi.js: Added test for the getDirect change mentioned above.
+
+        * kjs/ExecState.cpp: 
+        * kjs/ExecState.h: Dialed back the optimization to store a direct
+        pointer to the localStorage buffer. One ExecState can grow the global
+        object's localStorage without another ExecState's knowledge, so
+        ExecState can't store a direct pointer to the localStorage buffer
+        unless/until we invent a way to update all the relevant ExecStates.
+
+        * kjs/JSGlobalObject.cpp: Inserted the symbol table into get and put
+        operations.
+        (KJS::JSGlobalObject::reset): Reset the symbol table and local storage,
+        too. Also, clear the property map here, removing the need for a
+        separate call.
+
+        * kjs/JSVariableObject.cpp:
+        * kjs/JSVariableObject.h: Added support for saving localStorage and the
+        symbol table to the back/forward cache, and restoring them.
+
+        * kjs/function.cpp:
+        (KJS::GlobalFuncImp::callAsFunction): Renamed progNode to evalNode
+        because it's an EvalNode, not a ProgramNode.
+
+        * kjs/lookup.h:
+        (KJS::cacheGlobalObject): Replaced put with faster putDirect, since
+        that's how the rest of lookup.h works. putDirect is safe here because
+        cacheGlobalObject is only used for objects whose names are not valid
+        identifiers.
+
+        * kjs/nodes.cpp: The good stuff!
+
+        (KJS::EvalNode::processDeclarations): Replaced hasProperty with
+        the new hasOwnProperty, which is slightly faster.
+
+        * kjs/object.h: Nixed clearProperties because clear() does this job now.
+
+        * kjs/property_map.cpp:
+        * kjs/property_map.h: More back/forward cache support.
+        
+        * wtf/Vector.h:
+        (WTF::::grow): Added fast non-branching grow function. I used it in
+        an earlier version of this patch, even though it's not used anymore.
+
+2007-12-09  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Oliver Hunt.
+
+        Build fix for non-Mac platforms.  Move NodeInfo into its own header so that the YYTYPE
+        declaration in grammar.h is able to declare members of that type.
+
+        * kjs/NodeInfo.h: Added.
+        (KJS::createNodeInfo):
+        (KJS::mergeDeclarationLists):
+        (KJS::appendToVarDeclarationList):
+        * kjs/grammar.y:
+        * kjs/lexer.cpp:
+
+2007-12-19  Oliver Hunt  <oliver@apple.com>
+
+        Make appendToVarDeclarationList static
+
+        RS=Weinig.
+
+        * kjs/grammar.y:
+
+2007-12-18  Oliver Hunt  <oliver@apple.com>
+
+        Remove dead code due to removal of post-parse declaration discovery.
+
+        RS=Geoff.
+
+        Due to the removal of the declaration discovery pass after parsing we
+        no longer need any of the logic used for that discovery.
+
+        * kjs/nodes.cpp:
+        (KJS::Node::Node):
+        (KJS::VarDeclNode::VarDeclNode):
+        (KJS::BlockNode::BlockNode):
+        (KJS::ForInNode::ForInNode):
+        (KJS::CaseBlockNode::CaseBlockNode):
+        * kjs/nodes.h:
+        (KJS::VarStatementNode::):
+        (KJS::IfNode::):
+        (KJS::DoWhileNode::):
+        (KJS::WhileNode::):
+        (KJS::WithNode::):
+        (KJS::LabelNode::):
+        (KJS::TryNode::):
+        (KJS::FuncDeclNode::):
+        (KJS::CaseClauseNode::):
+        (KJS::ClauseListNode::):
+        (KJS::SwitchNode::):
+
+2007-12-18  Oliver Hunt  <oliver@apple.com>
+
+        Replace post-parse pass to find declarations with logic in the parser itself
+
+        Reviewed by Geoff.
+
+        Instead of finding declarations in a pass following the initial parsing of
+        a program, we incorporate the logic directly into the parser.  This lays
+        the groundwork for further optimisations (such as improving performance in
+        declaration expressions -- var x = y; -- to match that of standard assignment)
+        in addition to providing a 0.4% performance improvement in SunSpider.
+
+        * JavaScriptCore.exp:
+        * kjs/Parser.cpp:
+        (KJS::Parser::parse):
+        * kjs/Parser.h:
+        (KJS::Parser::didFinishParsing):
+        (KJS::Parser::parse):
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::ParserTracked::ParserTracked):
+        (KJS::ParserTracked::~ParserTracked):
+        (KJS::ParserTracked::ref):
+        (KJS::ParserTracked::deref):
+        (KJS::ParserTracked::refcount):
+        (KJS::ParserTracked::clearNewTrackedObjects):
+        (KJS::Node::Node):
+        (KJS::ScopeNode::ScopeNode):
+        (KJS::ProgramNode::ProgramNode):
+        (KJS::EvalNode::EvalNode):
+        (KJS::FunctionBodyNode::FunctionBodyNode):
+        (KJS::FunctionBodyNode::initializeSymbolTable):
+        (KJS::FunctionBodyNode::processDeclarations):
+        * kjs/nodes.h:
+        (KJS::ParserTracked::):
+        (KJS::Node::):
+        (KJS::ScopeNode::):
+
+2007-12-18  Xan Lopez  <xan@gnome.org>
+
+        Reviewed by Geoff.
+
+        Fix http://bugs.webkit.org/show_bug.cgi?id=14521
+        Bug 14521: JavaScriptCore fails to build on Linux/PPC gcc 4.1.2
+        
+        * wtf/TCSpinLock.h:
+        (TCMalloc_SpinLock::Unlock):
+
+        Use less strict memory operand constraint on inline asm generation.
+        PLATFORM(DARWIN) left unpatched due to Apple's GCC bug.
+
+        Patch by David Kilzer <ddkilzer@webkit.org>
+
+2007-12-18  Mark Rowe  <mrowe@apple.com>
+
+        Rubber-stamped by Maciej Stachowiak.
+
+        Remove outdated and non-functioning project files for the Apollo port.
+
+        * JavaScriptCore.apolloproj: Removed.
+
+2007-12-18  Darin Adler  <darin@apple.com>
+
+        - fix Windows build
+
+        * pcre/pcre_exec.cpp:
+        (jsRegExpExecute): Change back from false/true to 0/1 -- I probably should not have
+        deleted MATCH_MATCH and MATCH_NOMATCH, but I'm going to leave them out.
+
+2007-12-18  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=16458
+          REGRESSION (r28164): regular expressions can now hang due to lack of a match limit
+          <rdar://problem/5636067>
+
+        Test: fast/regex/slow.html
+
+        Slows down SunSpider a bit (about 1.01x); filed a bug to follow up on that:
+        http://bugs.webkit.org/show_bug.cgi?id=16503
+
+        * pcre/pcre.h: Changed name of error code to not specifically mention "recursion".
+        * pcre/pcre_exec.cpp:
+        (match): Replaced the depth limit, MATCH_RECURSION_LIMIT, with a total match looping
+        limit, matchLimit. Also eliminated the constants for MATCH_MATCH and MATCH_NOMATCH,
+        since they are just true and false (1 and 0).
+        (jsRegExpExecute): More of the MATCH_MATCH change.
+
+2007-12-17  Darin Adler  <darin@apple.com>
+
+        - speculative build fix for non-gcc platforms
+
+        * pcre/pcre_exec.cpp: (match): Remove unused cases from return switch.
+
+2007-12-16  Mark Rowe  <mrowe@apple.com>
+
+        Speculative build fix for non-Mac platforms.
+
+        * pcre/pcre_compile.cpp: Include string.h for memset, memmove, etc.
+
+2007-12-16  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=16438
+        - removed some more unused code
+        - changed quite a few more names to WebKit-style
+        - moved more things out of pcre_internal.h
+        - changed some indentation to WebKit-style
+        - improved design of the functions for reading and writing
+          2-byte values from the opcode stream (in pcre_internal.h)
+
+        * pcre/dftables.cpp:
+        (main): Added the kjs prefix a normal way in lieu of using macros.
+
+        * pcre/pcre_compile.cpp: Moved some definitions here from pcre_internal.h.
+        (errorText): Name changes, fewer typedefs.
+        (checkEscape): Ditto. Changed uppercase conversion to use toASCIIUpper.
+        (isCountedRepeat): Name change.
+        (readRepeatCounts): Name change.
+        (firstSignificantOpcode): Got rid of the use of OP_lengths, which is
+        very lightly used here. Hard-coded the length of OP_BRANUMBER.
+        (firstSignificantOpcodeSkippingAssertions): Ditto. Also changed to
+        use the advanceToEndOfBracket function.
+        (getOthercaseRange): Name changes.
+        (encodeUTF8): Ditto.
+        (compileBranch): Name changes. Removed unused after_manual_callout and
+        the code to handle it. Removed code to handle OP_ONCE since we never
+        emit this opcode. Changed to use advanceToEndOfBracket in more places.
+        (compileBracket): Name changes.
+        (branchIsAnchored): Removed code to handle OP_ONCE since we never emit
+        this opcode.
+        (bracketIsAnchored): Name changes.
+        (branchNeedsLineStart): More fo the same.
+        (bracketNeedsLineStart): Ditto.
+        (branchFindFirstAssertedCharacter): Removed OP_ONCE code.
+        (bracketFindFirstAssertedCharacter): More of the same.
+        (calculateCompiledPatternLengthAndFlags): Ditto.
+        (returnError): Name changes.
+        (jsRegExpCompile): Ditto.
+
+        * pcre/pcre_exec.cpp: Moved some definitions here from pcre_internal.h.
+        (matchRef): Updated names.
+        Improved macros to use the do { } while(0) idiom so they expand to single
+        statements rather than to blocks or multiple statements. And refeactored
+        the recursive match macros.
+        (MatchStack::pushNewFrame): Name changes.
+        (getUTF8CharAndIncrementLength): Name changes.
+        (match): Name changes. Removed the ONCE opcode.
+        (jsRegExpExecute): Name changes.
+
+        * pcre/pcre_internal.h: Removed quite a few unneeded includes. Rewrote
+        quite a few comments. Removed the macros that add kjs prefixes to the
+        functions with external linkage; instead renamed the functions. Removed
+        the unneeded typedefs pcre_uint16, pcre_uint32, and uschar. Removed the
+        dead and not-all-working code for LINK_SIZE values other than 2, although
+        we aim to keep the abstraction working. Removed the OP_LENGTHS macro.
+        (put2ByteValue): Replaces put2ByteOpcodeValueAtOffset.
+        (get2ByteValue): Replaces get2ByteOpcodeValueAtOffset.
+        (put2ByteValueAndAdvance): Replaces put2ByteOpcodeValueAtOffsetAndAdvance.
+        (putLinkValueAllowZero): Replaces putOpcodeValueAtOffset; doesn't do the
+        addition, since a comma is really no better than a plus sign. Added an
+        assertion to catch out of range values and changed the parameter type to
+        int rather than unsigned.
+        (getLinkValueAllowZero): Replaces getOpcodeValueAtOffset.
+        (putLinkValue): New function that most former callers of the
+        putOpcodeValueAtOffset function can use; asserts the value that is
+        being stored is non-zero and then calls putLinkValueAllowZero.
+        (getLinkValue): Ditto.
+        (putLinkValueAndAdvance): Replaces putOpcodeValueAtOffsetAndAdvance. No
+        caller was using an offset, which makes sense given the advancing behavior.
+        (putLinkValueAllowZeroAndAdvance): Ditto.
+        (isBracketOpcode): Added. For use in an assertion.
+        (advanceToEndOfBracket): Renamed from moveOpcodePtrPastAnyAlternateBranches,
+        and removed comments about how it's not well designed. This function takes
+        a pointer to the beginning of a bracket and advances to the end of the
+        bracket.
+
+        * pcre/pcre_tables.cpp: Updated names.
+        * pcre/pcre_ucp_searchfuncs.cpp:
+        (kjs_pcre_ucp_othercase): Ditto.
+        * pcre/pcre_xclass.cpp:
+        (getUTF8CharAndAdvancePointer): Ditto.
+        (kjs_pcre_xclass): Ditto.
+        * pcre/ucpinternal.h: Ditto.
+
+        * wtf/ASCIICType.h:
+        (WTF::isASCIIAlpha): Added an int overload, like the one we already have for
+        isASCIIDigit.
+        (WTF::isASCIIAlphanumeric): Ditto.
+        (WTF::isASCIIHexDigit): Ditto.
+        (WTF::isASCIILower): Ditto.
+        (WTF::isASCIISpace): Ditto.
+        (WTF::toASCIILower): Ditto.
+        (WTF::toASCIIUpper): Ditto.
+
+2007-12-16  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=16459
+          REGRESSION: assertion failure with regexp with \B in a case-ignoring character range
+          <rdar://problem/5646361>
+
+        The problem was that \B was not handled properly in character classes.
+
+        Test: fast/js/regexp-overflow.html
+
+        * pcre/pcre_compile.cpp:
+        (check_escape): Added handling of ESC_b and ESC_B in character classes here.
+        Allows us to get rid of the handling of \b in character classes from all the
+        call sites that handle it separately and to handle \B properly as well.
+        (compileBranch): Remove the ESC_b handling, since it's not needed any more.
+        (calculateCompiledPatternLengthAndFlags): Ditto.
+
+2007-12-16  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        Fix http://bugs.webkit.org/show_bug.cgi?id=16448
+        Bug 16448: [GTK] Celtic Kane JavaScript performance on Array test is slow relative to Mac
+
+        * kjs/array_instance.cpp:
+        (KJS::compareByStringPairForQSort):
+        (KJS::ArrayInstance::sort): Convert JSValue's to strings once up front and then sort the
+        results.  This avoids calling toString twice per comparison, but requires a temporary buffer
+        so we only use this approach in cases where the array being sorted is not too large.
+
+2007-12-16  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler and Maciej Stachowiak.
+        
+        More refactoring to support global variable optimization.
+        
+        Changed SymbolTable to use RefPtr<UString::Rep> as its key instead of
+        UString::Rep*. With globals, the symbol table can outlast the
+        declaration node for any given symbol, so the symbol table needs to ref
+        its symbol names.
+        
+        In support, specialized HashMaps with RefPtr keys to allow lookup
+        via raw pointer, avoiding refcount churn.
+        
+        SunSpider reports a .6% speedup (prolly just noise).
+
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added new file: wtf/RefPtrHashMap.h
+        * JavaScriptCore.xcodeproj/project.pbxproj: ditto
+
+        * kjs/JSVariableObject.cpp:
+        (KJS::JSVariableObject::getPropertyNames): Symbol table keys are RefPtrs now.
+
+        * kjs/SymbolTable.h: Modified key traits to match RefPtr. Added a
+        static Rep* for null, which helps compute the deletedValue() trait.
+
+        * wtf/HashMap.h: #include the RefPtr specialization so everyone can use it.
+
+        * wtf/RefPtrHashMap.h: Copied from wtf/HashMap.h. Added overloaded versions
+        of find(), contains(), get(), set(), add(), remove(), and take() that take
+        raw pointers as keys.
+
+2007-12-16  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        http://bugs.webkit.org/show_bug.cgi?id=16162
+        Problems with float parsing on Linux (locale-dependent parsing was used).
+
+        * kjs/dtoa.cpp: Removed USE_LOCALE to reduce future confusion.
+        * kjs/lexer.cpp: (KJS::Lexer::lex): Parse with kjs_strtod, not the system one.
+
+2007-12-14  Alp Toker  <alp@atoker.com>
+
+        Reviewed by Mark Rowe.
+
+        Enable the AllInOneFile.cpp optimization for the GTK+ port.
+
+        * JavaScriptCore.pri:
+
+2007-12-14  Mark Rowe  <mrowe@apple.com>
+
+        Unreviewed.  Remove commented out fprintf's that were for debugging purposes only.
+
+        * wtf/FastMalloc.cpp:
+        (WTF::TCMalloc_PageHeap::IncrementalScavenge):
+
+2007-12-14  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        Don't use the MADV_DONTNEED code path for now as it has no effect on Mac OS X and is
+        currently untested on other platforms.
+
+        * wtf/TCSystemAlloc.cpp:
+        (TCMalloc_SystemRelease): Return after releasing memory rather than potentially falling
+        through into another mechanism if multiple are supported.
+
+2007-12-14  Alp Toker  <alp@atoker.com>
+
+        Build fix for GTK+/Qt and ports that don't use AllInOneFile.cpp.
+
+        Include UnusedParam.h.
+
+        * wtf/TCSystemAlloc.cpp:
+
+2007-12-14  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Stephanie.
+
+        Fix build on windows
+
+        * wtf/FastMalloc.cpp:
+        (WTF::TCMalloc_PageHeap::IncrementalScavenge):
+
+2007-12-14  Dan Bernstein  <mitz@apple.com>
+
+        - try again to fix the Windows build
+
+        * wtf/TCSystemAlloc.cpp:
+        (TCMalloc_SystemRelease):
+
+2007-12-14  Dan Bernstein  <mitz@apple.com>
+
+        - try to fix the Windows build
+
+        * wtf/TCSystemAlloc.cpp:
+        (TCMalloc_SystemRelease):
+
+2007-12-14  Mark Rowe <mrowe@apple.com>
+
+        Reviewed by Maciej and Oliver.
+
+        Add final changes to make TCMalloc release memory to the system.
+        This results in a 0.4% regression against ToT, but this is offset
+        against the gains made by the original TCMalloc r38 merge - in fact
+        we retain around 0.3-0.4% progression overall.
+
+        * wtf/FastMalloc.cpp:
+        (WTF::InitSizeClasses):
+        (WTF::TCMalloc_PageHeap::IncrementalScavenge):
+        * wtf/TCSystemAlloc.cpp:
+        (TCMalloc_SystemRelease):
+
+2007-12-14  Darin Adler  <darin@apple.com>
+
+        Reviewed by Sam.
+
+        - removed unnecessary includes of "Vector.h"
+
+        * wtf/HashMap.h:
+        (WTF::copyKeysToVector): Make the type of the vector be a template parameter.
+        This allows copying keys into a vector of a base class or one with an inline capacity.
+        (WTF::copyValuesToVector): Ditto.
+        * wtf/HashSet.h:
+        (WTF::copyToVector): Ditto.
+
+2007-12-14  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Darin and Geoff.
+
+        <rdar://problem/5619295> 
+        REGRESSION: 303-304: Embedded YouTube video fails to render- JS errors (16150) (Flash 9)
+        
+        Get rid of unnecessary and incorrect security checks for plug-ins accessing JavaScript objects. 
+        
+        The way this used to work was that each NPObject that wrapped a JSObject would have a root object
+        corresponding to the frame object (used for managing the lifecycle) and an origin root object (used for
+        doing security checks). 
+        
+        This would prevent a plug-in from accessing a frame's window object if it's security origin was different
+        (some parts of the window, such as the location object, can be accessed from frames with different security 
+        origins, and those checks are being done in WebCore).
+        
+        Also, if a plug-in were to access a window object of a frame that later went away, it could lead to that
+        Window JSObject being garbage collected and the NPObject pointing to freed memory.
+        
+        How this works now is that there is no origin root object anymore, and all NPObject wrappers that are created
+        for a plug-in will have the root object of the containing frame of that plug-in.
+        
+        * bindings/NP_jsobject.cpp:
+        (jsDeallocate):
+        Don't free the origin root object.
+        
+        (_NPN_CreateScriptObject):
+        Remove the origin root object parameter.
+        
+        (_NPN_InvokeDefault):
+        (_NPN_Invoke):
+        (_NPN_Evaluate):
+        (_NPN_GetProperty):
+        (_NPN_SetProperty):
+        (_NPN_RemoveProperty):
+        (_NPN_HasProperty):
+        (_NPN_HasMethod):
+        (_NPN_Enumerate):
+        Get rid of all security checks.
+        
+        * bindings/NP_jsobject.h:
+        Remove originRootObject from the JavaScriptObject struct.
+        
+        * bindings/c/c_utility.cpp:
+        (KJS::Bindings::convertValueToNPVariant):
+        Always use the root object from the ExecState.
+        
+2007-12-13  Steve Falkenburg  <sfalken@apple.com>
+
+        Move source file generation into its own vcproj to fix build dependencies.
+
+        Reviewed by Adam.
+
+        * JavaScriptCore.vcproj/JavaScriptCore.sln:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Added.
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.vcproj: Added.
+        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln:
+
+2007-12-13  Alp Toker  <alp@atoker.com>
+
+        http://bugs.webkit.org/show_bug.cgi?id=16406
+        [Gtk] JavaScriptCore needs -lpthread
+
+        Build fix for Debian and any other platforms that don't implicitly
+        link to pthread.
+
+        Link to pthread on non-Windows platforms until this dependency is
+        removed from JSC.
+
+2007-12-11  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Build fix: Note some variables that are used only for ASSERTs.
+
+        * API/testapi.c:
+        (Base_finalize):
+        (globalObject_initialize):
+        (testInitializeFinalize):
+
+2007-12-11  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        Fixed: All JS tests crash on Windows.
+
+        NDEBUG wasn't defined when compiling testkjs in release builds, so the
+        HashTable definition in HashTable.h included an extra data member.
+
+        The solution was to add NDEBUG to the release testkjs configuration on
+        Windows and Mac.
+        
+        For giggles, I also added other missing #defines to testkjs on Windows.
+
+        * Configurations/Base.xcconfig:
+        * Configurations/JavaScriptCore.xcconfig:
+        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/testkjs.cpp:
+        (main):
+
+2007-12-11  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        Removed bogus ASSERT.
+        
+        ASSERT should only be used when we know that a code path will not be
+        taken. This code path is taken often during the jsFunFuzz test.
+
+        * pcre/pcre_exec.cpp:
+        (jsRegExpExecute):
+
+2007-12-11  Darin Adler  <darin@apple.com>
+
+        * wtf/unicode/qt4/UnicodeQt4.h: Try to fix Qt build by adding U16_IS_SINGLE.
+
+2007-12-10  Darin Adler  <darin@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=16379
+          REGRESSION(r28525): Failures in http/tests/xmlhttprequest/response-encoding.html and
+          fast/dom/xmlhttprequest-html-response-encoding.html
+          and <rdar://problem/5640230> REGRESSION (306A4-ToT): Access violation in PCRE function
+          find_firstassertedchar
+
+        Test: fast/js/regexp-find-first-asserted.html
+
+        * pcre/pcre_compile.cpp:
+        (compileBracket): Take out unnecessary initialization of out parameters.
+        (branchFindFirstAssertedCharacter): Added. Broke out the half of the function that handles
+        a branch.
+        (bracketFindFirstAssertedCharacter): Renamed from find_firstassertedchar. Also removed the
+        options parameter -- the caller can handle the options.
+        (jsRegExpCompile): Changed call site to call the appropriate bracket or branch version of
+        the find_firstassertedchar function. Also put the REQ_IGNORE_CASE code here instead of
+        passing in the options.
+
+2007-12-10  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Split this:
+        
+                            FunctionBodyNode
+                                    ^
+                                    |
+                                ProgramNode
+            
+        into this:
+            
+                                ScopeNode
+                ^                   ^                   ^
+                |                   |                   |
+        FunctionBodyNode        ProgramNode         EvalNode
+
+        in preparation for specializing each class more while optimizing global
+        variable access.
+        
+        Also removed some cruft from the FunctionBodyNode interface to simplify
+        things.
+        
+        SunSpider says this patch is a .8% speedup, which seems reasonable,
+        since it eliminates a few branches and adds KJS_FAST_CALL in a few
+        places.
+        
+        Layout tests and JS tests pass. Also, this baby builds on Windows! (Qt
+        mileage may vary...)
+
+2007-12-10  Geoffrey Garen  <ggaren@apple.com>
+
+        RS by Mark Rowe.
+        
+        Mac build fix: added some exported symbols, now that Parser::parse is
+        defined in the header.
+
+        * JavaScriptCore.exp:
+
+2007-12-10  Sam Weinig  <sam@webkit.org>
+
+        Build fix.
+
+        Template methods need to be in the header.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * kjs/Parser.cpp:
+        * kjs/Parser.h:
+        (KJS::Parser::parse):
+
+2007-12-10  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Merged different implementations of Parser::parse into a single,
+        templatized implementation, in preparation for adding yet another
+        implementation for "eval" code.
+        
+        JS and layout tests pass.
+
+2007-12-10  Timothy Hatcher  <timothy@apple.com>
+
+        Reviewed by Mark Rowe
+
+        <rdar://problem/5639463> Bundle versions on Tiger should be 4523.x not 523.x
+
+        * Configurations/Version.xcconfig: Some Tiger versions of Xcode don't set MAC_OS_X_VERSION_MAJOR,
+          so assume Tiger and use a 4 for the SYSTEM_VERSION_PREFIX.
+
+2007-12-10  Mark Rowe  <mrowe@apple.com>
+
+        Tiger build fix.
+
+        * kjs/grammar.y: Use @1 and @0 in place of @$ where Tiger's bison chokes.
+
+2007-12-10  Darin Adler  <darin@apple.com>
+
+        Reviewed by Mark Rowe.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=16375
+          REGRESSION: Safari crashes on quit
+
+        Probably a debug-only issue.
+
+        * kjs/Parser.cpp:
+        (KJS::parser): Create the parser and never destroy it by using a pointer instead
+        of a global object.
+
+2007-12-09  Darin Adler  <darin@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=16369
+          REGRESSION (r28525): regular expression tests failing due to bad firstByte optimization
+
+        * pcre/pcre_compile.cpp: Changed some names to use interCaps intead of under_scores.
+        (branchIsAnchored): Broke is_anchored into two separate functions; this one works on a
+        branch and the other on an anchor. The old function would only work on a bracket.
+        Also removed unneeded parameters; the anchored check does not require the bracket
+        map or the options any more because we have a reduced set of features.
+        (bracketIsAnchored): Ditto.
+        (branchNeedsLineStart): Broke canApplyFirstCharOptimization into two functions and gave
+        both a better name. This is the function that was returning the wrong value. The failure
+        was beacuse the old function would only work on a bracket.
+        (bracketNeedsLineStart): Ditto.
+        (jsRegExpCompile): Changed to call the appropriate branch or bracket flavor of the
+        functions based on whether we compiled an outer bracket. Also removed inaccurate comments
+        and unneeded parameters.
+
+        - other small changes
+
+        * pcre/pcre.h: Renumbered error codes, in a logical order. First, normal failure, then
+        the recursion limit, then running out of memory, and finally an unexpected internal error.
+
+        * pcre/pcre_exec.cpp: Fixed indentation.
+        (jsRegExpExecute): Corrected an inaccurate comment.
+
+2007-12-09  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=16370
+          REGRESSION (r28540): source URL and line number no longer set for outer function/programs
+
+        Test: fast/js/exception-linenums-in-html-1.html
+        Test: fast/js/exception-linenums-in-html-2.html
+        Test: fast/js/exception-linenums.html
+
+        By the time the ProgramNode was constructed, the source URL was empty.
+
+        * kjs/Parser.cpp:
+        (KJS::Parser::parseProgram): Added code to set and clear m_sourceURL, which is now
+        handled here instead of in the lexer; it needs to still be set when we create the
+        program node. Call setLoc to set the first and last line number.
+        (KJS::Parser::parseFunctionBody): Ditto, but for the body.
+        (KJS::Parser::parse): Removed the sourceURL argument.
+
+        * kjs/Parser.h: Added sourceURL(), m_sourceURL, and m_lastLine. Added a lastLine
+        parameter to didFinishParsing, since the bison grammar knows the last line number
+        and we otherwise do not know it. Removed the sourceURL parameter from parse, since
+        that's now handled at a higher level.
+
+        * kjs/grammar.y: Pass the last line number to didFinishParsing.
+
+        * kjs/lexer.cpp:
+        (KJS::Lexer::setCode): Removed the sourceURL argument and the code to set m_sourceURL.
+        (KJS::Lexer::clear): Ditto.
+        * kjs/lexer.h: More of the same.
+
+        * kjs/nodes.cpp:
+        (KJS::FunctionBodyNode::FunctionBodyNode): Get the source URL from the parser rather
+        than from the lexer. Removed unneeded call to setLoc, since the line numbers already
+        both default to -1.
+
+2007-12-08  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Sam W.
+
+        Split the ENABLE_SVG_EXPERIMENTAL_FEATURES flag into separate flags.
+        
+        Fixes <rdar://problem/5620249> Must disable SVG animation
+        <rdar://problem/5612772> Disable SVG filters on Mac to match Windows behavior
+        
+        Minor config changes.
+
+        * Configurations/JavaScriptCore.xcconfig:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2007-12-07  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Darin.
+
+        - Rename isSafeScript to allowsAccessFrom.
+
+        * bindings/NP_jsobject.cpp:
+        (_isSafeScript):
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::allowsAccessFrom): Reverse caller/argument of allowsAccessFrom to match
+        the new call.
+
+2007-12-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Refactored variable access optimization: Removed the assumption that
+        the FunctionBodyNode holds the symbol table.
+        
+2007-12-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: added #include.
+
+        * kjs/nodes.cpp:
+
+2007-12-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: added #include.
+
+        * kjs/interpreter.cpp:
+
+2007-12-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: added #include.
+
+        * kjs/grammar.y:
+
+2007-12-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: added #include.
+
+        * kjs/function_object.cpp:
+
+2007-12-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Fixed crash seen running layout tests.
+        
+        Reverted a change I made earlier today. Added a comment to try to
+        discourage myself from making this mistake a third time.
+
+        * kjs/function.cpp:
+        (KJS::ActivationImp::mark):
+        * kjs/function.h:
+        (KJS::ActivationImp::ActivationImpData::ActivationImpData):
+
+2007-12-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Refactored parsing of global code: Removed the assumption that 
+        ProgramNode inherits from FunctionBodyNode from the parser.
+
+        * kjs/Parser.cpp:
+        (KJS::Parser::parseProgram):
+        (KJS::Parser::parseFunctionBody):
+        (KJS::Parser::parse):
+        * kjs/Parser.h:
+        (KJS::Parser::didFinishParsing):
+        * kjs/function.cpp:
+        * kjs/grammar.y:
+        * kjs/nodes.h:
+
+2007-12-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: added JSVariableObject.cpp to the .pri file.
+
+        * JavaScriptCore.pri:
+
+2007-12-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: added #include.
+
+        * kjs/function.cpp:
+
+2007-12-07  Steve Falkenburg  <sfalken@apple.com>
+
+        Re-named our B&I flag from BUILDBOT to PRODUCTION.
+
+        Reviewed by Sam Weinig.
+
+        * JavaScriptCore.vcproj/JavaScriptCore.make:
+        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj:
+
+2007-12-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: removed stray name qualification.
+
+        * kjs/function.h:
+        (KJS::ActivationImp::ActivationImp):
+
+2007-12-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: moved functions with qualified names outside of class
+        declaration.
+
+        * kjs/JSVariableObject.h:
+        (KJS::JSVariableObject::symbolTableGet):
+        (KJS::JSVariableObject::symbolTablePut):
+
+2007-12-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Next step in refactoring JSGlobalObject: Added JSVariableObject class,
+        and factored symbol-table-related code into it. (JSGlobalObject doesn't
+        use the symbol table code yet, though.)
+        
+        Layout and JS tests, and testapi, pass. SunSpider reports no regression.
+
+2007-12-07  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=16185
+          jsRegExpCompile should not add implicit non-capturing bracket
+
+        While this does not make SunSpider faster, it will make many regular
+        expressions a bit faster.
+
+        * pcre/pcre_compile.cpp: Moved CompileData struct in here from the
+        header since it's private to this file.
+        (compile_branch): Updated for function name change.
+        (compile_bracket): Renamed from compile_regex, since, for one thing,
+        this does not compile an entire regular expression.
+        (calculateCompiledPatternLengthAndFlags): Removed unused item_count
+        local variable. Renamed CompileData to cd instead of compile_block
+        to be consistent with other functions. Added code to set the
+        needOuterBracket flag if there's at least one "|" at the outer level.
+        (jsRegExpCompile): Renamed CompileData to cd instead of compile_block
+        to be consistent with other functions. Removed unneeded "size" field
+        from the compiled regular expression. If no outer bracket is needed,
+        then use compile_branch to compile the regular expression.
+
+        * pcre/pcre_internal.h: Removed the CompileData struct, which is now
+        private to pcre_compile.cpp. Removed the size member from JSRegExp.
+
+2007-12-06  Kevin Ollivier  <kevino@theolliviers.com>
+
+        MSVC7 build fix due to a compiler bug with placement new and/or
+        templates and casting.
+
+        Reviewed by Darin Adler.
+
+        * wtf/Vector.h:
+        (WTF::::append):
+
+2007-12-06  Darin Adler  <darin@apple.com>
+
+        Reviewed by Eric Seidel.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=16321
+          new RegExp("[\u0097]{4,6}", "gmy") crashes in DEBUG builds
+          <rdar://problem/5632992>
+
+        Test: fast/js/regexp-oveflow.html
+
+        * pcre/pcre_compile.cpp:
+        (calculateCompiledPatternLengthAndFlags): In the case where a single character
+        character class is optimized to not use a character class at all, the preflight
+        code was not setting the lastitemlength variable.
+
+2007-12-05  Mark Rowe  <mrowe@apple.com>
+
+        Qt Windows build fix.  Include the time-related headers in the correct place.
+
+        * kjs/JSGlobalObject.cpp:
+        * kjs/interpreter.cpp:
+
+2007-12-05  Darin Adler  <darin@apple.com>
+
+        Not reviewed; just undoing a previous commit.
+
+        - remove earlier incorrect fix for http://bugs.webkit.org/show_bug.cgi?id=16220
+          <rdar://problem/5625221> Crash opening www.news.com (CNet)
+
+        The real bug was the backwards ?: in the compile function, which Geoff just
+        fixed. Rolling out the incorrect earlier fix.
+
+        * pcre/pcre_compile.cpp: (calculateCompiledPatternLengthAndFlags): Take out
+        the unneeded preflight change. The regression test proves this is still working
+        fine, so the bug remains fixed.
+
+2007-12-01  Mark Rowe  <mrowe@apple.com>
+
+        Build fix.  Include headers before trying to use the things that they declare.
+
+        * kjs/JSImmediate.cpp:
+        * kjs/nodes.cpp:
+        * kjs/object.cpp:
+        * kjs/object_object.cpp:
+        * kjs/regexp_object.cpp:
+        * kjs/string_object.cpp:
+
+2007-12-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: added some #includes.
+
+        * kjs/JSImmediate.cpp:
+
+2007-12-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: added some #includes.
+
+        * kjs/JSGlobalObject.cpp:
+        * kjs/JSImmediate.cpp:
+
+2007-12-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: Fixed #include spelling.
+
+        * kjs/debugger.cpp:
+
+2007-12-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: added #include.
+
+        * kjs/debugger.cpp:
+
+2007-12-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: added a forward declaration.
+
+        * kjs/debugger.h:
+
+2007-12-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: added an #include.
+
+        * kjs/error_object.cpp:
+
+2007-12-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: added an #include.
+
+        * kjs/bool_object.cpp:
+
+2007-12-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+
+        Third step in refactoring JSGlobalObject: Moved data members and 
+        functions accessing data members from Interpreter to JSGlobalObject.
+        Changed Interpreter member functions to static functions.
+        
+        This resolves a bug in global object bootstrapping, where the global
+        ExecState could be used when uninitialized.
+        
+        This is a big change, but it's mostly code motion and renaming.
+        
+        Layout and JS tests, and testjsglue and testapi, pass. SunSpider reports
+        a .7% regression, but Shark sees no difference related to this patch,
+        and SunSpider reported a .7% speedup from an earlier step in this 
+        refactoring, so I think it's fair to call that a wash.
+
+2007-12-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler. (Or vice versa.)
+        
+        Fixed ASSERT during run-javascriptcore-tests. (Darin just added the
+        ASSERT, but the bug wasn't new.)
+
+        * pcre/pcre_compile.cpp:
+        (compile_branch): The ?: operator here was backwards, causing us to
+        execute the loop too many times, adding stray KET opcodes to the
+        compiled regular expression.
+
+2007-12-05  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Geoff.
+
+        - Wait until local variable data is fully constructed before notifying the debugger of entering
+        or leaving a call frame.
+
+        * kjs/function.cpp:
+        (KJS::FunctionImp::callAsFunction):
+        * kjs/nodes.cpp:
+        (KJS::FunctionBodyNode::execute):
+
+2007-12-05  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Oliver.
+
+        Build fix for GCC 4.2. Cast via a union to avoid strict-aliasing issues.
+
+        * wtf/FastMalloc.cpp:
+        (WTF::):
+        (WTF::getPageHeap):
+
+2007-12-05  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Darin.
+
+        Fix testkjs in 64-bit.
+
+        When built for 64-bit the TCMalloc spin lock uses pthread mutexes rather than a custom spin lock
+        implemented in assembly.  If we fail to initialize the pthread mutex, attempts to lock or unlock
+        it will fail and trigger a call to abort.
+
+        * wtf/FastMalloc.cpp: Initialize the spin lock so that we can later lock and unlock it.
+        * wtf/TCSpinLock.h: Add an Init method to the optimised spin lock.
+
+2007-12-04  Oliver Hunt  <oliver@apple.com>
+
+        Fix gtk build.
+
+        * wtf/TCSystemAlloc.cpp:
+
+2007-12-03  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Mark Rowe and Geoff Garen.
+
+        Merge TCMalloc r38
+
+        It also result in a performance progression between 0.5% and 
+        0.9% depending on the test, however most if not all of this 
+        gain will be consumed by the overhead involved in the later
+        change to release memory to the system.
+
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * wtf/FastMalloc.cpp:
+        (WTF::KernelSupportsTLS):
+        (WTF::CheckIfKernelSupportsTLS):
+        (WTF::):
+        (WTF::ClassIndex):
+        (WTF::SLL_Next):
+        (WTF::SLL_SetNext):
+        (WTF::SLL_Push):
+        (WTF::SLL_Pop):
+        (WTF::SLL_PopRange):
+        (WTF::SLL_PushRange):
+        (WTF::SLL_Size):
+        (WTF::SizeClass):
+        (WTF::ByteSizeForClass):
+        (WTF::NumMoveSize):
+        (WTF::InitSizeClasses):
+        (WTF::AllocationSize):
+        (WTF::TCMalloc_PageHeap::GetSizeClassIfCached):
+        (WTF::TCMalloc_PageHeap::CacheSizeClass):
+        (WTF::TCMalloc_PageHeap::init):
+        (WTF::TCMalloc_PageHeap::New):
+        (WTF::TCMalloc_PageHeap::AllocLarge):
+        (WTF::TCMalloc_PageHeap::Carve):
+        (WTF::TCMalloc_PageHeap::Delete):
+        (WTF::TCMalloc_PageHeap::IncrementalScavenge):
+        (WTF::PagesToMB):
+        (WTF::TCMalloc_PageHeap::Dump):
+        (WTF::TCMalloc_PageHeap::GrowHeap):
+        (WTF::TCMalloc_PageHeap::Check):
+        (WTF::ReleaseFreeList):
+        (WTF::TCMalloc_PageHeap::ReleaseFreePages):
+        (WTF::TCMalloc_ThreadCache_FreeList::Push):
+        (WTF::TCMalloc_ThreadCache_FreeList::PushRange):
+        (WTF::TCMalloc_ThreadCache_FreeList::PopRange):
+        (WTF::TCMalloc_ThreadCache_FreeList::Pop):
+        (WTF::TCMalloc_Central_FreeList::length):
+        (WTF::TCMalloc_Central_FreeList::tc_length):
+        (WTF::TCMalloc_Central_FreeList::Init):
+        (WTF::TCMalloc_Central_FreeList::ReleaseListToSpans):
+        (WTF::TCMalloc_Central_FreeList::EvictRandomSizeClass):
+        (WTF::TCMalloc_Central_FreeList::MakeCacheSpace):
+        (WTF::TCMalloc_Central_FreeList::ShrinkCache):
+        (WTF::TCMalloc_Central_FreeList::InsertRange):
+        (WTF::TCMalloc_Central_FreeList::RemoveRange):
+        (WTF::TCMalloc_Central_FreeList::FetchFromSpansSafe):
+        (WTF::TCMalloc_Central_FreeList::Populate):
+        (WTF::TCMalloc_ThreadCache::Init):
+        (WTF::TCMalloc_ThreadCache::Cleanup):
+        (WTF::TCMalloc_ThreadCache::Allocate):
+        (WTF::TCMalloc_ThreadCache::Deallocate):
+        (WTF::TCMalloc_ThreadCache::FetchFromCentralCache):
+        (WTF::TCMalloc_ThreadCache::ReleaseToCentralCache):
+        (WTF::TCMalloc_ThreadCache::Scavenge):
+        (WTF::TCMalloc_ThreadCache::PickNextSample):
+        (WTF::TCMalloc_ThreadCache::NewHeap):
+        (WTF::TCMalloc_ThreadCache::GetThreadHeap):
+        (WTF::TCMalloc_ThreadCache::GetCache):
+        (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
+        (WTF::TCMalloc_ThreadCache::InitTSD):
+        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
+        (WTF::TCMallocStats::ExtractStats):
+        (WTF::TCMallocStats::DumpStats):
+        (WTF::TCMallocStats::DumpStackTraces):
+        (WTF::TCMallocStats::TCMallocImplementation::MarkThreadIdle):
+        (WTF::TCMallocStats::TCMallocImplementation::ReleaseFreeMemory):
+        (WTF::TCMallocStats::TCMallocGuard::TCMallocGuard):
+        (WTF::TCMallocStats::TCMallocGuard::~TCMallocGuard):
+        (WTF::TCMallocStats::DoSampledAllocation):
+        (WTF::TCMallocStats::CheckCachedSizeClass):
+        (WTF::TCMallocStats::CheckedMallocResult):
+        (WTF::TCMallocStats::SpanToMallocResult):
+        (WTF::TCMallocStats::do_malloc):
+        (WTF::TCMallocStats::do_free):
+        (WTF::TCMallocStats::do_memalign):
+        (WTF::TCMallocStats::do_malloc_stats):
+        (WTF::TCMallocStats::do_mallopt):
+        (WTF::TCMallocStats::do_mallinfo):
+        (WTF::TCMallocStats::realloc):
+        (WTF::TCMallocStats::cpp_alloc):
+        (WTF::TCMallocStats::operator new):
+        (WTF::TCMallocStats::):
+        (WTF::TCMallocStats::operator new[]):
+        (WTF::TCMallocStats::malloc_stats):
+        (WTF::TCMallocStats::mallopt):
+        (WTF::TCMallocStats::mallinfo):
+        * wtf/TCPackedCache.h: Added.
+        (PackedCache::PackedCache):
+        (PackedCache::Put):
+        (PackedCache::Has):
+        (PackedCache::GetOrDefault):
+        (PackedCache::Clear):
+        (PackedCache::EntryToValue):
+        (PackedCache::EntryToUpper):
+        (PackedCache::KeyToUpper):
+        (PackedCache::UpperToPartialKey):
+        (PackedCache::Hash):
+        (PackedCache::KeyMatch):
+        * wtf/TCPageMap.h:
+        (TCMalloc_PageMap2::PreallocateMoreMemory):
+        * wtf/TCSystemAlloc.cpp:
+        (TCMalloc_SystemRelease):
+        * wtf/TCSystemAlloc.h:
+
+2007-12-04  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Sam.
+
+        Make isSafeScript const.
+        
+        * kjs/JSGlobalObject.h:
+        (KJS::JSGlobalObject::isSafeScript):
+
+2007-12-04  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - fix first part of http://bugs.webkit.org/show_bug.cgi?id=16220
+          <rdar://problem/5625221> Crash opening www.news.com (CNet)
+
+        Test: fast/js/regexp-overflow.html
+
+        * pcre/pcre_compile.cpp:
+        (calculateCompiledPatternLengthAndFlags): Add room for the additional BRA/KET that
+        was generated in the compile code but not taken into account here.
+
+2007-12-03  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=15618
+          <rdar://problem/5619353> REGRESSION: Stack overflow/crash in KJS::equal (15618)
+
+        Test: fast/js/recursion-limit-equal.html
+
+        * kjs/operations.cpp: (KJS::equal): Check the exception from toPrimitive.
+
+2007-12-03  Dan Bernstein  <mitz@apple.com>
+
+        - fix a copy-and-paste-o
+
+        * bindings/npruntime.cpp:
+        (_NPN_GetIntIdentifier):
+
+2007-12-03  Dan Bernstein  <mitz@apple.com>
+
+        Reviewed by Darin Adler.
+
+        - fix an ASSERT when getIntIdentifier is called with 0 or -1
+
+        * bindings/npruntime.cpp:
+        (_NPN_GetIntIdentifier): We cannot use the hashmap for 0 and -1 since
+        they are the empty value and the deleted value. Instead, keep the
+        identifiers for those two integers in a static array.
+
+2007-12-02  Darin Adler  <darin@apple.com>
+
+        Reviewed by Mitz.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=15848
+          <rdar://problem/5619330> REGRESSION: Assertion failure viewing comments page on digg.com
+
+        Test: fast/js/sparse-array.html
+
+        * kjs/array_instance.cpp:
+        (KJS::ArrayInstance::inlineGetOwnPropertySlot): Check sparse array cutoff before looking
+        in hash map. Can't avoid the branch because we can't look for 0 in the hash.
+        (KJS::ArrayInstance::deleteProperty): Ditto.
+
+2007-12-02  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: added an #include.
+
+        * kjs/collector.cpp:
+
+2007-12-02  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Eric Seidel.
+
+        Second step in refactoring JSGlobalObject: moved virtual functions from
+        Interpreter to JSGlobalObject.
+        
+        Layout and JS tests pass. SunSpider reports a .7% speedup -- don't 
+        believe his lies.
+
+2007-12-01  Alp Toker  <alp@atoker.com>
+
+        Reviewed by Adam Roben.
+
+        http://bugs.webkit.org/show_bug.cgi?id=16228
+        kJSClassDefinitionEmpty is not exported with JS_EXPORT
+
+        Add JS_EXPORT to kJSClassDefinitionEmpty.
+
+        Make the gcc compiler check take precedence over the WIN32||_WIN32
+        check to ensure that symbols are exported on Windows when using gcc.
+
+        Add a TODO referencing the bug about JS_EXPORT in the Win build
+        (http://bugs.webkit.org/show_bug.cgi?id=16227)
+
+        Don't define JS_EXPORT as 'extern' when the compiler is unknown since
+        it would result in the incorrect expansion:
+
+          extern extern const JSClassDefinition kJSClassDefinitionEmpty;
+
+        (This was something we inherited from CFBase.h that doesn't make sense
+        for JSBase.h)
+
+        * API/JSBase.h:
+        * API/JSObjectRef.h:
+
+2007-11-30  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Beth Dakin.
+        
+        Reversed the ownership relationship between Interpreter and JSGlobalObject.
+        Now, the JSGlobalObject owns the Interpreter, and top-level objects
+        that need the two to persist just protect the JSGlobalObject from GC.
+        
+        Global object bootstrapping looks a little odd right now, but it will
+        make much more sense soon, after further rounds of refactoring.
+
+        * bindings/runtime_root.h: Made this class inherit from RefCounted,
+        to avoid code duplication.
+
+        * kjs/collector.cpp:
+        (KJS::Collector::collect): No need to give special GC treatment to 
+        Interpreters, since we mark their global objects, which mark them.
+
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::mark): No need to mark our global object, since it
+        marks us.
+        * kjs/interpreter.h: Don't inherit from RefCounted -- JSGlobalObject 
+        owns us directly.
+
+        * kjs/testkjs.cpp: Modified to follow the new rules.
+        (createGlobalObject):
+        (runWithScripts):
+
+2007-11-30  Brent Fulgham  <bfulgham@gmail.com>
+
+        Reviewed by Eric.
+
+        * ChangeLog:
+        * pcre/pcre_compile.cpp:
+        (compile_branch):
+
+2007-11-30  Eric Seidel  <eric@webkit.org>
+
+        No review, build fix only.
+        
+        Fix uninitialized var warnings in release build.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * pcre/pcre_compile.cpp:
+        (compile_regex):
+
+2007-11-30  Darin Adler  <darin@apple.com>
+
+        Reviewed by Adam Roben.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=16207
+          JavaScript regular expressions should match UTF-16 code units rather than characters
+
+        SunSpider says this is 5.5% faster on the regexp test, 0.4% faste overall.
+
+        Test: fast/js/regexp-non-bmp.html
+
+        Renamed ANY_CHAR to NOT_NEWLINE to more-accurately reflect its meaning.
+
+        * pcre/pcre_compile.cpp:
+        (compile_branch): Removed calls to the UTF-16 character accessor functions, replacing
+        them with simple pointer dereferences in some cases, and no code at all in others.
+        (calculateCompiledPatternLengthAndFlags): Ditto.
+
+        * pcre/pcre_exec.cpp:
+        (match): Fixed indentation of some case labels (including all the BEGIN_OPCODE).
+        Removed calls to the UTF-16 character accessor functions, replacing them with simple
+        pointer dereferences in some cases, and no code at all in others. Also removed some
+        explicit UTF-16 support code in a few cases. Removed the unneeded "UTF-8" code path
+        in the ANY_CHAR repeat code, and in another case, eliminated the code to check against
+        end_subject in because it is already done outside the loop.
+        (jsRegExpExecute):
+
+        * pcre/pcre_internal.h: Removed all the UTF-16 helper functions.
+
+2007-11-30  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by darin.
+        
+        PCRE crashes under GuardMalloc
+        http://bugs.webkit.org/show_bug.cgi?id=16127
+        check against patternEnd to make sure we don't walk off the end of the string
+
+        * pcre/pcre_compile.cpp:
+        (compile_branch):
+        (calculateCompiledPatternLengthAndFlags):
+
+2007-11-30  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+        
+        Fix layout test regressions caused by r28186
+        http://bugs.webkit.org/show_bug.cgi?id=16195
+        change first_byte and req_byte back to shorts instead of chars
+        (I think PCRE stuffs information in the high bits) 
+
+        * pcre/pcre_internal.h:
+
+2007-11-29  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej and Darin.
+
+        Make the JS collector work with multiple threads 
+
+        Under heavy contention it was possible the GC to suspend other
+        threads inside the pthread spinlock, which could lead to the GC
+        thread blocking on the pthread spinlock itself.
+
+        We now determine and store each thread's stack base when it is
+        registered, thus removing the need for any calls to pthread_get_stackaddr_np
+        that needed the pthread spinlock.
+
+        * kjs/collector.cpp:
+        (KJS::Collector::Thread::Thread):
+        (KJS::Collector::registerThread):
+        (KJS::Collector::markOtherThreadConservatively):
+
+2007-11-29  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        Removed some unreachable code (ironically, the code was some
+        ASSERT_NOT_REACHED()s).
+
+        * pcre/pcre_compile.cpp:
+        (compile_branch):
+        * pcre/pcre_exec.cpp:
+        (match):
+
+2007-11-29  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Mark Rowe.
+        
+        Fix for --guard crash of fast/js/regexp-charclass-crash introduced by r28151.
+
+        * pcre/pcre_compile.cpp:
+        (is_anchored):
+
+2007-11-28  Mark Rowe  <mrowe@apple.com>
+
+        Gtk build fix.  Rubber-stamped by Eric.
+
+        * pcre/pcre_exec.cpp:
+        (match): Add braces around the body of the case statement to prevent
+        wanings about jumps across the initialization of a variable.
+
+2007-11-29  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Mark Rowe.
+        
+        Attempt to fix non-mac builds after PCRE cleanup.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCoreSources.bkl:
+        * pcre/pcre.pri:
+
+2007-11-28  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+
+        Centralize code for subjectPtr adjustments using inlines, only ever check for a single
+        trailing surrogate (as UTF16 only allows one), possibly fix PCRE bugs involving char
+        classes and garbled UTF16 strings.
+
+        * pcre/pcre_exec.cpp:
+        (match):
+        (jsRegExpExecute):
+        * pcre/pcre_internal.h:
+        (getPreviousChar):
+        (movePtrToPreviousChar):
+        (movePtrToNextChar):
+        (movePtrToStartOfCurrentChar):
+
+2007-11-28  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+
+        change getChar* functions to return result and push 'c' into local scopes for clarity
+
+        * pcre/pcre_compile.cpp:
+        (compile_branch):
+        (calculateCompiledPatternLengthAndFlags):
+        * pcre/pcre_exec.cpp:
+        (match):
+        * pcre/pcre_internal.h:
+        (getChar):
+        (getCharAndAdvance):
+        (getCharAndLength):
+        (getCharAndAdvanceIfSurrogate):
+
+2007-11-28  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Comment cleanup
+
+        * pcre/pcre_exec.cpp:
+        (match):
+
+2007-11-26  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Further cleanups to calculateCompiledPatternLengthAndFlags
+
+        * pcre/pcre_compile.cpp:
+        (calculateCompiledPatternLengthAndFlags):
+        * pcre/pcre_internal.h:
+
+2007-11-26  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Give consistent naming to the RegExp options/compile flags
+
+        * pcre/pcre_compile.cpp:
+        (compile_branch):
+        (is_anchored):
+        (find_firstassertedchar):
+        (printCompiledRegExp):
+        (jsRegExpCompile):
+        * pcre/pcre_exec.cpp:
+        (jsRegExpExecute):
+        * pcre/pcre_internal.h:
+
+2007-11-26  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Pull first_byte and req_byte optimizations out into separate static funtions, SunSpider reported this as a win.
+
+        * pcre/pcre_exec.cpp:
+        (tryFirstByteOptimization):
+        (tryRequiredByteOptimization):
+        (jsRegExpExecute):
+        * pcre/pcre_internal.h:
+
+2007-11-26  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+
+        give PCRE_MULTILINE a better name: OptionMatchAcrossMultipleLines
+
+        * pcre/pcre_compile.cpp:
+        (compile_branch):
+        (is_anchored):
+        (printCompiledRegExp):
+        (jsRegExpCompile):
+        * pcre/pcre_exec.cpp:
+        (jsRegExpExecute):
+        * pcre/pcre_internal.h:
+
+2007-11-26  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Oliver.
+
+        Deprecate jsRegExpExecute's offset-vector fallback code
+
+        * pcre/pcre_exec.cpp:
+        (jsRegExpExecute):
+
+2007-11-26  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+
+        Make cur_is_word and prev_is_word locals, and change OP_ANY to OP_ANY_CHAR for clarity
+
+        * pcre/pcre_compile.cpp:
+        (find_fixedlength):
+        (compile_branch):
+        (canApplyFirstCharOptimization):
+        * pcre/pcre_exec.cpp:
+        (match):
+        * pcre/pcre_internal.h:
+
+2007-11-26  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Mitz & Maciej.
+
+        Change _NC operators to use _IGNORING_CASE for clarity
+
+        * pcre/pcre_compile.cpp:
+        (find_fixedlength):
+        (compile_branch):
+        (find_firstassertedchar):
+        * pcre/pcre_exec.cpp:
+        (match):
+        * pcre/pcre_internal.h:
+
+2007-11-26  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Mitz.
+
+        Remove branch from return
+
+        * pcre/pcre_compile.cpp:
+        (compile_branch):
+        * pcre/pcre_exec.cpp:
+        (match):
+
+2007-11-26  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+
+        Add repeatInformationFromInstructionOffset inline
+
+        * pcre/pcre_exec.cpp:
+        (repeatInformationFromInstructionOffset):
+        (match):
+
+2007-11-26  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+
+        Remove no longer used error code JSRegExpErrorMatchLimit
+
+        * kjs/regexp.cpp:
+        (KJS::RegExp::match):
+        * pcre/pcre.h:
+        * pcre/pcre_internal.h:
+
+2007-11-26  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Make i locally scoped for better code clarity
+
+        * pcre/pcre_exec.cpp:
+        (match):
+
+2007-11-26  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+
+        Give subjectPtr and instructionPtr sane names, reduce size of MatchFrame for a 0.2% speedup.
+
+        * pcre/pcre_compile.cpp:
+        (compile_branch):
+        (calculateCompiledPatternLengthAndFlags):
+        * pcre/pcre_exec.cpp:
+        (match_ref):
+        (MatchStack::pushNewFrame):
+        (getUTF8CharAndIncrementLength):
+        (match):
+        * pcre/pcre_internal.h:
+        (getChar):
+        (getCharAndAdvance):
+        (getCharAndLength):
+        (getCharAndAdvanceIfSurrogate):
+        * pcre/pcre_xclass.cpp:
+        (getUTF8CharAndAdvancePointer):
+
+2007-11-26  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Small speedup (0.7%) by simplifying canUseStackBufferForNextFrame() check
+
+        * pcre/pcre_exec.cpp:
+        (MatchStack::MatchStack):
+        (MatchStack::popCurrentFrame):
+
+2007-11-25  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Lower MATCH_LIMIT_RECURSION to more sane levels to prevent hangs on run-javascriptcore-tests
+
+        * pcre/pcre_internal.h:
+
+2007-11-25  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+
+        Remove match_is_group variable for another 5% speedup
+
+        * pcre/pcre_compile.cpp:
+        * pcre/pcre_exec.cpp:
+        (startNewGroup):
+        (match):
+
+2007-11-28  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Abstract frame variables into locals and args
+
+        * pcre/pcre_compile.cpp:
+        (compile_branch):
+        * pcre/pcre_exec.cpp:
+        (match):
+        * pcre/pcre_internal.h:
+
+2007-11-28  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Section off MatchData arguments into args struct
+
+        * pcre/pcre_exec.cpp:
+        (MatchStack::pushNewFrame):
+        (match):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Remove redundant eptrblock struct
+
+        * pcre/pcre_exec.cpp:
+        (MatchStack::pushNewFrame):
+        (match):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+
+        Remove redundant match_call_count and move recursion check out of super-hot code path
+        SunSpider says this is at least an 8% speedup for regexp.
+
+        * pcre/pcre_exec.cpp:
+        (MatchStack::MatchStack):
+        (MatchStack::pushNewFrame):
+        (MatchStack::popCurrentFrame):
+        (MatchStack::popAllFrames):
+        (match):
+        (jsRegExpExecute):
+        * pcre/pcre_internal.h:
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Get rid of GETCHAR* macros, replacing them with better named inlines
+
+        * pcre/pcre_compile.cpp:
+        (compile_branch):
+        (calculateCompiledPatternLengthAndFlags):
+        * pcre/pcre_exec.cpp:
+        (match):
+        * pcre/pcre_internal.h:
+        (getCharAndAdvance):
+        (getCharAndLength):
+        (getCharAndAdvanceIfSurrogate):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Further cleanup GET/PUT inlines
+
+        * pcre/pcre_internal.h:
+        (putOpcodeValueAtOffset):
+        (getOpcodeValueAtOffset):
+        (putOpcodeValueAtOffsetAndAdvance):
+        (put2ByteOpcodeValueAtOffset):
+        (get2ByteOpcodeValueAtOffset):
+        (put2ByteOpcodeValueAtOffsetAndAdvance):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Give GET, PUT better names, and add (poor) moveOpcodePtrPastAnyAlternateBranches
+
+        * pcre/pcre_compile.cpp:
+        (firstSignificantOpCodeSkippingAssertions):
+        (find_fixedlength):
+        (complete_callout):
+        (compile_branch):
+        (compile_regex):
+        (is_anchored):
+        (canApplyFirstCharOptimization):
+        (find_firstassertedchar):
+        * pcre/pcre_exec.cpp:
+        (match):
+        * pcre/pcre_internal.h:
+        (putOpcodeValueAtOffset):
+        (getOpcodeValueAtOffset):
+        (putOpcodeValueAtOffsetAndAdvance):
+        (put2ByteOpcodeValueAtOffset):
+        (get2ByteOpcodeValueAtOffset):
+        (moveOpcodePtrPastAnyAlternateBranches):
+        * pcre/pcre_ucp_searchfuncs.cpp:
+        (_pcre_ucp_othercase):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Add inlines for toLowerCase, isWordChar, isSpaceChar for further regexp speedup
+
+        * pcre/pcre_compile.cpp:
+        (compile_branch):
+        (jsRegExpCompile):
+        * pcre/pcre_exec.cpp:
+        (match):
+        (jsRegExpExecute):
+        * pcre/pcre_internal.h:
+        (toLowerCase):
+        (flipCase):
+        (classBitmapForChar):
+        (charTypeForChar):
+        (isWordChar):
+        (isSpaceChar):
+        (CompileData::CompileData):
+        * pcre/pcre_xclass.cpp:
+        (_pcre_xclass):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        cleanup _pcre_ucp_othercase
+
+        * pcre/pcre_ucp_searchfuncs.cpp:
+        (_pcre_ucp_othercase):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+
+        Use better variable names for case ignoring options
+
+        * pcre/pcre_compile.cpp:
+        (compile_branch):
+        (find_firstassertedchar):
+        (printCompiledRegExp):
+        (jsRegExpCompile):
+        * pcre/pcre_exec.cpp:
+        (match_ref):
+        (match):
+        (jsRegExpExecute):
+        * pcre/pcre_internal.h:
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        split first_significant_code into two simpler functions
+
+        * pcre/pcre_compile.cpp:
+        (firstSignificantOpCode):
+        (firstSignificantOpCodeSkippingAssertions):
+        (is_anchored):
+        (canApplyFirstCharOptimization):
+        (find_firstassertedchar):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        clean up is_counted_repeat
+
+        * pcre/pcre_compile.cpp:
+        (is_counted_repeat):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        clean up check_escape
+
+        * pcre/pcre_compile.cpp:
+        (check_escape):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Reformat find_fixedlength
+
+        * pcre/pcre_compile.cpp:
+        (find_fixedlength):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        reformat is_anchored
+
+        * pcre/pcre_compile.cpp:
+        (is_anchored):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+
+        Remove unused function could_be_empty_branch
+
+        * pcre/pcre_compile.cpp:
+        (first_significant_code):
+        (find_fixedlength):
+        (compile_branch):
+        (canApplyFirstCharOptimization):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Pass around MatchData objects by reference
+
+        * pcre/pcre_exec.cpp:
+        (pchars):
+        (match_ref):
+        (match):
+        (jsRegExpExecute):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        give PCRE_STARTLINE a better name and rename match_data to MatchData
+
+        * pcre/pcre_compile.cpp:
+        (compile_branch):
+        (canApplyFirstCharOptimization):
+        (find_firstassertedchar):
+        (printCompiledRegExp):
+        (jsRegExpCompile):
+        * pcre/pcre_exec.cpp:
+        (pchars):
+        (jsRegExpExecute):
+        * pcre/pcre_internal.h:
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Clean up find_firstassertedchar
+
+        * pcre/pcre_compile.cpp:
+        (get_othercase_range):
+        (find_firstassertedchar):
+        (calculateCompiledPatternLengthAndFlags):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Tim Hatcher.
+
+        Pass around CompileData& instead of CompileData*
+
+        * pcre/pcre_compile.cpp:
+        (compile_branch):
+        (jsRegExpCompile):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Clean up compile_branch, move _pcre_ord2utf8, and rename CompileData
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * pcre/pcre_compile.cpp:
+        (_pcre_ord2utf8):
+        (calculateCompiledPatternLengthAndFlags):
+        (jsRegExpCompile):
+        * pcre/pcre_internal.h:
+        * pcre/pcre_ord2utf8.cpp: Removed.
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        removing more macros
+
+        * pcre/pcre_compile.cpp:
+        (could_be_empty_branch):
+        (compile_branch):
+        (calculateCompiledPatternLengthAndFlags):
+        * pcre/pcre_exec.cpp:
+        (match):
+        (jsRegExpExecute):
+        * pcre/pcre_internal.h:
+        * pcre/pcre_xclass.cpp:
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+
+        clean up formating in compile_branch
+
+        * pcre/pcre_compile.cpp:
+        (compile_branch):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Fix spacing for read_repeat_counts
+
+        * pcre/pcre_compile.cpp:
+        (read_repeat_counts):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Get rid of PCRE custom char types
+
+        * pcre/pcre_compile.cpp:
+        (check_escape):
+        (complete_callout):
+        (compile_branch):
+        (compile_regex):
+        (calculateCompiledPatternLengthAndFlags):
+        (jsRegExpCompile):
+        * pcre/pcre_exec.cpp:
+        (match_ref):
+        (match):
+        (jsRegExpExecute):
+        * pcre/pcre_internal.h:
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        reformat get_othercase_range
+
+        * pcre/pcre_compile.cpp:
+        (get_othercase_range):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+
+        Remove register keyword and more cleanup
+
+        * pcre/pcre_compile.cpp:
+        (find_fixedlength):
+        (compile_branch):
+        (is_anchored):
+        (is_startline):
+        (find_firstassertedchar):
+        (calculateCompiledPatternLengthAndFlags):
+        (jsRegExpCompile):
+        * pcre/pcre_exec.cpp:
+        (MatchStack::canUseStackBufferForNextFrame):
+        (MatchStack::allocateNextFrame):
+        (MatchStack::pushNewFrame):
+        (MatchStack::frameIsStackAllocated):
+        (MatchStack::popCurrentFrame):
+        (MatchStack::unrollAnyHeapAllocatedFrames):
+        (getUTF8CharAndIncrementLength):
+        (match):
+        (jsRegExpExecute):
+        * pcre/pcre_internal.h:
+        (PUT2INC):
+        (isLeadingSurrogate):
+        (isTrailingSurrogate):
+        (decodeSurrogatePair):
+        (getChar):
+        * pcre/pcre_ord2utf8.cpp:
+        (_pcre_ord2utf8):
+        * pcre/pcre_xclass.cpp:
+        (getUTF8CharAndAdvancePointer):
+        (_pcre_xclass):
+
+2007-11-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+
+        Clean up jsRegExpExecute
+
+        * pcre/pcre_compile.cpp:
+        (returnError):
+        (jsRegExpCompile):
+        * pcre/pcre_exec.cpp:
+        (jsRegExpExecute):
+        * pcre/pcre_internal.h:
+
+2007-11-29  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Geoff.
+
+        Merging updated system alloc and spinlock code from r38 of TCMalloc.
+
+        This is needed as a precursor to the merge of TCMalloc proper.
+
+        * wtf/FastMalloc.cpp:
+        (WTF::TCMalloc_PageHeap::GrowHeap):
+        * wtf/TCSpinLock.h:
+        (TCMalloc_SpinLock::TCMalloc_SpinLock):
+        (TCMalloc_SpinLock::):
+        (TCMalloc_SpinLock::Lock):
+        (TCMalloc_SpinLock::Unlock):
+        (TCMalloc_SpinLock::IsHeld):
+        * wtf/TCSystemAlloc.cpp:
+        (TrySbrk):
+        (TryMmap):
+        (TryVirtualAlloc):
+        (TryDevMem):
+        (TCMalloc_SystemAlloc):
+        * wtf/TCSystemAlloc.h:
+
+2007-11-28  Brady Eidson <beidson@apple.com>
+
+        Reviewed by Geoff
+
+        Add copyKeysToVector utility, mirroring copyValuesToVector
+        Also change the copyValuesToVector implementation to be a little more attractive
+
+        * wtf/HashMap.h:
+        (WTF::copyKeysToVector):
+        (WTF::copyValuesToVector):
+
+2007-11-27  Alp Toker  <alp@atoker.com>
+
+        Reviewed by Mark Rowe.
+
+        Add a list of public JavaScriptCore headers for installation.
+
+        This follows the convention used for the Qt and GTK+ header lists.
+
+        * headers.pri: Added.
+
+2007-11-27  Alp Toker  <alp@atoker.com>
+
+        Prospective MSVC build fix.
+
+        Roll back dllexport/dllimport support for now.
+
+        * API/JSBase.h:
+
+2007-11-27  Alp Toker  <alp@atoker.com>
+
+        Reviewed by Maciej.
+
+        http://bugs.webkit.org/show_bug.cgi?id=15569
+        [gtk] GTK JavaScriptCore needs to export symbols for JSC API and WTF
+
+        Introduce JS_EXPORT to mark symbols to be exported as public API.
+
+        Export all public symbols in the JavaScriptCore C API.
+
+        This matches conventions for exporting symbols set by the CF and CG
+        frameworks.
+
+        * API/JSBase.h:
+        * API/JSContextRef.h:
+        * API/JSObjectRef.h:
+        * API/JSStringRef.h:
+        * API/JSStringRefBSTR.h:
+        * API/JSStringRefCF.h:
+        * API/JSValueRef.h:
+
+2007-11-27  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Adam.
+
+        Make PropertyNameArray and ScopeChain COMEnumVariant friendly.
+        
+        * kjs/PropertyNameArray.cpp:
+        (KJS::PropertyNameArray::swap):
+        Implement PropertyNameArray::swap.
+        
+        * kjs/PropertyNameArray.h:
+        Add ValueType typedef. Replace PropertyNameArrayIterator with 
+        PropertyNameArray::const_iterator.
+        
+        * kjs/nodes.cpp:
+        (KJS::ForInNode::execute):
+        * kjs/scope_chain.cpp:
+        (KJS::ScopeChain::print):
+        Update for changes to PropertyNameArray.
+        
+        * kjs/scope_chain.h:
+        Add const_iterator and ValueType typedef.
+        
+2007-11-27  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Darin.
+
+        Add a ValueType typedef.
+        
+        * wtf/Vector.h:
+
+2007-11-26  Darin Adler  <darin@apple.com>
+
+        Reviewed by Mitz.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=16096
+          REGRESSION (r26653-r26699): Plaxo.com addressbook does not load in webkit nightlies
+
+        Test: fast/js/regexp-overflow.html
+
+        * pcre/pcre_compile.cpp: (calculateCompiledPatternLengthAndFlags):
+        Removed a stray "ptr++" that I added by accident when merging the
+        changes between PCRE 6.4 and 6.5. 
+
+2007-11-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Kevin McCullough.
+        
+        Fixed <rdar://problem/5597937> REGRESSION (r27126): Drosera does not 
+        show variables (can't enumerate ActivationImp properties)
+        
+        Implemented a custom ActivationImp::getPropertyNames, since 
+        ActivationImp now uses a custom property storage mechanism for local
+        variables.
+
+        * kjs/function.cpp:
+        (KJS::ActivationImp::getPropertyNames):
+        * kjs/function.h:
+
+2007-11-26  Alp Toker  <alp@atoker.com>
+
+        GTK+/Qt/Wx build fix for breakage introduced in r28039.
+
+        * ForwardingHeaders/JavaScriptCore/JSRetainPtr.h: Added.
+
+2007-11-24  Laszlo Gombos  <laszlo.gombos@gmail.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        Fix minor compiler warning (GCC 4.1.3)
+
+        * pcre/pcre_internal.h:
+        * pcre/pcre_ucp_searchfuncs.cpp:
+        (_pcre_ucp_othercase):
+
+2007-11-25  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Dan Bernstein.
+
+        Fix http://bugs.webkit.org/show_bug.cgi?id=16129
+        Bug 16129: REGRESSION (r27761-r27811): malloc error while visiting http://mysit.es (crashes release build)
+
+        * pcre/pcre_compile.cpp: Change errorcode to be passed by reference so that any error code is propagated
+        to our caller like they expect.
+
+2007-11-23  Kevin Ollivier  <kevino@theolliviers.com>
+
+        MSVC7 build fix. (rand_s doesn't exist there)
+
+        Reviewed by Adam Roben.
+
+        * kjs/config.h:
+        * wtf/MathExtras.h:
+
+2007-11-23  Kevin Ollivier  <kevino@theolliviers.com>
+
+        wx build fix. Move WX_PYTHON logic into project build settings,
+        add WebKitLibraries dirs on Win, and explicitly include JSCore 
+        headers in testkjs rather than getting them from a template.
+        (Include dir order of JSCore/WTF and ICU headers is important due  
+        to wtf/unicode/utf8.h.)
+
+        * jscore.bkl:
+
+2007-11-23  Simon Hausmann  <hausmann@webkit.org>
+
+        Reviewed by George Staikos <staikos@kde.org>.
+
+        Fix make (dist)clean on Windows.
+        
+        OBJECTS_DIR_WTR does not exist anymore, use GENERATED_SOURCES_DIR.
+        
+
+        * JavaScriptCore.pri:
+        * pcre/pcre.pri:
+
+2007-11-22  Simon Hausmann  <hausmann@kde.org>
+
+        Reviewed by George.
+
+        Make the directory of where to put the generated sources configurable through the GENERATED_SOURCE_DIR variable
+
+        * JavaScriptCore.pri:
+        * pcre/pcre.pri:
+
+2007-11-22  Simon Hausmann  <hausmann@kde.org>
+
+        Reviewed by George.
+
+        Centralize the setup for all the extra compilers in a addExtraCompiler function.
+        
+        This allows adding a "generated_files" target that builds all generated files using "make generated_files".
+        For the build inside Qt we do not generate actual rules for the extra compilers but instead
+        do the variable substitution of compiler.output manually and add the generated sources to SOURCES.
+
+        * JavaScriptCore.pri:
+        * pcre/pcre.pri:
+
+2007-11-20  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Tim Hatcher.
+
+        <rdar://problem/5602936> Need to resolve new GCC 4.2 warnings
+
+        Fix all warnings emitted by GCC 4.2 when building JavaScriptCore.  This allows builds with
+        -Werror to succeed.  At present they will crash when executed due to code that is not safe
+        under strict aliasing (<rdar://problem/5536806>).
+
+        * Configurations/Base.xcconfig: Remove the -Wno-long-double flag.
+        * kjs/date_object.cpp:
+        (KJS::formatTime): Test whether the stack-allocated string is empty rather than at a non-null address.
+        * kjs/dtoa.cpp:
+        (Bigint::): Tweak formatting to silence warnings.
+        * pcre/pcre_exec.cpp:
+        (match): Tweak formatting to silence warnings
+        * wtf/Assertions.cpp: Add printf format attribute to functions that warrant it.
+        * wtf/Assertions.h: Ditto.
+
+2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>
+
+        wx port build fix (wx headers include ctype functions).
+
+        * kjs/config.h:
+
+2007-11-19  Kevin Ollivier  <kevino@theolliviers.com>
+
+        Remove outdated and unused Windows port files.
+
+        Reviewed by Adam Roben.
+
+        * Makefile.vc: Removed.
+        * README-Win32.txt: Removed.
+
+2007-11-18  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Oliver.
+
+        * tests/mozilla/jsDriver.pl: exit non-0 when user aborts test run
+
+2007-11-17  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Darin Adler.
+
+        Fix: <rdar://problem/5607032> REGRESSION: testapi exits with assertion failure in debug build
+             <rdar://problem/5440659> JSGlobalContextCreate throws away globalObjectClass's prototype
+             http://bugs.webkit.org/show_bug.cgi?id=16033
+
+        Split Interpreter's initialization into two distinct steps:  the creation of the global prototypes
+        and constructors, and storing them on the global object.  This allows JSClassRef's passed to
+        JSGlobalContextCreate to be instantiated with the correct prototype.
+
+        * API/JSCallbackObject.cpp: Assert at compile-time that the custom global object will fit in a collector cell.
+        * API/JSCallbackObject.h:
+        * API/JSCallbackObjectFunctions.h:
+        (KJS::::JSCallbackObject):
+        (KJS::::init):
+        * API/JSContextRef.cpp:
+        (JSGlobalContextCreate): Construct and set the interpreter's global object separately.  When globalObjectClass
+        is passed we need to set the interpreter's global object before doing the JSCallbackObject's initialization to
+        prevent any JSObjectInitializeCallback's being invoked before a global object is set.
+        * API/testapi.c:
+        (globalObject_initialize): Test the object passed in is correct and that it has the expected global properties.
+        (globalObject_get):
+        (globalObject_set):
+        (main):
+        * API/testapi.js: Test that any static properties exposed by the global object's custom class are found.
+        * JavaScriptCore.exp:
+        * bindings/testbindings.cpp:
+        (main): Update for changes in Interpreter method signatures.
+        * bindings/testbindings.mm:
+        (main): Ditto.
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::ExecState):
+        (KJS::ExecState::mark):
+        (KJS::ExecState::setGlobalObject):
+        * kjs/ExecState.h: Rename scope to m_scopeChain.
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::Interpreter):
+        (KJS::Interpreter::init):
+        (KJS::Interpreter::globalObject):
+        (KJS::Interpreter::setGlobalObject):
+        (KJS::Interpreter::resetGlobalObjectProperties):
+        (KJS::Interpreter::createObjectsForGlobalObjectProperties):
+        (KJS::Interpreter::setGlobalObjectProperties): Switch to using putDirect to ensure that the global object's put method
+        cannot interfere with setting of the global properties.  This prevents a user-written JSClassRef from attempting to
+        call back into JavaScript from the initialization of the global object's members.
+        * kjs/interpreter.h:
+        * kjs/testkjs.cpp:
+        (setupInterpreter): Update for changes in Interpreter method signatures.
+
+2007-11-17  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Prevent testapi from reporting false leaks.  Clear out local variables pointing at
+        JSObjectRefs to allow their values to be collected.
+
+        * API/testapi.c:
+        (main):
+
+2007-11-17  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Prevent testapi from crashing if testapi.js can not be found by nil-checking the result of createStringWithContentsOfFile.
+
+        * API/testapi.c:
+        (main):
+
+2007-11-17  Alp Toker  <alp@atoker.com>
+
+        Reviewed by Eric.
+
+        http://bugs.webkit.org/show_bug.cgi?id=16032
+        JS minidom is not portable
+
+        Use a plain UTF-8 string instead of a CFString.
+
+        Print to stdout, not stderr like CFShow() would have done, since that
+        behaviour seems unintentional.
+
+        * API/minidom.c:
+        (main):
+
+2007-11-17  Steve Falkenburg  <sfalken@apple.com>
+
+        Windows build fix.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2007-11-16  Mark Rowe  <mrowe@apple.com>
+
+        Windows build fix.
+
+        * kjs/lexer.cpp:
+        (KJS::Lexer::record8):
+
+2007-11-16  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Eric.
+
+        Replace strings, identifier, buffer8 and buffer16 members of Lexer with vectors.
+        SunSpider claims this is a 0.7% speedup.
+
+        * kjs/lexer.cpp:
+        (KJS::Lexer::Lexer):
+        (KJS::Lexer::lex):
+        (KJS::Lexer::record8):
+        (KJS::Lexer::record16):
+        (KJS::Lexer::scanRegExp):
+        (KJS::Lexer::clear):
+        (KJS::Lexer::makeIdentifier):
+        (KJS::Lexer::makeUString):
+        * kjs/lexer.h:
+        * kjs/ustring.cpp:
+        (KJS::UString::UString): Add a convenience constructor that takes a const Vector<UChar>&.
+        * kjs/ustring.h:
+
+2007-11-16  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Add a new include path
+        and ignore the int -> bool conversion warning.
+
+2007-11-16  Alexey Proskuryakov  <ap@webkit.org>
+
+        Fix Windows debug build.
+        Rubber-stamped by Eric
+
+        * pcre/pcre_exec.cpp: (match): Removed ASSERT_NOT_REACHED assertions that were making MSVC
+        complain about unreachable code.
+
+2007-11-15  Mark Rowe  <mrowe@apple.com>
+
+        Gtk build fix.
+
+        * kjs/Parser.cpp:
+
+2007-11-15  Mark Rowe  <mrowe@apple.com>
+
+        Mac build and header search path sanity fix.
+
+        Reviewed by Sam Weinig and Tim Hatcher.
+
+        Move base setting for HEADER_SEARCH_PATHS into Base.xcconfig, and extend
+        it in JavaScriptCore.xcconfig.  This removes the need to override it on a
+        per-target basis inside the .xcodeproj file.
+
+        * Configurations/Base.xcconfig:
+        * Configurations/JavaScriptCore.xcconfig:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2007-11-15  Mark Rowe  <mrowe@apple.com>
+
+        Qt build fix.
+
+        * kjs/Parser.h:
+
+2007-11-15  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Eric Seidel.
+
+        Another round of grammar / parsing cleanup.
+        
+        1. Created distinct parser calls for parsing function bodies vs
+        programs. This will help later with optimizing global variable access.
+        
+        2. Turned Parser into a singleton. Cleaned up Lexer's singleton 
+        interface.
+        
+        3. Modified Lexer to free a little more memory when done lexing. (Added
+        FIXMEs for similar issues that I didn't fix.)
+        
+        4. Changed Lexer::makeIdentifier and Lexer::makeUString to start 
+        respecting the arguments passed to them. (No behavior change, but this
+        problem could have caused serious problems for an unsuspecting user of
+        these functions.)
+        
+        5. Removed KJS_DEBUG_MEM because it was bit-rotted.
+        
+        6. Removed Parser::prettyPrint because the same work was simpler to do
+        at the call site.
+        
+        7. Some renames:
+        
+            "Parser::accept" => "Parser::didFinishParsing"
+            "Parser::sid" => "Parser::m_sourceID"
+            "Lexer::doneParsing" => "Lexer::clear"
+            "sid" => "sourceId"
+            "lineno" => "lineNo"
+        
+        * JavaScriptCore.exp:
+        * kjs/Parser.cpp:
+        (KJS::Parser::Parser):
+        (KJS::Parser::parseProgram):
+        (KJS::Parser::parseFunctionBody):
+        (KJS::Parser::parse):
+        (KJS::Parser::didFinishParsing):
+        (KJS::parser):
+        * kjs/Parser.h:
+        (KJS::Parser::sourceId):
+        * kjs/function.cpp:
+        (KJS::GlobalFuncImp::callAsFunction):
+        * kjs/function_object.cpp:
+        (FunctionObjectImp::construct):
+        * kjs/grammar.y:
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::checkSyntax):
+        (KJS::Interpreter::evaluate):
+        * kjs/interpreter.h:
+        * kjs/lexer.cpp:
+        (kjsyylex):
+        (KJS::lexer):
+        (KJS::Lexer::Lexer):
+        (KJS::Lexer::~Lexer):
+        (KJS::Lexer::scanRegExp):
+        (KJS::Lexer::doneParsing):
+        (KJS::Lexer::makeIdentifier):
+        (KJS::Lexer::makeUString):
+        * kjs/lexer.h:
+        (KJS::Lexer::pattern):
+        (KJS::Lexer::flags):
+        (KJS::Lexer::sawError):
+        * kjs/nodes.cpp:
+        (KJS::Node::Node):
+        (KJS::FunctionBodyNode::FunctionBodyNode):
+        * kjs/nodes.h:
+        * kjs/testkjs.cpp:
+        (prettyPrintScript):
+        (kjsmain):
+        * kjs/ustring.cpp:
+        * kjs/ustring.h:
+
+2007-11-15  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Darin.
+
+        <rdar://problem/5601548> REGRESSION: All SourceElements and their children leak after a syntax error
+        
+        Add a stub node to maintain the Vector of SourceElements until assignment.
+
+        * kjs/grammar.y:
+        * kjs/nodes.h:
+        (KJS::SourceElementsStub::SourceElementsStub):
+        (KJS::SourceElementsStub::append):
+        (KJS::SourceElementsStub::release):
+        (KJS::SourceElementsStub::):
+        (KJS::SourceElementsStub::precedence):
+
+2007-11-15  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Abstract most of RMATCH into MatchStack functions.
+        
+        SunSpider claims this, combined with the last 2 patches was a 1% speedup, 10% for dna-regexp.
+
+        * pcre/pcre_exec.cpp:
+        (MatchStack::canUseStackBufferForNextFrame):
+        (MatchStack::allocateNextFrame):
+        (MatchStack::pushNewFrame):
+        (MatchStack::frameIsStackAllocated):
+        (MatchStack::popCurrentFrame):
+        (MatchStack::unrollAnyHeapAllocatedFrames):
+        (match):
+
+2007-11-15  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Remove RETURN_ERROR, add MatchStack
+        
+        * pcre/pcre_exec.cpp:
+        (MatchStack::MatchStack):
+        (MatchStack::unrollAnyHeapAllocatedFrames):
+        (matchError):
+        (match):
+        
+2007-11-15  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+
+        Clean up match function to match WebKit style
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * pcre/pcre_exec.cpp:
+        (match):
+
+2007-11-15  Steve Falkenburg  <sfalken@apple.com>
+
+        Windows build fix.
+
+        * JavaScriptCore.vcproj/JavaScriptCore.make:
+
+2007-11-14  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        http://bugs.webkit.org/show_bug.cgi?id=15982
+        Improve JSString UTF-8 decoding
+
+        * API/JSStringRef.cpp:
+        (JSStringCreateWithUTF8CString): Use strict decoding, return 0 on error.
+
+        * wtf/unicode/UTF8.cpp:
+        (WTF::Unicode::convertUTF16ToUTF8):
+        (WTF::Unicode::convertUTF8ToUTF16):
+        * wtf/unicode/UTF8.h:
+        Made these function names start with a lower case letter.
+
+        * kjs/ustring.cpp: (KJS::UString::UTF8String): Updated for the above renaming.
+
+        * bindings/c/c_utility.cpp:
+        (KJS::Bindings::convertUTF8ToUTF16WithLatin1Fallback): Renamed to highlight the difference
+        from convertUTF8ToUTF16 in wtf/unicode.
+        (KJS::Bindings::convertNPStringToUTF16): Updated for the above renaming.
+        (KJS::Bindings::identifierFromNPIdentifier): Ditto.
+        * bindings/c/c_utility.h: Made convertUTF8ToUTF16WithLatin1Fallback() a file static.
+
+2007-11-14  Sam Weinig  <sam@webkit.org>
+
+        Rubber-stamped by Anders.
+
+        Fix the Xcode project file after it was messed up in r27402.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2007-11-14  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Oliver.
+        
+        More PCRE style cleanup.
+
+        * pcre/pcre_compile.cpp:
+        (compile_regex):
+
+2007-11-14  Adam Roben  <aroben@apple.com>
+
+        Clean up the bison conflict checking script
+
+        Reviewed by Geoff.
+
+        * DerivedSources.make:
+
+2007-11-14  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Geoff.
+
+        Another round of PCRE cleanups: inlines
+        
+        SunSpider claims that this, combined with my previous PCRE cleanup were a 0.7% speedup, go figure.
+
+        * pcre/pcre_compile.cpp:
+        (jsRegExpCompile):
+        * pcre/pcre_exec.cpp:
+        (match):
+        (jsRegExpExecute):
+        * pcre/pcre_internal.h:
+        (PUT):
+        (GET):
+        (PUT2):
+        (GET2):
+        (isNewline):
+
+2007-11-14  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Sam.
+        
+        Give PCRE a (small) bath.
+        Fix some formating and break things off into separate functions
+        http://bugs.webkit.org/show_bug.cgi?id=15993
+
+        * pcre/pcre_compile.cpp:
+        (calculateCompiledPatternLengthAndFlags):
+        (printCompiledRegExp):
+        (returnError):
+        (jsRegExpCompile):
+        * pcre/pcre_internal.h:
+        (compile_data::compile_data):
+
+2007-11-14  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Eric Seidel.
+        
+        Cleaned up the JavaScript grammar a bit.
+        
+        1. Changed BlockNode to always hold a child vector (which may be empty),
+        eliminating a few NULL-check branches in the common execution case.
+        
+        2. Changed the Block production to correctly report its starting and 
+        ending line numbers to the debugger. (It used to report its ending line
+        as its starting line.) Also, removed duplicate line-reporting code
+        inside the BlockNode constructor.
+        
+        3. Moved curly braces up from FunctionBody production into parent
+        productions. (I had to move the line number reporting code, too, since
+        it depends on the location of the curly braces.) This matches the ECMA
+        spec more closely, and makes some future changes I plan easier.
+        
+        4. Fixed statementList* convenience functions to deal appropriately with
+        empty Vectors.
+
+        SunSpider reports a small and statistically insignificant speedup.
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::statementListPushFIFO):
+        (KJS::statementListGetDeclarations):
+        (KJS::statementListInitializeDeclarationStack):
+        (KJS::statementListInitializeVariableAccessStack):
+        (KJS::BlockNode::BlockNode):
+        (KJS::BlockNode::optimizeVariableAccess):
+        (KJS::BlockNode::getDeclarations):
+        (KJS::BlockNode::execute):
+        (KJS::FunctionBodyNode::initializeDeclarationStacks):
+        (KJS::FunctionBodyNode::optimizeVariableAccess):
+
+2007-11-13  Anders Carlsson  <andersca@apple.com>
+
+        Add RefCounted.h (And remove Shared.h)
+        
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+
+2007-11-13  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix.
+
+        * kjs/regexp.h:
+
+2007-11-13  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Anders Carlsson.
+
+        Renamed Shared to RefCounted.
+
+        * API/JSClassRef.h:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/interpreter.h:
+        * kjs/regexp.h:
+        * wtf/RefCounted.h: Copied from JavaScriptCore/wtf/Shared.h.
+        (WTF::RefCounted::RefCounted):
+        * wtf/Shared.h: Removed.
+
+2007-11-13  Adam Roben  <aroben@apple.com>
+
+        Build fix
+
+        Reviewed by Geoff.
+
+        * kjs/regexp.h: Added a missing #include.
+
+2007-11-13  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+
+        Moved Shared.h into wtf so it could be used in more places. Deployed
+        Shared in places where JSCore previously had hand-rolled ref-counting
+        classes.
+
+        * API/JSClassRef.cpp:
+        (OpaqueJSClass::OpaqueJSClass):
+        * API/JSClassRef.h:
+        * API/JSObjectRef.cpp:
+        (JSClassRetain):
+        (JSClassRelease):
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::init):
+        * kjs/interpreter.h:
+        * kjs/regexp.cpp:
+        (KJS::RegExp::RegExp):
+        * kjs/regexp.h:
+        * wtf/Shared.h: Copied from WebCore/platform/Shared.h.
+
+2007-11-13  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+
+        Add an ASSERT to getTruncatedInt32 to enforce proper usage.
+        Best part about this patch?  It doesn't break the web!
+
+        * kjs/JSImmediate.h:
+        (KJS::JSImmediate::getTruncatedInt32):
+        (KJS::JSImmediate::toDouble):
+        (KJS::JSImmediate::getUInt32):
+
+2007-11-13  Alexey Proskuryakov  <ap@webkit.org>
+
+        Windows build fix.
+
+        * bindings/c/c_utility.cpp:
+        (KJS::Bindings::convertUTF8ToUTF16):
+        * kjs/ustring.cpp:
+        (KJS::UString::UTF8String):
+        * wtf/unicode/UTF8.cpp:
+        (WTF::Unicode::ConvertUTF8ToUTF16):
+
+2007-11-13  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=11231
+          RegExp bug when handling newline characters
+          and a number of other differences between PCRE behvior
+          and JavaScript regular expressions:
+
+          + single-digit sequences like \4 should be treated as octal
+            character constants, unless there is a sufficient number
+            of brackets for them to be treated as backreferences
+
+          + \8 turns into the character "8", not a binary zero character
+            followed by "8" (same for 9)
+
+          + only the first 3 digits should be considered part of an
+            octal character constant (the old behavior was to decode
+            an arbitrarily long sequence and then mask with 0xFF)
+
+          + if \x is followed by anything other than two valid hex digits,
+            then it should simply be treated a the letter "x"; that includes
+            not supporting the \x{41} syntax
+
+          + if \u is followed by anything less than four valid hex digits,
+            then it should simply be treated a the letter "u"
+
+          + an extra "+" should be a syntax error, rather than being treated
+            as the "possessive quantifier"
+
+          + if a "]" character appears immediately after a "[" character that
+            starts a character class, then that's an empty character class,
+            rather than being the start of a character class that includes a
+            "]" character
+
+          + a "$" should not match a terminating newline; we could have gotten
+            PCRE to handle this the way we wanted by passing an appropriate option
+
+        Test: fast/js/regexp-no-extensions.html
+
+        * pcre/pcre_compile.cpp:
+        (check_escape): Check backreferences against bracount to catch both
+        overflows and things that should be treated as octal. Rewrite octal
+        loop to not go on indefinitely. Rewrite both hex loops to match and
+        remove \x{} support.
+        (compile_branch): Restructure loops so that we don't special-case a "]"
+        at the beginning of a character class. Remove code that treated "+" as
+        the possessive quantifier.
+        (jsRegExpCompile): Change the "]" handling here too.
+
+        * pcre/pcre_exec.cpp: (match): Changed CIRC to match the DOLL implementation.
+        Changed DOLL to remove handling of "terminating newline", a Perl concept
+        which we don't need.
+
+        * tests/mozilla/expected.html: Two tests are fixed now:
+        ecma_3/RegExp/regress-100199.js and ecma_3/RegExp/regress-188206.js.
+        One test fails now: ecma_3/RegExp/perlstress-002.js -- our success before
+        was due to a bug (we treated all 1-character numeric escapes as backreferences).
+        The date tests also now both expect success -- whatever was making them fail
+        before was probably due to the time being close to a DST shift; maybe we need
+        to get rid of those tests.
+
+2007-11-13  Darin Adler  <darin@apple.com>
+
+        * kjs/JSImmediate.h: (KJS::JSImmediate::getTruncatedInt32):
+        Remove too-strong assert that was firing constantly and preventing even basic
+        web browsing from working in a debug build. This function is used in many
+        cases where the immediate value is not a number; the assertion could perhaps
+        be added back later with a bit of reorganization.
+
+2007-11-13  Alp Toker  <alp@atoker.com>
+
+        Build fix for breakage to non-Mac builds introduced in r27746.
+
+        * kjs/ustring.cpp:
+
+2007-11-13  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+
+        Clean up evaluateToBoolean functions to use inlines instead of copy/paste code
+
+        * kjs/JSImmediate.h:
+        * kjs/nodes.cpp:
+        (KJS::GreaterNode::inlineEvaluateToBoolean):
+        (KJS::GreaterNode::evaluate):
+        (KJS::LessEqNode::inlineEvaluateToBoolean):
+        (KJS::LessEqNode::evaluate):
+        (KJS::GreaterEqNode::inlineEvaluateToBoolean):
+        (KJS::GreaterEqNode::evaluate):
+        (KJS::InNode::evaluateToBoolean):
+        (KJS::EqualNode::inlineEvaluateToBoolean):
+        (KJS::EqualNode::evaluate):
+        (KJS::NotEqualNode::inlineEvaluateToBoolean):
+        (KJS::NotEqualNode::evaluate):
+        (KJS::StrictEqualNode::inlineEvaluateToBoolean):
+        (KJS::StrictEqualNode::evaluate):
+        (KJS::NotStrictEqualNode::inlineEvaluateToBoolean):
+        (KJS::NotStrictEqualNode::evaluate):
+        * kjs/nodes.h:
+
+2007-11-12  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Fixed http://bugs.webkit.org/show_bug.cgi?id=15958
+        base64 spends 1.1% of total time checking for special Infinity case
+        
+        Use a fast character test instead of calling strncmp.
+        
+        1.1% speedup on string-base64. SunSpider reports a .4% speedup overall;
+        Sharks reports only .1%. Who are you going to believe? Huh?
+
+        * kjs/ustring.cpp:
+        (KJS::UString::toDouble):
+
+2007-11-12  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Oliver.
+
+        Add evaluateToInt32 and evaluateUInt32 methods and deploy them.
+        Fix a few missing evaluateToBoolean methods
+        Deploy all evaluateTo* functions to more nodes to avoid slowdowns
+        http://bugs.webkit.org/show_bug.cgi?id=15950
+        
+        SunSpider claims this is at least a 1.4% speedup.
+
+        * kjs/JSImmediate.h:
+        (KJS::JSImmediate::getTruncatedInt32):
+        (KJS::JSImmediate::toDouble):
+        (KJS::JSImmediate::getUInt32):
+        * kjs/nodes.cpp:
+        (KJS::ExpressionNode::evaluateToNumber):
+        (KJS::ExpressionNode::evaluateToInt32):
+        (KJS::ExpressionNode::evaluateToUInt32):
+        (KJS::NumberNode::evaluateToInt32):
+        (KJS::NumberNode::evaluateToUInt32):
+        (KJS::ImmediateNumberNode::evaluateToInt32):
+        (KJS::ImmediateNumberNode::evaluateToUInt32):
+        (KJS::ResolveNode::evaluate):
+        (KJS::ResolveNode::evaluateToNumber):
+        (KJS::ResolveNode::evaluateToBoolean):
+        (KJS::ResolveNode::evaluateToInt32):
+        (KJS::ResolveNode::evaluateToUInt32):
+        (KJS::LocalVarAccessNode::evaluateToInt32):
+        (KJS::LocalVarAccessNode::evaluateToUInt32):
+        (KJS::BracketAccessorNode::evaluateToNumber):
+        (KJS::BracketAccessorNode::evaluateToBoolean):
+        (KJS::BracketAccessorNode::evaluateToInt32):
+        (KJS::BracketAccessorNode::evaluateToUInt32):
+        (KJS::DotAccessorNode::inlineEvaluate):
+        (KJS::DotAccessorNode::evaluate):
+        (KJS::DotAccessorNode::evaluateToNumber):
+        (KJS::DotAccessorNode::evaluateToBoolean):
+        (KJS::DotAccessorNode::evaluateToInt32):
+        (KJS::DotAccessorNode::evaluateToUInt32):
+        (KJS::NewExprNode::inlineEvaluate):
+        (KJS::NewExprNode::evaluate):
+        (KJS::NewExprNode::evaluateToNumber):
+        (KJS::NewExprNode::evaluateToBoolean):
+        (KJS::NewExprNode::evaluateToInt32):
+        (KJS::NewExprNode::evaluateToUInt32):
+        (KJS::FunctionCallResolveNode::inlineEvaluate):
+        (KJS::FunctionCallResolveNode::evaluate):
+        (KJS::FunctionCallResolveNode::evaluateToNumber):
+        (KJS::FunctionCallResolveNode::evaluateToBoolean):
+        (KJS::FunctionCallResolveNode::evaluateToInt32):
+        (KJS::FunctionCallResolveNode::evaluateToUInt32):
+        (KJS::LocalVarFunctionCallNode::evaluate):
+        (KJS::LocalVarFunctionCallNode::evaluateToNumber):
+        (KJS::LocalVarFunctionCallNode::evaluateToBoolean):
+        (KJS::LocalVarFunctionCallNode::evaluateToInt32):
+        (KJS::LocalVarFunctionCallNode::evaluateToUInt32):
+        (KJS::FunctionCallDotNode::evaluate):
+        (KJS::FunctionCallDotNode::evaluateToNumber):
+        (KJS::FunctionCallDotNode::evaluateToBoolean):
+        (KJS::FunctionCallDotNode::evaluateToInt32):
+        (KJS::FunctionCallDotNode::evaluateToUInt32):
+        (KJS::PostDecLocalVarNode::inlineEvaluateToNumber):
+        (KJS::PostDecLocalVarNode::evaluateToNumber):
+        (KJS::PostDecLocalVarNode::evaluateToBoolean):
+        (KJS::PostDecLocalVarNode::evaluateToInt32):
+        (KJS::PostDecLocalVarNode::evaluateToUInt32):
+        (KJS::typeStringForValue):
+        (KJS::UnaryPlusNode::evaluate):
+        (KJS::UnaryPlusNode::evaluateToBoolean):
+        (KJS::UnaryPlusNode::evaluateToNumber):
+        (KJS::UnaryPlusNode::evaluateToInt32):
+        (KJS::BitwiseNotNode::inlineEvaluateToInt32):
+        (KJS::BitwiseNotNode::evaluate):
+        (KJS::BitwiseNotNode::evaluateToNumber):
+        (KJS::BitwiseNotNode::evaluateToBoolean):
+        (KJS::BitwiseNotNode::evaluateToInt32):
+        (KJS::MultNode::evaluateToBoolean):
+        (KJS::MultNode::evaluateToInt32):
+        (KJS::MultNode::evaluateToUInt32):
+        (KJS::DivNode::evaluateToInt32):
+        (KJS::DivNode::evaluateToUInt32):
+        (KJS::ModNode::evaluateToBoolean):
+        (KJS::ModNode::evaluateToInt32):
+        (KJS::ModNode::evaluateToUInt32):
+        (KJS::AddNode::evaluateToNumber):
+        (KJS::AddNode::evaluateToInt32):
+        (KJS::AddNode::evaluateToUInt32):
+        (KJS::AddNumbersNode::evaluateToInt32):
+        (KJS::AddNumbersNode::evaluateToUInt32):
+        (KJS::SubNode::evaluateToInt32):
+        (KJS::SubNode::evaluateToUInt32):
+        (KJS::LeftShiftNode::inlineEvaluateToInt32):
+        (KJS::LeftShiftNode::evaluate):
+        (KJS::LeftShiftNode::evaluateToNumber):
+        (KJS::LeftShiftNode::evaluateToInt32):
+        (KJS::RightShiftNode::inlineEvaluateToInt32):
+        (KJS::RightShiftNode::evaluate):
+        (KJS::RightShiftNode::evaluateToNumber):
+        (KJS::RightShiftNode::evaluateToInt32):
+        (KJS::UnsignedRightShiftNode::inlineEvaluateToUInt32):
+        (KJS::UnsignedRightShiftNode::evaluate):
+        (KJS::UnsignedRightShiftNode::evaluateToNumber):
+        (KJS::UnsignedRightShiftNode::evaluateToInt32):
+        (KJS::LessNode::inlineEvaluateToBoolean):
+        (KJS::LessNode::evaluate):
+        (KJS::LessNode::evaluateToBoolean):
+        (KJS::LessNumbersNode::inlineEvaluateToBoolean):
+        (KJS::LessNumbersNode::evaluate):
+        (KJS::LessNumbersNode::evaluateToBoolean):
+        (KJS::LessStringsNode::inlineEvaluateToBoolean):
+        (KJS::LessStringsNode::evaluate):
+        (KJS::BitAndNode::evaluate):
+        (KJS::BitAndNode::inlineEvaluateToInt32):
+        (KJS::BitAndNode::evaluateToNumber):
+        (KJS::BitAndNode::evaluateToBoolean):
+        (KJS::BitAndNode::evaluateToInt32):
+        (KJS::BitXOrNode::inlineEvaluateToInt32):
+        (KJS::BitXOrNode::evaluate):
+        (KJS::BitXOrNode::evaluateToNumber):
+        (KJS::BitXOrNode::evaluateToBoolean):
+        (KJS::BitXOrNode::evaluateToInt32):
+        (KJS::BitOrNode::inlineEvaluateToInt32):
+        (KJS::BitOrNode::evaluate):
+        (KJS::BitOrNode::evaluateToNumber):
+        (KJS::BitOrNode::evaluateToBoolean):
+        (KJS::BitOrNode::evaluateToInt32):
+        (KJS::ConditionalNode::evaluateToNumber):
+        (KJS::ConditionalNode::evaluateToInt32):
+        (KJS::ConditionalNode::evaluateToUInt32):
+        (KJS::valueForReadModifyAssignment):
+        (KJS::AssignExprNode::evaluate):
+        (KJS::AssignExprNode::evaluateToBoolean):
+        (KJS::AssignExprNode::evaluateToNumber):
+        (KJS::AssignExprNode::evaluateToInt32):
+        (KJS::VarDeclNode::handleSlowCase):
+        * kjs/nodes.h:
+        (KJS::FunctionCallResolveNode::precedence):
+        (KJS::AddNode::precedence):
+        (KJS::AddNode::):
+        (KJS::LessNumbersNode::):
+        (KJS::LessStringsNode::):
+        * kjs/value.cpp:
+        (KJS::JSValue::toInt32SlowCase):
+        (KJS::JSValue::toUInt32SlowCase):
+        * kjs/value.h:
+        (KJS::JSValue::asCell):
+        (KJS::JSValue::toInt32):
+        (KJS::JSValue::toUInt32):
+
+2007-11-12  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        http://bugs.webkit.org/show_bug.cgi?id=15953
+        Add UTF-8 encoding/decoding to WTF
+
+        * kjs/ustring.h: Moved UTF8SequenceLength() and decodeUTF8Sequence() to wtf/unicode.
+        * kjs/ustring.cpp: (KJS::UString::UTF8String): Changed this function to take a strict/lenient
+        parameter. Callers are not interested in getting decoding results in strict mode, so 
+        this allows for bailing out as soon as an error is seen.
+
+        * kjs/function.cpp:
+        (KJS::encode): Updated for new UString::UTF8String() signature.
+
+        * API/JSStringRef.cpp:
+        (JSStringCreateWithCharacters): Disambiguate UChar.
+        (JSStringCreateWithUTF8CString): Actually use UTF-8 when creating the string!
+        * bindings/c/c_utility.cpp: (KJS::Bindings::convertUTF8ToUTF16): Use ConvertUTF8ToUTF16().
+
+        * wtf/unicode/UTF8.cpp: Added.
+        (WTF::Unicode::inlineUTF8SequenceLengthNonASCII):
+        (WTF::Unicode::inlineUTF8SequenceLength):
+        (WTF::Unicode::UTF8SequenceLength):
+        (WTF::Unicode::decodeUTF8Sequence):
+        (WTF::Unicode::):
+        (WTF::Unicode::ConvertUTF16ToUTF8):
+        (WTF::Unicode::isLegalUTF8):
+        (WTF::Unicode::ConvertUTF8ToUTF16):
+        * wtf/unicode/UTF8.h: Added.
+        (WTF::Unicode::):
+        Some code moved from ustring.h, some adapted from unicode.org sources.
+
+        * JavaScriptCore.exp:
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        Added UTF8.{h,cpp}
+
+2007-11-12  Josh Aas  <joshmoz@gmail.com>
+
+        Reviewed by Darin.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15946
+          add NPPValue NPPVpluginDrawingModel (Mozilla bug 403418 compat)
+
+        * bindings/npapi.h:
+
+2007-11-12  Darin Adler  <darin@apple.com>
+
+        Reviewed by Sam.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15951
+          REGRESSION: assertion failure in regexp match() when running JS tests
+
+        Test: fast/js/regexp-many-brackets.html
+
+        * pcre/pcre_exec.cpp: (match): Added back accidentally-removed case for
+        the BRANUMBER opcode.
+
+2007-11-12  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - fix use of prefix and config.h, got rid of a few unneeded things in
+          the PCRE code; no behavior changes
+
+        * API/JSBase.cpp: Added include of config.h.
+        * API/JSCallbackConstructor.cpp: Ditto.
+        * API/JSCallbackFunction.cpp: Ditto.
+        * API/JSCallbackObject.cpp: Ditto.
+        * API/JSClassRef.cpp: Ditto.
+        * API/JSContextRef.cpp: Ditto.
+        * API/JSObjectRef.cpp: Ditto.
+        * API/JSStringRef.cpp: Ditto.
+        * API/JSValueRef.cpp: Ditto.
+
+        * JavaScriptCorePrefix.h: Removed obsolete <ctype.h> workaround.
+        Moved new/delete macros after includes, as they are in WebCore's prefix.
+        Removed "config.h".
+
+        * pcre/dftables.cpp: (main): Changed back to not use a separate maketables
+        function. This is needed for PCRE, but not helpful for our use. Also changed
+        the tables to all be 128 entries long instead of 256, since only the first
+        128 are ever used.
+
+        * pcre/pcre_compile.cpp: Added include of config.h. Eliminated digitab,
+        which was only being used to check hex digits. Changed all uses of TRUE and
+        FALSE to use the C++ true and false instead.
+        (check_escape): Just the TRUE/FALSE thing.
+        (is_counted_repeat): Ditto.
+        (could_be_empty_branch): Ditto.
+        (get_othercase_range): Ditto.
+        (compile_branch): Ditto.
+        (compile_regex): Ditto.
+        (is_anchored): Ditto.
+        (is_startline): Ditto.
+        (find_firstassertedchar): Ditto.
+        (jsRegExpCompile): Ditto.
+
+        * pcre/pcre_exec.cpp: Added include of config.h. Changed all uses of TRUE and
+        FALSE to use the C++ true and false instead.
+        (match_ref): Just the TRUE/FALSE thing.
+        (match): Ditto. Removed some unneeded braces.
+        (jsRegExpExecute): Just the TRUE/FALSE thing.
+
+        * pcre/pcre_internal.h: Moved the constants needed by dftables.cpp to the top
+        of the file instead of the bottom, so they can be used. Also changed the table
+        sizes to 128 instead of 256. Removed macro definitions of FALSE and TRUE.
+        Set array sizes for all the const arrays. Changed _pcre_utf8_table1_size to
+        be a macro instead of a extern int.
+
+        * pcre/pcre_maketables.cpp: Removed. It's all in dftables.cpp now.
+
+        * pcre/pcre_tables.cpp: Made table sizes explicit.
+
+        * pcre/pcre_xclass.cpp: Just the TRUE/FALSE thing.
+
+2007-11-12  Adam Roben  <aroben@apple.com>
+
+        Build fix
+
+        * wtf/FastMalloc.h: Add missing using statement.
+
+2007-11-11  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Darin.
+
+        Add special fastZeroedMalloc function to replace a 
+        number of fastCalloc calls where one argument was 1.
+        
+        This results in a 0.4% progression in SunSpider, more
+        than making up for the earlier regression caused by 
+        additional overflow checks.
+
+        * JavaScriptCore.exp:
+        * kjs/array_instance.cpp:
+        * kjs/property_map.cpp:
+        * wtf/FastMalloc.cpp:
+        * wtf/FastMalloc.h:
+        * wtf/HashTable.h:
+
+2007-11-11  Adam Roben  <aroben@apple.com>
+
+        Fix <rdar://5578982> ASSERT in HashTable::checkTableConsistencyExceptSize beneath WebNotificationCenter
+
+        The bug was due to a mismatch between HashMap::remove and
+        HashTable::checkTableConsistency. HashMap::remove can delete the value
+        stored in the HashTable (by derefing it), which is not normally
+        allowed by HashTable. It's OK in this case because the value is about
+        to be removed from the table, but HashTable wasn't aware of this.
+
+        HashMap::remove now performs the consistency check itself before
+        derefing the value.
+
+        Darin noticed that the same bug would occur in HashSet, so I've fixed
+        it there as well.
+
+        Reviewed by Darin.
+
+        * wtf/HashMap.h:
+        (WTF::HashMap::remove): Perform the HashTable consistency check
+        manually before calling deref.
+        * wtf/HashSet.h:
+        (WTF::HashSet::remove): Ditto.
+        * wtf/HashTable.h: Made checkTableConsistency public so that HashMap
+        and HashSet can call it.
+        (WTF::HashTable::removeAndInvalidateWithoutEntryConsistencyCheck):
+        Added.
+        (WTF::HashTable::removeAndInvalidate): Added.
+        (WTF::HashTable::remove):
+        (WTF::HashTable::removeWithoutEntryConsistencyCheck): Added.
+
+2007-11-11  Mark Rowe  <mrowe@apple.com>
+
+        Build fix.  Use the correct filename case.
+
+        * kjs/nodes.h:
+
+2007-11-11  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Fixed http://bugs.webkit.org/show_bug.cgi?id=15902
+        15% of string-validate-input.js is spent compiling the same regular expression
+        
+        Store a compiled representation of the regular expression in the AST.
+        
+        Only a .2% SunSpider speedup overall, but a 10.6% speedup on 
+        string-validate-input.js.
+
+        * kjs/nodes.cpp:
+        (KJS::RegExpNode::evaluate):
+        * kjs/nodes.h:
+        (KJS::RegExpNode::):
+        * kjs/nodes2string.cpp:
+        (KJS::RegExpNode::streamTo):
+        * kjs/regexp.cpp:
+        (KJS::RegExp::flags):
+        * kjs/regexp.h:
+        (KJS::RegExp::pattern):
+        * kjs/regexp_object.cpp:
+        (KJS::RegExpObjectImp::construct):
+        (KJS::RegExpObjectImp::createRegExpImp):
+        * kjs/regexp_object.h:
+
+2007-11-11  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Eric.
+
+        Partial fix for <rdar://problem/5585334> numfuzz: integer overflows opening malformed SVG file in WebCore::ImageBuffer::create
+
+        Unfortunately this is a very slight regression, but is unavoidable.
+
+        * wtf/FastMalloc.cpp:
+
+2007-11-10  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by darin.
+        
+        Add simple type inferencing to the parser, and create custom
+        AddNode and LessNode subclasses based on inferred types.
+        http://bugs.webkit.org/show_bug.cgi?id=15884
+        
+        SunSpider claims this is at least a 0.5% speedup.
+
+        * JavaScriptCore.exp:
+        * kjs/grammar.y:
+        * kjs/internal.cpp:
+        (KJS::NumberImp::getPrimitiveNumber):
+        (KJS::GetterSetterImp::getPrimitiveNumber):
+        * kjs/internal.h:
+        * kjs/lexer.cpp:
+        (KJS::Lexer::lex):
+        * kjs/nodes.cpp:
+        (KJS::Node::Node):
+        (KJS::StringNode::evaluate):
+        (KJS::StringNode::evaluateToNumber):
+        (KJS::StringNode::evaluateToBoolean):
+        (KJS::RegExpNode::evaluate):
+        (KJS::UnaryPlusNode::optimizeVariableAccess):
+        (KJS::AddNode::evaluate):
+        (KJS::AddNode::evaluateToNumber):
+        (KJS::AddNumbersNode::inlineEvaluateToNumber):
+        (KJS::AddNumbersNode::evaluate):
+        (KJS::AddNumbersNode::evaluateToNumber):
+        (KJS::AddStringsNode::evaluate):
+        (KJS::AddStringLeftNode::evaluate):
+        (KJS::AddStringRightNode::evaluate):
+        (KJS::lessThan):
+        (KJS::lessThanEq):
+        (KJS::LessNumbersNode::evaluate):
+        (KJS::LessStringsNode::evaluate):
+        * kjs/nodes.h:
+        (KJS::ExpressionNode::):
+        (KJS::RegExpNode::):
+        (KJS::RegExpNode::precedence):
+        (KJS::TypeOfResolveNode::):
+        (KJS::LocalVarTypeOfNode::):
+        (KJS::UnaryPlusNode::):
+        (KJS::UnaryPlusNode::precedence):
+        (KJS::AddNode::):
+        (KJS::AddNode::precedence):
+        (KJS::AddNumbersNode::):
+        (KJS::AddStringLeftNode::):
+        (KJS::AddStringRightNode::):
+        (KJS::AddStringsNode::):
+        (KJS::LessNode::):
+        (KJS::LessNode::precedence):
+        (KJS::LessNumbersNode::):
+        (KJS::LessStringsNode::):
+        * kjs/nodes2string.cpp:
+        (KJS::StringNode::streamTo):
+        * kjs/object.cpp:
+        * kjs/object.h:
+        * kjs/value.h:
+        (KJS::JSValue::getPrimitiveNumber):
+
+2007-11-11  Darin Adler  <darin@apple.com>
+
+        - try another way of fixing dftables builds -- refactor pcre_internal.h a bit
+
+        * pcre/pcre_internal.h: Make most of this header do nothing when DFTABLES is set.
+        Later we can break it into two files.
+
+        * JavaScriptCore.vcproj/dftables/dftables.vcproj: Take out now-unneeded include paths.
+        * pcre/dftables.cpp: Set DFTABLES. Use delete instead of free.
+        * pcre/dftables.pro: Take out now-unneeded include paths.
+        * pcre/pcre_maketables.cpp: Use new instead of malloc.
+
+2007-11-11  Darin Adler  <darin@apple.com>
+
+        * pcre/dftables.pro: Try fixing Qt builds (I looked at qt-win) by adding
+        another include path.
+
+2007-11-11  Darin Adler  <darin@apple.com>
+
+        * JavaScriptCore.xcodeproj/project.pbxproj: Try fixing Mac Tiger builds
+        by adding another include path.
+
+2007-11-11  Darin Adler  <darin@apple.com>
+
+        Reviewed by Sam.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15924
+          next round of changes to JSRegExp (formerly PCRE)
+
+        This is a combination of converting to C++, tweaking the API, and adding
+        some additional optimizations.
+
+        Future steps will involve getting rid of the use of UTF-8 completely
+        (we'll use UTF-16 exclusively instead), eliminating more source files,
+        and some more speed-ups.
+
+        SunSpider says the current round is an 0.9% speed-up overall, and a
+        5.3% speed-up for regexp.
+
+        * JavaScriptCore.exp: Updated for new entry points.
+
+        * JavaScriptCore.pri:
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.vcproj/dftables/dftables.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * JavaScriptCoreSources.bkl:
+        * jscore.bkl:
+        Updated for new source file names and ForwardingHeaders.
+
+        * kjs/regexp.cpp:
+        (KJS::RegExp::RegExp): Changed to use the error message without calling
+        strdup on it and to pass the new types and options.
+        (KJS::RegExp::~RegExp): Removed the now-unneeded free of the error message.
+        (KJS::RegExp::match): Pass the new types and options.
+        * kjs/regexp.h: Update type of m_constructionError.
+
+        * pcre/AUTHORS: Update to reflect the status of the project -- we don't include
+        the Google parts, and this isn't the PCRE library, per se.
+        * pcre/COPYING: Ditto.
+
+        * pcre/dftables.cpp: Copied from JavaScriptCore/pcre/dftables.c.
+        (main): Removed unneeded ctype_digit.
+
+        * pcre/pcre.h: Convert to C++, tweak API a bit. Use UChar instead of JSRegExpChar.
+
+        * pcre/pcre_compile.cpp: Copied from JavaScriptCore/pcre/pcre_compile.c.
+        Moved a lot of private stuff used only within this file here from pcre_internal.h.
+        Renumbered the error codes.
+        (error_text): Use a single string with embedded nulls for the error text (I got
+        this idea from newer versions of PCRE).
+        (check_escape): Changed return type to be enum instead of int. Replaced ctype_digit
+        uses with isASCIIDigit.
+        (is_counted_repeat): Ditto.
+        (read_repeat_counts): Ditto.
+        (first_significant_code): Ditto.
+        (find_fixedlength): Ditto.
+        (could_be_empty_branch): Ditto.
+        (compile_branch): Ditto. Also removed some code that handles changing options.
+        JavaScript doesn't have any of the features that allow options to change.
+        (compile_regex): Updated for change to options parameter.
+        (is_anchored): Ditto.
+        (find_firstassertedchar): Ditto.
+        (jsRegExpCompile): Changed to take separate flags instead of an options int.
+        Also changed to call new/delete instead of pcre_malloc/free.
+        (jsRegExpFree): Ditto.
+
+        * pcre/pcre_exec.cpp: Copied from JavaScriptCore/pcre/pcre_exec.c.
+        Added a case that uses computed goto for the opcode loop, but did not turn it on.
+        Changed the RMATCH macro to handle returns more efficiently by putting the where
+        pointer in the new frame instead of the old one, allowing us to branch to the
+        return with a single statement. Switched to new/delete from pcre_malloc/free.
+        Changed many RRETURN callers to not set the return value since it's already
+        set correctly. Replaced the rrc variable with an is_match variable. Values other
+        than "match" and "no match" are now handled differently. This allows us to remove
+        the code to check for those cases in various rules.
+        (match): All the case statements use a macro BEGIN_OPCODE instead. And all the
+        continue statements, or break statements that break out of the outer case use
+        a macro NEXT_OPCODE instead. Replaced a few if statements with assertions.
+        (jsRegExpExecute): Use new/delete instead of pcre_malloc/free. Removed unused
+        start_match field from the match block.
+
+        * pcre/pcre_internal.h: Moved the last few configuration macros from pcre-config.h
+        in here. Removed various unused types. Converted from JSRegExpChar to UChar.
+        Eliminated pcre_malloc/free. Replaced the opcode enum with a macro that can be
+        used in multiple places. Unfortunately we lose the comments for each opcode; we
+        should find a place to put those back. Removed ctype_digit.
+
+        * pcre/pcre_maketables.cpp: Copied from JavaScriptCore/pcre/pcre_maketables.c.
+        (pcre_maketables): Got rid of the conditional code that allows this to be compiled
+        in -- it's only used for dftables now (and soon may be obsolete entirely).
+        Changed code for cbit_digit to not use isdigit, and took the "_" case out of the
+        loop. Removed ctype_digit.
+
+        * pcre/pcre_ord2utf8.cpp: Copied from JavaScriptCore/pcre/pcre_ord2utf8.c.
+
+        * pcre/pcre_tables.cpp: Copied from JavaScriptCore/pcre/pcre_tables.c.
+        Moved _pcre_OP_lengths out of here into pcre_exec.cpp.
+
+        * pcre/pcre_ucp_searchfuncs.cpp: Copied from JavaScriptCore/pcre/pcre_ucp_searchfuncs.c.
+        Updated for other file name changes.
+
+        * pcre/pcre_xclass.cpp: Copied from JavaScriptCore/pcre/pcre_xclass.c.
+
+        * pcre/ucpinternal.h: Updated header.
+
+        * pcre/ucptable.cpp: Copied from JavaScriptCore/pcre/ucptable.c.
+
+        * wtf/ASCIICType.h: (WTF::isASCIIDigit): Removed a branch by changing from && to
+        & for this operation. Also added an overload that takes an int because that's
+        useful for PCRE. Later we could optimize for int and overload other functions in
+        this file; stuck to this simple one for now.
+
+        * wtf/unicode/icu/UnicodeIcu.h: Removed unused isUpper.
+        * wtf/unicode/qt4/UnicodeQt4.h: Ditto.
+
+        * pcre/LICENCE: Removed.
+        * pcre/pcre-config.h: Removed.
+        * wtf/FastMallocPCRE.cpp: Removed.
+
+        * pcre/dftables.c: Renamed to cpp.
+        * pcre/pcre_compile.c: Ditto.
+        * pcre/pcre_exec.c: Ditto.
+        * pcre/pcre_maketables.c: Ditto.
+        * pcre/pcre_ord2utf8.c: Ditto.
+        * pcre/pcre_tables.c: Ditto.
+        * pcre/pcre_ucp_searchfuncs.c: Ditto.
+        * pcre/pcre_xclass.c: Ditto.
+        * pcre/ucptable.c: Ditto.
+
+2007-11-11  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Oliver.
+
+        Add KJS_CHECKEXCEPTIONBOOLEAN to match rest of nodes.cpp
+
+        * kjs/nodes.cpp:
+        (KJS::ExpressionNode::evaluateToBoolean):
+        (KJS::LessNode::evaluateToBoolean):
+        (KJS::GreaterNode::evaluateToBoolean):
+        (KJS::LessEqNode::evaluateToBoolean):
+        (KJS::GreaterEqNode::evaluateToBoolean):
+        (KJS::InstanceOfNode::evaluateToBoolean):
+        (KJS::InNode::evaluateToBoolean):
+        (KJS::EqualNode::evaluateToBoolean):
+        (KJS::NotEqualNode::evaluateToBoolean):
+        (KJS::StrictEqualNode::evaluateToBoolean):
+        (KJS::NotStrictEqualNode::evaluateToBoolean):
+        (KJS::LogicalAndNode::evaluateToBoolean):
+        (KJS::LogicalOrNode::evaluateToBoolean):
+        (KJS::ConditionalNode::evaluateToBoolean):
+
+2007-11-10  Darin Adler  <darin@apple.com>
+
+        Reviewed by Sam.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=15927
+          REGRESSION(r27487): delete a.c followed by __defineGetter__("c", ...) incorrectly deletes another property
+          and <rdar://problem/5586384> REGRESSION (r27487): Can't switch out of Edit HTML Source mode on Leopard Wiki
+
+        Test: fast/js/delete-then-put.html
+
+        * kjs/property_map.cpp:
+        (KJS::PropertyMap::put): Added a missing "- 1"; code to find an empty slot was not working.
+        (KJS::PropertyMap::checkConsistency): Added a missing range check that would have caught this
+        problem before.
+
+        - roll out a last-minute change to my evaluateToBoolean patch that was incorrect.
+
+        * kjs/nodes.h: (KJS::ExprStatementNode::ExprStatementNode): Take out call to
+        optimizeForUnnecessaryResult, since the result is used in some cases.
+
+2007-11-10  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        Roll out some changes that were (seemingly accidentally) checked in
+        with r27664.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2007-11-10  Darin Adler  <darin@apple.com>
+
+        Reviewed by Sam.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15915
+          add an evaluation path for booleans like the one we have for numbers
+
+        Gives 1.1% on SunSpider.
+
+        * kjs/grammar.y: Create TrueNode and FalseNode instead of BooleanNode.
+
+        * kjs/nodes.h: Changed to use Noncopyable. Moved optimizeForUnnecessaryResult
+        down from Node to ExpressionNode. Changed some classes to not inherit from
+        ExpressionNode where not necessary, and removed unnneeded evaluate functions
+        as well as evaluate functions that need not be virtual. Call the
+        optimizeForUnnecessaryResult function on the start of a for loop too.
+        * kjs/nodes.cpp:
+        (KJS::ExpressionNode::evaluateToBoolean): Added.
+        (KJS::FalseNode::evaluate): Added.
+        (KJS::TrueNode::evaluate): Added.
+        (KJS::NumberNode::evaluateToBoolean): Added.
+        (KJS::StringNode::evaluateToBoolean): Added.
+        (KJS::LocalVarAccessNode::evaluateToBoolean): Added.
+        (KJS::BracketAccessorNode::evaluateToBoolean): Added.
+        (KJS::LogicalNotNode::evaluate): Changed to call evaluateToBoolean.
+        (KJS::LogicalNotNode::evaluateToBoolean): Added.
+        (KJS::lessThan): Changed to return bool.
+        (KJS::lessThanEq): Ditto.
+        (KJS::LessNode::evaluate): Changed since lessThan returns bool.
+        (KJS::LessNode::evaluateToBoolean): Added.
+        (KJS::GreaterNode::evaluate): Changed since lessThanEq returns bool.
+        (KJS::GreaterNode::evaluateToBoolean): Added.
+        (KJS::LessEqNode::evaluate): Changed since lessThanEq returns bool.
+        (KJS::LessEqNode::evaluateToBoolean): Added.
+        (KJS::GreaterEqNode::evaluate): Changed since lessThan returns bool.
+        (KJS::GreaterEqNode::evaluateToBoolean): Added.
+        (KJS::InstanceOfNode::evaluateToBoolean): Added.
+        (KJS::InNode::evaluateToBoolean): Added.
+        (KJS::EqualNode::evaluateToBoolean): Added.
+        (KJS::NotEqualNode::evaluateToBoolean): Added.
+        (KJS::StrictEqualNode::evaluateToBoolean): Added.
+        (KJS::NotStrictEqualNode::evaluateToBoolean): Added.
+        (KJS::ConditionalNode::evaluate): Changed to call evaluateToBoolean.
+        (KJS::IfNode::execute): Ditto.
+        (KJS::DoWhileNode::execute): Ditto.
+        (KJS::WhileNode::execute): Ditto.
+        (KJS::ForNode::execute): Ditto.
+
+        * kjs/nodes2string.cpp:
+        (KJS::FalseNode::streamTo): Added.
+        (KJS::TrueNode::streamTo): Added.
+
+2007-11-09  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        Reviewed by Darin.
+
+        * kjs/value.h:
+        (KJS::jsNumber): Add some explicit casts.
+
+2007-11-08  Darin Adler  <darin@apple.com>
+
+        - fix build
+
+        * kjs/grammar.y:
+        * kjs/nodes.h:
+        * kjs/property_map.cpp:
+
+2007-11-08  Darin Adler  <darin@apple.com>
+
+        - roll out accidentally-checked in changes
+
+        * kjs/nodes.cpp: Back to previous version.
+        * kjs/nodes.h: Ditto.
+        * kjs/grammar.y: Ditto.
+
+2007-11-08  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15912
+          fasta spends a lot of time in qsort
+
+        * kjs/property_map.cpp:
+        (KJS::PropertyMap::getEnumerablePropertyNames):
+        Use insertion sort instead of qsort for small sets of property names.
+        We can probably do some even-better speedups of for/in, but this nets
+        0.6% overall and 6.7% on fasta.
+
+2007-11-08  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15906
+          getting characters by indexing into a string is very slow
+
+        This fixes one source of the slowness -- the conversion to an unused
+        Identifier as we call the get function from the slot -- but doesn't
+        fix others, such as the fact that we have to allocate a new UString::Rep
+        for every single character.
+
+        Speeds up string-base64 30%, and at least 0.5% overall.
+        But does slow down access-fannkuch quite a bit. Might be worth
+        revisiting in the future to see what we can do about that (although
+        I did look at a profile for a while).
+
+        * kjs/property_slot.h: Add a new marker for "numeric" property slots;
+        slots where we don't need to pass the identifier to the get function.
+        (KJS::PropertySlot::getValue): Added code to call the numeric get function.
+        (KJS::PropertySlot::setCustomNumeric): Added.
+        * kjs/string_object.cpp:
+        (KJS::StringInstance::indexGetter): Changed to use substr() instead
+        of constructing a wholly new UString each time.
+        (KJS::stringInstanceNumericPropertyGetter): Added. Like indexGetter, but
+        takes advantage of setCustomNumeric to avoid creating an Identifier.
+        (KJS::StringInstance::getOwnPropertySlot): Changed to use setCustomNumeric.
+
+2007-11-08  Darin Adler  <darin@apple.com>
+
+        Reviewed by Oliver.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15904
+          more speed-ups possible by tightening up int version of JSImmediate
+
+        1% improvement of SunSpider
+
+        * kjs/JSImmediate.h: Eliminate the now-unneeded FPBitValues struct template.
+        (KJS::JSImmediate::from): Overload for most numeric types; many types can
+        do fewer branches and checks.
+        (KJS::JSImmediate::getUInt32): Removed unneeded check for undefined.
+        (KJS::JSImmediate::getTruncatedInt32): Ditto.
+        (KJS::JSImmediate::getTruncatedUInt32): Ditto. There's no difference any more
+        between getUInt32 and getTruncatedUInt32, so that's worth a rename and merge later.
+
+        * kjs/grammar.y: Update since fromDouble is now just from.
+        * kjs/nodes.h: Ditto.
+
+        * kjs/value.h: (KJS::jsNumber): Overload for most numeric types.
+
+2007-11-08  Kevin Ollivier  <kevino@theolliviers.com>
+
+        Bakefiles for building JavaScriptCore, needed by wx port.
+
+        Reviewed by Mark Rowe.
+
+        * JavaScriptCoreSources.bkl: Added.
+        * jscore.bkl: Added.
+
+2007-11-08  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Fix regression caused by earlier bitwise and optimisation.  1 & undefined != 1.
+
+        The implementation of JSImmediate::areBothImmediateNumbers relies on 
+        (JSImmediate::getTag(immediate1) & JSImmediate::getTag(immediate2)) having 
+        a unique result when both immediate values are numbers.
+
+        The regression was due to UndefinedType & NumberType returning NumberType (3 & 1).
+        By swapping the value of NumberType and UndefinedType this ceases to be a problem.
+
+        * kjs/JSType.h:
+
+2007-11-08  Darin Adler  <darin@apple.com>
+
+        - fix build
+
+        * kjs/nodes.h: Add missing parameter name.
+
+2007-11-08  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by darin.
+
+        Add ExpressionNode subclass of Node, use it.
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::ForInNode::ForInNode):
+        * kjs/nodes.h:
+        (KJS::ExpressionNode::):
+        (KJS::NullNode::):
+        (KJS::NullNode::precedence):
+        (KJS::BooleanNode::):
+        (KJS::BooleanNode::precedence):
+        (KJS::RegExpNode::):
+        (KJS::RegExpNode::precedence):
+        (KJS::ThisNode::):
+        (KJS::ThisNode::precedence):
+        (KJS::ResolveNode::):
+        (KJS::ElementNode::):
+        (KJS::ArrayNode::):
+        (KJS::PropertyNode::):
+        (KJS::PropertyNode::precedence):
+        (KJS::PropertyNode::name):
+        (KJS::PropertyListNode::):
+        (KJS::ObjectLiteralNode::):
+        (KJS::ObjectLiteralNode::precedence):
+        (KJS::BracketAccessorNode::):
+        (KJS::DotAccessorNode::):
+        (KJS::DotAccessorNode::precedence):
+        (KJS::ArgumentListNode::):
+        (KJS::ArgumentsNode::):
+        (KJS::NewExprNode::):
+        (KJS::NewExprNode::precedence):
+        (KJS::FunctionCallValueNode::):
+        (KJS::FunctionCallValueNode::precedence):
+        (KJS::FunctionCallResolveNode::):
+        (KJS::FunctionCallBracketNode::):
+        (KJS::FunctionCallBracketNode::precedence):
+        (KJS::FunctionCallDotNode::):
+        (KJS::FunctionCallDotNode::precedence):
+        (KJS::PrePostResolveNode::):
+        (KJS::PostfixBracketNode::):
+        (KJS::PostfixBracketNode::precedence):
+        (KJS::PostIncBracketNode::):
+        (KJS::PostIncBracketNode::isIncrement):
+        (KJS::PostDecBracketNode::):
+        (KJS::PostDecBracketNode::isIncrement):
+        (KJS::PostfixDotNode::):
+        (KJS::PostfixDotNode::precedence):
+        (KJS::PostIncDotNode::):
+        (KJS::PostIncDotNode::isIncrement):
+        (KJS::PostDecDotNode::):
+        (KJS::PostDecDotNode::isIncrement):
+        (KJS::PostfixErrorNode::):
+        (KJS::PostfixErrorNode::precedence):
+        (KJS::DeleteResolveNode::):
+        (KJS::DeleteBracketNode::):
+        (KJS::DeleteBracketNode::precedence):
+        (KJS::DeleteDotNode::):
+        (KJS::DeleteDotNode::precedence):
+        (KJS::DeleteValueNode::):
+        (KJS::DeleteValueNode::precedence):
+        (KJS::VoidNode::):
+        (KJS::VoidNode::precedence):
+        (KJS::TypeOfResolveNode::):
+        (KJS::TypeOfValueNode::):
+        (KJS::PrefixBracketNode::):
+        (KJS::PrefixBracketNode::precedence):
+        (KJS::PreIncBracketNode::):
+        (KJS::PreIncBracketNode::isIncrement):
+        (KJS::PreDecBracketNode::):
+        (KJS::PreDecBracketNode::isIncrement):
+        (KJS::PrefixDotNode::):
+        (KJS::PrefixDotNode::precedence):
+        (KJS::PreIncDotNode::):
+        (KJS::PreIncDotNode::isIncrement):
+        (KJS::PreDecDotNode::):
+        (KJS::PreDecDotNode::isIncrement):
+        (KJS::PrefixErrorNode::):
+        (KJS::PrefixErrorNode::precedence):
+        (KJS::UnaryPlusNode::):
+        (KJS::UnaryPlusNode::precedence):
+        (KJS::NegateNode::):
+        (KJS::NegateNode::precedence):
+        (KJS::BitwiseNotNode::):
+        (KJS::BitwiseNotNode::precedence):
+        (KJS::LogicalNotNode::):
+        (KJS::LogicalNotNode::precedence):
+        (KJS::AddNode::):
+        (KJS::AddNode::precedence):
+        (KJS::LeftShiftNode::):
+        (KJS::LeftShiftNode::precedence):
+        (KJS::RightShiftNode::):
+        (KJS::RightShiftNode::precedence):
+        (KJS::UnsignedRightShiftNode::):
+        (KJS::UnsignedRightShiftNode::precedence):
+        (KJS::LessNode::):
+        (KJS::LessNode::precedence):
+        (KJS::GreaterNode::):
+        (KJS::GreaterNode::precedence):
+        (KJS::LessEqNode::):
+        (KJS::LessEqNode::precedence):
+        (KJS::GreaterEqNode::):
+        (KJS::GreaterEqNode::precedence):
+        (KJS::InstanceOfNode::):
+        (KJS::InstanceOfNode::precedence):
+        (KJS::InNode::):
+        (KJS::InNode::precedence):
+        (KJS::EqualNode::):
+        (KJS::EqualNode::precedence):
+        (KJS::NotEqualNode::):
+        (KJS::NotEqualNode::precedence):
+        (KJS::StrictEqualNode::):
+        (KJS::StrictEqualNode::precedence):
+        (KJS::NotStrictEqualNode::):
+        (KJS::NotStrictEqualNode::precedence):
+        (KJS::BitAndNode::):
+        (KJS::BitAndNode::precedence):
+        (KJS::BitOrNode::):
+        (KJS::BitOrNode::precedence):
+        (KJS::BitXOrNode::):
+        (KJS::BitXOrNode::precedence):
+        (KJS::LogicalAndNode::):
+        (KJS::LogicalAndNode::precedence):
+        (KJS::LogicalOrNode::):
+        (KJS::LogicalOrNode::precedence):
+        (KJS::ConditionalNode::):
+        (KJS::ConditionalNode::precedence):
+        (KJS::ReadModifyResolveNode::):
+        (KJS::ReadModifyResolveNode::precedence):
+        (KJS::AssignResolveNode::):
+        (KJS::AssignResolveNode::precedence):
+        (KJS::ReadModifyBracketNode::):
+        (KJS::ReadModifyBracketNode::precedence):
+        (KJS::AssignBracketNode::):
+        (KJS::AssignBracketNode::precedence):
+        (KJS::AssignDotNode::):
+        (KJS::AssignDotNode::precedence):
+        (KJS::ReadModifyDotNode::):
+        (KJS::ReadModifyDotNode::precedence):
+        (KJS::AssignErrorNode::):
+        (KJS::AssignErrorNode::precedence):
+        (KJS::CommaNode::):
+        (KJS::CommaNode::precedence):
+        (KJS::AssignExprNode::):
+        (KJS::AssignExprNode::precedence):
+        (KJS::ExprStatementNode::):
+        (KJS::IfNode::):
+        (KJS::DoWhileNode::):
+        (KJS::WhileNode::):
+        (KJS::ReturnNode::):
+        (KJS::WithNode::):
+        (KJS::ThrowNode::):
+        (KJS::ParameterNode::):
+        (KJS::CaseClauseNode::):
+        (KJS::CaseClauseNode::precedence):
+        (KJS::ClauseListNode::):
+        (KJS::SwitchNode::):
+
+2007-11-08  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Sam.
+
+        Add a fast path for bitwise-and of two immediate numbers for a 0.7% improvement in SunSpider (4% bitop improvement).
+
+        This only improves bitwise-and performance, as the additional logic required 
+        for similar code paths on or, xor, and shifting requires additional operations
+        and branches that negate (and in certain cases, regress) any advantage we might
+        otherwise receive.
+
+        This improves performance on all bitop tests, the cryptography tests, as well as 
+        the string-base64 and string-unpack-code tests.  No significant degradation on 
+        any other tests.
+
+        * kjs/JSImmediate.h:
+        (KJS::JSImmediate::areBothImmediateNumbers):
+        (KJS::JSImmediate::andImmediateNumbers):
+        * kjs/nodes.cpp:
+        (KJS::BitAndNode::evaluate):
+        * kjs/value.h:
+        (KJS::jsNumberFromAnd):
+
+2007-11-08  Adam Roben  <aroben@apple.com>
+
+        Stop using KJS inside of MathExtras.h
+
+        Reviewed by Darin.
+
+        * wtf/MathExtras.h: Removed an unused header, and a now-unused
+        forward-declaration.
+        (wtf_atan2): Use std::numeric_limits intead of KJS.
+
+2007-11-08  Sam Weinig  <sam@webkit.org>
+
+        Windows build fix.
+
+        * kjs/date_object.cpp:
+        (KJS::DateProtoFuncToLocaleString::callAsFunction): Fix unused arg warning.
+        (KJS::DateProtoFuncToLocaleDateString::callAsFunction): ditto
+        (KJS::DateProtoFuncToLocaleTimeString::callAsFunction): ditto
+
+2007-11-08  Mark Rowe  <mrowe@apple.com>
+
+        Gtk build fix.
+
+        * kjs/lookup.h: Add missing include.
+
+2007-11-08  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Darin.
+
+        Convert JavaScript internal function objects to use one class per
+        function.  This avoids a switch statement inside what used to be
+        the shared function classes and will allow Shark to better analyze
+        the code.
+
+        To make this switch, the value property of the HashEntry was changed
+        to a union of an intptr_t (which is used to continue handle valueGetters)
+        and function pointer which points to a static constructor for the
+        individual new function objects.
+
+        SunSpider claims this is a 1.0% speedup.
+
+        * kjs/array_object.cpp:
+        (KJS::ArrayPrototype::getOwnPropertySlot):
+        (KJS::getProperty):
+        (KJS::ArrayProtoFuncToString::callAsFunction):
+        (KJS::ArrayProtoFuncToLocaleString::callAsFunction):
+        (KJS::ArrayProtoFuncJoin::callAsFunction):
+        (KJS::ArrayProtoFuncConcat::callAsFunction):
+        (KJS::ArrayProtoFuncPop::callAsFunction):
+        (KJS::ArrayProtoFuncPush::callAsFunction):
+        (KJS::ArrayProtoFuncReverse::callAsFunction):
+        (KJS::ArrayProtoFuncShift::callAsFunction):
+        (KJS::ArrayProtoFuncSlice::callAsFunction):
+        (KJS::ArrayProtoFuncSort::callAsFunction):
+        (KJS::ArrayProtoFuncSplice::callAsFunction):
+        (KJS::ArrayProtoFuncUnShift::callAsFunction):
+        (KJS::ArrayProtoFuncFilter::callAsFunction):
+        (KJS::ArrayProtoFuncMap::callAsFunction):
+        (KJS::ArrayProtoFuncEvery::callAsFunction):
+        (KJS::ArrayProtoFuncForEach::callAsFunction):
+        (KJS::ArrayProtoFuncSome::callAsFunction):
+        (KJS::ArrayProtoFuncIndexOf::callAsFunction):
+        (KJS::ArrayProtoFuncLastIndexOf::callAsFunction):
+        * kjs/array_object.h:
+        (KJS::ArrayPrototype::classInfo):
+        * kjs/create_hash_table:
+        * kjs/date_object.cpp:
+        (KJS::DatePrototype::getOwnPropertySlot):
+        (KJS::DateProtoFuncToString::callAsFunction):
+        (KJS::DateProtoFuncToUTCString::callAsFunction):
+        (KJS::DateProtoFuncToDateString::callAsFunction):
+        (KJS::DateProtoFuncToTimeString::callAsFunction):
+        (KJS::DateProtoFuncToLocaleString::callAsFunction):
+        (KJS::DateProtoFuncToLocaleDateString::callAsFunction):
+        (KJS::DateProtoFuncToLocaleTimeString::callAsFunction):
+        (KJS::DateProtoFuncValueOf::callAsFunction):
+        (KJS::DateProtoFuncGetTime::callAsFunction):
+        (KJS::DateProtoFuncGetFullYear::callAsFunction):
+        (KJS::DateProtoFuncGetUTCFullYear::callAsFunction):
+        (KJS::DateProtoFuncToGMTString::callAsFunction):
+        (KJS::DateProtoFuncGetMonth::callAsFunction):
+        (KJS::DateProtoFuncGetUTCMonth::callAsFunction):
+        (KJS::DateProtoFuncGetDate::callAsFunction):
+        (KJS::DateProtoFuncGetUTCDate::callAsFunction):
+        (KJS::DateProtoFuncGetDay::callAsFunction):
+        (KJS::DateProtoFuncGetUTCDay::callAsFunction):
+        (KJS::DateProtoFuncGetHours::callAsFunction):
+        (KJS::DateProtoFuncGetUTCHours::callAsFunction):
+        (KJS::DateProtoFuncGetMinutes::callAsFunction):
+        (KJS::DateProtoFuncGetUTCMinutes::callAsFunction):
+        (KJS::DateProtoFuncGetSeconds::callAsFunction):
+        (KJS::DateProtoFuncGetUTCSeconds::callAsFunction):
+        (KJS::DateProtoFuncGetMilliSeconds::callAsFunction):
+        (KJS::DateProtoFuncGetUTCMilliseconds::callAsFunction):
+        (KJS::DateProtoFuncGetTimezoneOffset::callAsFunction):
+        (KJS::DateProtoFuncSetTime::callAsFunction):
+        (KJS::DateProtoFuncSetMilliSeconds::callAsFunction):
+        (KJS::DateProtoFuncSetUTCMilliseconds::callAsFunction):
+        (KJS::DateProtoFuncSetSeconds::callAsFunction):
+        (KJS::DateProtoFuncSetUTCSeconds::callAsFunction):
+        (KJS::DateProtoFuncSetMinutes::callAsFunction):
+        (KJS::DateProtoFuncSetUTCMinutes::callAsFunction):
+        (KJS::DateProtoFuncSetHours::callAsFunction):
+        (KJS::DateProtoFuncSetUTCHours::callAsFunction):
+        (KJS::DateProtoFuncSetDate::callAsFunction):
+        (KJS::DateProtoFuncSetUTCDate::callAsFunction):
+        (KJS::DateProtoFuncSetMonth::callAsFunction):
+        (KJS::DateProtoFuncSetUTCMonth::callAsFunction):
+        (KJS::DateProtoFuncSetFullYear::callAsFunction):
+        (KJS::DateProtoFuncSetUTCFullYear::callAsFunction):
+        (KJS::DateProtoFuncSetYear::callAsFunction):
+        (KJS::DateProtoFuncGetYear::callAsFunction):
+        * kjs/date_object.h:
+        * kjs/lookup.cpp:
+        (KJS::Lookup::find):
+        * kjs/lookup.h:
+        (KJS::HashEntry::):
+        (KJS::staticFunctionGetter):
+        (KJS::staticValueGetter):
+        (KJS::getStaticPropertySlot):
+        (KJS::getStaticFunctionSlot):
+        (KJS::lookupPut):
+        * kjs/math_object.cpp:
+        (KJS::MathObjectImp::getOwnPropertySlot):
+        (KJS::MathProtoFuncAbs::callAsFunction):
+        (KJS::MathProtoFuncACos::callAsFunction):
+        (KJS::MathProtoFuncASin::callAsFunction):
+        (KJS::MathProtoFuncATan::callAsFunction):
+        (KJS::MathProtoFuncATan2::callAsFunction):
+        (KJS::MathProtoFuncCeil::callAsFunction):
+        (KJS::MathProtoFuncCos::callAsFunction):
+        (KJS::MathProtoFuncExp::callAsFunction):
+        (KJS::MathProtoFuncFloor::callAsFunction):
+        (KJS::MathProtoFuncLog::callAsFunction):
+        (KJS::MathProtoFuncMax::callAsFunction):
+        (KJS::MathProtoFuncMin::callAsFunction):
+        (KJS::MathProtoFuncPow::callAsFunction):
+        (KJS::MathProtoFuncRandom::callAsFunction):
+        (KJS::MathProtoFuncRound::callAsFunction):
+        (KJS::MathProtoFuncSin::callAsFunction):
+        (KJS::MathProtoFuncSqrt::callAsFunction):
+        (KJS::MathProtoFuncTan::callAsFunction):
+        * kjs/math_object.h:
+        (KJS::MathObjectImp::classInfo):
+        (KJS::MathObjectImp::):
+        * kjs/string_object.cpp:
+        (KJS::StringPrototype::getOwnPropertySlot):
+        (KJS::StringProtoFuncToString::callAsFunction):
+        (KJS::StringProtoFuncValueOf::callAsFunction):
+        (KJS::StringProtoFuncCharAt::callAsFunction):
+        (KJS::StringProtoFuncCharCodeAt::callAsFunction):
+        (KJS::StringProtoFuncConcat::callAsFunction):
+        (KJS::StringProtoFuncIndexOf::callAsFunction):
+        (KJS::StringProtoFuncLastIndexOf::callAsFunction):
+        (KJS::StringProtoFuncMatch::callAsFunction):
+        (KJS::StringProtoFuncSearch::callAsFunction):
+        (KJS::StringProtoFuncReplace::callAsFunction):
+        (KJS::StringProtoFuncSlice::callAsFunction):
+        (KJS::StringProtoFuncSplit::callAsFunction):
+        (KJS::StringProtoFuncSubstr::callAsFunction):
+        (KJS::StringProtoFuncSubstring::callAsFunction):
+        (KJS::StringProtoFuncToLowerCase::callAsFunction):
+        (KJS::StringProtoFuncToUpperCase::callAsFunction):
+        (KJS::StringProtoFuncToLocaleLowerCase::callAsFunction):
+        (KJS::StringProtoFuncToLocaleUpperCase::callAsFunction):
+        (KJS::StringProtoFuncLocaleCompare::callAsFunction):
+        (KJS::StringProtoFuncBig::callAsFunction):
+        (KJS::StringProtoFuncSmall::callAsFunction):
+        (KJS::StringProtoFuncBlink::callAsFunction):
+        (KJS::StringProtoFuncBold::callAsFunction):
+        (KJS::StringProtoFuncFixed::callAsFunction):
+        (KJS::StringProtoFuncItalics::callAsFunction):
+        (KJS::StringProtoFuncStrike::callAsFunction):
+        (KJS::StringProtoFuncSub::callAsFunction):
+        (KJS::StringProtoFuncSup::callAsFunction):
+        (KJS::StringProtoFuncFontcolor::callAsFunction):
+        (KJS::StringProtoFuncFontsize::callAsFunction):
+        (KJS::StringProtoFuncAnchor::callAsFunction):
+        (KJS::StringProtoFuncLink::callAsFunction):
+        * kjs/string_object.h:
+
+2007-11-08  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        Reviewed by Sam and Ada.
+
+        * wtf/MathExtras.h: Get rid of a circular #include dependency to fix
+        the build.
+
+2007-11-08  Adam Roben  <aroben@apple.com>
+
+        Fix a precedence warning on Windows
+
+        * kjs/JSImmediate.h:
+        (KJS::JSImmediate::toBoolean):
+
+2007-11-08  Mark Rowe  <mrowe@apple.com>
+
+        Build fix for JavaScriptGlue.
+
+        * wtf/MathExtras.h: Include stdlib.h for srand and RAND_MAX.
+
+2007-11-08  Darin Adler  <darin@apple.com>
+
+        - Windows build fix
+
+        * kjs/JSImmediate.h: Include MathExtras.h rather than math.h since this file uses "signbit".
+
+2007-11-08  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Darin.
+
+        Replace the use of floats for immediate values with the use of integers for a 4.5% improvement in SunSpider.
+
+        Unfortunately this change results in NaN, +Inf, -Inf, and -0 being heap allocated now, but
+        we should now have faster array access, faster immediate to double conversion, and the 
+        potential to further improve bitwise operators in future.
+
+        This also removes the need for unions to avoid strict aliasing problems when extracting 
+        a value from immediates.
+
+        * kjs/JSImmediate.h:
+        (KJS::JSImmediate::trueImmediate):
+        (KJS::JSImmediate::falseImmediate):
+        (KJS::JSImmediate::undefinedImmediate):
+        (KJS::JSImmediate::nullImmediate):
+        (KJS::JSImmediate::toBoolean):
+        * kjs/value.h:
+        (KJS::jsNaN):
+
+2007-11-07  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Darin and Oliver.
+        
+        Add evaluateToNumber parallel evaluation tree to speed up number operations.
+        Make ImmediateNumberNode a subclass of NumberNode.
+        Share evaluate logic between evaluate and evaluateToNumber using inline functions
+        There is still a lot of improvement to be made here.
+        
+        SunSpider claims this is a 1.0% speedup overall (nbody 7.9%), base64 slowing 2.0%
+        Given the huge win that this prepares us for with simple type inferencing I see the small
+        regression in base64 being worth the substantial overall improvement.
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::Node::evaluateToNumber):
+        (KJS::NumberNode::evaluate):
+        (KJS::NumberNode::evaluateToNumber):
+        (KJS::StringNode::evaluateToNumber):
+        (KJS::LocalVarAccessNode::inlineEvaluate):
+        (KJS::LocalVarAccessNode::evaluate):
+        (KJS::LocalVarAccessNode::evaluateToNumber):
+        (KJS::BracketAccessorNode::inlineEvaluate):
+        (KJS::BracketAccessorNode::evaluate):
+        (KJS::BracketAccessorNode::evaluateToNumber):
+        (KJS::NegateNode::evaluate):
+        (KJS::NegateNode::evaluateToNumber):
+        (KJS::MultNode::inlineEvaluateToNumber):
+        (KJS::MultNode::evaluate):
+        (KJS::MultNode::evaluateToNumber):
+        (KJS::DivNode::inlineEvaluateToNumber):
+        (KJS::DivNode::evaluate):
+        (KJS::DivNode::evaluateToNumber):
+        (KJS::ModNode::inlineEvaluateToNumber):
+        (KJS::ModNode::evaluate):
+        (KJS::ModNode::evaluateToNumber):
+        (KJS::throwOutOfMemoryErrorToNumber):
+        (KJS::addSlowCaseToNumber):
+        (KJS::add):
+        (KJS::addToNumber):
+        (KJS::AddNode::evaluateToNumber):
+        (KJS::SubNode::inlineEvaluateToNumber):
+        (KJS::SubNode::evaluate):
+        (KJS::SubNode::evaluateToNumber):
+        (KJS::valueForReadModifyAssignment):
+        (KJS::ReadModifyLocalVarNode::evaluate):
+        (KJS::ReadModifyResolveNode::evaluate):
+        (KJS::ReadModifyDotNode::evaluate):
+        (KJS::ReadModifyBracketNode::evaluate):
+        * kjs/nodes.h:
+        (KJS::Node::):
+        (KJS::NumberNode::):
+        (KJS::ImmediateNumberNode::):
+        (KJS::AddNode::precedence):
+        * kjs/nodes2string.cpp:
+        (KJS::NumberNode::streamTo):
+
+2007-11-07  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Eric.
+
+        Fix up initialization after being mangled in r27572, and remove the
+        ternary expression as extraCost will always be zero for the numeric
+        heap.
+
+        * kjs/collector.cpp:
+        (KJS::Collector::heapAllocate):
+
+2007-11-07  Mark Rowe  <mrowe@apple.com>
+
+        Gtk build fix.
+
+        * kjs/regexp_object.cpp:
+
+2007-11-07  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Beth Dakin.
+        
+        Eliminated a bogus (though compiled-out) branch in the collector.
+
+        * kjs/collector.cpp:
+        (KJS::Collector::heapAllocate):
+
+2007-11-06  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        Fixed part of http://bugs.webkit.org/show_bug.cgi?id=15861 
+        5.8% of string-validate-input.js is spent creating RegExpImps
+
+        Put RegExpImp properties into a static hashtable to avoid a slew of
+        PropertyMap churn when creating a RegExpImp.
+        
+        Factored important bits of regular expression implementation out of
+        RegExpImp (the JS object) and into RegExp (the PCRE wrapper class), 
+        making RegExp a ref-counted class. (This will help later.)
+
+        Removed PCRE_POSIX support because I didn't quite know how to test it 
+        and keep it working with these changes.
+        
+        1.1% SunSpider speedup. 5.8% speedup on string-validate-input.js.
+
+        * kjs/regexp.h: A few interface changes:
+        1. Renamed "subpatterns()" => "numSubpatterns()"
+        2. Made flag enumeration private and replaced it with public getters for
+        specific flags.
+        3. Made RegExp ref-counted so RegExps can be shared by RegExpImps.
+        4. Made RegExp take a string of flags instead of an int, eliminating 
+        duplicated flag parsing code elsewhere.
+
+        * kjs/regexp_object.cpp:
+        (KJS::RegExpProtoFunc::callAsFunction): For RegExp.compile: 
+        - Fixed a bug where compile(undefined) would throw an exception. 
+        - Removed some now-redundant code.
+        - Used RegExp sharing to eliminate an allocation and a bunch of 
+        PropertyMap thrash. (Not a big win since compile is a deprecated 
+        function. I mainly did this to test the plubming.)
+
+2007-11-07  Simon Hausmann  <hausmann@kde.org>
+
+        Reviewed by nobody, Qt/Windows build fix.
+
+        JavaScriptCore.pri expects OBJECTS_DIR to be set, so set it in
+        testkjs.pro, too, where it's included from.
+
+        * kjs/testkjs.pro:
+
+2007-11-07  Simon Hausmann  <shausman@trolltech.com>
+
+        Reviewed by Lars.
+
+        Fix "nmake clean" for the Qt/Windows build by replacing tmp/ with a variable that ends with the correct type of slash/backslash depending on the choice of compiler/make tool.
+
+        * JavaScriptCore.pri:
+        * pcre/pcre.pri:
+
+2007-11-07  Lars Knoll  <lars@trolltech.com>
+
+        Reviewed by Simon.
+
+        fix umemcasecmp
+        
+        Pretty embarrassing bug. Has the potential to fix quite a few test failures.
+
+        * wtf/unicode/qt4/UnicodeQt4.h:
+        (WTF::Unicode::umemcasecmp):
+
+2007-11-06  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Eric.        
+        
+        - only collect when the heap is full, unless we have lots of extra cost garbage
+        
+        1.1% SunSpider speedup.
+        
+        This shouldn't hit memory use much since the extra space in those
+        blocks hangs around either way.
+
+        * kjs/collector.cpp:
+        (KJS::Collector::heapAllocate):
+        (KJS::Collector::collect): Fix logic error that reversed the sense of collect's 
+        return value.
+
+2007-11-06  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Avoid unnecessarily boxing the result from post inc/decrement for 0.3% gain in sunspider
+        
+        We now convert the common 'for (...; ...; <var>++) ...' to the semantically identical
+        'for (...; ...; ++<var>) ...'.
+
+        * kjs/nodes.cpp:
+        (KJS::PostIncResolveNode::optimizeForUnnecessaryResult):
+        (KJS::PostIncLocalVarNode::evaluate):
+        (KJS::PostIncLocalVarNode::optimizeForUnnecessaryResult):
+        (KJS::PostDecResolveNode::optimizeForUnnecessaryResult):
+        (KJS::PostDecLocalVarNode::evaluate):
+        (KJS::PostDecLocalVarNode::optimizeForUnnecessaryResult):
+        * kjs/nodes.h:
+        (KJS::PrePostResolveNode::):
+        (KJS::PostIncResolveNode::):
+        (KJS::PostIncLocalVarNode::):
+        (KJS::PostDecResolveNode::):
+        (KJS::PostDecLocalVarNode::):
+        (KJS::PreIncResolveNode::):
+        (KJS::PreDecResolveNode::):
+        (KJS::ForNode::ForNode):
+
+2007-11-06  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by darin.
+
+        This fixes a regressed layout test for string + object
+        
+        SunSpider claims this was an overall 0.3% speedup, although some individual tests were slower.
+
+        * kjs/nodes.cpp:
+        (KJS::add): remove erroneous "fast path" for string + *
+
+2007-11-06  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Eric Seidel.
+        
+        Added toJSNumber, a fast path for converting a JSValue to a JS number,
+        and deployed it in postfix expressions. In the fast case this 
+        eliminates a call to jsNumber.
+        
+        0.4% speedup on SunSpider.
+
+        * ChangeLog:
+        * kjs/nodes.cpp:
+        (KJS::PostIncResolveNode::evaluate):
+        (KJS::PostIncLocalVarNode::evaluate):
+        (KJS::PostDecResolveNode::evaluate):
+        (KJS::PostDecLocalVarNode::evaluate):
+        (KJS::PostIncBracketNode::evaluate):
+        (KJS::PostDecBracketNode::evaluate):
+        (KJS::PostIncDotNode::evaluate):
+        (KJS::PostDecDotNode::evaluate):
+        (KJS::UnaryPlusNode::evaluate):
+        * kjs/value.h:
+        (KJS::JSValue::toJSNumber):
+
+2007-11-06  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15846
+          REGRESSION (r27387): Memory corruption when running fast/js/kde/delete.html
+
+        There was a mistake in the algorithm used to find an empty slot in the property
+        map entries vector; when we were putting in a new property value and not overwriting
+        an existing deleted sentinel, we would enlarge the entries vector, but would not
+        overwrite the stale data that's in the new part. It was easy to pin this down by
+        turning on property map consistency checks -- I never would have landed with this
+        bug if I had run the regression tests once with consistency checks on!
+
+        * kjs/property_map.cpp: (KJS::PropertyMap::put): Changed logic for the case where
+        foundDeletedElement is false to always use the item at the end of the entries vector.
+        Also allowed me to merge with the logic for the "no deleted sentinels at all" case.
+
+2007-11-06  Oliver Hunt  <oliver@apple.com>
+
+        RS=Darin.
+
+        Fix previous patch to use a 3 bit shift, a 16 bit shift causes a regression in sunspider.
+
+        * kjs/nodes.cpp:
+        (KJS::add):
+
+2007-11-06  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Darin.
+
+        Replace boolean comparisons in AddNode with mask
+        comparisons for a 0.2% improvement in sunspider.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/nodes.cpp:
+        (KJS::add):
+
+2007-11-06  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by darin.
+        
+        SunSpider claims this is a 1.1% speedup.
+
+        * kjs/nodes.cpp:
+        (KJS::throwOutOfMemoryError): Added, non inline.
+        (KJS::addSlowCase): renamed from add(), non inline.
+        (KJS::add): add fast path for String + String, Number + Number and String + *
+
+2007-11-06  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by mjs.
+        
+        Avoid more UString creation.
+        
+        SunSpider claims this is a 0.4% speedup.
+
+        * kjs/regexp_object.cpp:
+        (KJS::RegExpObjectImp::construct): use UString::find(UChar)
+
+2007-11-05  Mark Rowe  <mrowe@apple.com>
+
+        Mac build fix.
+
+        * kjs/array_object.cpp:
+        (KJS::ArrayProtoFunc::callAsFunction):
+
+2007-11-05  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        * kjs/list.h:
+
+2007-11-05  Mark Rowe  <mrowe@apple.com>
+
+        Build fix.  Add missing #include.
+
+        * kjs/operations.cpp:
+
+2007-11-05  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by mjs.
+        
+        Remove another call to toString(exec)
+        
+        SunSpider claims this is a 0.5% speedup.
+
+        * kjs/operations.cpp:
+        (KJS::equal): remove another toString
+
+2007-11-05  Eric Seidel  <eric@webkit.org>
+
+        * kjs/operations.cpp:
+        (KJS::equal): correct broken change.
+
+2007-11-05  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by mjs.
+
+        Remove one more call to toString(exec).
+        
+        SunSpider claims this is a 0.7% speedup.
+
+        * kjs/operations.cpp:
+        (KJS::equal): remove a call to toString()
+
+2007-11-05  Mark Rowe  <mrowe@apple.com>
+
+        Gtk build fix.
+
+        * pcre/pcre.pri:
+
+2007-11-05  Mark Rowe  <mrowe@apple.com>
+
+        Gtk build fix.
+
+        * kjs/list.cpp:
+
+2007-11-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Touched a file to test my new HTTP access.
+
+        * kjs/scope_chain.cpp:
+
+2007-11-05  Alp Toker  <alp@atoker.com>
+
+        Unreviewed build fix for qmake-based ports.
+
+        Someone with a better understanding of qmake still needs to sort out
+        the INCLUDEPATH/DEPENDPATH mess.
+
+        * JavaScriptCore.pri:
+
+2007-11-05  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        http://bugs.webkit.org/show_bug.cgi?id=15835
+
+        Switched List implementation from a custom heap allocator to an inline
+        Vector, for a disappointing .5% SunSpider speedup.
+        
+        Also renamed List::slice to List::getSlice because "get" is the 
+        conventional prefix for functions returning a value through an out 
+        parameter.
+
+        * kjs/array_object.cpp:
+        (KJS::ArrayProtoFunc::callAsFunction): Removed some redundant function
+        calls and memory accesses.
+
+        * kjs/bool_object.cpp:
+        (BooleanObjectImp::construct): Removed questionable use of iterator.
+
+        * kjs/list.cpp:
+        * kjs/list.h: New List class, implemented in terms of Vector. Two 
+        interesting differences:
+            1. The inline capacity is 8, not 5. Many of the Lists constructed 
+            during a SunSpider run are larger than 5; almost none are larger
+            than 8.
+
+            2. The growth factor is 4, not 2. Since we can guarantee that Lists
+            aren't long-lived, we can grow them more aggressively, to avoid
+            excessive copying.
+
+        * kjs/regexp_object.cpp:
+        (RegExpObjectImp::construct): Removed redundant function calls.
+
+        * kjs/string_object.cpp:
+        (KJS::StringObjectImp::construct): Removed questionable use of iterator.
+
+        * wtf/Vector.h:
+        (WTF::::uncheckedAppend): Added a fast, unchecked version of append.
+
+2007-11-05  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Alp Toker.
+
+        Add DEPENDPATH to JavaScriptCore and pcre to help qmake with dependencies.
+
+        * JavaScriptCore.pri:
+        * pcre/pcre.pri:
+
+2007-11-04  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15826
+          optimize opcode loop and case insensitive ASCII compares for a 30% speedup
+
+        SunSpider says it's 2.6% faster overall, 32.5% in the regular expression tests.
+
+        * pcre/pcre_internal.h: Added OP_ASCII_CHAR and OP_ASCII_LETTER_NC.
+
+        * pcre/pcre_compile.c:
+        (find_fixedlength): Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC. Also
+        added OP_NOT since there was no reason it should not be in here.
+        (could_be_empty_branch): Ditto.
+        (compile_branch): Streamlined all the single-character cases; there was a bit of
+        duplicate code. Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC as needed.
+        But in particular, compile to those opcodes when the single character match is
+        ASCII.
+        (find_firstassertedchar): Added cases for OP_ASCII_CHAR and OP_ASCII_LETTER_NC.
+
+        * pcre/pcre_exec.c: (match): Removed the "min", "minimize", and "op" fields from
+        the matchframe, after I discovered that none of them needed to be saved and restored
+        across recursive match calls. Also eliminated the ignored result field from the
+        matchframe, since I discovered that rrc ("recursive result code") was already the
+        exact same thing. Moved the handling of opcodes higher than OP_BRA into the default
+        statement of the switch instead of doing them before the switch. This removes a
+        branch from each iteration of the opcode interpreter, just as removal of "op"
+        removed at least one store from each iteration. Last, but not least, add the
+        OP_ASCII_CHAR and OP_ASCII_LETTER_NC functions. Neither can ever match a
+        surrogate pair and the letter case can be handled efficiently.
+
+2007-11-04  Darin Adler  <darin@apple.com>
+
+        * pcre/pcre_exec.c: (match): Try to fix the Windows build by removing unreachable code.
+
+2007-11-03  Darin Adler  <darin@apple.com>
+
+        - fix non-Mac builds; remove some more unused PCRE stuff
+
+        * pcre/pcre_compile.c:
+        (compile_branch): Removed branch chain and some unused ESC values.
+        (compile_regex): Ditto.
+        (jsRegExpCompile): Ditto.
+        * pcre/pcre_exec.c:
+        (match): Removed unused branch targets. Don't use macros any more.
+        (jsRegExpExecute): More of the same.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update for removed files.
+        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
+        * pcre/pcre.pri: Ditto.
+
+        * pcre/MERGING: Removed.
+        * pcre/pcre_fullinfo.c: Removed.
+        * pcre/pcre_get.c: Removed.
+        * pcre/pcre_internal.h:
+        * pcre/ucp.h: Removed.
+
+2007-11-03  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15821
+          remove unused PCRE features for speed
+
+        A first step toward removing the PCRE features we don't use.
+        This gives a 0.8% speedup on SunSpider, and a 6.5% speedup on
+        the SunSpider regular expression test.
+
+        Replaced the public interface with one that doesn't use the
+        name PCRE. Removed code we don't need for JavaScript and various
+        configurations we don't use. This is in preparation for still
+        more changes in the future. We'll probably switch to C++ and
+        make some even more significant changes to the regexp engine
+        to get some additional speed.
+
+        There's probably additional unused stuff that I haven't
+        deleted yet.
+
+        This does mean that our PCRE is now a fork, but I think that's
+        not really a big deal.
+
+        * JavaScriptCore.exp: Remove the 5 old entry points and add
+        the 3 new entry points for WebCore's direct use of the regular
+        expression engine.
+
+        * kjs/config.h: Remove the USE(PCRE16) define. I decided to flip
+        its sense and now there's a USE(POSIX_REGEX) instead, which should
+        probably not be set by anyone. Maybe later we'll just get rid of it
+        altogether.
+
+        * kjs/regexp.h:
+        * kjs/regexp.cpp:
+        (KJS::RegExp::RegExp): Switch to new jsRegExp function names and
+        defines. Cut down on the number of functions used.
+        (KJS::RegExp::~RegExp): Ditto.
+        (KJS::RegExp::match): Ditto.
+
+        * pcre/dftables.c: (main): Get rid of ctype_letter and ctype_meta,
+        which are unused.
+
+        * pcre/pcre-config.h: Get rid of EBCIDIC, PCRE_DATA_SCOPE, const,
+        size_t, HAVE_STRERROR, HAVE_MEMMOVE, HAVE_BCOPY, NEWLINE,
+        POSIX_MALLOC_THRESHOLD, NO_RECURSE, SUPPORT_UCP, SUPPORT_UTF8,
+        and JAVASCRIPT. These are all no longer configurable in our copy
+        of the library.
+
+        * pcre/pcre.h: Remove the macro-based kjs prefix hack, the PCRE
+        version macros, PCRE_UTF16, the code to set up PCRE_DATA_SCOPE,
+        the include of <stdlib.h>, and most of the constants and
+        functions defined in this header. Changed the naming scheme to
+        use a JSRegExp prefix rather than a pcre prefix. In the future,
+        we'll probably change this to be a C++ header.
+
+        * pcre/pcre_compile.c: Removed all unused code branches,
+        including many whole functions and various byte codes.
+        Kept changes outside of removal to a minimum.
+        (check_escape):
+        (first_significant_code):
+        (find_fixedlength):
+        (find_recurse):
+        (could_be_empty_branch):
+        (compile_branch):
+        (compile_regex):
+        (is_anchored):
+        (is_startline):
+        (find_firstassertedchar):
+        (jsRegExpCompile): Renamed from pcre_compile2 and changed the
+        parameters around a bit.
+        (jsRegExpFree): Added.
+
+        * pcre/pcre_exec.c: Removed many unused opcodes and variables.
+        Also started tearing down the NO_RECURSE mechanism since it's
+        now the default. In some cases there were things in the explicit
+        frame that could be turned into plain old local variables and
+        other small like optimizations.
+        (pchars):
+        (match_ref):
+        (match): Changed parameters quite a bit since it's now not used
+        recursively.
+        (jsRegExpExecute): Renamed from pcre_exec.
+
+        * pcre/pcre_internal.h: Get rid of PCRE_DEFINITION, PCRE_SPTR,
+        PCRE_IMS, PCRE_ICHANGED, PCRE_NOPARTIAL, PCRE_STUDY_MAPPED,
+        PUBLIC_OPTIONS, PUBLIC_EXEC_OPTIONS, PUBLIC_DFA_EXEC_OPTIONS,
+        PUBLIC_STUDY_OPTIONS, MAGIC_NUMBER, 16 of the opcodes,
+        _pcre_utt, _pcre_utt_size, _pcre_try_flipped, _pcre_ucp_findprop,
+        and _pcre_valid_utf8. Also moved pcre_malloc and pcre_free here.
+
+        * pcre/pcre_maketables.c: Changed to only compile in dftables.
+        Also got rid of many of the tables that we don't use.
+
+        * pcre/pcre_tables.c: Removed the unused Unicode property tables.
+
+        * pcre/pcre_ucp_searchfuncs.c: Removed everything except for
+        _pcre_ucp_othercase.
+
+        * pcre/pcre_xclass.c: (_pcre_xclass): Removed uneeded support
+        for classes based on Unicode properties.
+
+        * wtf/FastMallocPCRE.cpp: Removed unused bits. It would be good
+        to eliminate this completely, but we need the regular expression
+        code to be C++ first.
+
+        * pcre/pcre_fullinfo.c:
+        * pcre/pcre_get.c:
+        * pcre/ucp.h:
+        Files that are no longer needed. I didn't remove them with this
+        check-in, because I didn't want to modify all the project files.
+
+2007-11-03  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Sam.
+        
+        - remove NaN check from JSImmediate::fromDouble for 0.5% SunSpider speedup
+
+        It turns out that doing this check costs more than it saves.
+        
+        * kjs/JSImmediate.h:
+        (KJS::JSImmediate::fromDouble):
+
+2007-11-03  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Oliver.
+
+        Remove dummy variable from ClassInfo reducing the size of the struct by 1 word.
+        The variable had been kept around for binary compatibility, but since nothing
+        else is there is no point in continuing to keep it around.
+
+        * API/JSCallbackConstructor.cpp:
+        * API/JSCallbackFunction.cpp:
+        * API/JSCallbackObject.cpp:
+        * bindings/objc/objc_runtime.mm:
+        * bindings/runtime_array.cpp:
+        * bindings/runtime_object.cpp:
+        * kjs/array_instance.cpp:
+        * kjs/array_object.cpp:
+        * kjs/bool_object.cpp:
+        * kjs/date_object.cpp:
+        * kjs/error_object.cpp:
+        * kjs/function.cpp:
+        * kjs/internal.cpp:
+        * kjs/lookup.h:
+        * kjs/math_object.cpp:
+        * kjs/number_object.cpp:
+        * kjs/object.h:
+        * kjs/regexp_object.cpp:
+        * kjs/string_object.cpp:
+
+2007-11-03  Kevin McCullough  <kmccullough@apple.com>
+
+        - Updated testkjs results to make the build bots green until we
+        can fix the tests that are failing.  The new failures are in DST.
+
+        * tests/mozilla/expected.html:
+
+2007-11-03  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Adam.
+        
+        - don't print the var twice for ForInNodes with a var declaration
+
+        * kjs/nodes2string.cpp:
+        (KJS::ForInNode::streamTo):
+
+2007-11-03  Darin Adler  <darin@apple.com>
+
+        * pcre/pcre_compile.c: (check_escape): Windows build fix. Get rid of
+        C-incompatible declaration.
+
+2007-11-03  Mark Rowe  <mrowe@apple.com>
+
+        Gtk build fix.
+
+        * kjs/nodes.cpp:  Add missing include.
+
+2007-11-03  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=15814
+          <rdar://problem/5536644> fast/js/kde/encode_decode_uri.html fails
+
+        These changes cause us to match the JavaScript specification and pass the
+        fast/js/kde/encode_decode_uri.html test.
+
+        * kjs/function.cpp: (KJS::encode): Call the UTF-8 string conversion in its
+        new strict mode, throwing an exception if there are malformed UTF-16 surrogate
+        pairs in the text.
+
+        * kjs/ustring.h: Added a strict version of the UTF-8 string conversion.
+        * kjs/ustring.cpp:
+        (KJS::decodeUTF8Sequence): Removed code to disallow U+FFFE and U+FFFF; while
+        those might be illegal in some sense, they aren't supposed to get any special
+        handling in the place where this function is currently used.
+        (KJS::UString::UTF8String): Added the strictness.
+
+2007-11-03  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15812
+          some JavaScript tests (from the Mozilla test suite) are failing
+
+        Two or three fixes get 7 more of the Mozilla tests passing.
+        This gets us down from 61 failing tests to 54.
+
+        * kjs/interpreter.h: (KJS::Interpreter::builtinRegExp):
+        Made this inline and gave it a more specific type. Some day we should
+        probably do that for all of these -- might even get a bit of a speed
+        boost from it.
+        * kjs/interpreter.cpp: Removed Interpreter::builtinRegExp now that it's
+        inline in the header.
+
+        * kjs/regexp_object.h:
+        * kjs/regexp_object.cpp:
+        (KJS::RegExpProtoFunc::callAsFunction): Moved test and exec out of the
+        switch statement into the RegExpImp object, so they can be shared with
+        RegExpImp::callAsFunction.
+        (KJS::RegExpImp::match): Added. Common code used by both test and exec.
+        (KJS::RegExpImp::test): Added.
+        (KJS::RegExpImp::exec): Added.
+        (KJS::RegExpImp::implementsCall): Added.
+        (KJS::RegExpImp::callAsFunction): Added.
+        (KJS::RegExpObjectImpPrivate::RegExpObjectImpPrivate): Initialize
+        lastInput to null rather than empty string -- we take advantage of the
+        difference in RegExpImp::match.
+        (KJS::RegExpObjectImp::input): Added. No reason to go through hash tables
+        just to get at a field like this.
+
+        * pcre/pcre_compile.c: (check_escape): Changed the \u handling to match
+        the JavaScript specification. If there are not 4 hex digits after the \u,
+        then it's processed as if it wasn't an escape sequence at all.
+
+        * pcre/pcre_internal.h: Added IS_NEWLINE, with the appropriate definition
+        for JavaScript (4 specific Unicode values).
+        * pcre/pcre_exec.c:
+        (match): Changed all call sites to use IS_NEWLINE.
+        (pcre_exec): Ditto.
+
+        * tests/mozilla/expected.html: Updated to expect 7 more successful tests.
+
+2007-11-03  David D. Kilzer  <ddkilzer@webkit.org>
+
+        Sort files(...); sections of Xcode project files.
+
+        Rubber-stamped by Darin.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2007-11-03  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - remove VarDeclListNode and simplify VarDeclNode evaluation for 0.4% SunSpider speedup
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::VarDeclNode::optimizeVariableAccess):
+        (KJS::VarDeclNode::getDeclarations):
+        (KJS::VarDeclNode::handleSlowCase):
+        (KJS::VarDeclNode::evaluateSingle):
+        (KJS::VarDeclNode::evaluate):
+        (KJS::VarStatementNode::execute):
+        * kjs/nodes.h:
+        (KJS::VarDeclNode::):
+        (KJS::VarStatementNode::):
+        * kjs/nodes2string.cpp:
+        (KJS::VarDeclNode::streamTo):
+
+2007-11-03  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        http://bugs.webkit.org/show_bug.cgi?id=15800
+        REGRESSION (r27303): RegExp leaks
+
+        * kjs/regexp_object.h:
+        (KJS::RegExpImp::setRegExp):
+        (KJS::RegExpImp::regExp):
+        (KJS::RegExpImp::classInfo):
+        * kjs/regexp_object.cpp:
+        (RegExpImp::RegExpImp):
+        (RegExpImp::~RegExpImp):
+        Renamed reg member variable to m_regExp, changed it to use OwnPtr.
+
+2007-11-02  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - add SourceElements as a typedef for Vector<RefPtr<StatementNode> >.
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::statementListPushFIFO):
+        (KJS::statementListGetDeclarations):
+        (KJS::statementListInitializeDeclarationStacks):
+        (KJS::statementListInitializeVariableAccessStack):
+        (KJS::statementListExecute):
+        (KJS::BlockNode::BlockNode):
+        (KJS::FunctionBodyNode::FunctionBodyNode):
+        (KJS::ProgramNode::ProgramNode):
+        * kjs/nodes.h:
+        (KJS::CaseClauseNode::):
+
+2007-11-02  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15791
+          change property map data structure for less memory use, better speed
+
+        The property map now has an array of indices and a separate array of
+        property map entries. This slightly slows down lookup because of a second
+        memory acess, but makes property maps smaller and faster to iterate in
+        functions like mark().
+
+        SunSpider says this is 1.2% faster, although it makes the bitwise-end test
+        more than 10% slower. To fix that we'll need to optimize global variable lookup.
+
+        * kjs/property_map.cpp:
+        (KJS::PropertyMapEntry::PropertyMapEntry):
+        (KJS::PropertyMapHashTable::entries):
+        (KJS::PropertyMapHashTable::allocationSize):
+        (KJS::SavedProperties::SavedProperties):
+        (KJS::SavedProperties::~SavedProperties):
+        (KJS::PropertyMap::checkConsistency):
+        (KJS::PropertyMap::~PropertyMap):
+        (KJS::PropertyMap::clear):
+        (KJS::PropertyMap::get):
+        (KJS::PropertyMap::getLocation):
+        (KJS::PropertyMap::put):
+        (KJS::PropertyMap::insert):
+        (KJS::PropertyMap::createTable):
+        (KJS::PropertyMap::rehash):
+        (KJS::PropertyMap::remove):
+        (KJS::PropertyMap::mark):
+        (KJS::comparePropertyMapEntryIndices):
+        (KJS::PropertyMap::containsGettersOrSetters):
+        (KJS::PropertyMap::getEnumerablePropertyNames):
+        (KJS::PropertyMap::save):
+        (KJS::PropertyMap::restore):
+        * kjs/property_map.h:
+
+2007-11-02  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15807
+          HashMap needs a take() function that combines get and remove
+
+        * wtf/HashMap.h: Added take function. Simplistic implementation for now,
+        but still does only one hash table lookup.
+
+        * kjs/array_instance.cpp: (KJS::ArrayInstance::put): Use take rather than
+        a find followed by a remove.
+
+2007-11-02  David Carson  <dacarson@gmail.com>
+
+        Reviewed by Darin.
+
+        Fix compiler warning "warning: suggest parentheses around && within ||"
+        http://bugs.webkit.org/show_bug.cgi?id=15764
+
+        * kjs/value.h: (KJS::JSValue::isNumber): Add parentheses.
+
+2007-11-01  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        In preparation for making List a simple stack-allocated Vector:
+
+        Removed all instances of List copying and/or assignment, and made List 
+        inherit from Noncopyable.
+        
+        Functions that used to return a List by copy now take List& out 
+        parameters.
+        
+        Layout tests and JS tests pass.
+
+        * kjs/list.cpp:
+        (KJS::List::slice): Replaced copyTail with a more generic slice 
+        alternative. (JavaScriptCore only calls slice(1), but WebCore calls 
+        slice(2)).
+
+2007-11-01  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        Fixed http://bugs.webkit.org/show_bug.cgi?id=15785
+        REGRESSION(r27344): Crash on load at finance.yahoo.com
+        
+        Reverted a small portion of my last check-in. (The speedup and the List 
+        removal are still there, though.)
+        
+        ActivationImp needs to hold a pointer to its function, and mark that 
+        pointer (rather than accessing its function through its ExecState, and 
+        counting on the active scope to mark its function) because a closure 
+        can cause an ActivationImp to outlive its ExecState along with any 
+        active scope.
+
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::ExecState):
+        * kjs/function.cpp:
+        (KJS::FunctionImp::~FunctionImp):
+        (KJS::ActivationImp::ActivationImp):
+        * kjs/function.h:
+        (KJS::ActivationImp::ActivationImpPrivate::ActivationImpPrivate):
+
+        Also made HashTable a little more crash-happy in debug builds, so 
+        problems like this will show up earlier:
+        
+        * wtf/HashTable.h:
+        (WTF::HashTable::~HashTable):
+
+2007-11-01  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Adam Roben.
+        
+        Addressed some of Darin's review comments.
+        
+        Used perl -p, which is the shorthand while(<>) {}.
+        
+        Made sure not to suppress bison's output.
+        
+        Added line to removed bison_out.txt, since this script removes other 
+        intermediate files, too.
+
+        * DerivedSources.make:
+
+2007-11-01  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Removed List from ActivationImp, in preparation for making all lists
+        stack-allocated.
+        
+        Tests pass.
+        
+        1.0% speedup on SunSpider, presumably due to reduced List refcount thrash.
+
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::ExecState):
+        (KJS::ExecState::~ExecState):
+        * kjs/function.cpp:
+        (KJS::ActivationImp::ActivationImp):
+        (KJS::ActivationImp::createArgumentsObject):
+        * kjs/function.h:
+        (KJS::ActivationImp::ActivationImpPrivate::ActivationImpPrivate):
+
+2007-11-01  Adam Roben  <aroben@apple.com>
+
+        Use jsNumberCell instead of jsNumber when converting double constants to JSValues
+
+        This fixes fast/js/math.html, ecma/Date/15.9.5.10-1.js, and
+        ecma/Date/15.9.5.12-1.js, which were suffering from a bug in MSVC.
+
+        It also gets rid of an MSVC warning that we previously had to silence.
+
+        Reviewed by Geoff.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Turn
+        back on the "overflow in constant arithmetic" warning.
+        * kjs/number_object.cpp:
+        (NumberObjectImp::getValueProperty): Use jsNumberCell instead of
+        jsNumber.
+
+2007-10-31  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        * kjs/ExecState.h:
+
+2007-10-31  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - shave some cycles off of local storage access for a 1% SunSpider speedup
+        
+        Keep the LocalStorage pointer in the ExecState, instead of getting
+        it from the ActivationImp all the time.
+
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::updateLocalStorage):
+        * kjs/ExecState.h:
+        (KJS::ExecState::localStorage):
+        * kjs/nodes.cpp:
+        (KJS::LocalVarAccessNode::evaluate):
+        (KJS::LocalVarFunctionCallNode::evaluate):
+        (KJS::PostIncLocalVarNode::evaluate):
+        (KJS::PostDecLocalVarNode::evaluate):
+        (KJS::LocalVarTypeOfNode::evaluate):
+        (KJS::PreIncLocalVarNode::evaluate):
+        (KJS::PreDecLocalVarNode::evaluate):
+        (KJS::ReadModifyLocalVarNode::evaluate):
+        (KJS::AssignLocalVarNode::evaluate):
+        (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):
+
+2007-10-31  Adam Roben  <aroben@apple.com>
+
+        Fix a crash on launch due to a static initializer race
+
+        We now use fast inline assembler spinlocks which can be statically
+        initialized at compile time.
+
+        As a side benefit, this speeds up SunSpider by 0.4%.
+
+        Reviewed by Oliver.
+
+        * wtf/FastMalloc.cpp:
+        * wtf/TCSpinLock.h:
+        (TCMalloc_SpinLock::Lock):
+        (TCMalloc_SpinLock::Unlock):
+        (TCMalloc_SlowLock):
+        * wtf/TCSystemAlloc.cpp:
+
+2007-10-31  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Sam.
+
+        - Corrected spelling.
+
+        * wtf/HashTraits.h:
+
+2007-10-31  Mark Rowe  <mrowe@apple.com>
+
+        Further Gtk build fixage.
+
+        * kjs/regexp_object.cpp:
+
+2007-10-31  Mark Rowe  <mrowe@apple.com>
+
+        Gtk build fix.
+
+        * kjs/regexp.h:
+
+2007-10-31  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=15749
+          RegExp/RegExpObjectImp cause needless UString creation
+
+        Speeds things up 0.4% according to SunSpider.
+
+        * kjs/config.h: Define USE(PCRE16) instead of HAVE(PCREPOSIX),
+        because this library doesn't use the real PCRE -- it uses its
+        own PCRE that works on UTF-16.
+
+        * kjs/regexp.h: Removed a few unused functions. Changed the ifdef.
+        Use Noncopyable. Change the return value of match.
+        * kjs/regexp.cpp:
+        (KJS::RegExp::RegExp): Call pcre_compile2, for a slight speed boost.
+        (KJS::RegExp::~RegExp): PCRE16 rather than PCREPOSIX.
+        (KJS::RegExp::match): Change to return the position as an int and the
+        ovector as a OwnArrayPtr<int> for efficiency and clearer storage management.
+
+        * kjs/regexp_object.h: Change performMatch and arrayOfMatches to no longer
+        require a result string.
+        * kjs/regexp_object.cpp:
+        (RegExpProtoFunc::callAsFunction): Update for new signature of performMatch.
+        (RegExpObjectImp::performMatch): Change so it doesn't return a string.
+        (RegExpObjectImp::arrayOfMatches): Simplify by unifying the handling of
+        the main result with the backreferences; now it doesn't need to take
+        a result parameter.
+        (RegExpObjectImp::getBackref): Minor tweaks.
+        (RegExpObjectImp::getLastParen): Ditto.
+        (RegExpObjectImp::getLeftContext): Ditto.
+        (RegExpObjectImp::getRightContext): Ditto.
+        (RegExpObjectImp::getValueProperty): Change LastMatch case to call
+        getBackref(0) so we don't need a separate getLastMatch function.
+
+        * kjs/string_object.cpp:
+        (KJS::replace): Update to use new performMatch, including merging the
+        matched string section with the other substrings.
+        (KJS::StringProtoFunc::callAsFunction): Update functions to use the
+        new performMatch and match. Also change to use OwnArrayPtr.
+
+2007-10-31  Oliver Hunt  <oliver@apple.com>
+
+        * kjs/nodes.h: include OwnPtr.h
+
+2007-10-31  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Remove SourceCodeElement class and replaced with a Vector for a 0.8% gain on sunspider
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::statementListPushFIFO):
+        (KJS::statementListGetDeclarations):
+        (KJS::statementListInitializeDeclarationStacks):
+        (KJS::statementListInitializeVariableAccessStack):
+        (KJS::statementListExecute):
+        (KJS::BlockNode::optimizeVariableAccess):
+        (KJS::BlockNode::BlockNode):
+        (KJS::BlockNode::getDeclarations):
+        (KJS::BlockNode::execute):
+        (KJS::CaseClauseNode::optimizeVariableAccess):
+        (KJS::CaseClauseNode::getDeclarations):
+        (KJS::CaseClauseNode::evalStatements):
+        (KJS::FunctionBodyNode::initializeDeclarationStacks):
+        (KJS::FunctionBodyNode::optimizeVariableAccess):
+        * kjs/nodes.h:
+        * kjs/nodes2string.cpp:
+        (KJS::statementListStreamTo):
+        (KJS::BlockNode::streamTo):
+        (KJS::CaseClauseNode::streamTo):
+
+2007-10-30  Mark Rowe  <mrowe@apple.com>
+
+        * kjs/property_map.cpp: Added a missing using directive to fix the build
+        for non-Mac ports. Mac worked only because it does the AllInOneFile compile.
+
+2007-10-31  Maciej Stachowiak  <mjs@apple.com>
+
+        * kjs/property_map.cpp: Include HashTable.h the right way to fix the build
+        for non-Mac ports.
+
+2007-10-31  Alexey Proskuryakov  <ap@webkit.org>
+
+        Reviewed by Darin.
+
+        http://bugs.webkit.org/show_bug.cgi?id=11001
+        WebKit doesn't support RegExp.compile method
+
+        Test: fast/js/regexp-compile.html
+
+        * kjs/regexp_object.cpp:
+        (RegExpPrototype::RegExpPrototype):
+        (RegExpProtoFunc::callAsFunction):
+        * kjs/regexp_object.h:
+        (KJS::RegExpProtoFunc::):
+        Added RegExp.compile.
+
+        * tests/mozilla/expected.html: js1_2/regexp/compile.js now passes.
+
+2007-10-31  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - get rid of integer divide in PropertyMap and HashTable for 1% SunSpider speedup
+        
+        Integer divide sucks. Fortunately, a bunch of shifts and XORs
+        biased towards the high bits is sufficient to provide a good
+        double hash. Besides the SunSpider win, I used the dump statistics
+        mode for both to verify that collisions did not increase and that
+        the longest collision chain is not any longer.
+
+        * kjs/property_map.cpp:
+        (KJS::doubleHash):
+        (KJS::PropertyMap::get):
+        (KJS::PropertyMap::getLocation):
+        (KJS::PropertyMap::put):
+        (KJS::PropertyMap::insert):
+        (KJS::PropertyMap::remove):
+        (KJS::PropertyMap::checkConsistency):
+        * wtf/HashTable.h:
+        (WTF::doubleHash):
+        (WTF::::lookup):
+        (WTF::::lookupForWriting):
+        (WTF::::fullLookupForWriting):
+        (WTF::::add):
+
+2007-10-30  Adam Roben  <aroben@apple.com>
+
+        * kjs/collector.h: Make HeapType public so it can be used for non-member
+        things like the HeapConstants struct template. Fixes the build on Windows.
+
+2007-10-30  Adam Roben  <aroben@apple.com>
+
+        Change ALWAYS_INLINE and WTF_PRIVATE_INLINE to use __forceinline on Windows
+
+        Speeds up SunSpider by 0.4%.
+
+        Reviewed by Steve and Maciej.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable
+        a warning during LTCG in release builds about double -> float
+        conversion.
+        * wtf/AlwaysInline.h:
+        * wtf/FastMalloc.h:
+
+2007-10-30  Adam Roben  <aroben@apple.com>
+
+        Use GetCurrentThreadId instead of pthread_self in FastMalloc
+
+        Speeds up SunSpider by 0.3%.
+
+        Reviewed by Steve.
+
+        * wtf/FastMalloc.cpp:
+        (WTF::TCMalloc_ThreadCache::InitTSD):
+        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
+
+2007-10-30  Adam Roben  <aroben@apple.com>
+
+        Switch to a Win32 critical section implementation of spinlocks
+        
+        Speeds up SunSpider by 0.4%.
+        
+        Reviewed by Steve.
+        
+        * wtf/FastMalloc.cpp:
+        * wtf/TCSpinLock.h:
+        (TCMalloc_SpinLock::TCMalloc_SpinLock):
+        (TCMalloc_SpinLock::Init):
+        (TCMalloc_SpinLock::Finalize):
+        (TCMalloc_SpinLock::Lock):
+        (TCMalloc_SpinLock::Unlock):
+        * wtf/TCSystemAlloc.cpp:
+
+2007-10-30  Adam Roben  <aroben@apple.com>
+
+        Fix Bug 15586: REGRESSION (r26759-r26785): Windows nightly builds crash with Safari 3 Public Beta
+
+        http://bugs.webkit.org/show_bug.cgi?id=15586
+
+        Also fixes: <rdar://5565303> Cannot use regsvr32.exe to register WebKit.dll
+
+        Use Win32 TLS functions instead of __declspec(thread), which breaks
+        delay-loading.
+
+        Reviewed by Steve.
+
+        * wtf/FastMalloc.cpp:
+        (WTF::getThreadHeap):
+        (WTF::TCMalloc_ThreadCache::InitModule):
+
+2007-10-30  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - allocate numbers in half-size cells, for an 0.5% SunSpider speedup
+        http://bugs.webkit.org/show_bug.cgi?id=15772
+        
+        We do this by using a single mark bit per two number cells, and
+        tweaking marking.
+        
+        Besides being an 0.5% win overall, this is a 7.1% win on morph.
+
+        * kjs/collector.cpp:
+        (KJS::Collector::heapAllocate):
+        (KJS::Collector::markStackObjectsConservatively):
+        (KJS::Collector::sweep):
+        * kjs/collector.h:
+        (KJS::SmallCollectorCell::):
+
+2007-10-30  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Adam Roben, Sam Weinig.
+        
+        Made conflicts in grammar.y a persistent build failure.
+
+        * DerivedSources.make:
+
+2007-10-30  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Adam and Geoff.
+
+        - Added a new cast so all the casts are in the same place.
+
+        * API/APICast.h:
+        (toGlobalRef):
+
+2007-10-30  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+
+        Fixed <rdar://problem/5567504> shift/reduce conflict introduced in r24457
+        
+        JS tests, including 
+
+            ecma_2/Statements/dowhile-001.js
+            ecma_2/Statements/dowhile-002.js
+            ecma_2/Statements/dowhile-003.js
+            ecma_2/Statements/dowhile-004.js
+            ecma_2/Statements/dowhile-005.js
+            ecma_2/Statements/dowhile-006.js
+            ecma_2/Statements/dowhile-007.js
+            js1_2/statements/do_while.js
+
+        and layout tests, including
+
+            do-while-expression-value.html
+            do-while-semicolon.html
+            do-while-without-semicolon.html
+        
+        pass.
+        
+        * kjs/grammar.y: Use the explicit "error" production, as we do with other
+        automatic semicolon insertions, to disambiguate "do { } while();" from
+        "do { } while()" followed by ";" (the empty statement).
+
+2007-10-29  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Debranching remaining assignment nodes, and miscellaneous cleanup
+        
+        Split read-modify code paths out of AssignBracketNode and AssignDotNode
+        Removed now unnecessary check for write-only assignment in ReadModifyLocalVarNode 
+        and ReadModifyResolveNode evaluate methods
+
+        Leads to a 1% gain in SunSpider.
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::ReadModifyLocalVarNode::evaluate):
+        (KJS::ReadModifyResolveNode::evaluate):
+        (KJS::AssignDotNode::evaluate):
+        (KJS::ReadModifyDotNode::optimizeVariableAccess):
+        (KJS::ReadModifyDotNode::evaluate):
+        (KJS::AssignBracketNode::evaluate):
+        (KJS::ReadModifyBracketNode::optimizeVariableAccess):
+        (KJS::ReadModifyBracketNode::evaluate):
+        * kjs/nodes.h:
+        (KJS::AssignBracketNode::):
+        (KJS::AssignBracketNode::precedence):
+        (KJS::AssignDotNode::):
+        (KJS::AssignDotNode::precedence):
+        * kjs/nodes2string.cpp:
+        (KJS::ReadModifyBracketNode::streamTo):
+        (KJS::AssignBracketNode::streamTo):
+        (KJS::ReadModifyDotNode::streamTo):
+        (KJS::AssignDotNode::streamTo):
+
+2007-10-29  Oliver Hunt  <oliver@apple.com>
+
+        Debranching various Node::evaluate implementations
+        
+        Reviewed by Maciej.
+        
+        Split the read-modify-write assignment cases out of AssignResolveNode and into ReadModifyResolveNode
+        Split the increment and decrement cases for Prefix- and Postfix- ResolveNode, BracketNode, and DotNode
+        
+        Gains 1.6% on SunSpider
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::PostIncResolveNode::optimizeVariableAccess):
+        (KJS::PostIncResolveNode::evaluate):
+        (KJS::PostIncLocalVarNode::evaluate):
+        (KJS::PostDecResolveNode::optimizeVariableAccess):
+        (KJS::PostDecResolveNode::evaluate):
+        (KJS::PostDecLocalVarNode::evaluate):
+        (KJS::PostIncBracketNode::evaluate):
+        (KJS::PostDecBracketNode::evaluate):
+        (KJS::PostIncDotNode::evaluate):
+        (KJS::PostDecDotNode::evaluate):
+        (KJS::PreIncResolveNode::optimizeVariableAccess):
+        (KJS::PreIncLocalVarNode::evaluate):
+        (KJS::PreIncResolveNode::evaluate):
+        (KJS::PreDecResolveNode::optimizeVariableAccess):
+        (KJS::PreDecLocalVarNode::evaluate):
+        (KJS::PreDecResolveNode::evaluate):
+        (KJS::PreIncBracketNode::evaluate):
+        (KJS::PreDecBracketNode::evaluate):
+        (KJS::PreIncDotNode::evaluate):
+        (KJS::PreDecDotNode::evaluate):
+        (KJS::ReadModifyResolveNode::optimizeVariableAccess):
+        (KJS::AssignResolveNode::optimizeVariableAccess):
+        (KJS::AssignLocalVarNode::evaluate):
+        (KJS::AssignResolveNode::evaluate):
+        * kjs/nodes.h:
+        (KJS::PostDecResolveNode::):
+        (KJS::PostDecResolveNode::precedence):
+        (KJS::PostDecLocalVarNode::):
+        (KJS::PostfixBracketNode::):
+        (KJS::PostfixBracketNode::precedence):
+        (KJS::PostIncBracketNode::):
+        (KJS::PostIncBracketNode::isIncrement):
+        (KJS::PostDecBracketNode::):
+        (KJS::PostDecBracketNode::isIncrement):
+        (KJS::PostfixDotNode::):
+        (KJS::PostfixDotNode::precedence):
+        (KJS::PostIncDotNode::):
+        (KJS::PostIncDotNode::isIncrement):
+        (KJS::PostDecDotNode::):
+        (KJS::PreIncResolveNode::):
+        (KJS::PreDecResolveNode::):
+        (KJS::PreDecResolveNode::precedence):
+        (KJS::PreDecLocalVarNode::):
+        (KJS::PrefixBracketNode::):
+        (KJS::PrefixBracketNode::precedence):
+        (KJS::PreIncBracketNode::):
+        (KJS::PreIncBracketNode::isIncrement):
+        (KJS::PreDecBracketNode::):
+        (KJS::PreDecBracketNode::isIncrement):
+        (KJS::PrefixDotNode::):
+        (KJS::PrefixDotNode::precedence):
+        (KJS::PreIncDotNode::):
+        (KJS::PreIncDotNode::isIncrement):
+        (KJS::PreDecDotNode::):
+        (KJS::ReadModifyResolveNode::):
+        (KJS::ReadModifyLocalVarNode::):
+        (KJS::AssignResolveNode::):
+        (KJS::AssignResolveNode::precedence):
+        * kjs/nodes2string.cpp:
+        (KJS::PostIncResolveNode::streamTo):
+        (KJS::PostDecResolveNode::streamTo):
+        (KJS::PostfixBracketNode::streamTo):
+        (KJS::PostfixDotNode::streamTo):
+        (KJS::PreIncResolveNode::streamTo):
+        (KJS::PreDecResolveNode::streamTo):
+        (KJS::ReadModifyResolveNode::streamTo):
+        (KJS::AssignResolveNode::streamTo):
+
+2007-10-29  Maciej Stachowiak  <mjs@apple.com>
+
+        Not reviewed, build fix.
+        
+        - Include Vector.h in a way that actually works.
+
+        * kjs/LocalStorage.h:
+
+2007-10-29  Maciej Stachowiak  <mjs@apple.com>
+
+        Not reviewed, build fix.
+        
+        - Install LocalStorage.h as a private header.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2007-10-29  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Darin.
+        
+        - Define good VectorTraits for LocalStorage entry for 0.5% speed improvement on SunSpider.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/LocalStorage.h: Added.
+        (KJS::LocalStorageEntry::LocalStorageEntry):
+        (WTF::):
+        * kjs/function.h:
+        * kjs/nodes.cpp:
+        (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):
+
+2007-10-29  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Some small tweaks that I notice while reviewing Oliver's last patch.
+        
+        Includes removal of an unnecessary KJS_CHECKEXCEPTIONVALUE.
+        
+        No change in SunSpider because SunSpider doesn't take the code path that
+        would execute the unnecessary KJS_CHECKEXCEPTIONVALUE much.
+
+        * kjs/nodes.cpp:
+        (KJS::LocalVarPostfixNode::evaluate):
+        (KJS::TypeOfResolveNode::optimizeVariableAccess):
+        (KJS::LocalVarTypeOfNode::evaluate):
+        (KJS::PrefixResolveNode::optimizeVariableAccess):
+        (KJS::LocalVarPrefixNode::evaluate):
+        (KJS::AssignResolveNode::optimizeVariableAccess):
+        (KJS::LocalVarAssignNode::evaluate):
+        * kjs/nodes.h:
+        (KJS::LocalVarTypeOfNode::):
+        (KJS::PrefixResolveNode::):
+        (KJS::LocalVarPrefixNode::):
+        (KJS::AssignResolveNode::):
+        (KJS::LocalVarAssignNode::):
+
+2007-10-29  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+        
+        SunSpider claims this was a 0.7% speedup.
+
+        * kjs/string_object.cpp:
+        (KJS::StringProtoFunc::callAsFunction): avoid mallocing a jsString in the common case
+
+2007-10-29  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Mark.
+        
+        - re-enable asserts for access to empty or deleted keys
+
+        * wtf/HashTable.h:
+        (WTF::::lookup):
+        (WTF::::lookupForWriting):
+        (WTF::::fullLookupForWriting):
+        (WTF::::add):
+
+2007-10-29  Eric Seidel  <eric@webkit.org>
+
+        Build fix only, no review.
+
+        * JavaScriptCore.exp: Export symbol for new StringInstance::getOwnPropertySlot
+
+2007-10-29  Mark Rowe  <mrowe@apple.com>
+
+        Gtk build fix.  Move struct declarations into nodes.h.
+
+        * kjs/grammar.y:
+        * kjs/nodes.h:
+
+2007-10-29  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by darin.
+        
+        Give StringInstance a getOwnPropertySlot(ExecState, unsigned, PropertySlot) fastpath, just like Arrays.
+        Make it a compile time error to use toString(ExecState) on a StringInstance
+        
+        SunSpider claims this was a 6.6% speedup overall (22% on string-base64)
+
+        * kjs/internal.h:
+        (KJS::StringImp::getLength):
+        * kjs/string_object.cpp:
+        (KJS::StringInstance::lengthGetter):
+        (KJS::StringInstance::inlineGetOwnPropertySlot):
+        (KJS::StringInstance::getOwnPropertySlot):
+        * kjs/string_object.h:
+
+2007-10-28  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Darin.
+
+        Add nodes to allow Assignment, TypeOf, and prefix operators to 
+        make use of the new optimised local variable look up.
+
+        5% gain on sunspider
+
+        * kjs/nodes.cpp:
+        (KJS::TypeOfResolveNode::optimizeVariableAccess):
+        (KJS::LocalTypeOfAccessNode::evaluate):
+        (KJS::PrefixResolveNode::optimizeVariableAccess):
+        (KJS::PrefixLocalAccessNode::evaluate):
+        (KJS::AssignResolveNode::optimizeVariableAccess):
+        (KJS::AssignLocalAccessNode::evaluate):
+        * kjs/nodes.h:
+        (KJS::TypeOfResolveNode::):
+        (KJS::TypeOfResolveNode::precedence):
+        (KJS::LocalTypeOfAccessNode::):
+        (KJS::PrefixResolveNode::):
+        (KJS::PrefixResolveNode::precedence):
+        (KJS::PrefixLocalAccessNode::):
+        (KJS::AssignResolveNode::):
+        (KJS::AssignLocalAccessNode::):
+
+2007-10-28  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Darin.
+        
+        - avoid creating and then breaking circular lists in the parser, instead track head and tail pointers at parse time
+        http://bugs.webkit.org/show_bug.cgi?id=15748
+        
+        Not a significant speedup or slowdown on SunSpider.
+
+        * kjs/Parser.cpp:
+        (KJS::clearNewNodes):
+        * kjs/Parser.h:
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::BlockNode::BlockNode):
+        (KJS::CaseBlockNode::CaseBlockNode):
+        (KJS::FunctionBodyNode::FunctionBodyNode):
+        (KJS::SourceElementsNode::SourceElementsNode):
+        (KJS::ProgramNode::ProgramNode):
+        * kjs/nodes.h:
+        (KJS::ElementNode::):
+        (KJS::ArrayNode::):
+        (KJS::PropertyListNode::):
+        (KJS::ObjectLiteralNode::):
+        (KJS::ArgumentListNode::):
+        (KJS::ArgumentsNode::):
+        (KJS::VarDeclListNode::):
+        (KJS::VarStatementNode::):
+        (KJS::ForNode::):
+        (KJS::ParameterNode::):
+        (KJS::FuncExprNode::):
+        (KJS::FuncDeclNode::):
+        (KJS::SourceElementsNode::):
+        (KJS::CaseClauseNode::):
+        (KJS::ClauseListNode::):
+
+2007-10-28  Mark Rowe  <mrowe@apple.com>
+
+        Disable assertions in a manner that doesn't break the Qt Windows build.
+
+        * wtf/HashTable.h:
+        (WTF::::lookup):
+        (WTF::::lookupForWriting):
+        (WTF::::fullLookupForWriting):
+
+2007-10-28  Geoffrey Garen  <ggaren@apple.com>
+
+        Temporarily disabling some ASSERTs I introduced in my last check-in 
+        because of http://bugs.webkit.org/show_bug.cgi?id=15747
+        Lots of layout tests fail the !HashTranslator::equal(KeyTraits::emptyValue() ASSERT
+
+        * wtf/HashTable.h:
+        (WTF::::lookup):
+        (WTF::::lookupForWriting):
+        (WTF::::fullLookupForWriting):
+        (WTF::::add):
+
+2007-10-28  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        Fixed http://bugs.webkit.org/show_bug.cgi?id=15746
+        #ifndef ASSERT_DISABLED is no good!
+        
+        Replaced with #if !ASSERT_DISABLED.
+
+        * wtf/HashTable.h:
+        (WTF::::lookup):
+        (WTF::::lookupForWriting):
+        (WTF::::fullLookupForWriting):
+        (WTF::::add):
+
+2007-10-28  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        Added FunctionCallResolveNode, PostfixResolveNode, and DeleteResolveNode
+        to the AST transfom that replaces slow resolve nodes with fast local 
+        variable alternatives.
+        
+        2.5% speedup on SunSpider.
+        
+        Also added some missing copyright notices.
+        
+        * kjs/nodes.cpp:
+        (KJS::FunctionCallResolveNode::optimizeVariableAccess):
+        (KJS::FunctionCallResolveNode::evaluate):
+        (KJS::LocalVarFunctionCallNode::evaluate):
+        (KJS::PostfixResolveNode::optimizeVariableAccess):
+        (KJS::PostfixResolveNode::evaluate):
+        (KJS::LocalVarPostfixNode::evaluate):
+        (KJS::DeleteResolveNode::optimizeVariableAccess):
+        (KJS::DeleteResolveNode::evaluate):
+        (KJS::LocalVarDeleteNode::evaluate):
+        * kjs/nodes.h:
+        (KJS::FunctionCallResolveNode::):
+        (KJS::LocalVarFunctionCallNode::LocalVarFunctionCallNode):
+        (KJS::PostfixResolveNode::):
+        (KJS::LocalVarPostfixNode::LocalVarPostfixNode):
+        (KJS::DeleteResolveNode::):
+        (KJS::LocalVarDeleteNode::LocalVarDeleteNode):
+
+2007-10-28  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by darin.
+        
+        Inline UString::Rep::deref() for a 0.8% improvement in SunSpider
+        Add virtual keyword to a few virtual functions previously unmarked.
+
+        * kjs/internal.h:
+        (KJS::StringImp::type):
+        (KJS::NumberImp::type):
+        * kjs/ustring.h:
+        (KJS::UString::Rep::deref):
+
+2007-10-28  Darin Adler  <darin@apple.com>
+
+        - fix "broken everything" from the storage leak fix
+
+        * wtf/RefPtr.h: (WTF::RefPtr::RefPtr): Added a PlacementNewAdopt constructor.
+        * kjs/ustring.h: (KJS::UString::UString): Pass PlacementNewAdopt along to RefPtr.
+
+2007-10-28  Darin Adler  <darin@apple.com>
+
+        Reviewed by Adam.
+
+        - turn on unused parameter waring on Mac OS X because it's already on elsewhere
+
+        * Configurations/Base.xcconfig: Took out -wno-unused-parameter.
+
+        * API/JSNode.c:
+        * API/JSNodeList.c:
+        * API/minidom.c:
+        * API/testapi.c:
+        Fixed unused variables by using them or marked them with UNUSED_PARAM.
+
+        * kjs/CollectorHeapIntrospector.h: (KJS::CollectorHeapIntrospector::zoneCalloc):
+        Removed parameter names to indicate they are unused.
+
+2007-10-28  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - fix a storage leak where we ref the UString every time we replace
+          a ResolveNode with a LocalVarAccessNode
+
+        * kjs/identifier.h: (KJS::Identifier::Identifier): Added a constructor
+        that takes PlacementNewAdopt.
+
+        * kjs/nodes.h: (KJS::ResolveNode::ResolveNode): Initialize the ident
+        with PlacementNewAdopt instead of the old value of ident.
+
+        * kjs/ustring.h: (KJS::UString::UString): Added a constructor that
+        takes PlacementNewAdopt.
+
+2007-10-28  Darin Adler  <darin@apple.com>
+
+        - Windows build fix; get rid of unused parameter
+
+        * kjs/nodes.cpp: (KJS::ResolveNode::optimizeVariableAccess): Don't pass it.
+        * kjs/nodes.h: (KJS::LocalVarAccessNode::LocalVarAccessNode): Remove it.
+        The assertions weren't all that helpful.
+
+2007-10-28  Mark Rowe  <mrowe@apple.com>
+
+        Gtk build fix.  Add include of MathExtras.h.
+
+        * kjs/string_object.cpp:
+
+2007-10-28  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Maciej and Tim.
+
+        Replace uses of isNaN and isInf with isnan and isinf, and
+        remove isNaN and isInf.
+
+        * kjs/config.h: Remove unused HAVE_'s.
+        * kjs/date_object.cpp:
+        (KJS::DateInstance::getTime):
+        (KJS::DateInstance::getUTCTime):
+        (KJS::DateProtoFunc::callAsFunction):
+        (KJS::DateObjectImp::construct):
+        (KJS::DateObjectFuncImp::callAsFunction):
+        * kjs/function.cpp:
+        (KJS::GlobalFuncImp::callAsFunction):
+        * kjs/math_object.cpp:
+        (MathFuncImp::callAsFunction):
+        * kjs/nodes2string.cpp:
+        (KJS::isParserRoundTripNumber):
+        * kjs/number_object.cpp:
+        (NumberProtoFunc::callAsFunction):
+        * kjs/operations.cpp:
+        * kjs/operations.h:
+        * kjs/string_object.cpp:
+        (KJS::StringProtoFunc::callAsFunction):
+        * kjs/ustring.cpp:
+        (KJS::UString::from):
+        * kjs/value.cpp:
+        (KJS::JSValue::toInteger):
+        (KJS::JSValue::toInt32SlowCase):
+        (KJS::JSValue::toUInt32SlowCase):
+
+2007-10-28  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: use the new-fangled missingSymbolMarker().
+
+        * kjs/nodes.cpp:
+        (KJS::ResolveNode::optimizeVariableAccess):
+        * kjs/nodes.h:
+        (KJS::LocalVarAccessNode::LocalVarAccessNode):
+
+2007-10-28  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak, Darin Adler.
+        
+        Much supporting work done by Maciej Stachowiak, Maks Orlovich, and 
+        Cameron Zwarich.
+        
+        AST transfom to replace slow resolve nodes with fast local variable
+        alternatives that do direct memory access. Currently, only ResolveNode
+        provides a fast local variable alternative. 6 others are soon to come.
+        
+        16.7% speedup on SunSpider.
+        
+        Most of this patch is just scaffolding to support iterating all the 
+        resolve nodes in the AST through optimizeResolveNodes(). In 
+        optimizeResolveNodes(), most classes just push their child nodes onto 
+        the processing stack, while ResolveNodes actually replace themselves in 
+        the tree with more optimized alternatives, if possible.
+
+        Here are the interesting bits:
+
+        * kjs/nodes.h: Added PlacementNewAdoptTag, along with implementations 
+        in Node and ResolveNode. This tag allows you to use placement new to 
+        swap out a base class Node in favor of a subclass copy that holds the
+        same data. (Without this tag, default initialization would NULL out
+        RefPtrs, change line numbers, etc.)
+
+        * kjs/nodes.cpp:
+        (KJS::ResolveNode::evaluate): Since we're taking the slow path, ASSERT
+        that the fast path is impossible, to make sure we didn't leave anything
+        on the table.
+
+        (KJS::FunctionBodyNode::optimizeResolveNodes): Here's where the AST 
+        transformation happens.
+        
+        (KJS::ResolveNode::optimizeResolveNodes): Here's where the ResolveNode
+        optimization happens.
+
+        * kjs/function.h: Added symbolTable() accessor for, for the sake of 
+        an ASSERT.
+
+2007-10-28  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Maciej.
+
+        Fix "AllInOneFile.o has a global initializer in it".
+
+        Some versions of gcc generate a global initializer for std::numeric_limits<size_t>::max().
+        We can avoid this by moving it inside an inline function.
+
+        * kjs/SymbolTable.h:
+        (KJS::missingSymbolMarker):
+        * kjs/function.cpp:
+        (KJS::ActivationImp::getOwnPropertySlot):
+        (KJS::ActivationImp::put):
+
+2007-10-28  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Mark.
+        
+        - Added assertions to protect against adding empty or deleted keys to a HashTable
+
+        * wtf/HashTable.h:
+        (WTF::HashTable::lookup):
+        (WTF::HashTable::lookupForWriting):
+        (WTF::HashTable::fullLookupForWriting):
+        (WTF::HashTable::add):
+
+2007-10-28  Darin Adler  <darin@apple.com>
+
+        - fix GTK build
+
+        * kjs/nodes2string.cpp: (KJS::isParserRoundTripNumber):
+        Use isNaN and isInf instead of isnan and isinf.
+
+2007-10-28  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15735
+          remove GroupNode to simplify AST and possibly get a modest speedup
+
+        This patch removes 4 node types: GroupNode, PropertyNameNode,
+        FunctionCallParenBracketNode, and FunctionCallParenDotNode.
+
+        To remove GroupNode, we add knowledge of precedence to the tree nodes,
+        and use that when serializing to determine where parentheses are needed.
+        This means we no longer have to represent parentheses in the tree.
+
+        The precedence values are named after productions in the grammar from the
+        JavaScript standard.
+
+        SunSpider says this is an 0.4% speedup.
+
+        * kjs/function.h:
+        * kjs/function.cpp: Removed escapeStringForPrettyPrinting -- it's part of
+        serialization, so I moved it to the file that takes care of that.
+
+        * kjs/grammar.y: Changed makeGetterOrSetterPropertyNode to use 0 to
+        indicate failure instead of a separate boolean. Got rid of PropertyNameNode
+        by merging the PropertyName rule into the Property rule (which was easier
+        than figuring out how to pass the Identifier from one node to another).
+        Got rid of GroupNode, nodeInsideAllParens(), FunctionCallParenBracketNode,
+        and FunctionCallParenDotNode.
+
+        * kjs/nodes.h: Removed unused forward declarations and Operator values.
+        Added Precedence enum, and precedence function to all nodes. Removed
+        nodeInsideAllParens. Added streamBinaryOperator function for serialization.
+        Removed GroupNode and PropertyNameNode. Made PropertyNode store an Identifier.
+        Removed FunctionCallParenBracketNode and FunctionCallParenDotNode.
+
+        * kjs/nodes.cpp: Removed Node::nodinsideAllParens, GroupNode, and PropertyNameNode.
+        (KJS::PropertyListNode::evaluate): Changed code to get name directly instead
+        of converting it from an Identifier to a jsString then back to a UString
+        then into an Identifier again!
+
+        * kjs/nodes2string.cpp: Changed special-token implementation to use a separate
+        function for each of Endl, Indent, Unindent, and DotExpr instead of using a
+        single function with a switch. Added a precedence that you can stream in, to
+        cause the next node serialized to add parentheses based on that precedence value.
+        (KJS::operatorString): Moved to the top of the file.
+        (KJS::escapeStringForPrettyPrinting): Moved here from function.cpp. Removed old
+        workaround for snprintf, since StringExtras.h takes care of that.
+        (KJS::operator<<): Made the char and char* versions faster by using UString's
+        character append functions instead of constructing a UString. Added the logic
+        to the Node* version to add parentheses if needed.
+        (KJS::Node::streamLeftAssociativeBinaryOperator): Added helper function.
+        (KJS::ElementNode::streamTo): Use PrecAssignment for the elements.
+        (KJS::BracketAccessorNode::streamTo): Use PrecCall for the expression before
+        the bracket.
+        (KJS::DotAccessorNode::streamTo): Use PrecCall for the expression before the dot.
+        (KJS::ArgumentListNode::streamTo): Use PrecAssignment for the arguments.
+        (KJS::NewExprNode::streamTo): Use PrecMember for the expression.
+        (KJS::FunctionCallValueNode::streamTo): Use PrecCall.
+        (KJS::FunctionCallBracketNode::streamTo): Ditto.
+        (KJS::FunctionCallDotNode::streamTo): Ditto.
+        (KJS::PostfixBracketNode::streamTo): Ditto.
+        (KJS::PostfixDotNode::streamTo): Ditto.
+        (KJS::PostfixErrorNode::streamTo): Use PrecLeftHandSide.
+        (KJS::DeleteBracketNode::streamTo): Use PrecCall.
+        (KJS::DeleteDotNode::streamTo): Ditto.
+        (KJS::DeleteValueNode::streamTo): Use PrecUnary.
+        (KJS::VoidNode::streamTo): Ditto.
+        (KJS::TypeOfValueNode::streamTo): Ditto.
+        (KJS::PrefixBracketNode::streamTo): Use PrecCall.
+        (KJS::PrefixDotNode::streamTo): Ditto.
+        (KJS::PrefixErrorNode::streamTo): Use PrecUnary.
+        (KJS::UnaryPlusNode::streamTo): Ditto.
+        (KJS::NegateNode::streamTo): Ditto.
+        (KJS::BitwiseNotNode::streamTo): Ditto.
+        (KJS::LogicalNotNode::streamTo): Ditto.
+        (KJS::MultNode::streamTo): Use streamLeftAssociativeBinaryOperator.
+        (KJS::DivNode::streamTo): Ditto.
+        (KJS::ModNode::streamTo): Ditto.
+        (KJS::AddNode::streamTo): Ditto.
+        (KJS::SubNode::streamTo): Ditto.
+        (KJS::LeftShiftNode::streamTo): Ditto.
+        (KJS::RightShiftNode::streamTo): Ditto.
+        (KJS::UnsignedRightShiftNode::streamTo): Ditto.
+        (KJS::LessNode::streamTo): Ditto.
+        (KJS::GreaterNode::streamTo): Ditto.
+        (KJS::LessEqNode::streamTo): Ditto.
+        (KJS::GreaterEqNode::streamTo): Ditto.
+        (KJS::InstanceOfNode::streamTo): Ditto.
+        (KJS::InNode::streamTo): Ditto.
+        (KJS::EqualNode::streamTo): Ditto.
+        (KJS::NotEqualNode::streamTo): Ditto.
+        (KJS::StrictEqualNode::streamTo): Ditto.
+        (KJS::NotStrictEqualNode::streamTo): Ditto.
+        (KJS::BitAndNode::streamTo): Ditto.
+        (KJS::BitXOrNode::streamTo): Ditto.
+        (KJS::BitOrNode::streamTo): Ditto.
+        (KJS::LogicalAndNode::streamTo): Ditto.
+        (KJS::LogicalOrNode::streamTo): Ditto.
+        (KJS::ConditionalNode::streamTo): Ditto.
+        (KJS::AssignResolveNode::streamTo): Use PrecAssignment for the right side.
+        (KJS::AssignBracketNode::streamTo): Use PrecCall for the expression before
+        the bracket and PrecAssignment for the right side.
+        (KJS::AssignDotNode::streamTo): Ditto.
+        (KJS::AssignErrorNode::streamTo): Use PrecLeftHandSide for the left side
+        and PrecAssignment for the right side.
+        (KJS::CommaNode::streamTo): Use PrecAssignment for both expressions.
+        (KJS::AssignExprNode::streamTo): Use PrecAssignment.
+
+2007-10-28  Kevin Ollivier  <kevino@theolliviers.com>
+
+        Define wx port and set wx port USE options.
+
+        Reviewed by Adam Roben.
+
+        * wtf/Platform.h:
+
+2007-10-28  Mark Rowe  <mrowe@apple.com>
+
+        We don't include "config.h" in headers.
+
+        * bindings/jni/jni_instance.h:
+        * kjs/regexp.h:
+        * wtf/TCPageMap.h:
+        * wtf/TCSpinLock.h:
+
+2007-10-28  Maciej Stachowiak  <mjs@apple.com>
+
+        Rubber stamped by Mark.
+        
+        - avoid using non-portable SIZE_T_MAX in favor of std::numeric_limits
+
+        * kjs/SymbolTable.h:
+        (KJS::SymbolTableIndexHashTraits::emptyValue):
+        * kjs/function.cpp:
+        (KJS::ActivationImp::getOwnPropertySlot):
+        (KJS::ActivationImp::put):
+
+2007-10-28  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Eric.
+        
+        - switch SymbolTable to be a HashMap instead of a PropertyMap for 3% SunSpider speedup
+
+        * kjs/SymbolTable.h:
+        (KJS::IdentifierRepHash::hash): Special hash function for identifier reps.
+        (KJS::IdentifierRepHash::equal): ditto
+        (KJS::SymbolTableIndexHashTraits::emptyValue): Special HashTraits for the index value.
+        (KJS::SymbolTable): change to a typedef for a HashMap.
+        * kjs/function.cpp:
+        (KJS::ActivationImp::getOwnPropertySlot): Adjusted for new SymbolTable API.
+        (KJS::ActivationImp::deleteProperty): ditto
+        (KJS::ActivationImp::put): ditto
+
+        * kjs/nodes.cpp:
+        (KJS::FunctionBodyNode::initializesymbolTable): Adjusted, since
+        you now have to store a UString::rep, not an identifier.
+
+2007-10-27  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - numerous HashTable performance improvements
+        
+        This does not quite add up to a measurable win on SunSpider, but it allows a
+        follow-on > 3% improvement and probably helps WebCore too.
+        
+        I made the following improvements, among others:
+        
+        - Made HashFunctions note whether it is ok to compare a real value with the equal() function
+        to the empty or deleted value, and used this to optimize the comparisons done in hash lookup.
+        
+        - Specialized lookup so it doesn't have to do so many extra branches and build so many extra
+        std::pairs for cases that don't need them. There are now four versions, one for read-only access,
+        two for writing, and one folded directly into add() (these all were improvments).
+        
+        - Made HashMap::get() use lookup() directly instead of find() to avoid having to build iterators.
+        
+        - Made a special constructor for iterators that knows it points to
+        a valid filled cell and so skips updating itself.
+
+        - Reordered memory accesses in the various lookup functions for better code generation
+        
+        - Made simple translators avoid passing a hash code around
+        
+        - Other minor tweaks
+        
+        * wtf/HashTable.h:
+        (WTF::):
+        (WTF::HashTableConstIterator::HashTableConstIterator):
+        (WTF::HashTableIterator::HashTableIterator):
+        (WTF::IdentityHashTranslator::translate):
+        (WTF::HashTable::end):
+        (WTF::HashTable::lookup):
+        (WTF::HashTable::lookupForWriting):
+        (WTF::HashTable::makeKnownGoodIterator):
+        (WTF::HashTable::makeKnownGoodConstIterator):
+        (WTF::::lookup):
+        (WTF::::lookupForWriting):
+        (WTF::::fullLookupForWriting):
+        (WTF::::add):
+        (WTF::::addPassingHashCode):
+        (WTF::::reinsert):
+        (WTF::::find):
+        (WTF::::contains):
+        * kjs/identifier.cpp:
+        (WTF::):
+        * wtf/HashFunctions.h:
+        (WTF::):
+        * wtf/HashMap.h:
+        (WTF::):
+        (WTF::::get):
+        * wtf/HashSet.h:
+        (WTF::):
+        (WTF::::add):
+        * wtf/ListHashSet.h:
+        (WTF::ListHashSetTranslator::translate):
+
+2007-10-27  Darin Adler  <darin@apple.com>
+
+        Reviewed by Eric.
+
+        - fix ASCIICType.h for some Windows compiles
+
+        * wtf/ASCIICType.h: Check the compiler, not the OS, since it's the
+        compiler/library that has the wchar_t that is just a typedef.
+
+2007-10-27  Kevin McCullough  <kmccullough@apple.com>
+
+        - BuildFix
+        - Forgot to change the build step when I changed the filename.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2007-10-27  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        Fixed the rest of "ASSERTION FAILED: _hash in KJS::UString::Rep::
+        computedHash()"
+        http://bugs.webkit.org/show_bug.cgi?id=15718
+
+        * kjs/identifier.cpp: Fixed more cases where an Identifier didn't get a 
+        hash value. Also changed O(n) strlen to O(1) check for empty string.
+        (KJS::Identifier::add):
+
+        * kjs/ustring.cpp: Changed O(n) strlens to O(1) checks for empty string.
+        (KJS::UString::UString):
+        (KJS::UString::operator=):
+
+2007-10-27  Darin Adler  <darin@apple.com>
+
+        Reviewed by Eric.
+
+        - fix pow on Windows
+
+        * wtf/MathExtras.h: (wtf_pow): Add a special case for MSVC, which has
+        a "pow" function that does not properly handle the case where arg1 is
+        NaN and arg2 is 0.
+
+        * kjs/math_object.cpp: (MathFuncImp::callAsFunction): Don't explicity
+        specify "::pow" -- just "pow" is fine.
+
+2007-10-27  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15711
+          force JSImmediate to be inlined for roughly 1.2% SunSpider speedup
+
+        * kjs/JSImmediate.h: Put ALWAYS_INLINE on everything.
+
+        * kjs/object.h: Removed redundant includes.
+        * kjs/value.h: Ditto.
+
+2007-10-27  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Mark.
+        
+        - fixed "ASSERTION FAILED: _hash in KJS::UString::Rep::computedHash()"
+        http://bugs.webkit.org/show_bug.cgi?id=15718
+
+        * kjs/identifier.cpp:
+        (KJS::Identifier::addSlowCase): Ensure that empty Identifiers have a hash computed,
+        now that we count on all Identifiers already having one.
+
+2007-10-27  Mark Rowe  <mrowe@apple.com>
+
+        Silence a warning.
+
+        * kjs/SymbolTable.h:
+
+2007-10-27  Mark Rowe  <mrowe@apple.com>
+
+        Gtk build fix.
+
+        * kjs/function.h:
+
+2007-10-26  Kevin McCullough  <kmccullough@apple.com>
+
+       Rubber stamp by Adam. 
+
+        - Renamed JSStringRefCOM to JSStringRefBSTR since it he only thing the
+        files contain are functions that operate on BSTRs.
+
+        * API/JSStringRefBSTR.cpp: Copied from API/JSStringRefCOM.cpp.
+        * API/JSStringRefBSTR.h: Copied from API/JSStringRefCOM.h.
+        * API/JSStringRefCOM.cpp: Removed.
+        * API/JSStringRefCOM.h: Removed.
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2007-10-26  Kevin McCullough  <kmccullough@apple.com>
+
+        Reviewed by Adam.
+
+        - Made JSStringCreateWithBSTR capable of handling null BSTRs.
+
+        * API/JSStringRefCOM.cpp:
+        (JSStringCreateWithBSTR):
+
+2007-10-26  Sam Weinig  <sam@webkit.org>
+
+        Windows build fix.
+
+        * kjs/SymbolTable.h: Add header gaurd.
+        * kjs/nodes.h: #include "SymbolTable.h"
+
+2007-10-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Suggested by Anders Carlsson.
+        
+        Fixed tyop.
+
+        * kjs/function.cpp:
+        (KJS::ActivationImp::getOwnPropertySlot):
+
+2007-10-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Suggested by Darin Adler.
+        
+        Use computedHash(), which is safer than just directly accessing _hash.
+
+        * kjs/lookup.cpp:
+        (KJS::Lookup::findEntry):
+        (KJS::Lookup::find):
+
+2007-10-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: svn add SymbolTable.h
+
+        * kjs/SymbolTable.h: Added.
+        (KJS::SymbolTable::set):
+        (KJS::SymbolTable::get):
+
+2007-10-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix: export SymbolTable.h to WebCore.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+
+2007-10-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Comment tweak suggested by Maciej.
+
+        * kjs/function.cpp:
+        (KJS::ActivationImp::getOwnPropertySlot):
+
+2007-10-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Tweaked property maps to remove 2 branches. 2.5% speedup on SunSpider.
+
+        * kjs/property_map.cpp: Use a special no branch accessor to the UString's
+        hash value. Also, return immediately instead of branching to the end
+        of the loop if the value is not found.
+        (KJS::PropertyMap::get):
+        (KJS::PropertyMap::getLocation):
+        (KJS::PropertyMap::put):
+        (KJS::PropertyMap::insert):
+        (KJS::PropertyMap::remove):
+        (KJS::PropertyMap::checkConsistency):
+
+        * kjs/ustring.h:
+        (KJS::UString::Rep::computedHash): Special no branch accessor to the
+        UString's hash value. Used when the caller knows that the hash value
+        has already been computed. (For example, if the caller got the UString
+        from an Identifier.)
+
+2007-10-26  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Switched ActivationImp to using a symbol table. For now, though, all
+        clients take the slow path.
+        
+        Net .6% speedup on SunSpider.
+        
+        Slowdowns:
+            - ActivationImp now mallocs in its constructor
+            - Local variable hits use an extra level of indirection to retrieve 
+            data
+            - Local variable misses do two lookups
+
+        Speedups:
+            - Fast initialization of local variables upon function entry
+
+        * JavaScriptCore.xcodeproj/project.pbxproj: Added SymbolTable.h
+        
+        * kjs/function.cpp:
+        (KJS::ActivationImp::ActivationImp): Malloc a private structure to hold
+        data that won't fit in a JSCell.
+        (KJS::ActivationImp::argumentsGetter): Use slow symbol table path for 
+        lookup.
+        (KJS::ActivationImp::getOwnPropertySlot): ditto
+        (KJS::ActivationImp::deleteProperty): ditto
+        (KJS::ActivationImp::put): ditto
+        (KJS::ActivationImp::createArgumentsObject): ditto
+
+        (KJS::ActivationImp::mark): Call JSObject::mark first so that one of
+        our properties doesn't try to recursively mark us. (This caused a crash
+        in earlier testing. Not sure why we haven't run into it before.)
+
+        * kjs/nodes.cpp: Functions now build a symbol table the first time 
+        they're called.
+        (KJS::VarDeclNode::evaluate):
+        (KJS::FunctionBodyNode::FunctionBodyNode):
+        (KJS::FunctionBodyNode::initializeSymbolTable):
+        (KJS::FunctionBodyNode::processDeclarations):
+        (KJS::FunctionBodyNode::processDeclarationsForFunctionCode):
+        (KJS::FunctionBodyNode::processDeclarationsForProgramCode):
+
+        * kjs/nodes.h:
+        (KJS::FunctionBodyNode::symbolTable):
+
+        * wtf/Forward.h: Added Vector.
+
+2007-10-26  Kevin McCullough  <kmccullough@apple.com>
+
+        - Corrected function name mistake in this changelog.
+
+2007-10-26  Kevin McCullough  <kmccullough@apple.com>
+        Reviewed by Sam and Steve.
+
+        - Added convenience methods for converting between BSTR and JSStringRefs
+
+        * API/JSStringRefCOM.cpp: Added.
+        (JSStringCreateWithBSTR):
+        (JSStringCopyBSTR):
+        * API/JSStringRefCOM.h: Added.
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2007-10-26  Mark Rowe  <mrowe@apple.com>
+
+        Windows build fix.
+
+        * kjs/collector.cpp:
+        (KJS::Collector::collect):
+
+2007-10-26  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Make the JSC GC use a separate heap for JSNumbers to get a 0.7-1.4% progression in SunSpider.
+
+        * kjs/CollectorHeapIntrospector.cpp:
+        (KJS::CollectorHeapIntrospector::init):
+        (KJS::CollectorHeapIntrospector::enumerate):
+        * kjs/CollectorHeapIntrospector.h:
+        * kjs/collector.cpp:
+        (KJS::Collector::recordExtraCost):
+        (KJS::Collector::heapAllocate):
+        (KJS::Collector::allocate):
+        (KJS::Collector::allocateNumber):
+        (KJS::Collector::registerThread):
+        (KJS::Collector::markStackObjectsConservatively):
+        (KJS::Collector::markMainThreadOnlyObjects):
+        (KJS::Collector::sweep):
+        (KJS::Collector::collect):
+        * kjs/collector.h:
+        * kjs/internal.h:
+        (KJS::NumberImp::operator new):
+          Force numbers to be allocated in the secondary heap.
+
+2007-10-26  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - encourage GCC a little harder to inline a few hot functions for 1.5% improvement on SunSpider.
+
+        * kjs/value.h:
+        (KJS::JSValue::getUInt32):
+        (KJS::JSValue::getTruncatedInt32):
+        (KJS::JSValue::toNumber):
+        * wtf/PassRefPtr.h:
+        (WTF::PassRefPtr::~PassRefPtr):
+        * wtf/RefPtr.h:
+        (WTF::RefPtr::operator->):
+
+2007-10-26  Mark Rowe  <mrowe@apple.com>
+
+        Gtk build fix.
+
+        * kjs/ExecState.h:
+
+2007-10-26  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Mark.
+
+        - Merge Context class fully into ExecState, since they are always created and used together.
+
+        No measurable performance impact but this is a useful cleanup.
+
+        * JavaScriptCore.pri:
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::ExecState):
+        (KJS::ExecState::~ExecState):
+        (KJS::ExecState::mark):
+        (KJS::ExecState::lexicalInterpreter):
+        * kjs/ExecState.h:
+        (KJS::ExecState::dynamicInterpreter):
+        (KJS::ExecState::setException):
+        (KJS::ExecState::clearException):
+        (KJS::ExecState::exception):
+        (KJS::ExecState::exceptionSlot):
+        (KJS::ExecState::hadException):
+        (KJS::ExecState::scopeChain):
+        (KJS::ExecState::callingExecState):
+        (KJS::ExecState::propertyNames):
+        * kjs/collector.cpp:
+        (KJS::Collector::reportOutOfMemoryToAllInterpreters):
+        * kjs/function.cpp:
+        (KJS::FunctionImp::callAsFunction):
+        (KJS::FunctionImp::argumentsGetter):
+        (KJS::FunctionImp::callerGetter):
+        (KJS::GlobalFuncImp::callAsFunction):
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::Interpreter):
+        (KJS::Interpreter::init):
+        (KJS::Interpreter::evaluate):
+        (KJS::Interpreter::mark):
+        * kjs/interpreter.h:
+        (KJS::Interpreter::setCurrentExec):
+        (KJS::Interpreter::currentExec):
+        * kjs/nodes.cpp:
+        (KJS::currentSourceId):
+        (KJS::currentSourceURL):
+        (KJS::ThisNode::evaluate):
+        (KJS::ResolveNode::evaluate):
+        (KJS::FunctionCallResolveNode::evaluate):
+        (KJS::PostfixResolveNode::evaluate):
+        (KJS::DeleteResolveNode::evaluate):
+        (KJS::TypeOfResolveNode::evaluate):
+        (KJS::PrefixResolveNode::evaluate):
+        (KJS::AssignResolveNode::evaluate):
+        (KJS::VarDeclNode::evaluate):
+        (KJS::DoWhileNode::execute):
+        (KJS::WhileNode::execute):
+        (KJS::ForNode::execute):
+        (KJS::ForInNode::execute):
+        (KJS::ContinueNode::execute):
+        (KJS::BreakNode::execute):
+        (KJS::ReturnNode::execute):
+        (KJS::WithNode::execute):
+        (KJS::SwitchNode::execute):
+        (KJS::LabelNode::execute):
+        (KJS::TryNode::execute):
+        (KJS::FunctionBodyNode::processDeclarationsFunctionCode):
+        (KJS::FunctionBodyNode::processDeclarationsProgramCode):
+        (KJS::FunctionBodyNode::processDeclarations):
+        (KJS::FuncDeclNode::makeFunction):
+        (KJS::FuncExprNode::evaluate):
+
+2007-10-26  Mark Rowe  <mrowe@apple.com>
+
+        Windows build fix.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2007-10-26  Mark Rowe  <mrowe@apple.com>
+
+        Gtk build fix.
+
+        * JavaScriptCore.pri:
+        * kjs/ExecState.cpp:
+
+2007-10-26  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - moved Context class into ExecState.{h,cpp} in preparation for merging 
+        ExecState and Context classes.
+
+        * kjs/ExecState.h: Moved CodeType enum and Context class here in
+        preparation for merging ExecState and Context.
+        * kjs/ExecState.cpp: Moved Context class here from Context.cpp.
+        (KJS::Context::Context):
+        (KJS::Context::~Context):
+        (KJS::Context::mark):
+        * kjs/context.h: Removed.
+        * kjs/Context.cpp: Removed.
+        * kjs/function.h: Removed CodeType enum.
+        * kjs/LabelStack.h: Added. Pulled LabelStack class out of internal.h.
+        * kjs/internal.h: Removed LabelStack.
+        * JavaScriptCore.xcodeproj/project.pbxproj: Added new file, removed ones that are gone.
+        * kjs/collector.cpp: Fixed includes.
+        * kjs/function.cpp: ditto
+        * kjs/internal.cpp: ditto
+        * kjs/interpreter.cpp: ditto
+        * kjs/lookup.h: ditto
+        * kjs/nodes.cpp: ditto
+
+2007-10-26  Mark Rowe  <mrowe@apple.com>
+
+        Windows build fix.
+
+        * kjs/string_object.cpp:
+        (KJS::StringObjectFuncImp::callAsFunction):
+
+2007-10-25  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15703
+          fix numeric functions -- improve correctness and speed
+
+        Gives about 1% gain on SunSpider.
+
+        * kjs/value.h: Added toIntegerPreserveNan, removed toUInt16.
+        (KJS::JSValue::toInt32): Changed to call getTruncatedInt32 in a way that works
+        with both immediate and number values.
+        (KJS::JSValue::toUInt32): Ditto.
+        * kjs/value.cpp:
+        (KJS::JSValue::toInteger): Moved the logic from roundValue here, with a couple
+        differences. One is that it now correctly returns 0 for NaN, and another is that
+        there's no special case for 0 or infinity, since the general case already handles
+        those correctly.
+        (KJS::JSValue::toIntegerPreserveNaN): Added. Like toInteger, but without the
+        check for NaN.
+        (KJS::JSValue::toInt32SlowCase): Call toNumber instead of roundValue. The
+        truncation done by the typecast already does the necessary truncation that
+        roundValue was doing.
+        (KJS::JSValue::toUInt32SlowCase): Ditto.
+        (KJS::JSValue::toUInt16): Removed.
+
+        * kjs/internal.h: Removed roundValue.
+        * kjs/internal.cpp: Ditto.
+
+        * kjs/array_object.cpp: (KJS::ArrayProtoFunc::callAsFunction): Remove unneeded
+        code to handle NaN in Array.slice; toInteger now never returns NaN as specified.
+
+        * kjs/date_object.cpp:
+        (KJS::fillStructuresUsingTimeArgs): Replaced call to roundValue with a call to
+        toNumber as specified.
+        (KJS::DateProtoFunc::callAsFunction): In SetTime case, replaced call to roundValue
+        with a call to toNumber and timeClip as specified.
+        (KJS::DateObjectImp::construct): Removed unnecessary checks of numArgs in cases
+        where the default behavior of toInt32 (returning 0) was already correct. Replaced
+        call to roundValue with a call to toNumber as specified.
+        (KJS::DateObjectFuncImp::callAsFunction): Ditto.
+
+        * kjs/math_object.cpp: (MathFuncImp::callAsFunction): Removed unnecessary special
+        cases for the pow function that the library already handles correctly.
+
+        * kjs/number_object.cpp: (NumberProtoFunc::callAsFunction): Changed ToString to
+        call toIntegerPreserveNaN, so we can continue to handle the NaN case differently.
+        The real toInteger now returns 0 for NaN. Took out unneeded special case in
+        ToFixed for undefined; was only needed because our toInteger was wrong. Same
+        thing in ToExponential. Changed ToPrecision to call toIntegerPreserveNaN.
+
+        * kjs/string_object.cpp:
+        (KJS::StringProtoFunc::callAsFunction): Took out CharAt and CharCodeAt special
+        cases for undefined that were only needed because toInteger was wrong. Same in
+        IndexOf, and was able to remove some special cases. In LastIndexOf, used
+        toIntegerPreserveNaN, but was able to remove some special cases there too.
+        Changed Substr implementation to preserve correct behavior with the change
+        to toInteger and match the specification. Also made sure we weren't converting
+        an out of range double to an int.
+        (KJS::StringObjectFuncImp::callAsFunction): Changed constructor to just use
+        toUInt32, because truncating toUInt32 to 16 bits is the same thing and there's
+        no reason to have toUInt16 as a second, less-optimized function that's only
+        called at this one call site.
+
+        * wtf/MathExtras.h: Added trunc function for Windows.
+
+2007-10-25  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Tweaked the inner hashtable lookup loop to remove a branch in the "not 
+        found" case. .5% speedup on SunSpider.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * wtf/HashTable.h:
+        (WTF::::lookup):
+
+2007-10-25  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+
+        - fold together toPrimitive() and toNumber() conversions for 0.5% gain on SunSpider
+
+        * kjs/nodes.cpp:
+        (KJS::SubNode::evaluate): Subtract directly, since toPrimitive() is not
+        adding any value over toNumber() here.
+        (KJS::valueForReadModifyAssignment): Ditto.
+        (KJS::lessThan): Use new getPrimitiveNumber() method to avoid some virtual calls
+        and branches.
+        (KJS::lessThanEq): Ditto.
+        * JavaScriptCore.exp: Export new functions as needed.
+        * kjs/value.h:
+        (KJS::JSValue::toPrimitive): Fixed formatting.
+        (KJS::JSValue::getPrimitiveNumber): New method - this simultaneously converts
+        to number and tells you whether a toPrimitive() conversion with a Number hint
+        would have given a string.
+        * kjs/internal.cpp:
+        (KJS::StringImp::getPrimitiveNumber): Implemented. 
+        (KJS::NumberImp::getPrimitiveNumber): ditto
+        (KJS::GetterSetterImp::getPrimitiveNumber): ditto
+        (KJS::StringImp::toPrimitive): Fixed formatting.
+        (KJS::NumberImp::toPrimitive): ditto
+        (KJS::GetterSetterImp::toPrimitive): ditto
+        * kjs/internal.h:
+        * kjs/object.cpp:
+        (KJS::JSObject::getPrimitiveNumber): Implemented.
+        * kjs/object.h:
+
+2007-10-25  Sam Weinig  <sam@webkit.org>
+
+        Reviewed by Adam Roben.
+
+        Remove JSStringRefCFHack from windows as it is no longer needed.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+
+2007-10-25  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Rolled out my last patch. It turns out that I needed 2 words, not 1,
+        so it didn't help.
+
+2007-10-25  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Oliver Hunt.
+        
+        Fixed http://bugs.webkit.org/show_bug.cgi?id=15694
+        Shrink the size of an activation object by 1 word
+        
+        This is in preparation for adding a symbol table to the activation 
+        object.
+        
+        The basic strategy here is to rely on the mutual exclusion between
+        the arguments object pointer and the function pointer (you only need
+        the latter in order to create the former), and store them in the same 
+        place. The LazyArgumentsObject class encapsulates this strategy.
+        
+        Also inlined the ArgumentsImp constructor, for good measure.
+        
+        SunSpider reports no regression. Regression tests pass.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/Context.cpp:
+        (KJS::Context::~Context):
+        * kjs/function.cpp:
+        (KJS::ActivationImp::LazyArgumentsObject::createArgumentsObject):
+        (KJS::ActivationImp::LazyArgumentsObject::mark):
+        (KJS::ActivationImp::argumentsGetter):
+        (KJS::ActivationImp::mark):
+        * kjs/function.h:
+        (KJS::ActivationImp::LazyArgumentsObject::LazyArgumentsObject):
+        (KJS::ActivationImp::LazyArgumentsObject::getOrCreate):
+        (KJS::ActivationImp::LazyArgumentsObject::resetArguments):
+        (KJS::ActivationImp::LazyArgumentsObject::setArgumentsObject):
+        (KJS::ActivationImp::LazyArgumentsObject::argumentsObject):
+        (KJS::ActivationImp::LazyArgumentsObject::setFunction):
+        (KJS::ActivationImp::LazyArgumentsObject::function):
+        (KJS::ActivationImp::LazyArgumentsObject::createdArgumentsObject):
+        (KJS::ActivationImp::LazyArgumentsObject::):
+        (KJS::ActivationImp::ActivationImp::ActivationImp):
+        (KJS::ActivationImp::resetArguments):
+
+2007-10-25  Adam Roben  <aroben@apple.com>
+
+        Change JavaScriptCore.vcproj to use DerivedSources.make
+
+        We were trying to emulate the logic of make in
+        build-generated-files.sh, but we got it wrong. We now use a
+        build-generated-files very much like the one that WebCore uses to
+        invoke make.
+
+        We also now only have a Debug configuration of dftables which we build
+        even when doing a Release build of JavaScriptCore. dftables also no
+        longer has the "_debug" name suffix.
+
+        Changes mostly made by Darin, reviewed by me.
+
+        * DerivedSources.make: Add a variable to set the extension used for
+        the dftables executable.
+        * JavaScriptCore.vcproj/JavaScriptCore.sln: Updated to use Debug
+        dftables in Release configurations.
+        * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: Ditto.
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+           - Updated include path to point to the new location of the derived
+             sources.
+           - Modified pre-build event to pass the right arguments to
+             build-generated-files.sh and not call dftables directly.
+           - Added the derived source files to the project.
+           - Removed grammarWrapper.cpp, which isn't needed now that we're
+             compiling grammar.cpp directly.
+        * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh:
+        Slightly modified from the WebCore version.
+        * JavaScriptCore.vcproj/JavaScriptCore/grammarWrapper.cpp: Removed.
+        * JavaScriptCore.vcproj/dftables/dftables.vcproj:
+            - Changed the output location to match Mac.
+            - Removed the Release configuration.
+            - Removed the _debug suffix.
+
+2007-10-25  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Eric Seidel.
+        
+        Slightly elaborated the differences between declaration procesing in 
+        Function Code and Program Code.
+        
+        .3% speedup on SunSpider.
+
+        * kjs/nodes.cpp:
+        (KJS::FunctionBodyNode::processDeclarationsFunctionCode): 
+        (KJS::FunctionBodyNode::processDeclarationsProgramCode): Store a 
+        minimum set of attributes instead of recomputing all the time. Also,
+        ignore m_parameters, since programs don't have arguments.
+
+2007-10-25  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+        
+        More preparation work before adding long-running mode to testkjs.
+
+        * kjs/testkjs.cpp:
+        (TestFunctionImp::callAsFunction):
+        (prettyPrintScript):
+        (runWithScripts):
+        (parseArguments):
+        (kjsmain):
+        (fillBufferWithContentsOfFile):
+
+2007-10-25  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+        
+        Bring testkjs code out of the dark ages in preparation for more
+        radical improvements (like long-running testing support!)
+
+        * kjs/testkjs.cpp:
+        (TestFunctionImp::callAsFunction):
+        (setupInterpreter):
+        (doIt):
+        (fillBufferWithContentsOfFile):
+
+2007-10-25  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Make a fast path for declaration processing inside Function Code.
+        
+        Lifted declaration processing code up from individual declaration nodes
+        and into processDeclarations.
+        
+        Broke out processDeclarations into two cases, depending on the type of 
+        code. This eliminates 2 branches, and facilitates more radical 
+        divergeance in the future.
+        
+        2.5% SunSpider speedup.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/nodes.cpp:
+        (KJS::FunctionBodyNode::initializeDeclarationStacks):
+        (KJS::FunctionBodyNode::processDeclarationsFunctionCode):
+        (KJS::FunctionBodyNode::processDeclarationsProgramCode):
+        (KJS::FunctionBodyNode::execute):
+        (KJS::FuncDeclNode::makeFunction):
+        * kjs/nodes.h:
+
+2007-10-25  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Adam.
+        
+        - add header includes needed on platforms that don't use AllInOneFile.cpp
+
+        * API/JSCallbackObject.cpp:
+        * kjs/Context.cpp:
+        * kjs/ExecState.cpp:
+        * kjs/array_instance.cpp:
+        * kjs/function_object.cpp:
+        * kjs/interpreter.cpp:
+        * kjs/nodes.cpp:
+
+2007-10-25  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Geoff.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj: re-mark JSGlobalObject.h as private
+
+2007-10-25  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Fixed http://bugs.webkit.org/show_bug.cgi?id=15683
+        Re-order declaration initialization to avoid calling hasProperty inside
+        VarDeclNode::processDeclaration
+        
+        .7% speedup on SunSpider.
+
+        * kjs/function.h:
+        * kjs/function.cpp: Merged parameter processing into FunctionBodyNode's
+        other processing of declared symbols, so the order of execution could 
+        change.
+
+        * kjs/nodes.cpp:
+        (KJS::VarDeclNode::getDeclarations): Added special case for the 
+        "arguments" property name, explained in the comment.
+
+        (KJS::VarDeclNode::processDeclaration): Removed call to hasProperty
+        in the case of function code, since we know the declared symbol
+        management will resolve conflicts between symbols. Yay!
+
+        (KJS::VarDeclListNode::getDeclarations): Now that VarDeclNode's 
+        implementation of getDeclarations is non-trivial, we can't take a 
+        short-cut here any longer -- we need to put the VarDecl node on the 
+        stack so it gets processed normally.
+
+        (KJS::FunctionBodyNode::processDeclarations): Changed the order of 
+        processing to enforce mutual exclusion rules.
+
+        * kjs/nodes.h:
+        (KJS::DeclarationStacks::DeclarationStacks): Structure includes an 
+        ExecState now, for fast access to the "arguments" property name.
+
+2007-10-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+        
+        Add a JSGlobalObject class and remove the InterpreterMap
+        http://bugs.webkit.org/show_bug.cgi?id=15681
+        
+        This required making JSCallbackObject a template class to allow for
+        JSGlobalObjects with JSCallbackObject functionality.
+        
+        SunSpider claims this was a 0.5% speedup.
+
+        * API/JSCallbackObject.cpp:
+        * API/JSCallbackObject.h:
+        * API/JSCallbackObjectFunctions.h: Copied from API/JSCallbackObject.cpp.
+        (KJS::::JSCallbackObject):
+        (KJS::::init):
+        (KJS::::~JSCallbackObject):
+        (KJS::::initializeIfNeeded):
+        (KJS::::className):
+        (KJS::::getOwnPropertySlot):
+        (KJS::::put):
+        (KJS::::deleteProperty):
+        (KJS::::implementsConstruct):
+        (KJS::::construct):
+        (KJS::::implementsHasInstance):
+        (KJS::::hasInstance):
+        (KJS::::implementsCall):
+        (KJS::::callAsFunction):
+        (KJS::::getPropertyNames):
+        (KJS::::toNumber):
+        (KJS::::toString):
+        (KJS::::setPrivate):
+        (KJS::::getPrivate):
+        (KJS::::inherits):
+        (KJS::::cachedValueGetter):
+        (KJS::::staticValueGetter):
+        (KJS::::staticFunctionGetter):
+        (KJS::::callbackGetter):
+        * API/JSClassRef.cpp:
+        (OpaqueJSClass::prototype):
+        * API/JSContextRef.cpp:
+        (JSGlobalContextCreate):
+        * API/JSObjectRef.cpp:
+        (JSObjectMake):
+        (JSObjectGetPrivate):
+        (JSObjectSetPrivate):
+        * API/JSValueRef.cpp:
+        (JSValueIsObjectOfClass):
+        * JavaScriptCore.exp:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * bindings/c/c_utility.cpp:
+        (KJS::Bindings::convertValueToNPVariant):
+        * bindings/jni/jni_jsobject.cpp:
+        * bindings/objc/objc_utility.mm:
+        (KJS::Bindings::convertValueToObjcValue):
+        * kjs/Context.cpp:
+        (KJS::Context::Context):
+        * kjs/ExecState.cpp:
+        (KJS::ExecState::lexicalInterpreter):
+        * kjs/JSGlobalObject.h: Added.
+        (KJS::JSGlobalObject::JSGlobalObject):
+        (KJS::JSGlobalObject::isGlobalObject):
+        (KJS::JSGlobalObject::interpreter):
+        (KJS::JSGlobalObject::setInterpreter):
+        * kjs/array_instance.cpp:
+        * kjs/context.h:
+        * kjs/function.cpp:
+        (KJS::FunctionImp::callAsFunction):
+        (KJS::GlobalFuncImp::callAsFunction):
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::Interpreter):
+        (KJS::Interpreter::init):
+        (KJS::Interpreter::~Interpreter):
+        (KJS::Interpreter::globalObject):
+        (KJS::Interpreter::initGlobalObject):
+        (KJS::Interpreter::evaluate):
+        * kjs/interpreter.h:
+        * kjs/lookup.h:
+        (KJS::cacheGlobalObject):
+        * kjs/object.h:
+        (KJS::JSObject::isGlobalObject):
+        * kjs/testkjs.cpp:
+
+2007-10-24  Eric Seidel  <eric@webkit.org>
+
+        Build fix for Gtk, no review.
+
+        * kjs/collector.cpp: #include "context.h"
+
+2007-10-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by Maciej.
+        
+        Stop checking isOutOfMemory after every allocation, instead let the collector
+        notify all ExecStates if we ever hit this rare condition.
+        
+        SunSpider claims this was a 2.2% speedup.
+
+        * kjs/collector.cpp:
+        (KJS::Collector::collect):
+        (KJS::Collector::reportOutOfMemoryToAllInterpreters):
+        * kjs/collector.h:
+        * kjs/nodes.cpp:
+        (KJS::TryNode::execute):
+
+2007-10-24  Mark Rowe  <mrowe@apple.com>
+
+        Gtk build fix.
+
+        * kjs/identifier.h:  Remove extra qualification.
+
+2007-10-24  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Disable ALWAYS_INLINE in debug builds, since it drives the debugger
+        crazy.
+
+        * wtf/AlwaysInline.h:
+
+2007-10-24  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Sam Weinig.
+        
+        Inlined the fast path for creating an Identifier from an Identifier. 
+        
+        This is a .4% speedup on SunSpider overall, but as big as a 2.5% 
+        speedup on certain individual tests. 65% of the Identifiers creating 
+        by SunSpider are already Identifiers.
+        
+        (The main reason I'm making this change is that it resolves a large
+        regression in a patch I haven't checked in yet.)
+
+        * JavaScriptCore.exp:
+        * kjs/identifier.cpp:
+        (KJS::Identifier::addSlowCase):
+        * kjs/identifier.h:
+        (KJS::Identifier::Identifier::add):
+
+2007-10-24  Lars Knoll  <lars@trolltech.com>
+
+        Reviewed by Simon.
+
+        some changes to the way JS values are converted to Qt values in the script bindings. Added support for converting JS arrays into QStringList's.
+
+        * bindings/qt/qt_instance.cpp:
+        (KJS::Bindings::QtInstance::invokeMethod):
+        * bindings/qt/qt_runtime.cpp:
+        (KJS::Bindings::convertValueToQVariant):
+        (KJS::Bindings::QtField::setValueToInstance):
+
+2007-10-24  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Darin.
+
+        Remove old relation method, replace with specialised LessThan and lessThenEq functions for a 0.5-0.6% improvement in SunSpider
+
+        * kjs/nodes.cpp:
+        (KJS::lessThan):
+        (KJS::lessThanEq):
+        (KJS::LessNode::evaluate):
+        (KJS::GreaterNode::evaluate):
+        (KJS::LessEqNode::evaluate):
+        (KJS::GreaterEqNode::evaluate):
+        * kjs/operations.cpp:
+        * kjs/operations.h:
+
+2007-10-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by darin.
+
+        * kjs/nodes.h:
+        (KJS::ImmediateNumberNode::): Fix ASSERT correctness (and debug build!)
+
+2007-10-24  Darin Adler  <darin@apple.com>
+
+        Reviewed by Eric.
+
+        * kjs/object.cpp: (KJS::JSObject::defaultValue): Get rid of a little
+        Identifier ref/deref for what SunSpider claims is a 0.4% speedup.
+
+2007-10-24  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - separate out the code to create a hash table the first time from the code
+          to rehash
+
+        SunSpider claims this was a 0.7% speedup.
+
+        * kjs/property_map.cpp:
+        (KJS::PropertyMap::expand): Changed to call either createTable or rehash.
+        (KJS::PropertyMap::createTable): Added. For the case where we had no table.
+        (KJS::PropertyMap::rehash): Removed code needed only in the case where we
+        had no table.
+        * kjs/property_map.h: Added createTable.
+
+2007-10-24  Eric Seidel  <eric@webkit.org>
+
+        Reviewed by darin.
+        
+        Add ImmediateNumberNode to hold a JSValue* instead of a double for numbers
+        which can be represented by JSImmediate.
+        
+        SunSpider claims this was a 0.6% speedup.
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::NumberNode::evaluate):
+        (KJS::ImmediateNumberNode::evaluate):
+        * kjs/nodes.h:
+        (KJS::Node::):
+        (KJS::ImmediateNumberNode::):
+        * kjs/nodes2string.cpp:
+        (ImmediateNumberNode::streamTo):
+
+2007-10-24  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15657
+          change static hash tables to use powers of two for speed
+
+        Seems to give 0.7% SunSpider speedup.
+
+        * kjs/create_hash_table: Updated to generate new format.
+        * kjs/lookup.cpp:
+        (KJS::keysMatch): Took out unneeded typecast.
+        (KJS::findEntry): Updated to expect table type 3 -- changed the printf to a plain old assert.
+        Replaced the modulus with a bit mask.
+        (KJS::Lookup::findEntry): Get the hash directly, since we know identifiers already have computed
+        their hash -- saves a branch.
+        (KJS::Lookup::find): Ditto.
+        * kjs/lookup.h: Changed attr from 2-byte value to one-byte value. Replaced hashSize with hashSizeMask.
+
+2007-10-24  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Darin.
+        
+        - remove KJS_CHECKEXCEPTIONs in places where exceptions can't happen for 0.6% SunSpider speedup
+
+        * kjs/nodes.cpp:
+        (KJS::DoWhileNode::execute):
+        (KJS::WhileNode::execute):
+        (KJS::ForNode::execute):
+        (KJS::ForInNode::execute):
+        (KJS::SourceElementsNode::execute):
+
+2007-10-23  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        * kjs/JSImmediate.h: (KJS::JSImmediate::getUInt32):
+        Changed an && to an & for a 1% gain in SunSpider.
+
+2007-10-23  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Reduce branching in implementations of some operator implementations, yielding 1.3% boost to SunSpider.
+
+        * kjs/nodes.cpp:
+        (KJS::MultNode::evaluate):
+        (KJS::DivNode::evaluate):
+        (KJS::ModNode::evaluate):
+        (KJS::add):
+        (KJS::sub):
+        (KJS::AddNode::evaluate):
+        (KJS::SubNode::evaluate):
+        (KJS::valueForReadModifyAssignment):
+        * kjs/operations.cpp:
+        * kjs/operations.h:
+
+2007-10-23  Oliver Hunt  <oliver@apple.com>
+
+        Reviewed by Maciej.
+
+        Separating all of the simple (eg. non-read-modify-write) binary operators
+        into separate classes in preparation for further JS optimisations.
+        
+        Happily this produces a 0.8% to 1.0% performance increase in SunSpider with
+        no further work.
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (KJS::MultNode::evaluate):
+        (KJS::DivNode::evaluate):
+        (KJS::ModNode::evaluate):
+        (KJS::AddNode::evaluate):
+        (KJS::SubNode::evaluate):
+        (KJS::LeftShiftNode::evaluate):
+        (KJS::RightShiftNode::evaluate):
+        (KJS::UnsignedRightShiftNode::evaluate):
+        (KJS::LessNode::evaluate):
+        (KJS::GreaterNode::evaluate):
+        (KJS::LessEqNode::evaluate):
+        (KJS::GreaterEqNode::evaluate):
+        (KJS::InstanceOfNode::evaluate):
+        (KJS::InNode::evaluate):
+        (KJS::EqualNode::evaluate):
+        (KJS::NotEqualNode::evaluate):
+        (KJS::StrictEqualNode::evaluate):
+        (KJS::NotStrictEqualNode::evaluate):
+        (KJS::BitAndNode::evaluate):
+        (KJS::BitXOrNode::evaluate):
+        (KJS::BitOrNode::evaluate):
+        (KJS::LogicalAndNode::evaluate):
+        (KJS::LogicalOrNode::evaluate):
+        * kjs/nodes.h:
+        (KJS::MultNode::):
+        (KJS::DivNode::):
+        (KJS::ModNode::):
+        (KJS::AddNode::):
+        (KJS::SubNode::):
+        (KJS::LeftShiftNode::):
+        (KJS::RightShiftNode::):
+        (KJS::UnsignedRightShiftNode::):
+        (KJS::LessNode::):
+        (KJS::GreaterNode::):
+        (KJS::LessEqNode::):
+        (KJS::GreaterEqNode::):
+        (KJS::InstanceOfNode::):
+        (KJS::InNode::):
+        (KJS::EqualNode::):
+        (KJS::NotEqualNode::):
+        (KJS::StrictEqualNode::):
+        (KJS::NotStrictEqualNode::):
+        (KJS::BitAndNode::):
+        (KJS::BitOrNode::):
+        (KJS::BitXOrNode::):
+        (KJS::LogicalAndNode::):
+        (KJS::LogicalOrNode::):
+        * kjs/nodes2string.cpp:
+        (MultNode::streamTo):
+        (DivNode::streamTo):
+        (ModNode::streamTo):
+        (AddNode::streamTo):
+        (SubNode::streamTo):
+        (LeftShiftNode::streamTo):
+        (RightShiftNode::streamTo):
+        (UnsignedRightShiftNode::streamTo):
+        (LessNode::streamTo):
+        (GreaterNode::streamTo):
+        (LessEqNode::streamTo):
+        (GreaterEqNode::streamTo):
+        (InstanceOfNode::streamTo):
+        (InNode::streamTo):
+        (EqualNode::streamTo):
+        (NotEqualNode::streamTo):
+        (StrictEqualNode::streamTo):
+        (NotStrictEqualNode::streamTo):
+        (BitAndNode::streamTo):
+        (BitXOrNode::streamTo):
+        (BitOrNode::streamTo):
+        (LogicalAndNode::streamTo):
+
+2007-10-23  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=15639
+          fix Math.abs(0), Math.ceil(-0), and Math.floor(-0)
+
+        Test: fast/js/math.html
+
+        * kjs/math_object.cpp: (MathFuncImp::callAsFunction):
+        Fix abs to look at the sign bit. Add a special case for values in the range
+        between -0 and -1 and a special case for ceil and for -0 for floor.
+
+2007-10-23  Darin Adler  <darin@apple.com>
+
+        Reviewed by Eric.
+
+        - streamline exception handling code for a >1% speed-up of SunSpider
+
+        * kjs/nodes.cpp: Changed macros to use functions for everything that's not
+        part of normal execution. We'll take function call overhead when propagating
+        an exception or out of memory.
+        (KJS::createOutOfMemoryCompletion): Added.
+        (KJS::substitute): Use append instead of the relatively inefficient + operator.
+        (KJS::Node::rethrowException): Added.
+        * kjs/nodes.h: Added rethrowException.
+
+2007-10-22  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=15636
+          some JavaScriptCore regression tests are failing due to numeric conversion
+
+        This should restore correctness and make speed better too, restoring some
+        of the optimization we lost in my last check-in.
+
+        * kjs/JSImmediate.h:
+        (KJS::JSImmediate::getTruncatedInt32): Added. Uses the range checking idiom
+        I used in my patch yesterday.
+        (KJS::JSImmediate::getTruncatedUInt32): Ditto.
+
+        * kjs/internal.h: Removed getInt32 and added getTruncatedInt/UInt32.
+        * kjs/internal.cpp:
+        (KJS::NumberImp::getUInt32): Changed to always use double, since I can't find
+        a way to write this more efficiently for float.
+        (KJS::NumberImp::getTruncatedInt32): Added.
+        (KJS::NumberImp::getTruncatedUInt32): Added.
+
+        * kjs/value.h: Removed getInt32 and added getTruncatedInt/UInt32.
+        (KJS::JSValue::getUInt32):
+        (KJS::JSValue::getTruncatedInt32): Added.
+        (KJS::JSValue::getTruncatedUInt32): Added.
+        (KJS::JSValue::toInt32): Changed getInt32 call to getTruncatedInt32.
+        (KJS::JSValue::toUInt32): Changed getUInt32 call to getTruncatedUInt32.
+        * kjs/value.cpp:
+        (KJS::JSCell::getTruncatedInt32): Added.
+        (KJS::JSCell::getTruncatedUInt32): Added.
+        (KJS::JSValue::toInteger): Changed getUInt32 call to getTruncatedInt32.
+        (KJS::JSValue::toInt32SlowCase): Removed extra getInt32 call I accidentally
+        had left in here.
+        (KJS::JSValue::toUInt32SlowCase): Ditto.
+        (KJS::JSValue::toUInt16): Changed getUInt32 call to getTruncatedUInt32.
+
+        * JavaScriptCore.exp: Updated.
+
+2007-10-22  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=15632
+          js1_5/Array/array-001.js test failing
+
+        One of the JavaScriptCore tests was failing; it failed because of
+        my change to NumberImp::getUInt32. The incorrect code I copied was
+        from JSImmediate::getUInt32, and was a pre-existing bug.
+
+        This patch fixes correctness, but will surely slow down SunSpider.
+        We may be able to code this tighter and get the speed back.
+
+        * kjs/JSImmediate.h:
+        (KJS::JSImmediate::getInt32): Renamed from toInt32 to more accurately
+        reflect the fact that this function only returns true if the value is
+        accurate (no fractional part, etc.). Changed code so that it returns
+        false when the value has a fraction.
+        (KJS::JSImmediate::getUInt32): Ditto.
+
+        * kjs/internal.cpp:
+        (KJS::NumberImp::getInt32): Changed code so that it returns false when
+        the value has a fraction. Restores the old behavior.
+        (KJS::NumberImp::getUInt32): Ditto.
+
+        * kjs/value.h:
+        (KJS::JSValue::getInt32): Updated for name change.
+        (KJS::JSValue::getUInt32): Ditto.
+        (KJS::JSValue::toInt32): Ditto.
+        (KJS::JSValue::toUInt32): Ditto.
+
+2007-10-22  Darin Adler  <darin@apple.com>
+
+        Reviewed by Brady.
+
+        - fix crash seen when running JavaScriptCore tests
+
+        * kjs/array_instance.cpp: (KJS::ArrayInstance::mark):
+        Copy and paste error: I accidentally had code here that was
+        making a copy of the HashMap -- that's illegal inside a mark
+        function and was unnecessary. The other callsite was modifying
+        the map as it iterated it, but this function is not.
+
+2007-10-22  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Oliver.
+        
+        - Avoid moving floats into integer registers in jsNumber() for 3% speedup on SunSpider
+        http://bugs.webkit.org/show_bug.cgi?id=15627
+
+        * kjs/JSImmediate.h:
+        (KJS::JSImmediate::fromDouble): Avoid moving floats to integer
+        registers since this is very slow.
+
+2007-10-22  Darin Adler  <darin@apple.com>
+
+        Reviewed by Eric Seidel.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15617
+          improve speed of integer conversions
+
+        Makes SunSpider 6% faster.
+
+        * kjs/JSImmediate.h: Added toInt32 and toUInt32, with separate versions for
+        32-bit and 64-bit.
+        * kjs/value.h:
+        (KJS::JSValue::getUInt32): Call JSImmediate::toUInt32.
+
+        * kjs/internal.h: Added getInt32.
+        * kjs/internal.cpp:
+        (KJS::NumberImp::getInt32): Added.
+        (KJS::NumberImp::getUInt32): Replaced with more-optimal implementation
+        stolen from JSValue.
+
+        * kjs/value.h:
+        (KJS::jsNumber): Marked ALWAYS_INLINE, because this wasn't getting
+        inlined.
+        (KJS::JSValue::getInt32): Added.
+        (KJS::JSValue::getUInt32): Changed to call the new JSImmediate::toUInt32
+        to avoid converting from float to double.
+        (KJS::JSValue::toInt32): Made inline, separated out the slow case.
+        (KJS::JSValue::toUInt32): Ditto.
+        * kjs/value.cpp:
+        (KJS::JSCell::getInt32): Added.
+        (KJS::JSValue::toInt32SlowCase): Renamed from toInt32. Changed to use the
+        new getInt32. Added a faster case for in-range numbers.
+        (KJS::JSValue::toUInt32SlowCase): Ditto.
+        (KJS::JSValue::toUInt16): Added a faster case for in-range numbers.
+
+        * JavaScriptCore.exp: Updated for changes.
+
+2007-10-22  Adam Roben  <aroben@apple.com>
+
+        Windows build fix
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Turn off
+        warning about implicit conversion to bool.
+
+2007-10-22  Mark Rowe  <mrowe@apple.com>
+
+        Gtk build fix.
+
+        * kjs/array_instance.cpp:
+
+2007-10-22  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15606
+          make cut-off for sparse vs. dense arrays smarter for speed with large arrays
+
+        Makes the morph test in SunSpider 26% faster, and the overall
+        benchmark 3% faster.
+
+        This also fixes some small problems we had with the distinction
+        between nonexistent and undefined values in arrays.
+
+        * kjs/array_instance.h: Tweaked formatting and naming.
+        * kjs/array_instance.cpp: Copied from kjs/array_object.cpp.
+        (KJS::storageSize): Added. Computes the size of the storage given a vector length.
+        (KJS::increasedVectorLength): Added. Implements the rule for resizing the vector.
+        (KJS::isDenseEnoughForVector): Added.
+        (KJS::ArrayInstance::ArrayInstance): Initialize the new fields.
+        (KJS::ArrayInstance::~ArrayInstance): Since m_storage is now never 0, delete it.
+        (KJS::ArrayInstance::getItem): Updated for name changes.
+        (KJS::ArrayInstance::lengthGetter): Ditto.
+        (KJS::ArrayInstance::inlineGetOwnPropertySlot): Added. Allows both versions of
+        getOwnPropertySlot to share more code.
+        (KJS::ArrayInstance::getOwnPropertySlot): Just refactored, no code change.
+        (KJS::ArrayInstance::put): Added logic for extending the vector as long as the
+        array is dense enough. Also keep m_numValuesInVector up to date.
+        (KJS::ArrayInstance::deleteProperty): Added code to keep m_numValuesInVector
+        up to date.
+        (KJS::ArrayInstance::getPropertyNames): Fixed bug where this would omit names
+        for array indices with undefined values.
+        (KJS::ArrayInstance::increaseVectorLength): Renamed from resizeStorage. Also
+        simplified to only handle getting larger.
+        (KJS::ArrayInstance::setLength): Added code to update m_numValuesInVector, to
+        zero out the unused part of the vector and to delete the map if it's no longer
+        needed.
+        (KJS::ArrayInstance::mark): Tweaked formatting.
+        (KJS::compareByStringForQSort): Ditto.
+        (KJS::ArrayInstance::sort): Ditto.
+        (KJS::CompareWithCompareFunctionArguments::CompareWithCompareFunctionArguments):
+        Ditto.
+        (KJS::compareWithCompareFunctionForQSort): Ditto.
+        (KJS::ArrayInstance::compactForSorting): Fixed bug where this would turn
+        undefined values into nonexistent values in some cases.
+
+        * kjs/array_object.h: Removed MAX_ARRAY_INDEX.
+        * kjs/array_object.cpp: Removed ArrayInstance. Moved to a separate file.
+
+        * JavaScriptCore.pri: Added array_instance.cpp.
+        * JavaScriptCore.xcodeproj/project.pbxproj: Ditto.
+        * kjs/AllInOneFile.cpp: Ditto.
+
+2007-10-22  Andrew Wellington  <proton@wiretapped.net>
+
+        Reviewed by Mark Rowe.
+        
+        Fix for local database support after r26879
+        Ensure that ENABLE_DATABASE and ENABLE_ICONDATABASE are correctly set
+
+        * Configurations/JavaScriptCore.xcconfig:
+
+2007-10-22  Simon Hausmann  <hausmann@kde.org>
+
+        Reviewed by Alp.
+
+        Build fix for the non-qmake builds.
+
+        * wtf/Platform.h: Default to enabling the database features unless
+        otherwise specified. (similar to ENABLE_ICONDATABASE)
+
+2007-10-22  Holger Freyther  <zecke@selfish.org>
+
+        Reviewed by Simon Hausmann <hausmann@kde.org>.
+
+        * Do not build testkjs as an application bundle. This is
+        needed for run-javascriptcore-tests on OSX.
+        * Also, based on r26633, allow to test the WebKit/Qt port on OSX.
+        * Set DYLD_LIBRARY_PATH if it was set in the environment. It must be set
+        as we do not have -rpath on OSX.
+
+        * kjs/testkjs.pro:
+
+2007-10-21  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Alp.
+
+        http://bugs.webkit.org/show_bug.cgi?id=15575
+        Bug 15575: [GTK] Implement threading using GThread
+
+        * wtf/Platform.h: Do not enable pthreads for Gtk.
+
+2007-10-21  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Mitz.
+
+        Fix http://bugs.webkit.org/show_bug.cgi?id=15603
+        Bug 15603: Regression(r26847): Crash when sorting an empty array from JavaScript
+
+        * kjs/array_object.cpp:
+        (KJS::freeStorage): Reinstate null-check that was removed in r26847.
+
+2007-10-21  Darin Adler  <darin@apple.com>
+
+        - fix Windows build
+
+        * kjs/array_instance.h: Removed unused ExecState parameter.
+        * kjs/array_object.cpp:
+        (KJS::ArrayInstance::put): Ditto.
+        (KJS::ArrayInstance::setLength): Ditto.
+
+2007-10-21  Darin Adler  <darin@apple.com>
+
+        * kjs/array_object.cpp: (KJS::ArrayInstance::put):
+        Add missing assignment that was causing regression test crash.
+
+2007-10-21  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15585
+          speed up sparse arrays by using a custom map
+    
+        Speeds up SunSpider by 10%.
+
+        * kjs/array_object.cpp:
+        (allocateStorage): Leave room for an additional pointer.
+        (reallocateStorage): Ditto.
+        (freeStorage): Ditto.
+        (ArrayInstance::~ArrayInstance): Delete the overflow map if present.
+        (ArrayInstance::getItem): Read values from the overflow map if present.
+        Removed the check of length, since it slows down the common case.
+        (ArrayInstance::getOwnPropertySlot): Ditto. Also removed the fallback
+        to the property map.
+        (ArrayInstance::put): Write values into the overflow map as needed.
+        Also create overflow map when needed.
+        (ArrayInstance::deleteProperty): Remove values from the overflow map
+        as appropriate.
+        (ArrayInstance::getPropertyNames): Add a name for each identifier in
+        the property map. This is extremely inefficient.
+        (ArrayInstance::setLength): Remove any values in the overflow map
+        that are past the new length, as we formerly did with the property map.
+        (ArrayInstance::mark): Mark any values in the overflow map.
+        (compareByStringForQSort): Removed unneeded undefined case, since
+        compactForSorting guarantees we will have no undefined values.
+        (compareWithCompareFunctionForQSort): Ditto.
+        (ArrayInstance::compactForSorting): Copy all the values out of the
+        overflow map and destroy it.
+
+        * kjs/property_map.h: Removed now-unused getSparseArrayPropertyNames.
+        * kjs/property_map.cpp: Ditto.
+
+2007-10-20  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej.
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15579
+          stop churning identifier reference counts copying Completion objects
+
+        * kjs/completion.h: Replace the Identifier with an Identifier*.
+        * kjs/nodes.cpp:
+        (ForInNode::execute): Update for change to Completion constructor.
+        (ContinueNode::execute): Ditto.
+        (BreakNode::execute): Ditto.
+
+2007-10-20  Mark Rowe  <mrowe@apple.com>
+
+        Reviewed by Alp.
+
+        Gtk changes needed to enable HTML 5 client-side database storage.
+
+        * wtf/Platform.h: Have Gtk use pthreads for now.
+
+2007-10-20  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+
+        Fixed http://bugs.webkit.org/show_bug.cgi?id=15570
+        Store gathered declaration nodes in the function body node.
+        
+        This means that you only have to gather the declaration nodes the first 
+        time the function executes. Performance gain of 2.10% on SunSpider, 
+        0.90% on command-line JS iBench.
+
+        * kjs/nodes.cpp: Split declaration stack initialization code off into 
+        initializeDeclarationStacks().
+        (FunctionBodyNode::FunctionBodyNode):
+        (FunctionBodyNode::initializeDeclarationStacks):
+        (FunctionBodyNode::processDeclarations):
+
+        * kjs/nodes.h: Changed DeclarationStacks structure to hold references, 
+        since the actual Vectors are now stored either on the stack or in the 
+        function body node.
+
+2007-10-19  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        http://bugs.webkit.org/show_bug.cgi?id=15559
+        Moved processDeclarations call into FunctionBodyNode::execute
+
+        To improve encapsulation, moved processDeclarations call into
+        FunctionBodyNode::execute. Also marked processDeclarations 
+        ALWAYS_INLINE, since it has only 1 caller now. This is a .71% speedup 
+        on command-line JS iBench.
+
+        * kjs/function.cpp:
+        (KJS::FunctionImp::callAsFunction):
+        (KJS::GlobalFuncImp::callAsFunction):
+        * kjs/function.h:
+        * kjs/interpreter.cpp:
+        (KJS::Interpreter::evaluate):
+        * kjs/nodes.cpp:
+        (FunctionBodyNode::execute):
+        * kjs/nodes.h:
+
+2007-10-19  Brady Eidson  <beidson@apple.com>
+
+        Reviewed by Sam
+
+        Queue -> Deque! and small style tweaks
+
+        * JavaScriptCore.vcproj/WTF/WTF.vcproj:
+        * JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
+        * wtf/Deque.h: Added.
+        (WTF::DequeNode::DequeNode):
+        (WTF::Deque::Deque):
+        (WTF::Deque::~Deque):
+        (WTF::Deque::size):
+        (WTF::Deque::isEmpty):
+        (WTF::Deque::append):
+        (WTF::Deque::prepend):
+        (WTF::Deque::first):
+        (WTF::Deque::last):
+        (WTF::Deque::removeFirst):
+        (WTF::Deque::clear):
+        * wtf/Queue.h: Removed.
+
+
+2007-10-19  Brady Eidson <beidson@apple.com>
+
+        Reviewed by Oliver
+
+        Added a simple LinkedList based Queue to wtf
+        We can make a better, more sophisticated an efficient one later, but have
+        needed one for some time, now!
+
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        * wtf/Queue.h: Added.
+        (WTF::QueueNode::QueueNode):
+        (WTF::Queue::Queue):
+        (WTF::Queue::~Queue):
+        (WTF::Queue::size):
+        (WTF::Queue::isEmpty):
+        (WTF::Queue::append):
+        (WTF::Queue::prepend):
+        (WTF::Queue::first):
+        (WTF::Queue::last):
+        (WTF::Queue::removeFirst):
+        (WTF::Queue::clear):
+
+2007-10-19  Nikolas Zimmermann  <zimmermann@kde.org>
+
+        Reviewed by Anders.
+
+        Try to fix Qt/Win build slave, by including windows.h also on Qt/Win.
+
+        * kjs/testkjs.cpp: Change PLATFORM(WIN) to PLATFORM(WIN_OS)
+
+2007-10-19  Simon Hausmann  <hausmann@kde.org>
+
+        Reviewed by Lars.
+
+        Fix compilation on Windows when wchar_t is a typedef instead of a native type (triggered by -Zc:wchar_t-).
+        Don't provide the wchar_t overloads then as they conflict with the unsigned short ones.
+
+        * wtf/ASCIICType.h:
+        (WTF::isASCIIAlpha):
+        (WTF::isASCIIAlphanumeric):
+        (WTF::isASCIIDigit):
+        (WTF::isASCIIHexDigit):
+        (WTF::isASCIILower):
+        (WTF::isASCIISpace):
+        (WTF::toASCIILower):
+        (WTF::toASCIIUpper):
+
+2007-10-19  Simon Hausmann  <hausmann@kde.org>
+
+        Reviewed by Lars.
+
+        Another build fix for the windows/qt build: Apply the same fix as in revision 26686 also to kjs/config.h to disable the disallowctype feature.
+
+        * kjs/config.h:
+
+2007-10-18  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Adam.
+        
+        - use __declspec(thread) for fast thread-local storage on Windows
+        
+        - 2.2% speedup on sunspider (on Windows)
+        - 7% speedup on the string section
+        - 6% speedup on JS iBench
+        
+        - fixed <rdar://problem/5473084> PLT on Windows got 2.5% slower between r25406 and r25422
+        - fixed at least some of <rdar://5527965? i-Bench JS was 14% slower in 310A11 than 310A10
+        
+        
+        * wtf/FastMalloc.cpp:
+        (WTF::getThreadHeap):
+        (WTF::setThreadHeap):
+        (WTF::TCMalloc_ThreadCache::GetCache):
+        (WTF::TCMalloc_ThreadCache::GetCacheIfPresent):
+        (WTF::TCMalloc_ThreadCache::CreateCacheIfNecessary):
+
+2007-10-17  Darin Adler  <darin@apple.com>
+
+        Reviewed by Mark Rowe.
+
+        - fix http://bugs.webkit.org/show_bug.cgi?id=15543
+          <rdar://problem/5545639> REGRESSION (r26697):
+          GoogleDocs: Can't create new documents or open existing ones
+
+        Test: fast/js/regexp-non-character.html
+
+        * pcre/pcre_compile.c: (check_escape): Take out the checks for valid characters
+        in the \u sequences -- not needed and actively harmful.
+
+2007-10-17  Anders Carlsson  <andersca@apple.com>
+
+        Reviewed by Oliver.
+
+        * wtf/Platform.h:
+        #define USE_PTHREADS on Mac.
+
+2007-10-17  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        Merged DeclaredFunctionImp into FunctionImp (the base class) because 
+        the distinction between the two was unused.
+        
+        Removed codeType() from FunctionImp because FunctionImp and its 
+        subclasses all returned FunctionCode, so it was unused, practically 
+        speaking.
+        
+        Removed a different codeType() from GlobalFuncImp because it was unused.
+        (Perhaps it was vestigial from a time when GlobalFuncImp used to 
+        inherit from FunctionImp.)
+
+        * bindings/runtime_method.cpp:
+        * bindings/runtime_method.h:
+        * kjs/function.cpp:
+        (KJS::FunctionImp::FunctionImp):
+        (KJS::FunctionImp::callAsFunction):
+        (KJS::FunctionImp::construct):
+        (KJS::FunctionImp::execute):
+        (KJS::FunctionImp::processVarDecls):
+        * kjs/function.h:
+        (KJS::FunctionImp::implementsConstruct):
+        (KJS::FunctionImp::scope):
+        * kjs/function_object.cpp:
+        (FunctionProtoFunc::callAsFunction):
+        (FunctionObjectImp::construct):
+        * kjs/nodes.cpp:
+        (FuncDeclNode::processFuncDecl):
+        (FuncExprNode::evaluate):
+
+2007-10-17  Adam Roben  <aroben@apple.com>
+
+        Windows build fix part 2.
+
+        Fix was by Darin, reviewed by Anders and Adam.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add
+        FastMallocPCRE.cpp to the project, and let Visual Studio have its way
+        with the post-build step.
+        * pcre/pcre.h: Don't DLL export the entry points just because this
+        is Win32 -- this is an internal copy of PCRE and should be private.
+        * pcre/pcre_compile.c: Fix an uninitialized variable warning --
+        there's no real problem but it's better to quiet the compiler by
+        tweaking the code slightly than turn off the warning entirely.
+
+2007-10-17  Adam Roben  <aroben@apple.com>
+
+        Windows build fix.
+
+        Reviewed by Anders.
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Disable
+        some mismatched signed/unsigned comparison warnings.
+        * pcre/pcre_exec.c:
+        (match): #if-out some labels that don't seem to exist.
+
+2007-10-17  Mark Rowe  <mrowe@apple.com>
+
+        Gtk build fix.
+
+        * JavaScriptCore.pri: Add FastMallocPCRE.cpp.
+        * pcre/pcre_get. #if out two functions that depend on pcre_get_stringnumber, which
+        is currently unavailable for UTF-16.
+
+2007-10-16  Darin Adler  <darin@apple.com>
+
+        Reviewed by Geoff.
+
+        - merged PCRE changes between 6.4 and 6.5
+
+        * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj:
+        * JavaScriptCore.xcodeproj/project.pbxproj:
+        Removed pcre_config.c, pcre_globals.c, pcre_info.c, pcre_maketables.c,
+        pcre_printint.src, pcre_refcount.c, pcre_study.c, pcre_try_flipped.c,
+        pcre_ucp_findchar.c, pcre_version.c, and ucptable.c. Added pcre_ucp_searchfuncs.c.
+
+        * pcre/AUTHORS:
+        * pcre/LICENCE:
+        * pcre/MERGING:
+        * pcre/dftables.c:
+        * pcre/pcre-config.h:
+        * pcre/pcre.h:
+        * pcre/pcre.pri:
+        * pcre/pcre_compile.c:
+        * pcre/pcre_exec.c:
+        * pcre/pcre_fullinfo.c:
+        * pcre/pcre_get.c:
+        * pcre/pcre_internal.h:
+        * pcre/pcre_maketables.c:
+        * pcre/pcre_ord2utf8.c:
+        * pcre/pcre_tables.c:
+        * pcre/pcre_ucp_searchfuncs.c: Copied from pcre/pcre_ucp_findchar.c.
+        * pcre/pcre_xclass.c:
+        * pcre/ucp.h:
+        * pcre/ucpinternal.h:
+        * pcre/ucptable.c:
+        Updated with new versions from the PCRE 6.5 release, merged with changes.
+
+        * pcre/pcre_config.c: Removed.
+        * pcre/pcre_globals.c: Removed.
+        * pcre/pcre_info.c: Removed.
+        * pcre/pcre_printint.src: Removed.
+        * pcre/pcre_refcount.c: Removed.
+        * pcre/pcre_study.c: Removed.
+        * pcre/pcre_try_flipped.c: Removed.
+        * pcre/pcre_ucp_findchar.c: Removed.
+        * pcre/pcre_version.c: Removed.
+
+2007-10-16  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+
+        Removed KJS_VERBOSE because it was getting in the way of readability, 
+        and the messages didn't seem very helpful.
+
+        * kjs/function.cpp:
+        (KJS::FunctionImp::callAsFunction):
+        (KJS::FunctionImp::passInParameters):
+        * kjs/lookup.h:
+        (KJS::lookupPut):
+        * kjs/object.cpp:
+        (KJS::JSObject::put):
+        * kjs/value.h:
+
+2007-10-16  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        Removed the Parameter class because it was a redundant wrapper around 
+        Identifier.
+
+        * kjs/function.cpp:
+        (KJS::FunctionImp::passInParameters):
+        (KJS::FunctionImp::getParameterName):
+        * kjs/nodes.cpp:
+        (FunctionBodyNode::addParam):
+        * kjs/nodes.h:
+        (KJS::FunctionBodyNode::):
+
+2007-10-16  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        Global replace of assert with ASSERT.
+
+2007-10-16  Adam Roben  <aroben@apple.com>
+
+        Make testkjs not delay-load WebKit
+
+        Soon, delay-loading WebKit will be impossible (because we will be
+        using __declspec(thread) for thread-local storage). This change
+        prepares testkjs for the future.
+
+        Reviewed by Sam.
+
+        * JavaScriptCore.vcproj/JavaScriptCore.sln: Removed WebKitInitializer,
+        added FindSafari.
+        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Don't link against
+        WebKitInitializer, don't delay-load WebKit.
+        * kjs/testkjs.cpp: Don't use WebKitInitializer.
+
+2007-10-16  Adam Roben  <aroben@apple.com>
+
+        Updated testkjs for the rename of WebKit_debug.dll to WebKit.dll for the Debug configuration
+
+        Reviewed by Kevin McCullough.
+
+        * JavaScriptCore.vcproj/debug.vsprops: Added WebKitDLLConfigSuffix.
+        * JavaScriptCore.vcproj/debug_internal.vsprops: Ditto.
+        * JavaScriptCore.vcproj/release.vsprops: Ditto.
+        * JavaScriptCore.vcproj/testkjs/testkjs.vcproj: Use
+        WebKitDLLConfigSuffix when referring to WebKit.dll, and fixed a typo
+        in the name of icuuc36[_debug].dll.
+
+2007-10-16  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Re-structured variable and function declaration code.
+        
+        Command-line JS iBench shows no regression.
+        
+        Here are the changes:
+
+        1. Function declarations are now processed at the same time as var 
+        declarations -- namely, immediately upon entry to an execution context. 
+        This does not match Firefox, which waits to process a function
+        declaration until the declaration's containing block executes, but it 
+        does match IE and the ECMA spec. (10.1.3 states that var and function 
+        declarations should be processed at the same time -- namely, "On 
+        entering an execution context." 12.2 states that "A Block does not 
+        define a new execution scope.")
+
+        2. Declaration processing proceeds iteratively now, rather than 
+        recursively, storing the nodes is finds in stacks. This will later 
+        facilitate an optimization to hold on to the gathered declaration nodes, 
+        rather than re-fetching them in every function call. 
+        [ http://bugs.webkit.org/show_bug.cgi?id=14868 ]
+
+        Modified these tests because they expected the incorrect Mozilla 
+        behavior described above:
+
+        * tests/mozilla/ecma_3/Function/scope-001.js:
+        * tests/mozilla/js1_5/Scope/regress-184107.js:
+
+2007-10-16  Darin Adler  <darin@apple.com>
+
+        - try to fix the GTK build
+
+        * kjs/ustring.cpp: Include ASCIICType.h, not ASCIICtype.h.
+
+2007-10-16  Darin Adler  <darin@apple.com>
+
+        - try to fix the Windows build
+
+        * kjs/date_object.cpp: (KJS::parseDate): A couple instances of isspace were
+        in here. Not sure why it wasn't failing elsewhere. Changed to isASCIISpace.
+
+2007-10-16  Darin Adler  <darin@apple.com>
+
+        - try to fix the GTK build
+
+        * kjs/ustring.cpp: Include ASCIICType.h.
+
+2007-10-16  Darin Adler  <darin@apple.com>
+
+        Reviewed by Maciej and Geoff (and looked over by Eric).
+
+        - http://bugs.webkit.org/show_bug.cgi?id=15519
+          eliminate use of <ctype.h> for processing ASCII
+
+        * wtf/ASCIICType.h: Added.
+        * wtf/DisallowCType.h: Added.
+
+        * kjs/config.h: Include DisallowCType.h.
+
+        * kjs/date_object.cpp:
+        (KJS::skipSpacesAndComments):
+        (KJS::findMonth):
+        (KJS::parseDate):
+        * kjs/function.cpp:
+        (KJS::decode):
+        * kjs/ustring.cpp:
+        (KJS::UString::toDouble):
+        Use ASCIICType.h functions instead of ctype.h ones.
+
+2007-10-14  Maciej Stachowiak  <mjs@apple.com>
+
+        Reviewed by Darin.
+
+        - fixes for "New JavaScript benchmark"
+        http://bugs.webkit.org/show_bug.cgi?id=15515
+        
+        * kjs/testkjs.cpp:
+        (TestFunctionImp::callAsFunction): Implement "load" for compatibility
+        with SpiderMonkey.
+        (TestFunctionImp::): ditto
+        (doIt): ditto
+        (kjsmain): Drop useless --> from output.
+
+2007-10-15  Geoffrey Garen  <ggaren@apple.com>
+
+        Removed unnecessary #include.
+
+        * API/JSObjectRef.cpp:
+
+2007-10-15  Geoffrey Garen  <ggaren@apple.com>
+
+        Double-reverse build fix. My tree was out of date.
+
+        * kjs/nodes.cpp:
+        (NumberNode::evaluate):
+
+2007-10-15  Geoffrey Garen  <ggaren@apple.com>
+
+        Build fix.
+
+        * kjs/nodes.cpp:
+        (NumberNode::evaluate):
+
+2007-10-15  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        Removed surprising self-named "hack" that made nested functions 
+        available as named properties of their containing functions, and placed
+        containing function objects in the scope chains of nested functions.
+        
+        There were a few reasons to remove this "hack:"
+
+        1. It contradicted FF, IE, and the ECMA spec.
+
+        2. It incurred a performance penalty, since merely parsing a function 
+        required parsing its body for nested functions (and so on).
+
+        3. SVN history contains no explanation for why it was added. It was just
+        legacy code in a large merge a long, long time ago.
+
+        [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
+
+        * kjs/nodes.cpp:
+        (FuncDeclNode::processFuncDecl):
+
+2007-10-15  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        Removed the concept of AnonymousCode. It was unused, and it doesn't
+        exist in the ECMA spec.
+        
+        [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
+
+        * kjs/Context.cpp:
+        (KJS::Context::Context):
+        * kjs/function.h:
+        * kjs/nodes.cpp:
+        (ReturnNode::execute):
+
+2007-10-15  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Darin Adler.
+        
+        Made function parameters DontDelete. This matches FF and the vague
+        description in ECMA 10.1.3. It's also required in order to make
+        symbol table based lookup of function parameters valid. (If the 
+        parameters aren't DontDelete, you can't guarantee that you'll find
+        them later in the symbol table.)
+
+        [ Patch broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
+
+        * kjs/function.cpp:
+        (KJS::FunctionImp::passInParameters):
+
+2007-10-15  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Some Vector optimizations. These are especially important when using
+        Vector as a stack for implementing recursive algorithms iteratively.
+        
+        [ Broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
+
+        1. Added shrink(), which is a version of resize() that you can call
+        to save a branch / improve code generation and inlining when you know 
+        that the vector is not getting bigger.
+        
+        2. Changed subclassing relationship in VectorBuffer to remove a call to
+        fastFree() in the destructor for the inlineCapacity != 0 template
+        specialization. This brings inline Vectors one step closer to true
+        stack-allocated arrays.
+        
+        Also changed abort() to CRASH(), since the latter works better.
+
+        * wtf/Vector.h:
+        (WTF::VectorBufferBase::allocateBuffer):
+        (WTF::VectorBufferBase::deallocateBuffer):
+        (WTF::VectorBufferBase::VectorBufferBase):
+        (WTF::VectorBufferBase::~VectorBufferBase):
+        (WTF::):
+        (WTF::VectorBuffer::VectorBuffer):
+        (WTF::VectorBuffer::~VectorBuffer):
+        (WTF::VectorBuffer::deallocateBuffer):
+        (WTF::VectorBuffer::releaseBuffer):
+        (WTF::Vector::clear):
+        (WTF::Vector::removeLast):
+        (WTF::::operator):
+        (WTF::::fill):
+        (WTF::::shrink):
+
+2007-10-12  Geoffrey Garen  <ggaren@apple.com>
+
+        Reviewed by Maciej Stachowiak.
+        
+        Fixed http://bugs.webkit.org/show_bug.cgi?id=15490
+        Iteration statements sometimes incorrectly evaluate to the empty value 
+        (KDE r670547). 
+        
+        [ Broken off from http://bugs.webkit.org/show_bug.cgi?id=14868 ]
+        
+        This patch is a merge of KDE r670547, with substantial modification 
+        for performance.
+        
+        It fixes do-while statements to evaluate to a value. (They used
+        to evaluate to the empty value in all cases.) 
+
+        It also fixes SourceElementsNode to maintain the value of abnormal 
+        completions like "break" and "continue."
+        
+        It also re-works the main execution loop in SourceElementsNode so that
+        it (1) makes a little more sense and (2) avoids unnecessary work. This 
+        is a .28% speedup on command-line JS iBench.
+
+        * kjs/nodes.cpp:
+        (DoWhileNode::execute):
+        (SourceElementsNode::execute):
+
+2007-10-15  Simon Hausmann  <hausmann@kde.org>
+
+        Reviewed by Lars.
+
+        Fix compilation with gcc 4.3 by including 'limits' due to the use of std::numeric_limits.
+
+        * wtf/HashTraits.h:
+
+2007-10-5  Kevin Ollivier  <kevino@theolliviers.com>
+ 
+        Reviewed by Adam.
+        
+        Add support for MSVC7, and fix cases where PLATFORM(WIN) should
+        be PLATFORM(WIN_OS) for other ports building on Windows.
+ 
+        * kjs/DateMath.cpp:
+        (KJS::getDSTOffsetSimple):
+        * kjs/JSImmediate.h:
+        * wtf/Assertions.cpp:
+        * wtf/Assertions.h:
+        * wtf/Platform.h:
+        * wtf/StringExtras.h:
+        (snprintf):
+        (vsnprintf):
+
+2007-10-14  Cameron Zwarich  <cwzwarich@uwaterloo.ca>
+
+        Reviewed by Darin.
+
+        Adds NegateNode optimization from KJS. The relevant revision in KDE
+        is 666736.
+
+        * kjs/grammar.y:
+        * kjs/nodes.cpp:
+        (NumberNode::evaluate):
+        * kjs/nodes.h:
+        (KJS::Node::):
+        (KJS::NumberNode::):
+        * kjs/nodes2string.cpp:
+        (NumberNode::streamTo):
+
+2007-10-14  Jason Foreman  <jason@threeve.org>
+
+        Reviewed by Maciej.
+
+        Fix http://bugs.webkit.org/show_bug.cgi?id=15145
+        
+        Ensure that if adjusting n to minimize the difference of n*intPow10(e-p+1) to x,
+        that the property n < intPow10(p) is maintained.
+
+        * kjs/number_object.cpp:
+        (NumberProtoFunc::callAsFunction):
+
+== Rolled over to ChangeLog-2007-10-14 ==