diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:41 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 18:28:41 -0800 |
commit | 648161bb0edfc3d43db63caed5cc5213bc6cb78f (patch) | |
tree | 4b825dc642cb6eb9a060e54bf8d69288fbee4904 /JavaScriptCore/ChangeLog-2008-08-10 | |
parent | a65af38181ac7d34544586bdb5cd004de93897ad (diff) | |
download | external_webkit-648161bb0edfc3d43db63caed5cc5213bc6cb78f.zip external_webkit-648161bb0edfc3d43db63caed5cc5213bc6cb78f.tar.gz external_webkit-648161bb0edfc3d43db63caed5cc5213bc6cb78f.tar.bz2 |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'JavaScriptCore/ChangeLog-2008-08-10')
-rw-r--r-- | JavaScriptCore/ChangeLog-2008-08-10 | 31482 |
1 files changed, 0 insertions, 31482 deletions
diff --git a/JavaScriptCore/ChangeLog-2008-08-10 b/JavaScriptCore/ChangeLog-2008-08-10 deleted file mode 100644 index 0912aec..0000000 --- a/JavaScriptCore/ChangeLog-2008-08-10 +++ /dev/null @@ -1,31482 +0,0 @@ -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 == |