diff options
author | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:30:52 -0800 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-03-03 19:30:52 -0800 |
commit | 8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2 (patch) | |
tree | 11425ea0b299d6fb89c6d3618a22d97d5bf68d0f /JavaScriptCore/ChangeLog | |
parent | 648161bb0edfc3d43db63caed5cc5213bc6cb78f (diff) | |
download | external_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.zip external_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.tar.gz external_webkit-8e35f3cfc7fba1d1c829dc557ebad6409cbe16a2.tar.bz2 |
auto import from //depot/cupcake/@135843
Diffstat (limited to 'JavaScriptCore/ChangeLog')
-rw-r--r-- | JavaScriptCore/ChangeLog | 14651 |
1 files changed, 14651 insertions, 0 deletions
diff --git a/JavaScriptCore/ChangeLog b/JavaScriptCore/ChangeLog new file mode 100644 index 0000000..ea47411 --- /dev/null +++ b/JavaScriptCore/ChangeLog @@ -0,0 +1,14651 @@ +2008-11-04 Adam Roben <aroben@apple.com> + + Windows build fix + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update + the location of JSStaticScopeObject.{cpp,h}. + +2008-11-04 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Alexey Proskuryakov. + + Move AllInOneFile.cpp to the top level of JavaScriptCore. + + * AllInOneFile.cpp: Copied from kjs/AllInOneFile.cpp. + * GNUmakefile.am: + * JavaScriptCore.xcodeproj/project.pbxproj: + * kjs/AllInOneFile.cpp: Removed. + +2008-11-04 Cameron Zwarich <zwarich@apple.com> + + Rubber-stamped by Alexey Proskuryakov. + + Add NodeInfo.h to the JavaScriptCore Xcode project. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-11-03 Cameron Zwarich <zwarich@apple.com> + + Rubber-stamped by Maciej Stachowiak. + + Move more files into the runtime subdirectory of JavaScriptCore. + + * API/JSBase.cpp: + * API/JSCallbackConstructor.cpp: + * API/JSCallbackFunction.cpp: + * API/JSClassRef.cpp: + * API/OpaqueJSString.cpp: + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * kjs/AllInOneFile.cpp: + * kjs/ArgList.cpp: Removed. + * kjs/ArgList.h: Removed. + * kjs/Arguments.cpp: Removed. + * kjs/Arguments.h: Removed. + * kjs/BatchedTransitionOptimizer.h: Removed. + * kjs/CollectorHeapIterator.h: Removed. + * kjs/CommonIdentifiers.cpp: Removed. + * kjs/CommonIdentifiers.h: Removed. + * kjs/ExecState.cpp: Removed. + * kjs/ExecState.h: Removed. + * kjs/GetterSetter.cpp: Removed. + * kjs/GetterSetter.h: Removed. + * kjs/InitializeThreading.cpp: Removed. + * kjs/InitializeThreading.h: Removed. + * kjs/JSActivation.cpp: Removed. + * kjs/JSActivation.h: Removed. + * kjs/JSGlobalData.cpp: Removed. + * kjs/JSGlobalData.h: Removed. + * kjs/JSLock.cpp: Removed. + * kjs/JSLock.h: Removed. + * kjs/JSStaticScopeObject.cpp: Removed. + * kjs/JSStaticScopeObject.h: Removed. + * kjs/JSType.h: Removed. + * kjs/PropertyNameArray.cpp: Removed. + * kjs/PropertyNameArray.h: Removed. + * kjs/ScopeChain.cpp: Removed. + * kjs/ScopeChain.h: Removed. + * kjs/ScopeChainMark.h: Removed. + * kjs/SymbolTable.h: Removed. + * kjs/Tracing.d: Removed. + * kjs/Tracing.h: Removed. + * runtime/ArgList.cpp: Copied from kjs/ArgList.cpp. + * runtime/ArgList.h: Copied from kjs/ArgList.h. + * runtime/Arguments.cpp: Copied from kjs/Arguments.cpp. + * runtime/Arguments.h: Copied from kjs/Arguments.h. + * runtime/BatchedTransitionOptimizer.h: Copied from kjs/BatchedTransitionOptimizer.h. + * runtime/CollectorHeapIterator.h: Copied from kjs/CollectorHeapIterator.h. + * runtime/CommonIdentifiers.cpp: Copied from kjs/CommonIdentifiers.cpp. + * runtime/CommonIdentifiers.h: Copied from kjs/CommonIdentifiers.h. + * runtime/ExecState.cpp: Copied from kjs/ExecState.cpp. + * runtime/ExecState.h: Copied from kjs/ExecState.h. + * runtime/GetterSetter.cpp: Copied from kjs/GetterSetter.cpp. + * runtime/GetterSetter.h: Copied from kjs/GetterSetter.h. + * runtime/InitializeThreading.cpp: Copied from kjs/InitializeThreading.cpp. + * runtime/InitializeThreading.h: Copied from kjs/InitializeThreading.h. + * runtime/JSActivation.cpp: Copied from kjs/JSActivation.cpp. + * runtime/JSActivation.h: Copied from kjs/JSActivation.h. + * runtime/JSGlobalData.cpp: Copied from kjs/JSGlobalData.cpp. + * runtime/JSGlobalData.h: Copied from kjs/JSGlobalData.h. + * runtime/JSLock.cpp: Copied from kjs/JSLock.cpp. + * runtime/JSLock.h: Copied from kjs/JSLock.h. + * runtime/JSStaticScopeObject.cpp: Copied from kjs/JSStaticScopeObject.cpp. + * runtime/JSStaticScopeObject.h: Copied from kjs/JSStaticScopeObject.h. + * runtime/JSType.h: Copied from kjs/JSType.h. + * runtime/PropertyNameArray.cpp: Copied from kjs/PropertyNameArray.cpp. + * runtime/PropertyNameArray.h: Copied from kjs/PropertyNameArray.h. + * runtime/ScopeChain.cpp: Copied from kjs/ScopeChain.cpp. + * runtime/ScopeChain.h: Copied from kjs/ScopeChain.h. + * runtime/ScopeChainMark.h: Copied from kjs/ScopeChainMark.h. + * runtime/SymbolTable.h: Copied from kjs/SymbolTable.h. + * runtime/Tracing.d: Copied from kjs/Tracing.d. + * runtime/Tracing.h: Copied from kjs/Tracing.h. + +2008-11-03 Sam Weinig <sam@webkit.org> + + Reviewed by Mark Rowe. + + Move #define to turn on dumping StructureID statistics to StructureID.cpp so that + turning it on does not require a full rebuild. + + * runtime/StructureID.cpp: + (JSC::StructureID::dumpStatistics): + * runtime/StructureID.h: + +2008-11-03 Alp Toker <alp@nuanti.com> + + Reviewed by Geoffrey Garen. + + Fix warning when building on Darwin without JSC_MULTIPLE_THREADS + enabled. + + * kjs/InitializeThreading.cpp: + +2008-11-02 Matt Lilek <webkit@mattlilek.com> + + Reviewed by Cameron Zwarich. + + Bug 22042: REGRESSION(r38066): ASSERTION FAILED: source in CodeBlock + <https://bugs.webkit.org/show_bug.cgi?id=22042> + + Rename parameter name to avoid ASSERT. + + * VM/CodeBlock.h: + (JSC::CodeBlock::CodeBlock): + (JSC::ProgramCodeBlock::ProgramCodeBlock): + (JSC::EvalCodeBlock::EvalCodeBlock): + +2008-11-02 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Oliver Hunt. + + Bug 22035: Remove the '_' suffix on constructor parameter names for structs + <https://bugs.webkit.org/show_bug.cgi?id=22035> + + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::JSCallbackObjectData::JSCallbackObjectData): + * VM/CodeBlock.h: + (JSC::CodeBlock::CodeBlock): + (JSC::ProgramCodeBlock::ProgramCodeBlock): + (JSC::EvalCodeBlock::EvalCodeBlock): + * wrec/WREC.h: + (JSC::Quantifier::Quantifier): + +2008-10-31 Cameron Zwarich <zwarich@apple.com> + + Rubber-stamped by Geoff Garen. + + Rename SourceRange.h to SourceCode.h. + + * API/JSBase.cpp: + * GNUmakefile.am: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CodeBlock.h: + * kjs/SourceCode.h: Copied from kjs/SourceRange.h. + * kjs/SourceRange.h: Removed. + * kjs/grammar.y: + * kjs/lexer.h: + * kjs/nodes.cpp: + (JSC::ForInNode::ForInNode): + * kjs/nodes.h: + (JSC::ThrowableExpressionData::setExceptionSourceCode): + +2008-10-31 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Darin Adler. + + Bug 22019: Move JSC::Interpreter::shouldPrintExceptions() to WebCore::Console + <https://bugs.webkit.org/show_bug.cgi?id=22019> + + The JSC::Interpreter::shouldPrintExceptions() function is not used at + all in JavaScriptCore, so it should be moved to WebCore::Console, its + only user. + + * JavaScriptCore.exp: + * kjs/interpreter.cpp: + * kjs/interpreter.h: + +2008-10-31 Cameron Zwarich <zwarich@apple.com> + + Not reviewed. + + Windows build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-10-31 Cameron Zwarich <zwarich@apple.com> + + Rubber-stamped by Sam Weinig. + + Remove the call to Interpreter::setShouldPrintExceptions() from the + GlobalObject constructor in the shell. The shouldPrintExceptions() + information is not used anywhere in JavaScriptCore, only in WebCore. + + * kjs/Shell.cpp: + (GlobalObject::GlobalObject): + +2008-10-31 Kevin Ollivier <kevino@theolliviers.com> + + wxMSW build fix. + + * wtf/Threading.h: + +2008-10-31 Cameron Zwarich <zwarich@apple.com> + + Rubber-stamped by Sam Weinig. + + Move more files from the kjs subdirectory of JavaScriptCore to the + runtime subdirectory. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * kjs/AllInOneFile.cpp: + * kjs/RegExpConstructor.cpp: Removed. + * kjs/RegExpConstructor.h: Removed. + * kjs/RegExpMatchesArray.h: Removed. + * kjs/RegExpObject.cpp: Removed. + * kjs/RegExpObject.h: Removed. + * kjs/RegExpPrototype.cpp: Removed. + * kjs/RegExpPrototype.h: Removed. + * runtime/RegExpConstructor.cpp: Copied from kjs/RegExpConstructor.cpp. + * runtime/RegExpConstructor.h: Copied from kjs/RegExpConstructor.h. + * runtime/RegExpMatchesArray.h: Copied from kjs/RegExpMatchesArray.h. + * runtime/RegExpObject.cpp: Copied from kjs/RegExpObject.cpp. + * runtime/RegExpObject.h: Copied from kjs/RegExpObject.h. + * runtime/RegExpPrototype.cpp: Copied from kjs/RegExpPrototype.cpp. + * runtime/RegExpPrototype.h: Copied from kjs/RegExpPrototype.h. + +2008-10-31 Mark Rowe <mrowe@apple.com> + + Revert an incorrect portion of r38034. + + * profiler/ProfilerServer.mm: + +2008-10-31 Mark Rowe <mrowe@apple.com> + + Fix the 64-bit build. + + Disable strict aliasing in ProfilerServer.mm as it leads to the compiler being unhappy + with the common Obj-C idiom self = [super init]; + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-10-31 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Alexey Proskuryakov. + + Change a header guard to match our coding style. + + * kjs/InitializeThreading.h: + +2008-10-30 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Fixed a small bit of https://bugs.webkit.org/show_bug.cgi?id=21962 + AST uses way too much memory + + Removed a word from StatementNode by nixing LabelStack and turning it + into a compile-time data structure managed by CodeGenerator. + + v8 tests and SunSpider, run by Gavin, report no change. + + * GNUmakefile.am: + * JavaScriptCore.order: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * kjs/AllInOneFile.cpp: + * JavaScriptCoreSources.bkl: I sure hope this builds! + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): + (JSC::CodeGenerator::newLabelScope): + (JSC::CodeGenerator::breakTarget): + (JSC::CodeGenerator::continueTarget): + * VM/CodeGenerator.h: Nixed the JumpContext system because it depended + on a LabelStack in the AST, and it was a little cumbersome on the client + side. Replaced with LabelScope, which tracks all break / continue + information in the CodeGenerator, just like we track LabelIDs and other + stacks of compile-time data. + + * kjs/LabelScope.h: Added. + (JSC::LabelScope::): + (JSC::LabelScope::LabelScope): + (JSC::LabelScope::ref): + (JSC::LabelScope::deref): + (JSC::LabelScope::refCount): + (JSC::LabelScope::breakTarget): + (JSC::LabelScope::continueTarget): + (JSC::LabelScope::type): + (JSC::LabelScope::name): + (JSC::LabelScope::scopeDepth): Simple abstraction for holding everything + you might want to know about a break-able / continue-able scope. + + * kjs/LabelStack.cpp: Removed. + * kjs/LabelStack.h: Removed. + + * kjs/grammar.y: No need to push labels at parse time -- we don't store + LabelStacks in the AST anymore. + + * kjs/nodes.cpp: + (JSC::DoWhileNode::emitCode): + (JSC::WhileNode::emitCode): + (JSC::ForNode::emitCode): + (JSC::ForInNode::emitCode): + (JSC::ContinueNode::emitCode): + (JSC::BreakNode::emitCode): + (JSC::SwitchNode::emitCode): + (JSC::LabelNode::emitCode): + * kjs/nodes.h: + (JSC::StatementNode::): + (JSC::LabelNode::): Use LabelScope where we used to use JumpContext. + Simplified a bunch of code. Touched up label-related error messages a + bit. + + * kjs/nodes2string.cpp: + (JSC::LabelNode::streamTo): Updated for rename. + +2008-10-31 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Darin Adler. + + Bug 22005: Move StructureIDChain into its own file + <https://bugs.webkit.org/show_bug.cgi?id=22005> + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * runtime/StructureID.cpp: + * runtime/StructureID.h: + * runtime/StructureIDChain.cpp: Copied from runtime/StructureID.cpp. + * runtime/StructureIDChain.h: Copied from runtime/StructureID.h. + +2008-10-31 Steve Falkenburg <sfalken@apple.com> + + Build fix. + + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + +2008-10-31 Steve Falkenburg <sfalken@apple.com> + + Build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-10-31 Darin Adler <darin@apple.com> + + Reviewed by Dan Bernstein. + + - fix storage leak seen on buildbot + + Some other cleanup too. The storage leak was caused by the fact + that HashTraits<CallIdentifier>::needsDestruction was false, so + the call identifier objects didn't get deleted. + + * profiler/CallIdentifier.h: + + Added a default constructor to create empty call identifiers. + + Changed the normal constructor to use const UString& + to avoid extra copying and reference count thrash. + + Removed the explicit copy constructor definition, since it's what + the compiler will automatically generate. (Rule of thumb: Either + you need both a custom copy constructor and a custom assignment + operator, or neither.) + + Moved the CallIdentifier hash function out of the WTF namespace; + there's no reason to put it there. + + Changed the CallIdentifier hash function to be a struct rather than + a specialization of the IntHash struct template. Having it be + a specialization made no sense, since CallIdentifier is not an integer, + and did no good. + + Removed explicit definition of emptyValueIsZero in the hash traits, + since inheriting from GenericHashTraits already makes that false. + + Removed explicit definition of emptyValue, instead relying on the + default constructor and GenericHashTraits. + + Removed explicit definition of needsDestruction, because we want it + to have its default value: true, not false. This fixes the leak! + + Changed constructDeletedValue and isDeletedValue to use a line number + of numeric_limits<unsigned>::max() to indicate a value is deleted. + Previously this used empty strings for the empty value and null strings + for the deleted value, but it's more efficient to use null for both. + +2008-10-31 Timothy Hatcher <timothy@apple.com> + + Emit the WillExecuteStatement debugger hook before the for loop body + when the statement node for the body isn't a block. This allows + breakpoints on those statements in the Web Inspector. + + https://bugs.webkit.org/show_bug.cgi?id=22004 + + Reviewed by Darin Adler. + + * kjs/nodes.cpp: + (JSC::ForNode::emitCode): Emit the WillExecuteStatement + debugger hook before the statement node if isn't a block. + Also emit the WillExecuteStatement debugger hook for the + loop as the first op-code. + (JSC::ForInNode::emitCode): Ditto. + +2008-10-31 Timothy Hatcher <timothy@apple.com> + + Fixes console warnings about not having an autorelease pool. + Also fixes the build for Snow Leopard, by including individual + Foundation headers instead of Foundation.h. + + https://bugs.webkit.org/show_bug.cgi?id=21995 + + Reviewed by Oliver Hunt. + + * profiler/ProfilerServer.mm: + (-[ProfilerServer init]): Create a NSAutoreleasePool and drain it. + +2008-10-31 Cameron Zwarich <zwarich@apple.com> + + Not reviewed. + + Speculative wxWindows build fix. + + * JavaScriptCoreSources.bkl: + * jscore.bkl: + +2008-10-31 Cameron Zwarich <zwarich@apple.com> + + Rubber-stamped by Maciej Stachowiak. + + Move VM/JSPropertyNameIterator.cpp and VM/JSPropertyNameIterator.h to + the runtime directory. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * VM/JSPropertyNameIterator.cpp: Removed. + * VM/JSPropertyNameIterator.h: Removed. + * runtime/JSPropertyNameIterator.cpp: Copied from VM/JSPropertyNameIterator.cpp. + * runtime/JSPropertyNameIterator.h: Copied from VM/JSPropertyNameIterator.h. + +2008-10-31 Cameron Zwarich <zwarich@apple.com> + + Not reviewed. + + Speculative wxWindows build fix. + + * jscore.bkl: + +2008-10-30 Mark Rowe <mrowe@apple.com> + + Reviewed by Jon Homeycutt. + + Explicitly default to building for only the native architecture in debug and release builds. + + * Configurations/DebugRelease.xcconfig: + +2008-10-30 Cameron Zwarich <zwarich@apple.com> + + Rubber-stamped by Sam Weinig. + + Create a debugger directory in JavaScriptCore and move the relevant + files to it. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CodeBlock.cpp: + * VM/CodeGenerator.h: + * VM/Machine.cpp: + * debugger: Added. + * debugger/Debugger.cpp: Copied from kjs/debugger.cpp. + * debugger/Debugger.h: Copied from kjs/debugger.h. + * debugger/DebuggerCallFrame.cpp: Copied from kjs/DebuggerCallFrame.cpp. + * debugger/DebuggerCallFrame.h: Copied from kjs/DebuggerCallFrame.h. + * kjs/AllInOneFile.cpp: + * kjs/DebuggerCallFrame.cpp: Removed. + * kjs/DebuggerCallFrame.h: Removed. + * kjs/Parser.cpp: + * kjs/Parser.h: + * kjs/debugger.cpp: Removed. + * kjs/debugger.h: Removed. + * kjs/interpreter.cpp: + * kjs/nodes.cpp: + * runtime/FunctionConstructor.cpp: + * runtime/JSGlobalObject.cpp: + +2008-10-30 Benjamin K. Stuhl <bks24@cornell.edu> + + gcc 4.3.3/linux-x86 generates "suggest parentheses around && within ||" + warnings; add some parentheses to disambiguate things. No functional + changes, so no tests. + + https://bugs.webkit.org/show_bug.cgi?id=21973 + Add parentheses to clean up some gcc warnings + + Reviewed by Dan Bernstein. + + * wtf/ASCIICType.h: + (WTF::isASCIIAlphanumeric): + (WTF::isASCIIHexDigit): + +2008-10-30 Kevin Lindeman <klindeman@apple.com> + + Adds ProfilerServer, which is a distributed notification listener + that allows starting and stopping the profiler remotely for use + in conjunction with the profiler's DTace probes. + + https://bugs.webkit.org/show_bug.cgi?id=21719 + + Reviewed by Timothy Hatcher. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Calls startProfilerServerIfNeeded. + * profiler/ProfilerServer.h: Added. + * profiler/ProfilerServer.mm: Added. + (+[ProfilerServer sharedProfileServer]): + (-[ProfilerServer init]): + (-[ProfilerServer startProfiling]): + (-[ProfilerServer stopProfiling]): + (JSC::startProfilerServerIfNeeded): + +2008-10-30 Kevin Ollivier <kevino@theolliviers.com> + + wx build fix after PropertyMap and StructureID merge. + + * JavaScriptCoreSources.bkl: + +2008-10-30 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Mark Rowe. + + Change the JavaScriptCore Xcode project to use relative paths for the + PCRE source files. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-10-30 Sam Weinig <sam@webkit.org> + + Reviewed by Cameron Zwarich and Geoffrey Garen. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=21989 + Merge PropertyMap and StructureID + + - Move PropertyMap code into StructureID in preparation for lazily + creating the map on gets. + - Make remove with transition explicit by adding removePropertyTransition. + - Make the put/remove without transition explicit. + - Make cache invalidation part of put/remove without transition. + + 1% speedup on SunSpider; 0.5% speedup on v8 suite. + + * GNUmakefile.am: + * JavaScriptCore.exp: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * kjs/AllInOneFile.cpp: + * kjs/identifier.h: + * runtime/JSObject.cpp: + (JSC::JSObject::removeDirect): + * runtime/JSObject.h: + (JSC::JSObject::putDirect): + * runtime/PropertyMap.cpp: Removed. + * runtime/PropertyMap.h: Removed. + * runtime/PropertyMapHashTable.h: Copied from runtime/PropertyMap.h. + * runtime/StructureID.cpp: + (JSC::StructureID::dumpStatistics): + (JSC::StructureID::StructureID): + (JSC::StructureID::~StructureID): + (JSC::StructureID::getEnumerablePropertyNames): + (JSC::StructureID::addPropertyTransition): + (JSC::StructureID::removePropertyTransition): + (JSC::StructureID::toDictionaryTransition): + (JSC::StructureID::changePrototypeTransition): + (JSC::StructureID::getterSetterTransition): + (JSC::StructureID::addPropertyWithoutTransition): + (JSC::StructureID::removePropertyWithoutTransition): + (JSC::PropertyMapStatisticsExitLogger::~PropertyMapStatisticsExitLogger): + (JSC::StructureID::checkConsistency): + (JSC::StructureID::copyPropertyTable): + (JSC::StructureID::get): + (JSC::StructureID::put): + (JSC::StructureID::remove): + (JSC::StructureID::insertIntoPropertyMapHashTable): + (JSC::StructureID::expandPropertyMapHashTable): + (JSC::StructureID::createPropertyMapHashTable): + (JSC::StructureID::rehashPropertyMapHashTable): + (JSC::comparePropertyMapEntryIndices): + (JSC::StructureID::getEnumerablePropertyNamesInternal): + * runtime/StructureID.h: + (JSC::StructureID::propertyStorageSize): + (JSC::StructureID::isEmpty): + (JSC::StructureID::get): + +2008-10-30 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Oliver Hunt. + + Bug 21987: CTI::putDoubleResultToJSNumberCellOrJSImmediate() hardcodes its result register + <https://bugs.webkit.org/show_bug.cgi?id=21987> + + CTI::putDoubleResultToJSNumberCellOrJSImmediate() hardcodes its result + register as ecx, but it should be tempReg1, which is ecx at all of its + callsites. + + * VM/CTI.cpp: + (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): + +2008-10-30 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Sam Weinig. + + Bug 21985: Opcodes should use eax as their destination register whenever possible + <https://bugs.webkit.org/show_bug.cgi?id=21985> + + Change more opcodes to use eax as the register for their final result, + and change calls to emitPutResult() that pass eax to rely on the default + value of eax. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + +2008-10-30 Alp Toker <alp@nuanti.com> + + Build fix attempt for older gcc on the trunk-mac-intel build bot + (error: initializer for scalar variable requires one element). + + Modify the initializer syntax slightly with an additional comma. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_resolve_func): + (JSC::Machine::cti_op_post_inc): + (JSC::Machine::cti_op_resolve_with_base): + (JSC::Machine::cti_op_post_dec): + +2008-10-30 Alp Toker <alp@nuanti.com> + + Reviewed by Alexey Proskuryakov. + + https://bugs.webkit.org/show_bug.cgi?id=21571 + VoidPtrPair breaks CTI on Linux + + The VoidPtrPair return change made in r37457 does not work on Linux + since POD structs aren't passed in registers. + + This patch uses a union to vectorize VoidPtrPair to a uint64_t and + matches Darwin/MSVC fixing CTI/WREC on Linux. + + Alexey reports no measurable change in Mac performance with this fix. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_resolve_func): + (JSC::Machine::cti_op_post_inc): + (JSC::Machine::cti_op_resolve_with_base): + (JSC::Machine::cti_op_post_dec): + * VM/Machine.h: + (JSC::): + +2008-10-29 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoff Garen. + + Initial work to reduce cost of JSNumberCell allocation + + This does the initial work needed to bring more of number + allocation into CTI code directly, rather than just falling + back onto the slow paths if we can't guarantee that a number + cell can be reused. + + Initial implementation only used by op_negate to make sure + it all works. In a negate heavy (though not dominated) test + it results in a 10% win in the non-reusable cell case. + + * VM/CTI.cpp: + (JSC::): + (JSC::CTI::emitAllocateNumber): + (JSC::CTI::emitNakedFastCall): + (JSC::CTI::emitArithIntToImmWithJump): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitUnaryOp): + * VM/CodeGenerator.h: + (JSC::CodeGenerator::emitToJSNumber): + (JSC::CodeGenerator::emitTypeOf): + (JSC::CodeGenerator::emitGetPropertyNames): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + * VM/Machine.h: + * kjs/ResultType.h: + (JSC::ResultType::isReusableNumber): + (JSC::ResultType::toInt): + * kjs/nodes.cpp: + (JSC::UnaryOpNode::emitCode): + (JSC::BinaryOpNode::emitCode): + (JSC::EqualNode::emitCode): + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::negl_r): + (JSC::X86Assembler::xorpd_mr): + * runtime/JSNumberCell.h: + (JSC::JSNumberCell::JSNumberCell): + +2008-10-29 Steve Falkenburg <sfalken@apple.com> + + <rdar://problem/6326563> Crash on launch + + For Windows, export explicit functions rather than exporting data for atomicallyInitializedStaticMutex. + + Exporting data from a DLL on Windows requires specifying __declspec(dllimport) in the header used by + callers, but __declspec(dllexport) when defined in the DLL implementation. By instead exporting + the explicit lock/unlock functions, we can avoid this. + + Fixes a crash on launch, since we were previously erroneously exporting atomicallyInitializedStaticMutex as a function. + + Reviewed by Darin Adler. + + * wtf/Threading.h: + (WTF::lockAtomicallyInitializedStaticMutex): + (WTF::unlockAtomicallyInitializedStaticMutex): + * wtf/ThreadingWin.cpp: + (WTF::lockAtomicallyInitializedStaticMutex): + (WTF::unlockAtomicallyInitializedStaticMutex): + +2008-10-29 Sam Weinig <sam@webkit.org> + + Reviewed by Oliver Hunt. + + Remove direct use of PropertyMap. + + * JavaScriptCore.exp: + * runtime/JSObject.cpp: + (JSC::JSObject::mark): + (JSC::JSObject::put): + (JSC::JSObject::deleteProperty): + (JSC::JSObject::getPropertyAttributes): + (JSC::JSObject::removeDirect): + * runtime/JSObject.h: + (JSC::JSObject::getDirect): + (JSC::JSObject::getDirectLocation): + (JSC::JSObject::hasCustomProperties): + (JSC::JSObject::JSObject): + (JSC::JSObject::putDirect): + * runtime/PropertyMap.cpp: + (JSC::PropertyMap::get): + * runtime/PropertyMap.h: + (JSC::PropertyMap::isEmpty): + (JSC::PropertyMap::get): + * runtime/StructureID.cpp: + (JSC::StructureID::dumpStatistics): + * runtime/StructureID.h: + (JSC::StructureID::propertyStorageSize): + (JSC::StructureID::get): + (JSC::StructureID::put): + (JSC::StructureID::remove): + (JSC::StructureID::isEmpty): + +2008-10-29 Sam Weinig <sam@webkit.org> + + Reviewed by Geoffrey Garen. + + Rename and move the StructureID transition table to its own file. + + * GNUmakefile.am: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * runtime/StructureID.cpp: + (JSC::StructureID::addPropertyTransition): + * runtime/StructureID.h: + (JSC::StructureID::): + * runtime/StructureIDTransitionTable.h: Copied from runtime/StructureID.h. + (JSC::StructureIDTransitionTableHash::hash): + (JSC::StructureIDTransitionTableHash::equal): + +2008-10-29 Sam Weinig <sam@webkit.org> + + Reviewed by Cameron Zwarich. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=21958 + Pack bits in StructureID to reduce the size of each StructureID by 2 words. + + * runtime/PropertyMap.h: + (JSC::PropertyMap::propertyMapSize): + * runtime/StructureID.cpp: + (JSC::StructureID::dumpStatistics): Add additional size statistics when dumping. + (JSC::StructureID::StructureID): + * runtime/StructureID.h: + +2008-10-29 Kevin Ollivier <kevino@theolliviers.com> + + wx build fixes after addition of runtime and ImageBuffer changes. + + * JavaScriptCoreSources.bkl: + * jscore.bkl: + +2008-10-29 Timothy Hatcher <timothy@apple.com> + + Emit the WillExecuteStatement debugger hook before the "else" body + when there is no block for the "else" body. This allows breakpoints + on those statements in the Web Inspector. + + https://bugs.webkit.org/show_bug.cgi?id=21944 + + Reviewed by Maciej Stachowiak. + + * kjs/nodes.cpp: + (JSC::IfElseNode::emitCode): Emit the WillExecuteStatement + debugger hook before the else node if isn't a block. + +2008-10-29 Alexey Proskuryakov <ap@webkit.org> + + Build fix. + + * JavaScriptCore.exp: Export HashTable::deleteTable(). + +2008-10-28 Alp Toker <alp@nuanti.com> + + Fix builddir != srcdir builds after kjs -> runtime breakage. Sources + may now be generated in both kjs/ and runtime/. + + Also sort the sources list for readability. + + * GNUmakefile.am: + +2008-10-28 Alp Toker <alp@nuanti.com> + + Reviewed by Cameron Zwarich. + + Build fix attempt after kjs -> runtime rename. + + * GNUmakefile.am: + +2008-10-28 Cameron Zwarich <zwarich@apple.com> + + Not reviewed. + + Remove a duplicate includes directory. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-10-28 Cameron Zwarich <zwarich@apple.com> + + Not reviewed. + + Attempt to fix the Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + +2008-10-28 Dan Bernstein <mitz@apple.com> + + Reviewed by Mark Rowe. + + - export WTF::atomicallyInitializedStaticMutex + + * JavaScriptCore.exp: + +2008-10-28 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Cameron Zwarich. + + Fixed CodeBlock dumping to accurately report constant register indices. + + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + +2008-10-28 Cameron Zwarich <zwarich@apple.com> + + Not reviewed. + + More Qt build fixes. + + * JavaScriptCore.pri: + +2008-10-28 Cameron Zwarich <zwarich@apple.com> + + Not reviewed. + + Fix the Qt build, hopefully for real this time. + + * JavaScriptCore.pri: + +2008-10-28 Cameron Zwarich <zwarich@apple.com> + + Not reviewed. + + Fix the Qt build. + + * JavaScriptCore.pri: + +2008-10-28 Cameron Zwarich <zwarich@apple.com> + + Not reviewed. + + Fix the Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-10-28 Cameron Zwarich <zwarich@apple.com> + + Rubber-stamped by Sam Weinig. + + Create a runtime directory in JavaScriptCore and begin moving files to + it. This is the first step towards removing the kjs directory and + placing files in more meaningful subdirectories of JavaScriptCore. + + * API/JSBase.cpp: + * API/JSCallbackConstructor.cpp: + * API/JSCallbackConstructor.h: + * API/JSCallbackFunction.cpp: + * API/JSClassRef.cpp: + * API/JSClassRef.h: + * API/JSStringRefCF.cpp: + * API/JSValueRef.cpp: + * API/OpaqueJSString.cpp: + * DerivedSources.make: + * GNUmakefile.am: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * kjs/AllInOneFile.cpp: + * kjs/ArrayConstructor.cpp: Removed. + * kjs/ArrayConstructor.h: Removed. + * kjs/ArrayPrototype.cpp: Removed. + * kjs/ArrayPrototype.h: Removed. + * kjs/BooleanConstructor.cpp: Removed. + * kjs/BooleanConstructor.h: Removed. + * kjs/BooleanObject.cpp: Removed. + * kjs/BooleanObject.h: Removed. + * kjs/BooleanPrototype.cpp: Removed. + * kjs/BooleanPrototype.h: Removed. + * kjs/CallData.cpp: Removed. + * kjs/CallData.h: Removed. + * kjs/ClassInfo.h: Removed. + * kjs/ConstructData.cpp: Removed. + * kjs/ConstructData.h: Removed. + * kjs/DateConstructor.cpp: Removed. + * kjs/DateConstructor.h: Removed. + * kjs/DateInstance.cpp: Removed. + * kjs/DateInstance.h: Removed. + * kjs/DateMath.cpp: Removed. + * kjs/DateMath.h: Removed. + * kjs/DatePrototype.cpp: Removed. + * kjs/DatePrototype.h: Removed. + * kjs/Error.cpp: Removed. + * kjs/Error.h: Removed. + * kjs/ErrorConstructor.cpp: Removed. + * kjs/ErrorConstructor.h: Removed. + * kjs/ErrorInstance.cpp: Removed. + * kjs/ErrorInstance.h: Removed. + * kjs/ErrorPrototype.cpp: Removed. + * kjs/ErrorPrototype.h: Removed. + * kjs/FunctionConstructor.cpp: Removed. + * kjs/FunctionConstructor.h: Removed. + * kjs/FunctionPrototype.cpp: Removed. + * kjs/FunctionPrototype.h: Removed. + * kjs/GlobalEvalFunction.cpp: Removed. + * kjs/GlobalEvalFunction.h: Removed. + * kjs/InternalFunction.cpp: Removed. + * kjs/InternalFunction.h: Removed. + * kjs/JSArray.cpp: Removed. + * kjs/JSArray.h: Removed. + * kjs/JSCell.cpp: Removed. + * kjs/JSCell.h: Removed. + * kjs/JSFunction.cpp: Removed. + * kjs/JSFunction.h: Removed. + * kjs/JSGlobalObject.cpp: Removed. + * kjs/JSGlobalObject.h: Removed. + * kjs/JSGlobalObjectFunctions.cpp: Removed. + * kjs/JSGlobalObjectFunctions.h: Removed. + * kjs/JSImmediate.cpp: Removed. + * kjs/JSImmediate.h: Removed. + * kjs/JSNotAnObject.cpp: Removed. + * kjs/JSNotAnObject.h: Removed. + * kjs/JSNumberCell.cpp: Removed. + * kjs/JSNumberCell.h: Removed. + * kjs/JSObject.cpp: Removed. + * kjs/JSObject.h: Removed. + * kjs/JSString.cpp: Removed. + * kjs/JSString.h: Removed. + * kjs/JSValue.cpp: Removed. + * kjs/JSValue.h: Removed. + * kjs/JSVariableObject.cpp: Removed. + * kjs/JSVariableObject.h: Removed. + * kjs/JSWrapperObject.cpp: Removed. + * kjs/JSWrapperObject.h: Removed. + * kjs/MathObject.cpp: Removed. + * kjs/MathObject.h: Removed. + * kjs/NativeErrorConstructor.cpp: Removed. + * kjs/NativeErrorConstructor.h: Removed. + * kjs/NativeErrorPrototype.cpp: Removed. + * kjs/NativeErrorPrototype.h: Removed. + * kjs/NumberConstructor.cpp: Removed. + * kjs/NumberConstructor.h: Removed. + * kjs/NumberObject.cpp: Removed. + * kjs/NumberObject.h: Removed. + * kjs/NumberPrototype.cpp: Removed. + * kjs/NumberPrototype.h: Removed. + * kjs/ObjectConstructor.cpp: Removed. + * kjs/ObjectConstructor.h: Removed. + * kjs/ObjectPrototype.cpp: Removed. + * kjs/ObjectPrototype.h: Removed. + * kjs/PropertyMap.cpp: Removed. + * kjs/PropertyMap.h: Removed. + * kjs/PropertySlot.cpp: Removed. + * kjs/PropertySlot.h: Removed. + * kjs/PrototypeFunction.cpp: Removed. + * kjs/PrototypeFunction.h: Removed. + * kjs/PutPropertySlot.h: Removed. + * kjs/SmallStrings.cpp: Removed. + * kjs/SmallStrings.h: Removed. + * kjs/StringConstructor.cpp: Removed. + * kjs/StringConstructor.h: Removed. + * kjs/StringObject.cpp: Removed. + * kjs/StringObject.h: Removed. + * kjs/StringObjectThatMasqueradesAsUndefined.h: Removed. + * kjs/StringPrototype.cpp: Removed. + * kjs/StringPrototype.h: Removed. + * kjs/StructureID.cpp: Removed. + * kjs/StructureID.h: Removed. + * kjs/completion.h: + * kjs/interpreter.h: + * runtime: Added. + * runtime/ArrayConstructor.cpp: Copied from kjs/ArrayConstructor.cpp. + * runtime/ArrayConstructor.h: Copied from kjs/ArrayConstructor.h. + * runtime/ArrayPrototype.cpp: Copied from kjs/ArrayPrototype.cpp. + * runtime/ArrayPrototype.h: Copied from kjs/ArrayPrototype.h. + * runtime/BooleanConstructor.cpp: Copied from kjs/BooleanConstructor.cpp. + * runtime/BooleanConstructor.h: Copied from kjs/BooleanConstructor.h. + * runtime/BooleanObject.cpp: Copied from kjs/BooleanObject.cpp. + * runtime/BooleanObject.h: Copied from kjs/BooleanObject.h. + * runtime/BooleanPrototype.cpp: Copied from kjs/BooleanPrototype.cpp. + * runtime/BooleanPrototype.h: Copied from kjs/BooleanPrototype.h. + * runtime/CallData.cpp: Copied from kjs/CallData.cpp. + * runtime/CallData.h: Copied from kjs/CallData.h. + * runtime/ClassInfo.h: Copied from kjs/ClassInfo.h. + * runtime/ConstructData.cpp: Copied from kjs/ConstructData.cpp. + * runtime/ConstructData.h: Copied from kjs/ConstructData.h. + * runtime/DateConstructor.cpp: Copied from kjs/DateConstructor.cpp. + * runtime/DateConstructor.h: Copied from kjs/DateConstructor.h. + * runtime/DateInstance.cpp: Copied from kjs/DateInstance.cpp. + * runtime/DateInstance.h: Copied from kjs/DateInstance.h. + * runtime/DateMath.cpp: Copied from kjs/DateMath.cpp. + * runtime/DateMath.h: Copied from kjs/DateMath.h. + * runtime/DatePrototype.cpp: Copied from kjs/DatePrototype.cpp. + * runtime/DatePrototype.h: Copied from kjs/DatePrototype.h. + * runtime/Error.cpp: Copied from kjs/Error.cpp. + * runtime/Error.h: Copied from kjs/Error.h. + * runtime/ErrorConstructor.cpp: Copied from kjs/ErrorConstructor.cpp. + * runtime/ErrorConstructor.h: Copied from kjs/ErrorConstructor.h. + * runtime/ErrorInstance.cpp: Copied from kjs/ErrorInstance.cpp. + * runtime/ErrorInstance.h: Copied from kjs/ErrorInstance.h. + * runtime/ErrorPrototype.cpp: Copied from kjs/ErrorPrototype.cpp. + * runtime/ErrorPrototype.h: Copied from kjs/ErrorPrototype.h. + * runtime/FunctionConstructor.cpp: Copied from kjs/FunctionConstructor.cpp. + * runtime/FunctionConstructor.h: Copied from kjs/FunctionConstructor.h. + * runtime/FunctionPrototype.cpp: Copied from kjs/FunctionPrototype.cpp. + * runtime/FunctionPrototype.h: Copied from kjs/FunctionPrototype.h. + * runtime/GlobalEvalFunction.cpp: Copied from kjs/GlobalEvalFunction.cpp. + * runtime/GlobalEvalFunction.h: Copied from kjs/GlobalEvalFunction.h. + * runtime/InternalFunction.cpp: Copied from kjs/InternalFunction.cpp. + * runtime/InternalFunction.h: Copied from kjs/InternalFunction.h. + * runtime/JSArray.cpp: Copied from kjs/JSArray.cpp. + * runtime/JSArray.h: Copied from kjs/JSArray.h. + * runtime/JSCell.cpp: Copied from kjs/JSCell.cpp. + * runtime/JSCell.h: Copied from kjs/JSCell.h. + * runtime/JSFunction.cpp: Copied from kjs/JSFunction.cpp. + * runtime/JSFunction.h: Copied from kjs/JSFunction.h. + * runtime/JSGlobalObject.cpp: Copied from kjs/JSGlobalObject.cpp. + * runtime/JSGlobalObject.h: Copied from kjs/JSGlobalObject.h. + * runtime/JSGlobalObjectFunctions.cpp: Copied from kjs/JSGlobalObjectFunctions.cpp. + * runtime/JSGlobalObjectFunctions.h: Copied from kjs/JSGlobalObjectFunctions.h. + * runtime/JSImmediate.cpp: Copied from kjs/JSImmediate.cpp. + * runtime/JSImmediate.h: Copied from kjs/JSImmediate.h. + * runtime/JSNotAnObject.cpp: Copied from kjs/JSNotAnObject.cpp. + * runtime/JSNotAnObject.h: Copied from kjs/JSNotAnObject.h. + * runtime/JSNumberCell.cpp: Copied from kjs/JSNumberCell.cpp. + * runtime/JSNumberCell.h: Copied from kjs/JSNumberCell.h. + * runtime/JSObject.cpp: Copied from kjs/JSObject.cpp. + * runtime/JSObject.h: Copied from kjs/JSObject.h. + * runtime/JSString.cpp: Copied from kjs/JSString.cpp. + * runtime/JSString.h: Copied from kjs/JSString.h. + * runtime/JSValue.cpp: Copied from kjs/JSValue.cpp. + * runtime/JSValue.h: Copied from kjs/JSValue.h. + * runtime/JSVariableObject.cpp: Copied from kjs/JSVariableObject.cpp. + * runtime/JSVariableObject.h: Copied from kjs/JSVariableObject.h. + * runtime/JSWrapperObject.cpp: Copied from kjs/JSWrapperObject.cpp. + * runtime/JSWrapperObject.h: Copied from kjs/JSWrapperObject.h. + * runtime/MathObject.cpp: Copied from kjs/MathObject.cpp. + * runtime/MathObject.h: Copied from kjs/MathObject.h. + * runtime/NativeErrorConstructor.cpp: Copied from kjs/NativeErrorConstructor.cpp. + * runtime/NativeErrorConstructor.h: Copied from kjs/NativeErrorConstructor.h. + * runtime/NativeErrorPrototype.cpp: Copied from kjs/NativeErrorPrototype.cpp. + * runtime/NativeErrorPrototype.h: Copied from kjs/NativeErrorPrototype.h. + * runtime/NumberConstructor.cpp: Copied from kjs/NumberConstructor.cpp. + * runtime/NumberConstructor.h: Copied from kjs/NumberConstructor.h. + * runtime/NumberObject.cpp: Copied from kjs/NumberObject.cpp. + * runtime/NumberObject.h: Copied from kjs/NumberObject.h. + * runtime/NumberPrototype.cpp: Copied from kjs/NumberPrototype.cpp. + * runtime/NumberPrototype.h: Copied from kjs/NumberPrototype.h. + * runtime/ObjectConstructor.cpp: Copied from kjs/ObjectConstructor.cpp. + * runtime/ObjectConstructor.h: Copied from kjs/ObjectConstructor.h. + * runtime/ObjectPrototype.cpp: Copied from kjs/ObjectPrototype.cpp. + * runtime/ObjectPrototype.h: Copied from kjs/ObjectPrototype.h. + * runtime/PropertyMap.cpp: Copied from kjs/PropertyMap.cpp. + * runtime/PropertyMap.h: Copied from kjs/PropertyMap.h. + * runtime/PropertySlot.cpp: Copied from kjs/PropertySlot.cpp. + * runtime/PropertySlot.h: Copied from kjs/PropertySlot.h. + * runtime/PrototypeFunction.cpp: Copied from kjs/PrototypeFunction.cpp. + * runtime/PrototypeFunction.h: Copied from kjs/PrototypeFunction.h. + * runtime/PutPropertySlot.h: Copied from kjs/PutPropertySlot.h. + * runtime/SmallStrings.cpp: Copied from kjs/SmallStrings.cpp. + * runtime/SmallStrings.h: Copied from kjs/SmallStrings.h. + * runtime/StringConstructor.cpp: Copied from kjs/StringConstructor.cpp. + * runtime/StringConstructor.h: Copied from kjs/StringConstructor.h. + * runtime/StringObject.cpp: Copied from kjs/StringObject.cpp. + * runtime/StringObject.h: Copied from kjs/StringObject.h. + * runtime/StringObjectThatMasqueradesAsUndefined.h: Copied from kjs/StringObjectThatMasqueradesAsUndefined.h. + * runtime/StringPrototype.cpp: Copied from kjs/StringPrototype.cpp. + * runtime/StringPrototype.h: Copied from kjs/StringPrototype.h. + * runtime/StructureID.cpp: Copied from kjs/StructureID.cpp. + * runtime/StructureID.h: Copied from kjs/StructureID.h. + +2008-10-28 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=21919 + Sampler reports bogus time in op_enter during 3d-raytrace.js + + Fixed a bug where we would pass the incorrect Instruction* during some + parts of CTI codegen. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/SamplingTool.cpp: + (JSC::SamplingTool::run): + * wtf/Platform.h: + +2008-10-28 Kevin McCullough <kmccullough@apple.com> + + Reviewed by Dan Bernstein. + + -Removed unused includes. + Apparent .4% speedup in Sunspider + + * kjs/JSObject.cpp: + * kjs/interpreter.cpp: + +2008-10-28 Alp Toker <alp@nuanti.com> + + Include copyright license files in the autotools dist target. + + Change suggested by Mike Hommey. + + * GNUmakefile.am: + +2008-10-27 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Maciej Stachowiak. + + Stop discarding CodeBlock samples that can't be charged to a specific + opcode. Instead, charge the relevant CodeBlock, and provide a footnote + explaining the situation. + + This will help us tell which CodeBlocks are hot, even if we can't + identify specific lines of code within the CodeBlocks. + + * VM/SamplingTool.cpp: + (JSC::ScopeSampleRecord::sample): + (JSC::compareScopeSampleRecords): + (JSC::SamplingTool::dump): + + * VM/SamplingTool.h: + (JSC::ScopeSampleRecord::ScopeSampleRecord): + (JSC::ScopeSampleRecord::~ScopeSampleRecord): + +2008-10-27 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Added a mutex around the SamplingTool's ScopeNode* map, to solve a crash + when sampling the v8 tests. + + * VM/SamplingTool.cpp: + (JSC::SamplingTool::run): + (JSC::SamplingTool::notifyOfScope): + * VM/SamplingTool.h: Since new ScopeNodes can be created after + the SamplingTools has begun sampling, reads and writes to / from the + map need to be synchronized. Shark says this doesn't measurably increase + sampling overhead. + +2008-10-25 Geoffrey Garen <ggaren@apple.com> + + Not reviewed. + + Try to fix Windows build. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): Provide a dummy value to the + HostCallRecord in CTI non-sampling builds, to silence compiler warning. + +2008-10-25 Geoffrey Garen <ggaren@apple.com> + + Not reviewed. + + Try to fix Windows build. + + * VM/SamplingTool.h: + (JSC::SamplingTool::encodeSample): Explicitly cast bool to int, to + silence compiler warning. + +2008-10-25 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig, with Gavin Barraclough's help. + + Fixed Sampling Tool: + - Made CodeBlock sampling work with CTI + - Improved accuracy by unifying most sampling data into a single + 32bit word, which can be written / read atomically. + - Split out three different #ifdefs for modularity: OPCODE_SAMPLING; + CODEBLOCK_SAMPLING; OPCODE_STATS. + - Improved reporting clarity + - Refactored for code clarity + + * JavaScriptCore.exp: Exported another symbol. + + * VM/CTI.cpp: + (JSC::CTI::emitCTICall): + (JSC::CTI::compileOpCall): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::compileBinaryArithOpSlowCase): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + * VM/CTI.h: Updated CTI codegen to use the unified SamplingTool interface + for encoding samples. (This required passing the current vPC to a lot + more functions, since the unified interface samples the current vPC.) + Added hooks for writing the current CodeBlock* on function entry and + after a function call, for the sake of the CodeBlock sampler. Removed + obsolete hook for clearing the current sample inside op_end. Also removed + the custom enum used to differentiate flavors of op_call, since the + OpcodeID enum works just as well. (This was important in an earlier + version of the patch, but now it's just cleanup.) + + * VM/CodeBlock.cpp: + (JSC::CodeBlock::lineNumberForVPC): + * VM/CodeBlock.h: Upated for refactored #ifdefs. Changed lineNumberForVPC + to be robust against vPCs not recorded for exception handling, since + the Sampler may ask for an arbitrary vPC. + + * VM/Machine.cpp: + (JSC::Machine::execute): + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_construct_NotJSConstruct): + * VM/Machine.h: + (JSC::Machine::setSampler): + (JSC::Machine::sampler): + (JSC::Machine::jitCodeBuffer): Upated for refactored #ifdefs. Changed + Machine to use SamplingTool helper objects to record movement in and + out of host code. This makes samples a bit more precise. + + * VM/Opcode.cpp: + (JSC::OpcodeStats::~OpcodeStats): + * VM/Opcode.h: Upated for refactored #ifdefs. Added a little more padding, + to accomodate our more verbose opcode names. + + * VM/SamplingTool.cpp: + (JSC::ScopeSampleRecord::sample): Only count a sample toward our total + if we actually record it. This solves cases where a CodeBlock will + claim to have been sampled many times, with reported samples that don't + match. + + (JSC::SamplingTool::run): Read the current sample into a Sample helper + object, to ensure that the data doesn't change while we're analyzing it, + and to help decode the data. Only access the CodeBlock sampling hash + table if CodeBlock sampling has been enabled, so non-CodeBlock sampling + runs can operate with even less overhead. + + (JSC::SamplingTool::dump): I reorganized this code a lot to print the + most important info at the top, print as a table, annotate and document + the stuff I didn't understand when I started, etc. + + * VM/SamplingTool.h: New helper classes, described above. + + * kjs/Parser.h: + * kjs/Shell.cpp: + (runWithScripts): + * kjs/nodes.cpp: + (JSC::ScopeNode::ScopeNode): Updated for new sampling APIs. + + * wtf/Platform.h: Moved sampling #defines here, since our custom is to + put ENABLE #defines into Platform.h. Made explicit the fact that + CODEBLOCK_SAMPLING depends on OPCODE_SAMPLING. + +2008-10-25 Jan Michael Alonzo <jmalonzo@webkit.org> + + JSC Build fix, not reviewed. + + * VM/CTI.cpp: add missing include stdio.h for debug builds + +2008-10-24 Eric Seidel <eric@webkit.org> + + Reviewed by Darin Adler. + + Get rid of a bonus ASSERT when using a null string as a regexp. + Specifically calling: RegularExpression::match() with String::empty() + will hit this ASSERT. + Chromium hits this, but I don't know of any way to make a layout test. + + * pcre/pcre_exec.cpp: + (jsRegExpExecute): + +2008-10-24 Alexey Proskuryakov <ap@webkit.org> + + Suggested and rubber-stamped by Geoff Garen. + + Fix a crash when opening Font Picker. + + The change also hopefully fixes this bug, which I could never reproduce: + https://bugs.webkit.org/show_bug.cgi?id=20241 + <rdar://problem/6290576> Safari crashes at JSValueUnprotect() when fontpicker view close + + * API/JSContextRef.cpp: (JSContextGetGlobalObject): Use lexical global object instead of + dynamic one. + +2008-10-24 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Geoff Garen. + + Remove ScopeChainNode::bottom() and inline it into its only caller, + ScopeChainnode::globalObject(). + + * kjs/JSGlobalObject.h: + (JSC::ScopeChainNode::globalObject): + * kjs/ScopeChain.h: + (JSC::ScopeChain::bottom): + +2008-10-24 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Maciej Stachowiak. + + Bug 21862: Create JSFunction prototype property lazily + <https://bugs.webkit.org/show_bug.cgi?id=21862> + + This is a 1.5% speedup on SunSpider and a 1.4% speedup on the V8 + benchmark suite, including a 3.8% speedup on Earley-Boyer. + + * kjs/JSFunction.cpp: + (JSC::JSFunction::getOwnPropertySlot): + * kjs/nodes.cpp: + (JSC::FuncDeclNode::makeFunction): + (JSC::FuncExprNode::makeFunction): + +2008-10-24 Greg Bolsinga <bolsinga@apple.com> + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=21475 + + Provide support for the Geolocation API + + http://dev.w3.org/geo/api/spec-source.html + + * wtf/Platform.h: ENABLE_GEOLOCATION defaults to 0 + +2008-10-24 Darin Adler <darin@apple.com> + + - finish rolling out https://bugs.webkit.org/show_bug.cgi?id=21732 + + * API/APICast.h: + * API/JSCallbackConstructor.h: + * API/JSCallbackFunction.cpp: + * API/JSCallbackFunction.h: + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + * API/JSContextRef.cpp: + * API/JSObjectRef.cpp: + * API/JSValueRef.cpp: + * VM/CTI.cpp: + * VM/CTI.h: + * VM/CodeBlock.cpp: + * VM/CodeBlock.h: + * VM/CodeGenerator.cpp: + * VM/CodeGenerator.h: + * VM/ExceptionHelpers.cpp: + * VM/ExceptionHelpers.h: + * VM/JSPropertyNameIterator.cpp: + * VM/JSPropertyNameIterator.h: + * VM/Machine.cpp: + * VM/Machine.h: + * VM/Register.h: + * kjs/ArgList.cpp: + * kjs/ArgList.h: + * kjs/Arguments.cpp: + * kjs/Arguments.h: + * kjs/ArrayConstructor.cpp: + * kjs/ArrayPrototype.cpp: + * kjs/BooleanConstructor.cpp: + * kjs/BooleanConstructor.h: + * kjs/BooleanObject.h: + * kjs/BooleanPrototype.cpp: + * kjs/CallData.cpp: + * kjs/CallData.h: + * kjs/ConstructData.cpp: + * kjs/ConstructData.h: + * kjs/DateConstructor.cpp: + * kjs/DateInstance.h: + * kjs/DatePrototype.cpp: + * kjs/DatePrototype.h: + * kjs/DebuggerCallFrame.cpp: + * kjs/DebuggerCallFrame.h: + * kjs/ErrorConstructor.cpp: + * kjs/ErrorPrototype.cpp: + * kjs/ExecState.cpp: + * kjs/ExecState.h: + * kjs/FunctionConstructor.cpp: + * kjs/FunctionPrototype.cpp: + * kjs/FunctionPrototype.h: + * kjs/GetterSetter.cpp: + * kjs/GetterSetter.h: + * kjs/InternalFunction.h: + * kjs/JSActivation.cpp: + * kjs/JSActivation.h: + * kjs/JSArray.cpp: + * kjs/JSArray.h: + * kjs/JSCell.cpp: + * kjs/JSCell.h: + * kjs/JSFunction.cpp: + * kjs/JSFunction.h: + * kjs/JSGlobalData.h: + * kjs/JSGlobalObject.cpp: + * kjs/JSGlobalObject.h: + * kjs/JSGlobalObjectFunctions.cpp: + * kjs/JSGlobalObjectFunctions.h: + * kjs/JSImmediate.cpp: + * kjs/JSImmediate.h: + * kjs/JSNotAnObject.cpp: + * kjs/JSNotAnObject.h: + * kjs/JSNumberCell.cpp: + * kjs/JSNumberCell.h: + * kjs/JSObject.cpp: + * kjs/JSObject.h: + * kjs/JSStaticScopeObject.cpp: + * kjs/JSStaticScopeObject.h: + * kjs/JSString.cpp: + * kjs/JSString.h: + * kjs/JSValue.h: + * kjs/JSVariableObject.h: + * kjs/JSWrapperObject.h: + * kjs/MathObject.cpp: + * kjs/MathObject.h: + * kjs/NativeErrorConstructor.cpp: + * kjs/NumberConstructor.cpp: + * kjs/NumberConstructor.h: + * kjs/NumberObject.cpp: + * kjs/NumberObject.h: + * kjs/NumberPrototype.cpp: + * kjs/ObjectConstructor.cpp: + * kjs/ObjectPrototype.cpp: + * kjs/ObjectPrototype.h: + * kjs/PropertyMap.h: + * kjs/PropertySlot.cpp: + * kjs/PropertySlot.h: + * kjs/RegExpConstructor.cpp: + * kjs/RegExpConstructor.h: + * kjs/RegExpMatchesArray.h: + * kjs/RegExpObject.cpp: + * kjs/RegExpObject.h: + * kjs/RegExpPrototype.cpp: + * kjs/Shell.cpp: + * kjs/StringConstructor.cpp: + * kjs/StringObject.cpp: + * kjs/StringObject.h: + * kjs/StringObjectThatMasqueradesAsUndefined.h: + * kjs/StringPrototype.cpp: + * kjs/StructureID.cpp: + * kjs/StructureID.h: + * kjs/collector.cpp: + * kjs/collector.h: + * kjs/completion.h: + * kjs/grammar.y: + * kjs/interpreter.cpp: + * kjs/interpreter.h: + * kjs/lookup.cpp: + * kjs/lookup.h: + * kjs/nodes.h: + * kjs/operations.cpp: + * kjs/operations.h: + * kjs/protect.h: + * profiler/ProfileGenerator.cpp: + * profiler/Profiler.cpp: + * profiler/Profiler.h: + Use JSValue* instead of JSValuePtr. + +2008-10-24 David Kilzer <ddkilzer@apple.com> + + Rolled out r37840. + + * wtf/Platform.h: + +2008-10-23 Greg Bolsinga <bolsinga@apple.com> + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=21475 + + Provide support for the Geolocation API + + http://dev.w3.org/geo/api/spec-source.html + + * wtf/Platform.h: ENABLE_GEOLOCATION defaults to 0 + +2008-10-23 David Kilzer <ddkilzer@apple.com> + + Bug 21832: Fix scripts using 'new File::Temp' for Perl 5.10 + + <https://bugs.webkit.org/show_bug.cgi?id=21832> + + Reviewed by Sam Weinig. + + * pcre/dftables: Use imported tempfile() from File::Temp instead of + 'new File::Temp' to make the script work with Perl 5.10. + +2008-10-23 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Fix hideous pathological case performance when looking up repatch info, bug #21727. + + When repatching JIT code to optimize we look up records providing information about + the generated code (also used to track recsources used in linking to be later released). + The lookup was being performed using a linear scan of all such records. + + (1) Split up the different types of reptach information. This means we can search them + separately, and in some cases should reduce their size. + (2) In the case of property accesses, search with a binary chop over the data. + (3) In the case of calls, pass a pointer to the repatch info into the relink function. + + * VM/CTI.cpp: + (JSC::CTI::CTI): + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::unlinkCall): + (JSC::CTI::linkCall): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + (JSC::CodeBlock::~CodeBlock): + (JSC::CodeBlock::unlinkCallers): + (JSC::CodeBlock::derefStructureIDs): + * VM/CodeBlock.h: + (JSC::StructureStubInfo::StructureStubInfo): + (JSC::CallLinkInfo::CallLinkInfo): + (JSC::CallLinkInfo::setUnlinked): + (JSC::CallLinkInfo::isLinked): + (JSC::getStructureStubInfoReturnLocation): + (JSC::binaryChop): + (JSC::CodeBlock::addCaller): + (JSC::CodeBlock::getStubInfo): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitResolve): + (JSC::CodeGenerator::emitGetById): + (JSC::CodeGenerator::emitPutById): + (JSC::CodeGenerator::emitCall): + (JSC::CodeGenerator::emitConstruct): + * VM/Machine.cpp: + (JSC::Machine::cti_vm_lazyLinkCall): + +2008-10-23 Peter Kasting <pkasting@google.com> + + Reviewed by Adam Roben. + + https://bugs.webkit.org/show_bug.cgi?id=21833 + Place JavaScript Debugger hooks under #if ENABLE(JAVASCRIPT_DEBUGGER). + + * wtf/Platform.h: + +2008-10-23 David Kilzer <ddkilzer@apple.com> + + Bug 21831: Fix create_hash_table for Perl 5.10 + + <https://bugs.webkit.org/show_bug.cgi?id=21831> + + Reviewed by Sam Weinig. + + * kjs/create_hash_table: Escaped square brackets so that Perl 5.10 + doesn't try to use @nameEntries. + +2008-10-23 Darin Adler <darin@apple.com> + + - roll out https://bugs.webkit.org/show_bug.cgi?id=21732 + to remove the JSValuePtr class, to fix two problems + + 1) slowness under MSVC, since it doesn't handle a + class with a single pointer in it as efficiently + as a pointer + + 2) uninitialized pointers in Vector + + * JavaScriptCore.exp: Updated. + + * API/APICast.h: + (toRef): + * VM/CTI.cpp: + (JSC::CTI::asInteger): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::addConstant): + * VM/CodeGenerator.h: + (JSC::CodeGenerator::JSValueHashTraits::constructDeletedValue): + (JSC::CodeGenerator::JSValueHashTraits::isDeletedValue): + * VM/Machine.cpp: + (JSC::Machine::cti_op_add): + (JSC::Machine::cti_op_pre_inc): + (JSC::Machine::cti_op_get_by_id): + (JSC::Machine::cti_op_get_by_id_second): + (JSC::Machine::cti_op_get_by_id_generic): + (JSC::Machine::cti_op_get_by_id_fail): + (JSC::Machine::cti_op_instanceof): + (JSC::Machine::cti_op_del_by_id): + (JSC::Machine::cti_op_mul): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_resolve): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_get_by_val): + (JSC::Machine::cti_op_sub): + (JSC::Machine::cti_op_lesseq): + (JSC::Machine::cti_op_negate): + (JSC::Machine::cti_op_resolve_base): + (JSC::Machine::cti_op_resolve_skip): + (JSC::Machine::cti_op_resolve_global): + (JSC::Machine::cti_op_div): + (JSC::Machine::cti_op_pre_dec): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_eq): + (JSC::Machine::cti_op_lshift): + (JSC::Machine::cti_op_bitand): + (JSC::Machine::cti_op_rshift): + (JSC::Machine::cti_op_bitnot): + (JSC::Machine::cti_op_mod): + (JSC::Machine::cti_op_less): + (JSC::Machine::cti_op_neq): + (JSC::Machine::cti_op_urshift): + (JSC::Machine::cti_op_bitxor): + (JSC::Machine::cti_op_bitor): + (JSC::Machine::cti_op_call_eval): + (JSC::Machine::cti_op_throw): + (JSC::Machine::cti_op_next_pname): + (JSC::Machine::cti_op_typeof): + (JSC::Machine::cti_op_is_undefined): + (JSC::Machine::cti_op_is_boolean): + (JSC::Machine::cti_op_is_number): + (JSC::Machine::cti_op_is_string): + (JSC::Machine::cti_op_is_object): + (JSC::Machine::cti_op_is_function): + (JSC::Machine::cti_op_stricteq): + (JSC::Machine::cti_op_nstricteq): + (JSC::Machine::cti_op_to_jsnumber): + (JSC::Machine::cti_op_in): + (JSC::Machine::cti_op_del_by_val): + (JSC::Machine::cti_vm_throw): + Removed calls to payload functions. + + * VM/Register.h: + (JSC::Register::Register): Removed overload for JSCell and call + to payload function. + + * kjs/JSCell.h: Changed JSCell to derive from JSValue again. + Removed JSValuePtr constructor. + (JSC::asCell): Changed cast from reinterpret_cast to static_cast. + + * kjs/JSImmediate.h: Removed JSValuePtr class. Added typedef back. + + * kjs/JSValue.h: + (JSC::JSValue::JSValue): Added empty protected inline constructor back. + (JSC::JSValue::~JSValue): Same for destructor. + Removed == and != operator for JSValuePtr. + + * kjs/PropertySlot.h: + (JSC::PropertySlot::PropertySlot): Chnaged argument to const JSValue* + and added a const_cast. + + * kjs/protect.h: Removed overloads and specialization for JSValuePtr. + +2008-10-22 Oliver Hunt <oliver@apple.com> + + Reviewed by Maciej Stachowiak. + + Really "fix" CTI mode on windows 2k3. + + This adds new methods fastMallocExecutable and fastFreeExecutable + to wrap allocation for cti code. This still just makes fastMalloc + return executable memory all the time, which will be fixed in a + later patch. + + However in windows debug builds all executable allocations will be + allocated on separate executable pages, which should resolve any + remaining 2k3 issues. Conveniently the 2k3 bot will now also fail + if there are any fastFree vs. fastFreeExecutable errors. + + * ChangeLog: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::~CodeBlock): + * kjs/regexp.cpp: + (JSC::RegExp::~RegExp): + * masm/X86Assembler.h: + (JSC::JITCodeBuffer::copy): + * wtf/FastMalloc.cpp: + (WTF::fastMallocExecutable): + (WTF::fastFreeExecutable): + (WTF::TCMallocStats::fastMallocExecutable): + (WTF::TCMallocStats::fastFreeExecutable): + * wtf/FastMalloc.h: + +2008-10-22 Darin Adler <darin@apple.com> + + Reviewed by Sam Weinig. + + - fix https://bugs.webkit.org/show_bug.cgi?id=21294 + Bug 21294: Devirtualize getOwnPropertySlot() + + A bit over 3% faster on V8 tests. + + * JavascriptCore.exp: Export leak-related functions.. + + * API/JSCallbackConstructor.h: + (JSC::JSCallbackConstructor::createStructureID): Set HasStandardGetOwnPropertySlot + since this class doesn't override getPropertySlot. + * API/JSCallbackFunction.h: + (JSC::JSCallbackFunction::createStructureID): Ditto. + + * VM/ExceptionHelpers.cpp: + (JSC::InterruptedExecutionError::InterruptedExecutionError): Use a structure + that's created just for this class instead of trying to share a single "null + prototype" structure. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_create_arguments_no_params): Rename + Arguments::ArgumentsNoParameters to Arguments::NoParameters. + + * kjs/Arguments.h: Rename the enum from Arguments::ArgumentsParameters to + Arguments::NoParametersType and the value from Arguments::ArgumentsNoParameters + to Arguments::NoParameters. + (JSC::Arguments::createStructureID): Added. Returns a structure without + HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. + (JSC::Arguments::Arguments): Added an assertion that there are no parameters. + + * kjs/DatePrototype.h: + (JSC::DatePrototype::createStructureID): Added. Returns a structure without + HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. + + * kjs/FunctionPrototype.h: + (JSC::FunctionPrototype::createStructureID): Set HasStandardGetOwnPropertySlot + since this class doesn't override getPropertySlot. + * kjs/InternalFunction.h: + (JSC::InternalFunction::createStructureID): Ditto. + + * kjs/JSArray.h: + (JSC::JSArray::createStructureID): Added. Returns a structure without + HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. + + * kjs/JSCell.h: Added declaration of fastGetOwnPropertySlot; a non-virtual + version that uses the structure bit to decide whether to call the virtual + version. + + * kjs/JSFunction.h: + (JSC::JSFunction::createStructureID): Added. Returns a structure without + HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. + + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Initialize new structures; removed + nullProtoStructureID. + * kjs/JSGlobalData.h: Added new structures. Removed nullProtoStructureID. + + * kjs/JSGlobalObject.h: + (JSC::JSGlobalObject::createStructureID): Added. Returns a structure without + HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. + + * kjs/JSNotAnObject.h: + (JSC::JSNotAnObjectErrorStub::JSNotAnObjectErrorStub): Use a structure + that's created just for this class instead of trying to share a single "null + prototype" structure. + (JSC::JSNotAnObjectErrorStub::isNotAnObjectErrorStub): Marked this function + virtual for clarity and made it private since no one should call it if they + already have a pointer to this specific type. + (JSC::JSNotAnObject::JSNotAnObject): Use a structure that's created just + for this class instead of trying to share a single "null prototype" structure. + (JSC::JSNotAnObject::createStructureID): Added. Returns a structure without + HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. + + * kjs/JSObject.h: + (JSC::JSObject::createStructureID): Added HasStandardGetOwnPropertySlot. + (JSC::JSObject::inlineGetOwnPropertySlot): Added. Used so we can share code + between getOwnPropertySlot and fastGetOwnPropertySlot. + (JSC::JSObject::getOwnPropertySlot): Moved so that functions are above the + functions that call them. Moved the guts of this function into + inlineGetOwnPropertySlot. + (JSC::JSCell::fastGetOwnPropertySlot): Added. Checks the + HasStandardGetOwnPropertySlot bit and if it's set, calls + inlineGetOwnPropertySlot, otherwise calls getOwnPropertySlot. + (JSC::JSObject::getPropertySlot): Changed to call fastGetOwnPropertySlot. + (JSC::JSValue::get): Changed to call fastGetOwnPropertySlot. + + * kjs/JSWrapperObject.h: Made constructor protected to emphasize that + this class is only a base class and never instantiated. + + * kjs/MathObject.h: + (JSC::MathObject::createStructureID): Added. Returns a structure without + HasStandardGetOwnPropertySlot since this class overrides getOwnPropertySlot. + * kjs/NumberConstructor.h: + (JSC::NumberConstructor::createStructureID): Ditto. + * kjs/RegExpConstructor.h: + (JSC::RegExpConstructor::createStructureID): Ditto. + * kjs/RegExpObject.h: + (JSC::RegExpObject::createStructureID): Ditto. + * kjs/StringObject.h: + (JSC::StringObject::createStructureID): Ditto. + + * kjs/TypeInfo.h: Added HasStandardGetOwnPropertySlot flag and + hasStandardGetOwnPropertySlot accessor function. + +2008-10-22 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Geoff Garen. + + Bug 21803: Fuse op_jfalse with op_eq_null and op_neq_null + <https://bugs.webkit.org/show_bug.cgi?id=21803> + + Fuse op_jfalse with op_eq_null and op_neq_null to make the new opcodes + op_jeq_null and op_jneq_null. + + This is a 2.6% speedup on the V8 Raytrace benchmark, and strangely also + a 4.7% speedup on the V8 Arguments benchmark, even though it uses + neither of the two new opcodes. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitJumpIfTrue): + (JSC::CodeGenerator::emitJumpIfFalse): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + * VM/Opcode.h: + +2008-10-22 Darin Fisher <darin@chromium.org> + + Reviewed by Eric Seidel. + + Should not define PLATFORM(WIN,MAC,GTK) when PLATFORM(CHROMIUM) is defined + https://bugs.webkit.org/show_bug.cgi?id=21757 + + PLATFORM(CHROMIUM) implies HAVE_ACCESSIBILITY + + * wtf/Platform.h: + +2008-10-22 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Alexey Proskuryakov. + + Correct opcode names in documentation. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + +2008-10-21 Oliver Hunt <oliver@apple.com> + + RS=Maciej Stachowiak. + + Force FastMalloc to make all allocated pages executable in + a vague hope this will allow the Win2k3 bot to be able to + run tests. + + Filed Bug 21783: Need more granular control over allocation of executable memory + to cover a more granular version of this patch. + + * wtf/TCSystemAlloc.cpp: + (TryVirtualAlloc): + +2008-10-21 Alexey Proskuryakov <ap@webkit.org> + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=21769 + MessagePort should be GC protected if there are messages to be delivered + + * wtf/MessageQueue.h: + (WTF::::isEmpty): Added. Also added a warning for methods that return a snapshot of queue + state, thus likely to cause race conditions. + +2008-10-21 Darin Adler <darin@apple.com> + + Reviewed by Maciej Stachowiak. + + - convert post-increment to pre-increment in a couple more places for speed + + Speeds up V8 benchmarks a little on most computers. (But, strangely, slows + them down a little on my computer.) + + * kjs/nodes.cpp: + (JSC::statementListEmitCode): Removed default argument, since we always want + to specify this explicitly. + (JSC::ForNode::emitCode): Tolerate ignoredResult() as the dst -- means the + same thing as 0. + (JSC::ReturnNode::emitCode): Ditto. + (JSC::ThrowNode::emitCode): Ditto. + (JSC::FunctionBodyNode::emitCode): Pass ignoredResult() so that we know we + don't have to compute the result of function statements. + +2008-10-21 Peter Kasting <pkasting@google.com> + + Reviewed by Maciej Stachowiak. + + Fix an include of a non-public header to use "" instead of <>. + + * API/JSProfilerPrivate.cpp: + +2008-10-20 Sam Weinig <sam@webkit.org> + + Reviewed by Cameron Zwarich. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=21766 + REGRESSION: 12 JSC tests fail + + The JSGlobalObject was mutating the shared nullProtoStructureID when + used in jsc. Instead of using nullProtoStructureID, use a new StructureID. + + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + (JSC::::JSCallbackObject): + * API/JSContextRef.cpp: + (JSGlobalContextCreateInGroup): + * kjs/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObject): + * kjs/Shell.cpp: + (GlobalObject::GlobalObject): + (jscmain): + +2008-10-20 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Maciej Stachowiak. + + Remove an untaken branch in CodeGenerator::emitJumpIfFalse(). This + function is never called with a backwards target LabelID, and there is + even an assertion to this effect at the top of the function body. + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitJumpIfFalse): + +2008-10-20 Cameron Zwarich <zwarich@apple.com> + + Rubber-stamped by Sam Weinig. + + Add opcode documentation for undocumented opcodes. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + +2008-10-16 Sam Weinig <sam@webkit.org> + + Reviewed by Cameron Zwarich. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=21683 + Don't create intermediate StructureIDs for builtin objects + + Second stage in reduce number of StructureIDs created when initializing the + JSGlobalObject. + + - Use putDirectWithoutTransition for the remaining singleton objects to reduce + the number of StructureIDs create for about:blank from 132 to 73. + + * kjs/ArrayConstructor.cpp: + (JSC::ArrayConstructor::ArrayConstructor): + * kjs/BooleanConstructor.cpp: + (JSC::BooleanConstructor::BooleanConstructor): + * kjs/BooleanPrototype.cpp: + (JSC::BooleanPrototype::BooleanPrototype): + * kjs/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + * kjs/ErrorConstructor.cpp: + (JSC::ErrorConstructor::ErrorConstructor): + * kjs/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + * kjs/FunctionConstructor.cpp: + (JSC::FunctionConstructor::FunctionConstructor): + * kjs/FunctionPrototype.cpp: + (JSC::FunctionPrototype::FunctionPrototype): + (JSC::FunctionPrototype::addFunctionProperties): + * kjs/FunctionPrototype.h: + (JSC::FunctionPrototype::createStructureID): + * kjs/InternalFunction.cpp: + * kjs/InternalFunction.h: + (JSC::InternalFunction::InternalFunction): + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + * kjs/JSObject.h: + * kjs/MathObject.cpp: + (JSC::MathObject::MathObject): + * kjs/NumberConstructor.cpp: + (JSC::NumberConstructor::NumberConstructor): + * kjs/NumberPrototype.cpp: + (JSC::NumberPrototype::NumberPrototype): + * kjs/ObjectConstructor.cpp: + (JSC::ObjectConstructor::ObjectConstructor): + * kjs/RegExpConstructor.cpp: + (JSC::RegExpConstructor::RegExpConstructor): + * kjs/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + * kjs/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + * kjs/StringPrototype.cpp: + (JSC::StringPrototype::StringPrototype): + * kjs/StructureID.cpp: + (JSC::StructureID::dumpStatistics): + * kjs/StructureID.h: + (JSC::StructureID::setPrototypeWithoutTransition): + +2008-10-20 Alp Toker <alp@nuanti.com> + + Fix autotools dist build target by listing recently added header + files only. Not reviewed. + + * GNUmakefile.am: + +2008-10-20 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Anders Carlsson. + + * VM/Machine.cpp: + (JSC::Machine::tryCacheGetByID): Removed a redundant and sometimes + incorrect cast, which started ASSERTing after Darin's last checkin. + +2008-10-20 Geoffrey Garen <ggaren@apple.com> + + Not reviewed. + + Re-enable CTI, which I accidentally disabled while checking in fixes + to bytecode. + + * wtf/Platform.h: + +2008-10-20 Alp Toker <alp@nuanti.com> + + Rubber-stamped by Mark Rowe. + + Typo fix in function name: mimimum -> minimum. + + * kjs/DateMath.cpp: + (JSC::minimumYearForDST): + (JSC::equivalentYearForDST): + +2008-10-20 Alp Toker <alp@nuanti.com> + + Reviewed by Mark Rowe. + + Use pthread instead of GThread where possible in the GTK+ port. This + fixes issues with global initialisation, particularly on GTK+/Win32 + where a late g_thread_init() will cause hangs. + + * GNUmakefile.am: + * wtf/Platform.h: + * wtf/Threading.h: + * wtf/ThreadingGtk.cpp: + * wtf/ThreadingPthreads.cpp: + +2008-10-20 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=21735 + Emit profiling instrumentation only if the Web Inspector's profiling + feature is enabled + + 22.2% speedup on empty function call benchmark. + 2.9% speedup on v8 benchmark. + 0.7% speedup on SunSpider. + + Lesser but similar speedups in bytecode. + + * VM/CTI.cpp: + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): Nixed JITed profiler hooks. Profiler + hooks now have their own opcodes. Added support for compiling profiler + hook opcodes. + + (JSC::CodeBlock::dump): Dump support for the new profiling opcodes. + + * VM/CodeGenerator.h: + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): + (JSC::CodeGenerator::emitCall): + (JSC::CodeGenerator::emitConstruct): Conditionally emit profiling hooks + around call and construct, at the call site. (It's easier to get things + right this way, if you have profiled code calling non-profiled code. + Also, you get a slightly more accurate profile, since you charge the full + cost of the call / construct operation to the callee.) + + Also, fixed a bug where construct would fetch the ".prototype" property + from the constructor before evaluating the arguments to the constructor, + incorrectly allowing an "invalid constructor" exception to short-circuit + argument evaluation. I encountered this bug when trying to make + constructor exceptions work with profiling. + + * VM/Machine.cpp: + (JSC::Machine::callEval): Removed obsolete profiler hooks. + + (JSC::Machine::throwException): Added a check for an exception thrown + within a call instruction. We didn't need this before because the call + instruction would check for a valid call before involing the profiler. + (JSC::Machine::execute): Added a didExecute hook at the end of top-level + function invocation, since op_ret no longer does this for us. + + (JSC::Machine::privateExecute): Removed obsolete profiler hooks. Added + profiler opcodes. Changed some ++vPC to vPC[x] notation, since the + latter is better for performance, and it makes reasoning about the + current opcode in exception handling much simpler. + + (JSC::Machine::cti_op_call_NotJSFunction): Removed obsolete profiler + hooks. + + (JSC::Machine::cti_op_create_arguments_no_params): Added missing + CTI_STACK_HACK that I noticed when adding CTI_STACK_HACK to the new + profiler opcode functions. + + (JSC::Machine::cti_op_profile_will_call): + (JSC::Machine::cti_op_profile_did_call): The new profiler opcode + functions. + + (JSC::Machine::cti_op_construct_NotJSConstruct): Removed obsolete profiler + hooks. + + * VM/Machine.h: + (JSC::Machine::isCallOpcode): Helper for exception handling. + + * VM/Opcode.h: Declare new opcodes. + + * kjs/JSGlobalObject.h: + (JSC::JSGlobalObject::supportsProfiling): Added virtual interface that + allows WebCore to specify whether the target global object has the Web + Inspector's profiling feature enabled. + + * profiler/Profiler.cpp: + (JSC::Profiler::willExecute): + (JSC::Profiler::didExecute): + (JSC::Profiler::createCallIdentifier): + * profiler/Profiler.h: Added support for invoking the profiler with + an arbitrary JSValue*, and not a known object. We didn't need this + before because the call instruction would check for a valid call before + involing the profiler. + +2008-10-20 Darin Adler <darin@apple.com> + + Reviewed by Geoff Garen. + + - get CTI working on Windows again + + * VM/CTI.cpp: + (JSC::CTI::emitCTICall): Add an overload for functions that + return JSObject*. + * VM/CTI.h: Use JSValue* and JSObject* as return types for + cti_op functions. Apparently, MSVC doesn't handle returning + the JSValuePtr struct in a register. We'll have to look into + this more. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_convert_this): + (JSC::Machine::cti_op_add): + (JSC::Machine::cti_op_pre_inc): + (JSC::Machine::cti_op_new_object): + (JSC::Machine::cti_op_get_by_id): + (JSC::Machine::cti_op_get_by_id_second): + (JSC::Machine::cti_op_get_by_id_generic): + (JSC::Machine::cti_op_get_by_id_fail): + (JSC::Machine::cti_op_instanceof): + (JSC::Machine::cti_op_del_by_id): + (JSC::Machine::cti_op_mul): + (JSC::Machine::cti_op_new_func): + (JSC::Machine::cti_op_push_activation): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_new_array): + (JSC::Machine::cti_op_resolve): + (JSC::Machine::cti_op_construct_JSConstructFast): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_get_by_val): + (JSC::Machine::cti_op_sub): + (JSC::Machine::cti_op_lesseq): + (JSC::Machine::cti_op_negate): + (JSC::Machine::cti_op_resolve_base): + (JSC::Machine::cti_op_resolve_skip): + (JSC::Machine::cti_op_resolve_global): + (JSC::Machine::cti_op_div): + (JSC::Machine::cti_op_pre_dec): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_eq): + (JSC::Machine::cti_op_lshift): + (JSC::Machine::cti_op_bitand): + (JSC::Machine::cti_op_rshift): + (JSC::Machine::cti_op_bitnot): + (JSC::Machine::cti_op_new_func_exp): + (JSC::Machine::cti_op_mod): + (JSC::Machine::cti_op_less): + (JSC::Machine::cti_op_neq): + (JSC::Machine::cti_op_urshift): + (JSC::Machine::cti_op_bitxor): + (JSC::Machine::cti_op_new_regexp): + (JSC::Machine::cti_op_bitor): + (JSC::Machine::cti_op_call_eval): + (JSC::Machine::cti_op_throw): + (JSC::Machine::cti_op_next_pname): + (JSC::Machine::cti_op_typeof): + (JSC::Machine::cti_op_is_undefined): + (JSC::Machine::cti_op_is_boolean): + (JSC::Machine::cti_op_is_number): + (JSC::Machine::cti_op_is_string): + (JSC::Machine::cti_op_is_object): + (JSC::Machine::cti_op_is_function): + (JSC::Machine::cti_op_stricteq): + (JSC::Machine::cti_op_nstricteq): + (JSC::Machine::cti_op_to_jsnumber): + (JSC::Machine::cti_op_in): + (JSC::Machine::cti_op_push_new_scope): + (JSC::Machine::cti_op_del_by_val): + (JSC::Machine::cti_op_new_error): + (JSC::Machine::cti_vm_throw): + Change these functions to return pointer types, and never + JSValuePtr. + * VM/Machine.h: Ditto. + +2008-10-20 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + Fixed some recent break-age in bytecode mode. + + * VM/CodeBlock.cpp: + (JSC::CodeBlock::printStructureIDs): Fixed up an ASSERT caused by + Gavin's last checkin. This is a temporary fix so I can keep on moving. + I'll send email about what I think is an underlying problem soon. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): Removed a redundant and sometimes + incorrect cast, which started ASSERTing after Darin's last checkin. + +2008-10-20 Darin Adler <darin@apple.com> + + - another similar Windows build fix + + * VM/CTI.cpp: Changed return type to JSObject* instead of JSValuePtr. + +2008-10-20 Darin Adler <darin@apple.com> + + - try to fix Windows build + + * VM/CTI.cpp: Use JSValue* instead of JSValuePtr for ctiTrampoline. + * VM/CTI.h: Ditto. + +2008-10-19 Darin Adler <darin@apple.com> + + Reviewed by Cameron Zwarich. + + - finish https://bugs.webkit.org/show_bug.cgi?id=21732 + improve performance by eliminating JSValue as a base class for JSCell + + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_profiler): Use asFunction. + (JSC::Machine::cti_vm_lazyLinkCall): Ditto. + (JSC::Machine::cti_op_construct_JSConstructFast): Use asObject. + + * kjs/JSCell.h: Re-sort friend classes. Eliminate inheritance from + JSValue. Changed cast in asCell from static_cast to reinterpret_cast. + Removed JSValue::getNumber(double&) and one of JSValue::getObject + overloads. + + * kjs/JSValue.h: Made the private constructor and destructor both + non-virtual and also remove the definitions. This class can never + be instantiated or derived. + +2008-10-19 Darin Adler <darin@apple.com> + + Reviewed by Cameron Zwarich. + + - next step of https://bugs.webkit.org/show_bug.cgi?id=21732 + improve performance by eliminating JSValue as a base class for JSCell + + Change JSValuePtr from a typedef into a class. This allows us to support + conversion from JSCell* to JSValuePtr even if JSCell isn't derived from + JSValue. + + * JavaScriptCore.exp: Updated symbols that involve JSValuePtr, since + it's now a distinct type. + + * API/APICast.h: + (toRef): Extract the JSValuePtr payload explicitly since we can't just + cast any more. + * VM/CTI.cpp: + (JSC::CTI::asInteger): Ditto. + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::addConstant): Get at the payload directly. + (JSC::CodeGenerator::emitLoad): Added an overload of JSCell* because + otherwise classes derived from JSValue end up calling the bool + overload instead of JSValuePtr. + * VM/CodeGenerator.h: Ditto. Also update traits to use JSValue* + and the payload functions. + + * VM/Register.h: Added a JSCell* overload and use of payload functions. + + * kjs/JSCell.h: + (JSC::asCell): Use payload function. + (JSC::JSValue::asCell): Use JSValue* instead of JSValuePtr. + (JSC::JSValuePtr::JSValuePtr): Added. Constructor that takes JSCell* + and creates a JSValuePtr. + + * kjs/JSImmediate.h: Added JSValuePtr class. Also updated makeValue + and makeInt to work with JSValue* and the payload function. + + * kjs/JSValue.h: Added == and != operators for JSValuePtr. Put them + here because eventually all the JSValue functions should go here + except what's needed by JSImmediate. Also fix asValue to use + JSValue* instead of JSValuePtr. + + * kjs/PropertySlot.h: Change constructor to take JSValuePtr. + + * kjs/protect.h: Update gcProtect functions to work with JSCell* + as well as JSValuePtr. Also updated the ProtectedPtr<JSValuePtr> + specialization to work more directly. Also changed all the call + sites to use gcProtectNullTolerant. + +2008-10-19 Darin Adler <darin@apple.com> + + Reviewed by Oliver Hunt. + + - next step of https://bugs.webkit.org/show_bug.cgi?id=21732 + improve performance by eliminating JSValue as a base class for JSCell + + Remove most uses of JSValue, which will be removed in a future patch. + + * VM/Machine.cpp: + (JSC::fastToUInt32): Call toUInt32SlowCase function; no longer a member + of JSValue. + * kjs/JSNumberCell.h: + (JSC::JSNumberCell::toInt32): Ditto. + (JSC::JSNumberCell::toUInt32): Ditto. + + * kjs/JSValue.cpp: + (JSC::toInt32SlowCase): Made a non-member function. + (JSC::JSValue::toInt32SlowCase): Changed to call non-member function. + (JSC::toUInt32SlowCase): More of the same. + (JSC::JSValue::toUInt32SlowCase): Ditto. + + * kjs/JSValue.h: Moved static member function so they are no longer + member functions at all. + + * VM/CTI.h: Removed forward declaration of JSValue. + * VM/ExceptionHelpers.h: Ditto. + * kjs/CallData.h: Ditto. + * kjs/ConstructData.h: Ditto. + * kjs/JSGlobalObjectFunctions.h: Ditto. + * kjs/PropertyMap.h: Ditto. + * kjs/StructureID.h: Ditto. + * kjs/collector.h: Ditto. + * kjs/completion.h: Ditto. + + * kjs/grammar.y: + (JSC::makeBitwiseNotNode): Call new non-member toInt32 function. + (JSC::makeLeftShiftNode): More of the same. + (JSC::makeRightShiftNode): Ditto. + + * kjs/protect.h: Added a specialization for ProtectedPtr<JSValuePtr> + so this can be used with JSValuePtr. + +2008-10-18 Darin Adler <darin@apple.com> + + Reviewed by Oliver Hunt. + + - next step of https://bugs.webkit.org/show_bug.cgi?id=21732 + improve performance by eliminating JSValue as a base class for JSCell + + Tweak a little more to get closer to where we can make JSValuePtr a class. + + * API/APICast.h: + (toJS): Change back to JSValue* here, since we're converting the + pointer type. + * VM/CTI.cpp: + (JSC::CTI::unlinkCall): Call asPointer. + * VM/CTI.h: Cast to JSValue* here, since it's a pointer cast. + * kjs/DebuggerCallFrame.h: + (JSC::DebuggerCallFrame::DebuggerCallFrame): Call noValue. + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Call noValue. + * kjs/JSImmediate.cpp: + (JSC::JSImmediate::toObject): Remove unneeded const_cast. + * kjs/JSWrapperObject.h: + (JSC::JSWrapperObject::JSWrapperObject): Call noValue. + +2008-10-18 Darin Adler <darin@apple.com> + + - fix non-all-in-one build + + * kjs/completion.h: + (JSC::Completion::Completion): Add include of JSValue.h. + +2008-10-18 Darin Adler <darin@apple.com> + + Reviewed by Oliver Hunt. + + - fix assertions I introduced with my casting changes + + These were showing up as failures in the JavaScriptCore tests. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_instanceof): Remove the bogus asCell casting that + was at the top of the function, and instead cast at the point of use. + (JSC::Machine::cti_op_construct_NotJSConstruct): Moved the cast to + object after checking the construct type. + +2008-10-18 Darin Adler <darin@apple.com> + + - fix non-all-in-one build + + * kjs/JSGlobalObjectFunctions.h: Add include of JSImmedate.h (for now). + +2008-10-18 Darin Adler <darin@apple.com> + + - fix build + + * kjs/interpreter.h: Include JSValue.h instead of JSImmediate.h. + +2008-10-18 Darin Adler <darin@apple.com> + + * kjs/interpreter.h: Fix include of JSImmediate.h. + +2008-10-18 Darin Adler <darin@apple.com> + + - fix non-all-in-one build + + * kjs/interpreter.h: Add include of JSImmediate.h. + +2008-10-18 Darin Adler <darin@apple.com> + + - fix non-all-in-one build + + * kjs/ConstructData.h: Add include of JSImmedate.h (for now). + +2008-10-18 Darin Adler <darin@apple.com> + + - try to fix Windows build + + * VM/Machine.cpp: + (JSC::Machine::Machine): Use JSCell* type since MSVC seems to only allow + calling ~JSCell directly if it's a JSCell*. + +2008-10-18 Darin Adler <darin@apple.com> + + Reviewed by Cameron Zwarich. + + - next step on https://bugs.webkit.org/show_bug.cgi?id=21732 + improve performance by eliminating JSValue as a base class for JSCell + + Use JSValuePtr everywhere instead of JSValue*. In the future, we'll be + changing JSValuePtr to be a class, and then eventually renaming it + to JSValue once that's done. + + * JavaScriptCore.exp: Update entry points, since some now take JSValue* + instead of const JSValue*. + + * API/APICast.h: + * API/JSCallbackConstructor.h: + * API/JSCallbackFunction.cpp: + * API/JSCallbackFunction.h: + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + * API/JSContextRef.cpp: + * API/JSObjectRef.cpp: + * API/JSValueRef.cpp: + * VM/CTI.cpp: + * VM/CTI.h: + * VM/CodeBlock.cpp: + * VM/CodeBlock.h: + * VM/CodeGenerator.cpp: + * VM/CodeGenerator.h: + * VM/ExceptionHelpers.cpp: + * VM/ExceptionHelpers.h: + * VM/JSPropertyNameIterator.cpp: + * VM/JSPropertyNameIterator.h: + * VM/Machine.cpp: + * VM/Machine.h: + * VM/Register.h: + * kjs/ArgList.cpp: + * kjs/ArgList.h: + * kjs/Arguments.cpp: + * kjs/Arguments.h: + * kjs/ArrayConstructor.cpp: + * kjs/ArrayPrototype.cpp: + * kjs/BooleanConstructor.cpp: + * kjs/BooleanConstructor.h: + * kjs/BooleanObject.h: + * kjs/BooleanPrototype.cpp: + * kjs/CallData.cpp: + * kjs/CallData.h: + * kjs/ConstructData.cpp: + * kjs/ConstructData.h: + * kjs/DateConstructor.cpp: + * kjs/DateInstance.h: + * kjs/DatePrototype.cpp: + * kjs/DebuggerCallFrame.cpp: + * kjs/DebuggerCallFrame.h: + * kjs/ErrorConstructor.cpp: + * kjs/ErrorPrototype.cpp: + * kjs/ExecState.cpp: + * kjs/ExecState.h: + * kjs/FunctionConstructor.cpp: + * kjs/FunctionPrototype.cpp: + * kjs/GetterSetter.cpp: + * kjs/GetterSetter.h: + * kjs/InternalFunction.h: + * kjs/JSActivation.cpp: + * kjs/JSActivation.h: + * kjs/JSArray.cpp: + * kjs/JSArray.h: + * kjs/JSCell.cpp: + * kjs/JSCell.h: + * kjs/JSFunction.cpp: + * kjs/JSFunction.h: + * kjs/JSGlobalData.h: + * kjs/JSGlobalObject.cpp: + * kjs/JSGlobalObject.h: + * kjs/JSGlobalObjectFunctions.cpp: + * kjs/JSGlobalObjectFunctions.h: + * kjs/JSImmediate.cpp: + * kjs/JSImmediate.h: + * kjs/JSNotAnObject.cpp: + * kjs/JSNotAnObject.h: + * kjs/JSNumberCell.cpp: + * kjs/JSNumberCell.h: + * kjs/JSObject.cpp: + * kjs/JSObject.h: + * kjs/JSStaticScopeObject.cpp: + * kjs/JSStaticScopeObject.h: + * kjs/JSString.cpp: + * kjs/JSString.h: + * kjs/JSValue.h: + * kjs/JSVariableObject.h: + * kjs/JSWrapperObject.h: + * kjs/MathObject.cpp: + * kjs/NativeErrorConstructor.cpp: + * kjs/NumberConstructor.cpp: + * kjs/NumberConstructor.h: + * kjs/NumberObject.cpp: + * kjs/NumberObject.h: + * kjs/NumberPrototype.cpp: + * kjs/ObjectConstructor.cpp: + * kjs/ObjectPrototype.cpp: + * kjs/ObjectPrototype.h: + * kjs/PropertyMap.h: + * kjs/PropertySlot.cpp: + * kjs/PropertySlot.h: + * kjs/RegExpConstructor.cpp: + * kjs/RegExpConstructor.h: + * kjs/RegExpMatchesArray.h: + * kjs/RegExpObject.cpp: + * kjs/RegExpObject.h: + * kjs/RegExpPrototype.cpp: + * kjs/Shell.cpp: + * kjs/StringConstructor.cpp: + * kjs/StringObject.cpp: + * kjs/StringObject.h: + * kjs/StringObjectThatMasqueradesAsUndefined.h: + * kjs/StringPrototype.cpp: + * kjs/StructureID.cpp: + * kjs/StructureID.h: + * kjs/collector.cpp: + * kjs/collector.h: + * kjs/completion.h: + * kjs/grammar.y: + * kjs/interpreter.cpp: + * kjs/interpreter.h: + * kjs/lookup.cpp: + * kjs/lookup.h: + * kjs/nodes.h: + * kjs/operations.cpp: + * kjs/operations.h: + * kjs/protect.h: + * profiler/ProfileGenerator.cpp: + Replace JSValue* with JSValuePtr. + +2008-10-18 Darin Adler <darin@apple.com> + + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_eval): Removed stray parentheses from my + last check-in. + +2008-10-18 Darin Adler <darin@apple.com> + + Reviewed by Oliver Hunt. + + - first step of https://bugs.webkit.org/show_bug.cgi?id=21732 + improve performance by eliminating JSValue as a base class for JSCell + + Remove casts from JSValue* to derived classes, replacing them with + calls to inline casting functions. These functions are also a bit + better than aidrect cast because they also do a runtime assertion. + + Removed use of 0 as for JSValue*, changing call sites to use a + noValue() function instead. + + Move things needed by classes derived from JSValue out of the class, + since the classes won't be deriving from JSValue any more soon. + + I did most of these changes by changing JSValue to not be JSValue* any + more, then fixing a lot of the compilation problems, then rolling out + the JSValue change. + + 1.011x as fast on SunSpider (presumably due to some of the Machine.cpp changes) + + * API/APICast.h: Removed unneeded forward declarations. + + * API/JSCallbackObject.h: Added an asCallbackObject function for casting. + * API/JSCallbackObjectFunctions.h: + (JSC::JSCallbackObject::asCallbackObject): Added. + (JSC::JSCallbackObject::getOwnPropertySlot): Use asObject. + (JSC::JSCallbackObject::call): Use noValue. + (JSC::JSCallbackObject::staticValueGetter): Use asCallbackObject. + (JSC::JSCallbackObject::staticFunctionGetter): Ditto. + (JSC::JSCallbackObject::callbackGetter): Ditto. + + * JavaScriptCore.exp: Updated. + + * JavaScriptCore.xcodeproj/project.pbxproj: Added RegExpMatchesArray.h. + + * VM/CTI.cpp: + (JSC::CTI::asInteger): Added. For use casting a JSValue to an integer. + (JSC::CTI::emitGetArg): Use asInteger. + (JSC::CTI::emitGetPutArg): Ditto. + (JSC::CTI::getConstantImmediateNumericArg): Ditto. Also use noValue. + (JSC::CTI::emitInitRegister): Use asInteger. + (JSC::CTI::getDeTaggedConstantImmediate): Ditto. + (JSC::CTI::compileOpCallInitializeCallFrame): Ditto. + (JSC::CTI::compileOpCall): Ditto. + (JSC::CTI::compileOpStrictEq): Ditto. + (JSC::CTI::privateCompileMainPass): Ditto. + (JSC::CTI::privateCompileGetByIdProto): Ditto. + (JSC::CTI::privateCompileGetByIdChain): Ditto. + (JSC::CTI::privateCompilePutByIdTransition): Ditto. + * VM/CTI.h: Rewrite the ARG-related macros to use C++ casts instead of + C casts and get rid of some extra parentheses. Addd declaration of + asInteger. + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitEqualityOp): Use asString. + (JSC::CodeGenerator::emitLoad): Use noValue. + (JSC::CodeGenerator::findScopedProperty): Change globalObject argument + to JSObject* instead of JSValue*. + (JSC::CodeGenerator::emitResolve): Remove unneeded cast. + (JSC::CodeGenerator::emitGetScopedVar): Use asCell. + (JSC::CodeGenerator::emitPutScopedVar): Ditto. + * VM/CodeGenerator.h: Changed out argument of findScopedProperty. + Also change the JSValueMap to use PtrHash explicitly instead of + getting it from DefaultHash. + + * VM/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::toPrimitive): Use noValue. + * VM/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::next): Ditto. + + * VM/Machine.cpp: + (JSC::fastIsNumber): Moved isImmediate check here instead of + checking for 0 inside Heap::isNumber. Use asCell and asNumberCell. + (JSC::fastToInt32): Ditto. + (JSC::fastToUInt32): Ditto. + (JSC::jsLess): Use asString. + (JSC::jsLessEq): Ditto. + (JSC::jsAdd): Ditto. + (JSC::jsTypeStringForValue): Use asObject. + (JSC::jsIsObjectType): Ditto. + (JSC::jsIsFunctionType): Ditto. + (JSC::inlineResolveBase): Use noValue. + (JSC::Machine::callEval): Use asString. Initialize result to + undefined, not 0. + (JSC::Machine::Machine): Remove unneeded casts to JSCell*. + (JSC::Machine::throwException): Use asObject. + (JSC::Machine::debug): Remove explicit calls to the DebuggerCallFrame + constructor. + (JSC::Machine::checkTimeout): Use noValue. + (JSC::cachePrototypeChain): Use asObject. + (JSC::Machine::tryCachePutByID): Use asCell. + (JSC::Machine::tryCacheGetByID): Use aCell and asObject. + (JSC::Machine::privateExecute): Use noValue, asCell, asObject, asString, + asArray, asActivation, asFunction. Changed code that creates call frames + for host functions to pass 0 for the function pointer -- the call frame + needs a JSFunction* and a host function object is not one. This was + caught by the assertions in the casting functions. Also remove some + unneeded casts in cases where two values are compared. + (JSC::Machine::retrieveLastCaller): Use noValue. + (JSC::Machine::tryCTICachePutByID): Use asCell. + (JSC::Machine::tryCTICacheGetByID): Use aCell and asObject. + (JSC::setUpThrowTrampolineReturnAddress): Added this function to restore + the PIC-branch-avoidance that was recently lost. + (JSC::Machine::cti_op_add): Use asString. + (JSC::Machine::cti_op_instanceof): Use asCell and asObject. + (JSC::Machine::cti_op_call_JSFunction): Use asFunction. + (JSC::Machine::cti_op_call_NotJSFunction): Changed code to pass 0 for + the function pointer, since we don't have a JSFunction. Use asObject. + (JSC::Machine::cti_op_tear_off_activation): Use asActivation. + (JSC::Machine::cti_op_construct_JSConstruct): Use asFunction and asObject. + (JSC::Machine::cti_op_construct_NotJSConstruct): use asObject. + (JSC::Machine::cti_op_get_by_val): Use asArray and asString. + (JSC::Machine::cti_op_resolve_func): Use asPointer; this helps prepare + us for a situation where JSValue is not a pointer. + (JSC::Machine::cti_op_put_by_val): Use asArray. + (JSC::Machine::cti_op_put_by_val_array): Ditto. + (JSC::Machine::cti_op_resolve_global): Use asGlobalObject. + (JSC::Machine::cti_op_post_inc): Change VM_CHECK_EXCEPTION_2 to + VM_CHECK_EXCEPTION_AT_END, since there's no observable work done after + that point. Also use asPointer. + (JSC::Machine::cti_op_resolve_with_base): Use asPointer. + (JSC::Machine::cti_op_post_dec): Change VM_CHECK_EXCEPTION_2 to + VM_CHECK_EXCEPTION_AT_END, since there's no observable work done after + that point. Also use asPointer. + (JSC::Machine::cti_op_call_eval): Use asObject, noValue, and change + VM_CHECK_EXCEPTION_ARG to VM_THROW_EXCEPTION_AT_END. + (JSC::Machine::cti_op_throw): Change return value to a JSValue*. + (JSC::Machine::cti_op_in): Use asObject. + (JSC::Machine::cti_op_switch_char): Use asString. + (JSC::Machine::cti_op_switch_string): Ditto. + (JSC::Machine::cti_op_put_getter): Use asObject. + (JSC::Machine::cti_op_put_setter): Ditto. + (JSC::Machine::cti_vm_throw): Change return value to a JSValue*. + Use noValue. + * VM/Machine.h: Change return values of both cti_op_throw and + cti_vm_throw to JSValue*. + + * VM/Register.h: Remove nullJSValue, which is the same thing + as noValue(). Also removed unneeded definition of JSValue. + + * kjs/ArgList.h: Removed unneeded definition of JSValue. + + * kjs/Arguments.h: + (JSC::asArguments): Added. + + * kjs/ArrayPrototype.cpp: + (JSC::getProperty): Use noValue. + (JSC::arrayProtoFuncToString): Use asArray. + (JSC::arrayProtoFuncToLocaleString): Ditto. + (JSC::arrayProtoFuncConcat): Ditto. + (JSC::arrayProtoFuncPop): Ditto. Also removed unneeded initialization + of the result, which is set in both sides of the branch. + (JSC::arrayProtoFuncPush): Ditto. + (JSC::arrayProtoFuncShift): Removed unneeded initialization + of the result, which is set in both sides of the branch. + (JSC::arrayProtoFuncSort): Use asArray. + + * kjs/BooleanObject.h: + (JSC::asBooleanObject): Added. + + * kjs/BooleanPrototype.cpp: + (JSC::booleanProtoFuncToString): Use asBooleanObject. + (JSC::booleanProtoFuncValueOf): Ditto. + + * kjs/CallData.cpp: + (JSC::call): Use asObject and asFunction. + * kjs/ConstructData.cpp: + (JSC::construct): Ditto. + + * kjs/DateConstructor.cpp: + (JSC::constructDate): Use asDateInstance. + + * kjs/DateInstance.h: + (JSC::asDateInstance): Added. + + * kjs/DatePrototype.cpp: + (JSC::dateProtoFuncToString): Use asDateInstance. + (JSC::dateProtoFuncToUTCString): Ditto. + (JSC::dateProtoFuncToDateString): Ditto. + (JSC::dateProtoFuncToTimeString): Ditto. + (JSC::dateProtoFuncToLocaleString): Ditto. + (JSC::dateProtoFuncToLocaleDateString): Ditto. + (JSC::dateProtoFuncToLocaleTimeString): Ditto. + (JSC::dateProtoFuncValueOf): Ditto. + (JSC::dateProtoFuncGetTime): Ditto. + (JSC::dateProtoFuncGetFullYear): Ditto. + (JSC::dateProtoFuncGetUTCFullYear): Ditto. + (JSC::dateProtoFuncToGMTString): Ditto. + (JSC::dateProtoFuncGetMonth): Ditto. + (JSC::dateProtoFuncGetUTCMonth): Ditto. + (JSC::dateProtoFuncGetDate): Ditto. + (JSC::dateProtoFuncGetUTCDate): Ditto. + (JSC::dateProtoFuncGetDay): Ditto. + (JSC::dateProtoFuncGetUTCDay): Ditto. + (JSC::dateProtoFuncGetHours): Ditto. + (JSC::dateProtoFuncGetUTCHours): Ditto. + (JSC::dateProtoFuncGetMinutes): Ditto. + (JSC::dateProtoFuncGetUTCMinutes): Ditto. + (JSC::dateProtoFuncGetSeconds): Ditto. + (JSC::dateProtoFuncGetUTCSeconds): Ditto. + (JSC::dateProtoFuncGetMilliSeconds): Ditto. + (JSC::dateProtoFuncGetUTCMilliseconds): Ditto. + (JSC::dateProtoFuncGetTimezoneOffset): Ditto. + (JSC::dateProtoFuncSetTime): Ditto. + (JSC::setNewValueFromTimeArgs): Ditto. + (JSC::setNewValueFromDateArgs): Ditto. + (JSC::dateProtoFuncSetYear): Ditto. + (JSC::dateProtoFuncGetYear): Ditto. + + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::thisObject): Use asObject. + (JSC::DebuggerCallFrame::evaluate): Use noValue. + * kjs/DebuggerCallFrame.h: Added a constructor that + takes only a callFrame. + + * kjs/ExecState.h: + (JSC::ExecState::clearException): Use noValue. + + * kjs/FunctionPrototype.cpp: + (JSC::functionProtoFuncToString): Use asFunction. + (JSC::functionProtoFuncApply): Use asArguments and asArray. + + * kjs/GetterSetter.cpp: + (JSC::GetterSetter::getPrimitiveNumber): Use noValue. + + * kjs/GetterSetter.h: + (JSC::asGetterSetter): Added. + + * kjs/InternalFunction.cpp: + (JSC::InternalFunction::name): Use asString. + + * kjs/InternalFunction.h: + (JSC::asInternalFunction): Added. + + * kjs/JSActivation.cpp: + (JSC::JSActivation::argumentsGetter): Use asActivation. + + * kjs/JSActivation.h: + (JSC::asActivation): Added. + + * kjs/JSArray.cpp: + (JSC::JSArray::putSlowCase): Use noValue. + (JSC::JSArray::deleteProperty): Ditto. + (JSC::JSArray::increaseVectorLength): Ditto. + (JSC::JSArray::setLength): Ditto. + (JSC::JSArray::pop): Ditto. + (JSC::JSArray::sort): Ditto. + (JSC::JSArray::compactForSorting): Ditto. + * kjs/JSArray.h: + (JSC::asArray): Added. + + * kjs/JSCell.cpp: + (JSC::JSCell::getJSNumber): Use noValue. + + * kjs/JSCell.h: + (JSC::asCell): Added. + (JSC::JSValue::asCell): Changed to not preserve const. + Given the wide use of JSValue* and JSCell*, it's not + really useful to use const. + (JSC::JSValue::isNumber): Use asValue. + (JSC::JSValue::isString): Ditto. + (JSC::JSValue::isGetterSetter): Ditto. + (JSC::JSValue::isObject): Ditto. + (JSC::JSValue::getNumber): Ditto. + (JSC::JSValue::getString): Ditto. + (JSC::JSValue::getObject): Ditto. + (JSC::JSValue::getCallData): Ditto. + (JSC::JSValue::getConstructData): Ditto. + (JSC::JSValue::getUInt32): Ditto. + (JSC::JSValue::getTruncatedInt32): Ditto. + (JSC::JSValue::getTruncatedUInt32): Ditto. + (JSC::JSValue::mark): Ditto. + (JSC::JSValue::marked): Ditto. + (JSC::JSValue::toPrimitive): Ditto. + (JSC::JSValue::getPrimitiveNumber): Ditto. + (JSC::JSValue::toBoolean): Ditto. + (JSC::JSValue::toNumber): Ditto. + (JSC::JSValue::toString): Ditto. + (JSC::JSValue::toObject): Ditto. + (JSC::JSValue::toThisObject): Ditto. + (JSC::JSValue::needsThisConversion): Ditto. + (JSC::JSValue::toThisString): Ditto. + (JSC::JSValue::getJSNumber): Ditto. + + * kjs/JSFunction.cpp: + (JSC::JSFunction::argumentsGetter): Use asFunction. + (JSC::JSFunction::callerGetter): Ditto. + (JSC::JSFunction::lengthGetter): Ditto. + (JSC::JSFunction::construct): Use asObject. + + * kjs/JSFunction.h: + (JSC::asFunction): Added. + + * kjs/JSGlobalObject.cpp: + (JSC::lastInPrototypeChain): Use asObject. + + * kjs/JSGlobalObject.h: + (JSC::asGlobalObject): Added. + (JSC::ScopeChainNode::globalObject): Use asGlobalObject. + + * kjs/JSImmediate.h: Added noValue, asPointer, and makeValue + functions. Use rawValue, makeValue, and noValue consistently + instead of doing reinterpret_cast in various functions. + + * kjs/JSNumberCell.h: + (JSC::asNumberCell): Added. + (JSC::JSValue::uncheckedGetNumber): Use asValue and asNumberCell. + (JSC::JSValue::toJSNumber): Use asValue. + + * kjs/JSObject.cpp: + (JSC::JSObject::put): Use asObject and asGetterSetter. + (JSC::callDefaultValueFunction): Use noValue. + (JSC::JSObject::defineGetter): Use asGetterSetter. + (JSC::JSObject::defineSetter): Ditto. + (JSC::JSObject::lookupGetter): Ditto. Also use asObject. + (JSC::JSObject::lookupSetter): Ditto. + (JSC::JSObject::hasInstance): Use asObject. + (JSC::JSObject::fillGetterPropertySlot): Use asGetterSetter. + + * kjs/JSObject.h: + (JSC::JSObject::getDirect): Use noValue. + (JSC::asObject): Added. + (JSC::JSValue::isObject): Use asValue. + (JSC::JSObject::get): Removed unneeded const_cast. + (JSC::JSObject::getPropertySlot): Use asObject. + (JSC::JSValue::get): Removed unneeded const_cast. + Use asValue, asCell, and asObject. + (JSC::JSValue::put): Ditto. + (JSC::JSObject::allocatePropertyStorageInline): Fixed spelling + of "oldPropertStorage". + + * kjs/JSString.cpp: + (JSC::JSString::getOwnPropertySlot): Use asObject. + + * kjs/JSString.h: + (JSC::asString): Added. + (JSC::JSValue::toThisJSString): Use asValue. + + * kjs/JSValue.h: Make PreferredPrimitiveType a top level enum + instead of a member of JSValue. Added an asValue function that + returns this. Removed overload of asCell for const. Use asValue + instead of getting right at this. + + * kjs/ObjectPrototype.cpp: + (JSC::objectProtoFuncIsPrototypeOf): Use asObject. + (JSC::objectProtoFuncDefineGetter): Ditto. + (JSC::objectProtoFuncDefineSetter): Ditto. + + * kjs/PropertySlot.h: + (JSC::PropertySlot::PropertySlot): Take a const JSValue* so the + callers don't have to worry about const. + (JSC::PropertySlot::clearBase): Use noValue. + (JSC::PropertySlot::clearValue): Ditto. + + * kjs/RegExpConstructor.cpp: + (JSC::regExpConstructorDollar1): Use asRegExpConstructor. + (JSC::regExpConstructorDollar2): Ditto. + (JSC::regExpConstructorDollar3): Ditto. + (JSC::regExpConstructorDollar4): Ditto. + (JSC::regExpConstructorDollar5): Ditto. + (JSC::regExpConstructorDollar6): Ditto. + (JSC::regExpConstructorDollar7): Ditto. + (JSC::regExpConstructorDollar8): Ditto. + (JSC::regExpConstructorDollar9): Ditto. + (JSC::regExpConstructorInput): Ditto. + (JSC::regExpConstructorMultiline): Ditto. + (JSC::regExpConstructorLastMatch): Ditto. + (JSC::regExpConstructorLastParen): Ditto. + (JSC::regExpConstructorLeftContext): Ditto. + (JSC::regExpConstructorRightContext): Ditto. + (JSC::setRegExpConstructorInput): Ditto. + (JSC::setRegExpConstructorMultiline): Ditto. + (JSC::constructRegExp): Use asObject. + + * kjs/RegExpConstructor.h: + (JSC::asRegExpConstructor): Added. + + * kjs/RegExpObject.cpp: + (JSC::regExpObjectGlobal): Use asRegExpObject. + (JSC::regExpObjectIgnoreCase): Ditto. + (JSC::regExpObjectMultiline): Ditto. + (JSC::regExpObjectSource): Ditto. + (JSC::regExpObjectLastIndex): Ditto. + (JSC::setRegExpObjectLastIndex): Ditto. + (JSC::callRegExpObject): Ditto. + + * kjs/RegExpObject.h: + (JSC::asRegExpObject): Added. + + * kjs/RegExpPrototype.cpp: + (JSC::regExpProtoFuncTest): Use asRegExpObject. + (JSC::regExpProtoFuncExec): Ditto. + (JSC::regExpProtoFuncCompile): Ditto. + (JSC::regExpProtoFuncToString): Ditto. + + * kjs/StringObject.h: + (JSC::StringObject::internalValue): Use asString. + (JSC::asStringObject): Added. + + * kjs/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): Use asRegExpObject. + (JSC::stringProtoFuncToString): Ue asStringObject. + (JSC::stringProtoFuncMatch): Use asRegExpObject. + (JSC::stringProtoFuncSearch): Ditto. + (JSC::stringProtoFuncSplit): Ditto. + + * kjs/StructureID.cpp: + (JSC::StructureID::getEnumerablePropertyNames): Use asObject. + (JSC::StructureID::createCachedPrototypeChain): Ditto. + (JSC::StructureIDChain::StructureIDChain): Use asCell and asObject. + + * kjs/collector.h: + (JSC::Heap::isNumber): Removed null handling. This can only be called + on valid cells. + (JSC::Heap::cellBlock): Removed overload for const and non-const. + Whether the JSCell* is const or not really should have no effect on + whether you can modify the collector block it's in. + + * kjs/interpreter.cpp: + (JSC::Interpreter::evaluate): Use noValue and noObject. + + * kjs/nodes.cpp: + (JSC::FunctionCallResolveNode::emitCode): Use JSObject for the global + object rather than JSValue. + (JSC::PostfixResolveNode::emitCode): Ditto. + (JSC::PrefixResolveNode::emitCode): Ditto. + (JSC::ReadModifyResolveNode::emitCode): Ditto. + (JSC::AssignResolveNode::emitCode): Ditto. + + * kjs/operations.h: + (JSC::equalSlowCaseInline): Use asString, asCell, asNumberCell, + (JSC::strictEqualSlowCaseInline): Ditto. + +2008-10-18 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Oliver Hunt. + + Bug 21702: Special op_create_activation for the case where there are no named parameters + <https://bugs.webkit.org/show_bug.cgi?id=21702> + + This is a 2.5% speedup on the V8 Raytrace benchmark and a 1.1% speedup + on the V8 Earley-Boyer benchmark. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/Machine.cpp: + (JSC::Machine::cti_op_create_arguments_no_params): + * VM/Machine.h: + * kjs/Arguments.h: + (JSC::Arguments::): + (JSC::Arguments::Arguments): + +2008-10-17 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich. + + - in debug builds, alter the stack to avoid blowing out MallocStackLogging + + (In essence, while executing a CTI function we alter the return + address to jscGeneratedNativeCode so that a single consistent + function is on the stack instead of many random functions without + symbols.) + + * VM/CTI.h: + * VM/Machine.cpp: + (JSC::doSetReturnAddress): + (JSC::): + (JSC::StackHack::StackHack): + (JSC::StackHack::~StackHack): + (JSC::Machine::cti_op_convert_this): + (JSC::Machine::cti_op_end): + (JSC::Machine::cti_op_add): + (JSC::Machine::cti_op_pre_inc): + (JSC::Machine::cti_timeout_check): + (JSC::Machine::cti_register_file_check): + (JSC::Machine::cti_op_loop_if_less): + (JSC::Machine::cti_op_loop_if_lesseq): + (JSC::Machine::cti_op_new_object): + (JSC::Machine::cti_op_put_by_id): + (JSC::Machine::cti_op_put_by_id_second): + (JSC::Machine::cti_op_put_by_id_generic): + (JSC::Machine::cti_op_put_by_id_fail): + (JSC::Machine::cti_op_get_by_id): + (JSC::Machine::cti_op_get_by_id_second): + (JSC::Machine::cti_op_get_by_id_generic): + (JSC::Machine::cti_op_get_by_id_fail): + (JSC::Machine::cti_op_instanceof): + (JSC::Machine::cti_op_del_by_id): + (JSC::Machine::cti_op_mul): + (JSC::Machine::cti_op_new_func): + (JSC::Machine::cti_op_call_profiler): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_vm_lazyLinkCall): + (JSC::Machine::cti_vm_compile): + (JSC::Machine::cti_op_push_activation): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_create_arguments): + (JSC::Machine::cti_op_tear_off_activation): + (JSC::Machine::cti_op_tear_off_arguments): + (JSC::Machine::cti_op_ret_profiler): + (JSC::Machine::cti_op_ret_scopeChain): + (JSC::Machine::cti_op_new_array): + (JSC::Machine::cti_op_resolve): + (JSC::Machine::cti_op_construct_JSConstructFast): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_get_by_val): + (JSC::Machine::cti_op_resolve_func): + (JSC::Machine::cti_op_sub): + (JSC::Machine::cti_op_put_by_val): + (JSC::Machine::cti_op_put_by_val_array): + (JSC::Machine::cti_op_lesseq): + (JSC::Machine::cti_op_loop_if_true): + (JSC::Machine::cti_op_negate): + (JSC::Machine::cti_op_resolve_base): + (JSC::Machine::cti_op_resolve_skip): + (JSC::Machine::cti_op_resolve_global): + (JSC::Machine::cti_op_div): + (JSC::Machine::cti_op_pre_dec): + (JSC::Machine::cti_op_jless): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_jtrue): + (JSC::Machine::cti_op_post_inc): + (JSC::Machine::cti_op_eq): + (JSC::Machine::cti_op_lshift): + (JSC::Machine::cti_op_bitand): + (JSC::Machine::cti_op_rshift): + (JSC::Machine::cti_op_bitnot): + (JSC::Machine::cti_op_resolve_with_base): + (JSC::Machine::cti_op_new_func_exp): + (JSC::Machine::cti_op_mod): + (JSC::Machine::cti_op_less): + (JSC::Machine::cti_op_neq): + (JSC::Machine::cti_op_post_dec): + (JSC::Machine::cti_op_urshift): + (JSC::Machine::cti_op_bitxor): + (JSC::Machine::cti_op_new_regexp): + (JSC::Machine::cti_op_bitor): + (JSC::Machine::cti_op_call_eval): + (JSC::Machine::cti_op_throw): + (JSC::Machine::cti_op_get_pnames): + (JSC::Machine::cti_op_next_pname): + (JSC::Machine::cti_op_push_scope): + (JSC::Machine::cti_op_pop_scope): + (JSC::Machine::cti_op_typeof): + (JSC::Machine::cti_op_is_undefined): + (JSC::Machine::cti_op_is_boolean): + (JSC::Machine::cti_op_is_number): + (JSC::Machine::cti_op_is_string): + (JSC::Machine::cti_op_is_object): + (JSC::Machine::cti_op_is_function): + (JSC::Machine::cti_op_stricteq): + (JSC::Machine::cti_op_nstricteq): + (JSC::Machine::cti_op_to_jsnumber): + (JSC::Machine::cti_op_in): + (JSC::Machine::cti_op_push_new_scope): + (JSC::Machine::cti_op_jmp_scopes): + (JSC::Machine::cti_op_put_by_index): + (JSC::Machine::cti_op_switch_imm): + (JSC::Machine::cti_op_switch_char): + (JSC::Machine::cti_op_switch_string): + (JSC::Machine::cti_op_del_by_val): + (JSC::Machine::cti_op_put_getter): + (JSC::Machine::cti_op_put_setter): + (JSC::Machine::cti_op_new_error): + (JSC::Machine::cti_op_debug): + (JSC::Machine::cti_vm_throw): + +2008-10-17 Gavin Barraclough <barraclough@apple.com> + + Optimize op_call by allowing call sites to be directly linked to callees. + + For the hot path of op_call, CTI now generates a check (initially for an impossible + value), and the first time the call is executed we attempt to link the call directly + to the callee. We can currently only do so if the arity of the caller and callee + match. The (optimized) setup for the call on the hot path is linked directly to + the ctiCode for the callee, without indirection. + + Two forms of the slow case of the call are generated, the first will be executed the + first time the call is reached. As well as this path attempting to link the call to + a callee, it also relinks the slow case to a second slow case, which will not continue + to attempt relinking the call. (This policy could be changed in future, but for not + this is intended to prevent thrashing). + + If a callee that the caller has been linked to is garbage collected, then the link + in the caller's JIt code will be reset back to a value that cannot match - to prevent + any false positive matches. + + ~20% progression on deltablue & richards, >12% overall reduction in v8-tests + runtime, one or two percent progression on sunspider. + + Reviewed by Oliver Hunt. + + * VM/CTI.cpp: + (JSC::): + (JSC::CTI::emitNakedCall): + (JSC::unreachable): + (JSC::CTI::compileOpCallInitializeCallFrame): + (JSC::CTI::compileOpCallSetupArgs): + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::unlinkCall): + (JSC::CTI::linkCall): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::~CodeBlock): + (JSC::CodeBlock::unlinkCallers): + (JSC::CodeBlock::derefStructureIDs): + * VM/CodeBlock.h: + (JSC::StructureStubInfo::StructureStubInfo): + (JSC::CallLinkInfo::CallLinkInfo): + (JSC::CodeBlock::addCaller): + (JSC::CodeBlock::removeCaller): + (JSC::CodeBlock::getStubInfo): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitCall): + (JSC::CodeGenerator::emitConstruct): + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_profiler): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_vm_lazyLinkCall): + (JSC::Machine::cti_op_construct_JSConstructFast): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_construct_NotJSConstruct): + * VM/Machine.h: + * kjs/JSFunction.cpp: + (JSC::JSFunction::~JSFunction): + * kjs/JSFunction.h: + * kjs/nodes.h: + (JSC::FunctionBodyNode::): + * masm/X86Assembler.h: + (JSC::X86Assembler::getDifferenceBetweenLabels): + +2008-10-17 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Geoff Garen. + + - remove ASSERT that makes the leaks buildbot cry + + * kjs/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + +2008-10-17 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich + + - don't bother to do arguments tearoff when it will have no effect + + ~1% on v8 raytrace + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitReturn): + +2008-10-17 Marco Barisione <marco.barisione@collabora.co.uk> + + Reviewed by Sam Weinig. Landed by Jan Alonzo. + + https://bugs.webkit.org/show_bug.cgi?id=21603 + [GTK] Minor fixes to GOwnPtr + + * wtf/GOwnPtr.cpp: + (WTF::GError): + (WTF::GList): + (WTF::GCond): + (WTF::GMutex): + (WTF::GPatternSpec): + (WTF::GDir): + * wtf/GOwnPtr.h: + (WTF::freeOwnedGPtr): + (WTF::GOwnPtr::~GOwnPtr): + (WTF::GOwnPtr::outPtr): + (WTF::GOwnPtr::set): + (WTF::GOwnPtr::clear): + * wtf/Threading.h: + +2008-10-17 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich. + + - speed up transitions that resize the property storage a fair bit + + ~3% speedup on v8 RayTrace benchmark, ~1% on DeltaBlue + + * VM/CTI.cpp: + (JSC::resizePropertyStorage): renamed from transitionObject, and reduced to just resize + the object's property storage with one inline call. + (JSC::CTI::privateCompilePutByIdTransition): Use a separate function for property storage + resize, but still do all the rest of the work in assembly in that case, and pass the known + compile-time constants of old and new size rather than structureIDs, saving a bunch of + redundant memory access. + * kjs/JSObject.cpp: + (JSC::JSObject::allocatePropertyStorage): Just call the inline version. + * kjs/JSObject.h: + (JSC::JSObject::allocatePropertyStorageInline): Inline version of allocatePropertyStorage + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::pushl_i32): Add code to assmeble push of a constant; code originally by Cameron Zwarich. + +2008-10-17 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Maciej Stachowiak. + + Remove some C style casts. + + * masm/X86Assembler.h: + (JSC::JITCodeBuffer::putIntUnchecked): + (JSC::X86Assembler::link): + (JSC::X86Assembler::linkAbsoluteAddress): + (JSC::X86Assembler::getRelocatedAddress): + +2008-10-17 Cameron Zwarich <zwarich@apple.com> + + Rubber-stamped by Maciej Stachowiak. + + Remove some C style casts. + + * VM/CTI.cpp: + (JSC::CTI::patchGetByIdSelf): + (JSC::CTI::patchPutByIdReplace): + * VM/Machine.cpp: + (JSC::Machine::tryCTICachePutByID): + (JSC::Machine::tryCTICacheGetByID): + (JSC::Machine::cti_op_put_by_id): + (JSC::Machine::cti_op_put_by_id_fail): + (JSC::Machine::cti_op_get_by_id): + (JSC::Machine::cti_op_get_by_id_fail): + +2008-10-17 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich. + + - Avoid restoring the caller's 'r' value in op_ret + https://bugs.webkit.org/show_bug.cgi?id=21319 + + This patch stops writing the call frame at call and return points; + instead it does so immediately before any CTI call. + + 0.5% speedup or so on the v8 benchmark + + * VM/CTI.cpp: + (JSC::CTI::emitCTICall): + (JSC::CTI::compileOpCall): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::compileBinaryArithOpSlowCase): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + * VM/CTI.h: + +2008-10-17 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Sam Weinig. + + Make WREC require CTI because it won't actually compile otherwise. + + * wtf/Platform.h: + +2008-10-16 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Geoff Garen. + + - fixed <rdar://problem/5806316> JavaScriptCore should not force building with gcc 4.0 + - use gcc 4.2 when building with Xcode 3.1 or newer on Leopard, even though this is not the default + + This time there is no performance regression; we can avoid having + to use the fastcall calling convention for CTI functions by using + varargs to prevent the compiler from moving things around on the + stack. + + * Configurations/DebugRelease.xcconfig: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: + * VM/Machine.h: + * wtf/Platform.h: + +2008-10-16 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Oliver Hunt. + + - fix for REGRESSION: r37631 causing crashes on buildbot + https://bugs.webkit.org/show_bug.cgi?id=21682 + + * kjs/collector.cpp: + (JSC::Heap::collect): Avoid crashing when a GC occurs while no global objects are live. + +2008-10-16 Sam Weinig <sam@webkit.org> + + Reviewed by Maciej Stachowiak. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=21683 + Don't create intermediate StructureIDs for builtin objects + + First step in reduce number of StructureIDs created when initializing the + JSGlobalObject. + + - In order to avoid creating the intermediate StructureIDs use the new putDirectWithoutTransition + and putDirectFunctionWithoutTransition to add properties to JSObjects without transitioning + the StructureID. This patch just implements this strategy for ObjectPrototype but alone + reduces the number of StructureIDs create for about:blank by 10, from 142 to 132. + + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + * kjs/JSObject.cpp: + (JSC::JSObject::putDirectFunctionWithoutTransition): + * kjs/JSObject.h: + (JSC::JSObject::putDirectWithoutTransition): + * kjs/ObjectPrototype.cpp: + (JSC::ObjectPrototype::ObjectPrototype): + * kjs/ObjectPrototype.h: + * kjs/StructureID.cpp: + (JSC::StructureID::addPropertyWithoutTransition): + * kjs/StructureID.h: + +2008-10-16 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich. + + - fix for: REGRESSION: over 100 StructureIDs leak loading about:blank (result of fix for bug 21633) + + Apparent slight progression (< 0.5%) on v8 benchmarks and SunSpider. + + * kjs/StructureID.cpp: + (JSC::StructureID::~StructureID): Don't deref this object's parent's pointer to + itself from the destructor; that doesn't even make sense. + (JSC::StructureID::addPropertyTransition): Don't refer the single transition; + the rule is that parent StructureIDs are ref'd but child ones are not. Refing + the child creates a cycle. + +2008-10-15 Alexey Proskuryakov <ap@webkit.org> + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=21609 + Make MessagePorts protect their peers across heaps + + * JavaScriptCore.exp: + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::markCrossHeapDependentObjects): + * kjs/JSGlobalObject.h: + * kjs/collector.cpp: + (JSC::Heap::collect): + Before GC sweep phase, a function supplied by global object is now called for all global + objects in the heap, making it possible to implement cross-heap dependencies. + +2008-10-15 Alexey Proskuryakov <ap@webkit.org> + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=21610 + run-webkit-threads --threaded crashes in StructureID destructor + + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::~StructureID): + Protect access to a static (debug-only) HashSet with a lock. + +2008-10-15 Sam Weinig <sam@webkit.org> + + Reviewed by Goeffrey Garen. + + Add function to dump statistics for StructureIDs. + + * kjs/StructureID.cpp: + (JSC::StructureID::dumpStatistics): + (JSC::StructureID::StructureID): + (JSC::StructureID::~StructureID): + * kjs/StructureID.h: + +2008-10-15 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Maciej Stachowiak. + + Bug 21633: Avoid using a HashMap when there is only a single transition + <https://bugs.webkit.org/show_bug.cgi?id=21633> + + This is a 0.8% speedup on SunSpider and between a 0.5% and 1.0% speedup + on the V8 benchmark suite, depending on which harness we use. It will + also slightly reduce the memory footprint of a StructureID. + + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::~StructureID): + (JSC::StructureID::addPropertyTransition): + * kjs/StructureID.h: + (JSC::StructureID::): + +2008-10-15 Csaba Osztrogonac <oszi@inf.u-szeged.hu> + + Reviewed by Geoffrey Garen. + + 1.40% speedup on SunSpider, 1.44% speedup on V8. (Linux) + + No change on Mac. + + * VM/Machine.cpp: + (JSC::fastIsNumber): ALWAYS_INLINE modifier added. + +2008-10-15 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Cameron Zwarich. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=21345 + Start the debugger without reloading the inspected page + + * JavaScriptCore.exp: New symbols. + * JavaScriptCore.xcodeproj/project.pbxproj: New files. + + * VM/CodeBlock.h: + (JSC::EvalCodeCache::get): Updated for tweak to parsing API. + + * kjs/CollectorHeapIterator.h: Added. An iterator for the object heap, + which we use to find all the live functions and recompile them. + + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::evaluate): Updated for tweak to parsing API. + + * kjs/FunctionConstructor.cpp: + (JSC::constructFunction): Updated for tweak to parsing API. + + * kjs/JSFunction.cpp: + (JSC::JSFunction::JSFunction): Try to validate our SourceCode in debug + builds by ASSERTing that it's syntactically valid. This doesn't catch + all SourceCode bugs, but it catches a lot of them. + + * kjs/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): Updated for tweak to parsing API. + + * kjs/Parser.cpp: + (JSC::Parser::parse): + * kjs/Parser.h: + (JSC::Parser::parse): Tweaked the parser to make it possible to parse + without an ExecState, and to allow the client to specify a debugger to + notify (or not) about the source we parse. This allows the inspector + to recompile even though no JavaScript is executing, then notify the + debugger about all source code when it's done. + + * kjs/Shell.cpp: + (prettyPrintScript): Updated for tweak to parsing API. + + * kjs/SourceRange.h: + (JSC::SourceCode::isNull): Added to help with ASSERTs. + + * kjs/collector.cpp: + (JSC::Heap::heapAllocate): + (JSC::Heap::sweep): + (JSC::Heap::primaryHeapBegin): + (JSC::Heap::primaryHeapEnd): + * kjs/collector.h: + (JSC::): Moved a bunch of declarations around to enable compilation of + CollectorHeapIterator. + + * kjs/interpreter.cpp: + (JSC::Interpreter::checkSyntax): + (JSC::Interpreter::evaluate): Updated for tweak to parsing API. + + * kjs/lexer.h: + (JSC::Lexer::sourceCode): BUG FIX: Calculate SourceCode ranges relative + to the SourceCode range in which we're lexing, otherwise nested functions + that are compiled individually get SourceCode ranges that don't reflect + their nesting. + + * kjs/nodes.cpp: + (JSC::FunctionBodyNode::FunctionBodyNode): + (JSC::FunctionBodyNode::finishParsing): + (JSC::FunctionBodyNode::create): + (JSC::FunctionBodyNode::copyParameters): + * kjs/nodes.h: + (JSC::ScopeNode::setSource): + (JSC::FunctionBodyNode::parameterCount): Added some helper functions for + copying one FunctionBodyNode's parameters to another. The recompiler uses + these when calling "finishParsing". + +2008-10-15 Joerg Bornemann <joerg.bornemann@trolltech.com> + + Reviewed by Darin Adler. + + - part of https://bugs.webkit.org/show_bug.cgi?id=20746 + Fix compilation on Windows CE. + + str(n)icmp, strdup and vsnprintf are not available on Windows CE, + they are called _str(n)icmp, etc. instead + + * wtf/StringExtras.h: Added inline function implementations. + +2008-10-15 Gabor Loki <loki@inf.u-szeged.hu> + + Reviewed by Cameron Zwarich. + + <https://bugs.webkit.org/show_bug.cgi?id=20912> + Use simple uint32_t multiplication on op_mul if both operands are + immediate number and they are between zero and 0x7FFF. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + +2008-10-09 Darin Fisher <darin@chromium.org> + + Reviewed by Sam Weinig. + + Make pan scrolling a platform configurable option. + https://bugs.webkit.org/show_bug.cgi?id=21515 + + * wtf/Platform.h: Add ENABLE_PAN_SCROLLING + +2008-10-14 Maciej Stachowiak <mjs@apple.com> + + Rubber stamped by Sam Weinig. + + - revert r37572 and r37581 for now + + Turns out GCC 4.2 is still a (small) regression, we'll have to do + more work to turn it on. + + * Configurations/DebugRelease.xcconfig: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: + * VM/CTI.h: + * VM/Machine.cpp: + (JSC::Machine::cti_op_convert_this): + (JSC::Machine::cti_op_end): + (JSC::Machine::cti_op_add): + (JSC::Machine::cti_op_pre_inc): + (JSC::Machine::cti_timeout_check): + (JSC::Machine::cti_register_file_check): + (JSC::Machine::cti_op_loop_if_less): + (JSC::Machine::cti_op_loop_if_lesseq): + (JSC::Machine::cti_op_new_object): + (JSC::Machine::cti_op_put_by_id): + (JSC::Machine::cti_op_put_by_id_second): + (JSC::Machine::cti_op_put_by_id_generic): + (JSC::Machine::cti_op_put_by_id_fail): + (JSC::Machine::cti_op_get_by_id): + (JSC::Machine::cti_op_get_by_id_second): + (JSC::Machine::cti_op_get_by_id_generic): + (JSC::Machine::cti_op_get_by_id_fail): + (JSC::Machine::cti_op_instanceof): + (JSC::Machine::cti_op_del_by_id): + (JSC::Machine::cti_op_mul): + (JSC::Machine::cti_op_new_func): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_vm_compile): + (JSC::Machine::cti_op_push_activation): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_create_arguments): + (JSC::Machine::cti_op_tear_off_activation): + (JSC::Machine::cti_op_tear_off_arguments): + (JSC::Machine::cti_op_ret_profiler): + (JSC::Machine::cti_op_ret_scopeChain): + (JSC::Machine::cti_op_new_array): + (JSC::Machine::cti_op_resolve): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_get_by_val): + (JSC::Machine::cti_op_resolve_func): + (JSC::Machine::cti_op_sub): + (JSC::Machine::cti_op_put_by_val): + (JSC::Machine::cti_op_put_by_val_array): + (JSC::Machine::cti_op_lesseq): + (JSC::Machine::cti_op_loop_if_true): + (JSC::Machine::cti_op_negate): + (JSC::Machine::cti_op_resolve_base): + (JSC::Machine::cti_op_resolve_skip): + (JSC::Machine::cti_op_resolve_global): + (JSC::Machine::cti_op_div): + (JSC::Machine::cti_op_pre_dec): + (JSC::Machine::cti_op_jless): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_jtrue): + (JSC::Machine::cti_op_post_inc): + (JSC::Machine::cti_op_eq): + (JSC::Machine::cti_op_lshift): + (JSC::Machine::cti_op_bitand): + (JSC::Machine::cti_op_rshift): + (JSC::Machine::cti_op_bitnot): + (JSC::Machine::cti_op_resolve_with_base): + (JSC::Machine::cti_op_new_func_exp): + (JSC::Machine::cti_op_mod): + (JSC::Machine::cti_op_less): + (JSC::Machine::cti_op_neq): + (JSC::Machine::cti_op_post_dec): + (JSC::Machine::cti_op_urshift): + (JSC::Machine::cti_op_bitxor): + (JSC::Machine::cti_op_new_regexp): + (JSC::Machine::cti_op_bitor): + (JSC::Machine::cti_op_call_eval): + (JSC::Machine::cti_op_throw): + (JSC::Machine::cti_op_get_pnames): + (JSC::Machine::cti_op_next_pname): + (JSC::Machine::cti_op_push_scope): + (JSC::Machine::cti_op_pop_scope): + (JSC::Machine::cti_op_typeof): + (JSC::Machine::cti_op_is_undefined): + (JSC::Machine::cti_op_is_boolean): + (JSC::Machine::cti_op_is_number): + (JSC::Machine::cti_op_is_string): + (JSC::Machine::cti_op_is_object): + (JSC::Machine::cti_op_is_function): + (JSC::Machine::cti_op_stricteq): + (JSC::Machine::cti_op_nstricteq): + (JSC::Machine::cti_op_to_jsnumber): + (JSC::Machine::cti_op_in): + (JSC::Machine::cti_op_push_new_scope): + (JSC::Machine::cti_op_jmp_scopes): + (JSC::Machine::cti_op_put_by_index): + (JSC::Machine::cti_op_switch_imm): + (JSC::Machine::cti_op_switch_char): + (JSC::Machine::cti_op_switch_string): + (JSC::Machine::cti_op_del_by_val): + (JSC::Machine::cti_op_put_getter): + (JSC::Machine::cti_op_put_setter): + (JSC::Machine::cti_op_new_error): + (JSC::Machine::cti_op_debug): + (JSC::Machine::cti_vm_throw): + * VM/Machine.h: + * masm/X86Assembler.h: + (JSC::X86Assembler::emitRestoreArgumentReference): + (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline): + * wtf/Platform.h: + +2008-10-14 Alexey Proskuryakov <ap@webkit.org> + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=20256 + Array.push and other standard methods disappear + + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::~JSGlobalData): + Don't use static hash tables even on platforms that don't enable JSC_MULTIPLE_THREADS - + these tables reference IdentifierTable, which is always per-GlobalData. + +2008-10-14 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich. + + - always use CTI_ARGUMENTS and CTI_ARGUMENTS_FASTCALL + + This is a small regression for GCC 4.0, but simplifies the code + for future improvements and lets us focus on GCC 4.2+ and MSVC. + + * VM/CTI.cpp: + * VM/CTI.h: + * VM/Machine.cpp: + (JSC::Machine::cti_op_convert_this): + (JSC::Machine::cti_op_end): + (JSC::Machine::cti_op_add): + (JSC::Machine::cti_op_pre_inc): + (JSC::Machine::cti_timeout_check): + (JSC::Machine::cti_register_file_check): + (JSC::Machine::cti_op_loop_if_less): + (JSC::Machine::cti_op_loop_if_lesseq): + (JSC::Machine::cti_op_new_object): + (JSC::Machine::cti_op_put_by_id): + (JSC::Machine::cti_op_put_by_id_second): + (JSC::Machine::cti_op_put_by_id_generic): + (JSC::Machine::cti_op_put_by_id_fail): + (JSC::Machine::cti_op_get_by_id): + (JSC::Machine::cti_op_get_by_id_second): + (JSC::Machine::cti_op_get_by_id_generic): + (JSC::Machine::cti_op_get_by_id_fail): + (JSC::Machine::cti_op_instanceof): + (JSC::Machine::cti_op_del_by_id): + (JSC::Machine::cti_op_mul): + (JSC::Machine::cti_op_new_func): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_vm_compile): + (JSC::Machine::cti_op_push_activation): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_create_arguments): + (JSC::Machine::cti_op_tear_off_activation): + (JSC::Machine::cti_op_tear_off_arguments): + (JSC::Machine::cti_op_ret_profiler): + (JSC::Machine::cti_op_ret_scopeChain): + (JSC::Machine::cti_op_new_array): + (JSC::Machine::cti_op_resolve): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_get_by_val): + (JSC::Machine::cti_op_resolve_func): + (JSC::Machine::cti_op_sub): + (JSC::Machine::cti_op_put_by_val): + (JSC::Machine::cti_op_put_by_val_array): + (JSC::Machine::cti_op_lesseq): + (JSC::Machine::cti_op_loop_if_true): + (JSC::Machine::cti_op_negate): + (JSC::Machine::cti_op_resolve_base): + (JSC::Machine::cti_op_resolve_skip): + (JSC::Machine::cti_op_resolve_global): + (JSC::Machine::cti_op_div): + (JSC::Machine::cti_op_pre_dec): + (JSC::Machine::cti_op_jless): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_jtrue): + (JSC::Machine::cti_op_post_inc): + (JSC::Machine::cti_op_eq): + (JSC::Machine::cti_op_lshift): + (JSC::Machine::cti_op_bitand): + (JSC::Machine::cti_op_rshift): + (JSC::Machine::cti_op_bitnot): + (JSC::Machine::cti_op_resolve_with_base): + (JSC::Machine::cti_op_new_func_exp): + (JSC::Machine::cti_op_mod): + (JSC::Machine::cti_op_less): + (JSC::Machine::cti_op_neq): + (JSC::Machine::cti_op_post_dec): + (JSC::Machine::cti_op_urshift): + (JSC::Machine::cti_op_bitxor): + (JSC::Machine::cti_op_new_regexp): + (JSC::Machine::cti_op_bitor): + (JSC::Machine::cti_op_call_eval): + (JSC::Machine::cti_op_throw): + (JSC::Machine::cti_op_get_pnames): + (JSC::Machine::cti_op_next_pname): + (JSC::Machine::cti_op_push_scope): + (JSC::Machine::cti_op_pop_scope): + (JSC::Machine::cti_op_typeof): + (JSC::Machine::cti_op_is_undefined): + (JSC::Machine::cti_op_is_boolean): + (JSC::Machine::cti_op_is_number): + (JSC::Machine::cti_op_is_string): + (JSC::Machine::cti_op_is_object): + (JSC::Machine::cti_op_is_function): + (JSC::Machine::cti_op_stricteq): + (JSC::Machine::cti_op_nstricteq): + (JSC::Machine::cti_op_to_jsnumber): + (JSC::Machine::cti_op_in): + (JSC::Machine::cti_op_push_new_scope): + (JSC::Machine::cti_op_jmp_scopes): + (JSC::Machine::cti_op_put_by_index): + (JSC::Machine::cti_op_switch_imm): + (JSC::Machine::cti_op_switch_char): + (JSC::Machine::cti_op_switch_string): + (JSC::Machine::cti_op_del_by_val): + (JSC::Machine::cti_op_put_getter): + (JSC::Machine::cti_op_put_setter): + (JSC::Machine::cti_op_new_error): + (JSC::Machine::cti_op_debug): + (JSC::Machine::cti_vm_throw): + * VM/Machine.h: + * masm/X86Assembler.h: + (JSC::X86Assembler::emitRestoreArgumentReference): + (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline): + * wtf/Platform.h: + +2008-10-13 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich. + + - make Machine::getArgumentsData an Arguments method and inline it + + ~2% on v8 raytrace + + * VM/Machine.cpp: + * kjs/Arguments.h: + (JSC::Machine::getArgumentsData): + +2008-10-13 Alp Toker <alp@nuanti.com> + + Fix autotools dist build target by listing recently added header + files only. Not reviewed. + + * GNUmakefile.am: + +2008-10-13 Maciej Stachowiak <mjs@apple.com> + + Rubber stamped by Mark Rowe. + + - fixed <rdar://problem/5806316> JavaScriptCore should not force building with gcc 4.0 + - use gcc 4.2 when building with Xcode 3.1 or newer on Leopard, even though this is not the default + + * Configurations/DebugRelease.xcconfig: + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-10-13 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Geoff Garen. + + Bug 21541: Move RegisterFile growth check to callee + <https://bugs.webkit.org/show_bug.cgi?id=21541> + + Move the RegisterFile growth check to the callee in the common case, + where some of the information is known statically at JIT time. There is + still a check in the caller in the case where the caller provides too + few arguments. + + This is a 2.1% speedup on the V8 benchmark, including a 5.1% speedup on + the Richards benchmark, a 4.1% speedup on the DeltaBlue benchmark, and a + 1.4% speedup on the Earley-Boyer benchmark. It is also a 0.5% speedup on + SunSpider. + + * VM/CTI.cpp: + (JSC::CTI::privateCompile): + * VM/Machine.cpp: + (JSC::Machine::cti_register_file_check): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_construct_JSConstruct): + * VM/Machine.h: + * VM/RegisterFile.h: + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::cmpl_mr): + (JSC::X86Assembler::emitUnlinkedJg): + +2008-10-13 Sam Weinig <sam@webkit.org> + + Reviewed by Dan Bernstein. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=21577 + 5 false positive StructureID leaks + + - Add leak ignore set to StructureID to selectively ignore leaking some StructureIDs. + - Add create method to JSGlolalData to be used when the data will be intentionally + leaked and ignore all leaks caused the StructureIDs stored in it. + + * JavaScriptCore.exp: + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::createLeaked): + * kjs/JSGlobalData.h: + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::~StructureID): + (JSC::StructureID::startIgnoringLeaks): + (JSC::StructureID::stopIgnoringLeaks): + * kjs/StructureID.h: + +2008-10-13 Marco Barisione <marco.barisione@collabora.co.uk> + + Reviewed by Darin Adler. Landed by Jan Alonzo. + + WebKit GTK Port needs a smartpointer to handle g_free (GFreePtr?) + http://bugs.webkit.org/show_bug.cgi?id=20483 + + Add a GOwnPtr smart pointer (similar to OwnPtr) to handle memory + allocated by GLib and start the conversion to use it. + + * GNUmakefile.am: + * wtf/GOwnPtr.cpp: Added. + (WTF::GError): + (WTF::GList): + (WTF::GCond): + (WTF::GMutex): + (WTF::GPatternSpec): + (WTF::GDir): + * wtf/GOwnPtr.h: Added. + (WTF::freeOwnedPtr): + (WTF::GOwnPtr::GOwnPtr): + (WTF::GOwnPtr::~GOwnPtr): + (WTF::GOwnPtr::get): + (WTF::GOwnPtr::release): + (WTF::GOwnPtr::rawPtr): + (WTF::GOwnPtr::set): + (WTF::GOwnPtr::clear): + (WTF::GOwnPtr::operator*): + (WTF::GOwnPtr::operator->): + (WTF::GOwnPtr::operator!): + (WTF::GOwnPtr::operator UnspecifiedBoolType): + (WTF::GOwnPtr::swap): + (WTF::swap): + (WTF::operator==): + (WTF::operator!=): + (WTF::getPtr): + * wtf/Threading.h: + * wtf/ThreadingGtk.cpp: + (WTF::Mutex::~Mutex): + (WTF::Mutex::lock): + (WTF::Mutex::tryLock): + (WTF::Mutex::unlock): + (WTF::ThreadCondition::~ThreadCondition): + (WTF::ThreadCondition::wait): + (WTF::ThreadCondition::timedWait): + (WTF::ThreadCondition::signal): + (WTF::ThreadCondition::broadcast): + +2008-10-12 Gabriella Toth <gtoth@inf.u-szeged.hu> + + Reviewed by Darin Adler. + + - part of https://bugs.webkit.org/show_bug.cgi?id=21055 + Bug 21055: not invoked functions + + * kjs/nodes.cpp: Deleted a function that is not invoked: + statementListInitializeVariableAccessStack. + +2008-10-12 Darin Adler <darin@apple.com> + + Reviewed by Sam Weinig. + + * wtf/unicode/icu/UnicodeIcu.h: Fixed indentation to match WebKit coding style. + * wtf/unicode/qt4/UnicodeQt4.h: Ditto. + +2008-10-12 Darin Adler <darin@apple.com> + + Reviewed by Sam Weinig. + + - https://bugs.webkit.org/show_bug.cgi?id=21556 + Bug 21556: non-ASCII digits are allowed in places where only ASCII should be + + * wtf/unicode/icu/UnicodeIcu.h: Removed isDigit, digitValue, and isFormatChar. + * wtf/unicode/qt4/UnicodeQt4.h: Ditto. + +2008-10-12 Anders Carlsson <andersca@apple.com> + + Reviewed by Darin Adler. + + Make the append method that takes a Vector more strict - it now requires the elements + of the vector to be appended same type as the elements of the Vector they're being appended to. + + This would cause problems when dealing with Vectors containing other Vectors. + + * wtf/Vector.h: + (WTF::::append): + +2008-10-11 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Sam Weinig. + + Clean up RegExpMatchesArray.h to match our coding style. + + * kjs/RegExpMatchesArray.h: + (JSC::RegExpMatchesArray::getOwnPropertySlot): + (JSC::RegExpMatchesArray::put): + (JSC::RegExpMatchesArray::deleteProperty): + (JSC::RegExpMatchesArray::getPropertyNames): + +2008-10-11 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Sam Weinig. + + Bug 21525: 55 StructureID leaks on Wikitravel's main page + <https://bugs.webkit.org/show_bug.cgi?id=21525> + + Bug 21533: Simple JavaScript code leaks StructureIDs + <https://bugs.webkit.org/show_bug.cgi?id=21533> + + StructureID::getEnumerablePropertyNames() ends up calling back to itself + via JSObject::getPropertyNames(), which causes the PropertyNameArray to + be cached twice. This leads to a memory leak in almost every use of + JSObject::getPropertyNames() on an object. The fix here is based on a + suggestion of Sam Weinig. + + This patch also fixes every StructureID leaks that occurs while running + the Mozilla MemBuster test. + + * kjs/PropertyNameArray.h: + (JSC::PropertyNameArray::PropertyNameArray): + (JSC::PropertyNameArray::setCacheable): + (JSC::PropertyNameArray::cacheable): + * kjs/StructureID.cpp: + (JSC::StructureID::getEnumerablePropertyNames): + +2008-10-10 Oliver Hunt <oliver@apple.com> + + Reviewed by Cameron Zwarich. + + Use fastcall calling convention on GCC > 4.0 + + Results in a 2-3% improvement in GCC 4.2 performance, so + that it is no longer a regression vs. GCC 4.0 + + * VM/CTI.cpp: + * VM/Machine.h: + * wtf/Platform.h: + +2008-10-10 Sam Weinig <sam@webkit.org> + + Reviewed by Darin Adler. + + - Add a workaround for a bug in ceil in Darwin libc. + - Remove old workarounds for JS math functions that are not needed + anymore. + + The math functions are heavily tested by fast/js/math.html. + + * kjs/MathObject.cpp: + (JSC::mathProtoFuncAbs): Remove workaround. + (JSC::mathProtoFuncCeil): Ditto. + (JSC::mathProtoFuncFloor): Ditto. + * wtf/MathExtras.h: + (wtf_ceil): Add ceil workaround for darwin. + +2008-10-10 Sam Weinig <sam@webkit.org> + + Reviewed by Darin Adler + + Add Assertions to JSObject constructor. + + * kjs/JSObject.h: + (JSC::JSObject::JSObject): + +2008-10-10 Sam Weinig <sam@webkit.org> + + Reviewed by Cameron Zwarich. + + Remove now unused m_getterSetterFlag variable from PropertyMap. + + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::operator=): + * kjs/PropertyMap.h: + (JSC::PropertyMap::PropertyMap): + +2008-10-09 Sam Weinig <sam@webkit.org> + + Reviewed by Maciej Stachowiak. + + Add leaks checking to StructureID. + + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::~StructureID): + +2008-10-09 Alp Toker <alp@nuanti.com> + + Reviewed by Mark Rowe. + + https://bugs.webkit.org/show_bug.cgi?id=20760 + Implement support for x86 Linux in CTI + + Prepare to enable CTI/WREC on supported architectures. + + Make it possible to use the CTI_ARGUMENT workaround with GCC as well + as MSVC by fixing some preprocessor conditionals. + + Note that CTI/WREC no longer requires CTI_ARGUMENT on Linux so we + don't actually enable it except when building with MSVC. GCC on Win32 + remains untested. + + Adapt inline ASM code to use the global symbol underscore prefix only + on Darwin and to call the properly mangled Machine::cti_vm_throw + symbol name depending on CTI_ARGUMENT. + + Also avoid global inclusion of the JIT infrastructure headers + throughout WebCore and WebKit causing recompilation of about ~1500 + source files after modification to X86Assembler.h, CTI.h, WREC.h, + which are only used deep inside JavaScriptCore. + + * GNUmakefile.am: + * VM/CTI.cpp: + * VM/CTI.h: + * VM/Machine.cpp: + * VM/Machine.h: + * kjs/regexp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::~RegExp): + (JSC::RegExp::match): + * kjs/regexp.h: + * masm/X86Assembler.h: + (JSC::X86Assembler::emitConvertToFastCall): + (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline): + (JSC::X86Assembler::emitRestoreArgumentReference): + +2008-10-09 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Cameron Zwarich. + + Fix for bug #21160, x=0;1/(x*-1) == -Infinity + + * ChangeLog: + * VM/CTI.cpp: + (JSC::CTI::emitFastArithDeTagImmediate): + (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::compileBinaryArithOpSlowCase): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CTI.h: + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::emitUnlinkedJs): + +2008-10-09 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Oliver Hunt. + + Bug 21459: REGRESSION (r37324): Safari crashes inside JavaScriptCore while browsing hulu.com + <https://bugs.webkit.org/show_bug.cgi?id=21459> + + After r37324, an Arguments object does not mark an associated activation + object. This change was made because Arguments no longer directly used + the activation object in any way. However, if an activation is torn off, + then the backing store of Arguments becomes the register array of the + activation object. Arguments directly marks all of the arguments, but + the activation object is being collected, which causes its register + array to be freed and new memory to be allocated in its place. + + Unfortunately, it does not seem possible to reproduce this issue in a + layout test. + + * kjs/Arguments.cpp: + (JSC::Arguments::mark): + * kjs/Arguments.h: + (JSC::Arguments::setActivation): + (JSC::Arguments::Arguments): + (JSC::JSActivation::copyRegisters): + +2008-10-09 Ariya Hidayat <ariya.hidayat@trolltech.com> + + Reviewed by Simon. + + Build fix for MinGW. + + * wtf/AlwaysInline.h: + +2008-10-08 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Maciej Stachowiak. + + Bug 21497: REGRESSION (r37433): Bytecode JSC tests are severely broken + <https://bugs.webkit.org/show_bug.cgi?id=21497> + + Fix a typo in r37433 that causes the failure of a large number of JSC + tests with the bytecode interpreter enabled. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + +2008-10-08 Mark Rowe <mrowe@apple.com> + + Windows build fix. + + * VM/CTI.cpp: + (JSC::): Update type of argument to ctiTrampoline. + +2008-10-08 Darin Adler <darin@apple.com> + + Reviewed by Cameron Zwarich. + + - https://bugs.webkit.org/show_bug.cgi?id=21403 + Bug 21403: use new CallFrame class rather than Register* for call frame manipulation + + Add CallFrame as a synonym for ExecState. Arguably, some day we should switch every + client over to the new name. + + Use CallFrame* consistently rather than Register* or ExecState* in low-level code such + as Machine.cpp and CTI.cpp. Similarly, use callFrame rather than r as its name and use + accessor functions to get at things in the frame. + + Eliminate other uses of ExecState* that aren't needed, replacing in some cases with + JSGlobalData* and in other cases eliminating them entirely. + + * API/JSObjectRef.cpp: + (JSObjectMakeFunctionWithCallback): + (JSObjectMakeFunction): + (JSObjectHasProperty): + (JSObjectGetProperty): + (JSObjectSetProperty): + (JSObjectDeleteProperty): + * API/OpaqueJSString.cpp: + * API/OpaqueJSString.h: + * VM/CTI.cpp: + (JSC::CTI::getConstant): + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::getConstantImmediateNumericArg): + (JSC::CTI::printOpcodeOperandTypes): + (JSC::CTI::CTI): + (JSC::CTI::compileOpCall): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::compileRegExp): + * VM/CTI.h: + * VM/CodeBlock.h: + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitEqualityOp): + (JSC::CodeGenerator::emitLoad): + (JSC::CodeGenerator::emitUnexpectedLoad): + (JSC::CodeGenerator::emitConstruct): + * VM/CodeGenerator.h: + * VM/Machine.cpp: + (JSC::jsLess): + (JSC::jsLessEq): + (JSC::jsAddSlowCase): + (JSC::jsAdd): + (JSC::jsTypeStringForValue): + (JSC::Machine::resolve): + (JSC::Machine::resolveSkip): + (JSC::Machine::resolveGlobal): + (JSC::inlineResolveBase): + (JSC::Machine::resolveBase): + (JSC::Machine::resolveBaseAndProperty): + (JSC::Machine::resolveBaseAndFunc): + (JSC::Machine::slideRegisterWindowForCall): + (JSC::isNotObject): + (JSC::Machine::callEval): + (JSC::Machine::dumpCallFrame): + (JSC::Machine::dumpRegisters): + (JSC::Machine::unwindCallFrame): + (JSC::Machine::throwException): + (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): + (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope): + (JSC::Machine::execute): + (JSC::Machine::debug): + (JSC::Machine::createExceptionScope): + (JSC::cachePrototypeChain): + (JSC::Machine::tryCachePutByID): + (JSC::Machine::tryCacheGetByID): + (JSC::Machine::privateExecute): + (JSC::Machine::retrieveArguments): + (JSC::Machine::retrieveCaller): + (JSC::Machine::retrieveLastCaller): + (JSC::Machine::findFunctionCallFrame): + (JSC::Machine::getArgumentsData): + (JSC::Machine::tryCTICachePutByID): + (JSC::Machine::getCTIArrayLengthTrampoline): + (JSC::Machine::getCTIStringLengthTrampoline): + (JSC::Machine::tryCTICacheGetByID): + (JSC::Machine::cti_op_convert_this): + (JSC::Machine::cti_op_end): + (JSC::Machine::cti_op_add): + (JSC::Machine::cti_op_pre_inc): + (JSC::Machine::cti_timeout_check): + (JSC::Machine::cti_op_loop_if_less): + (JSC::Machine::cti_op_loop_if_lesseq): + (JSC::Machine::cti_op_new_object): + (JSC::Machine::cti_op_put_by_id): + (JSC::Machine::cti_op_put_by_id_second): + (JSC::Machine::cti_op_put_by_id_generic): + (JSC::Machine::cti_op_put_by_id_fail): + (JSC::Machine::cti_op_get_by_id): + (JSC::Machine::cti_op_get_by_id_second): + (JSC::Machine::cti_op_get_by_id_generic): + (JSC::Machine::cti_op_get_by_id_fail): + (JSC::Machine::cti_op_instanceof): + (JSC::Machine::cti_op_del_by_id): + (JSC::Machine::cti_op_mul): + (JSC::Machine::cti_op_new_func): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_vm_compile): + (JSC::Machine::cti_op_push_activation): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_create_arguments): + (JSC::Machine::cti_op_tear_off_activation): + (JSC::Machine::cti_op_tear_off_arguments): + (JSC::Machine::cti_op_ret_profiler): + (JSC::Machine::cti_op_ret_scopeChain): + (JSC::Machine::cti_op_new_array): + (JSC::Machine::cti_op_resolve): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_get_by_val): + (JSC::Machine::cti_op_resolve_func): + (JSC::Machine::cti_op_sub): + (JSC::Machine::cti_op_put_by_val): + (JSC::Machine::cti_op_put_by_val_array): + (JSC::Machine::cti_op_lesseq): + (JSC::Machine::cti_op_loop_if_true): + (JSC::Machine::cti_op_negate): + (JSC::Machine::cti_op_resolve_base): + (JSC::Machine::cti_op_resolve_skip): + (JSC::Machine::cti_op_resolve_global): + (JSC::Machine::cti_op_div): + (JSC::Machine::cti_op_pre_dec): + (JSC::Machine::cti_op_jless): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_jtrue): + (JSC::Machine::cti_op_post_inc): + (JSC::Machine::cti_op_eq): + (JSC::Machine::cti_op_lshift): + (JSC::Machine::cti_op_bitand): + (JSC::Machine::cti_op_rshift): + (JSC::Machine::cti_op_bitnot): + (JSC::Machine::cti_op_resolve_with_base): + (JSC::Machine::cti_op_new_func_exp): + (JSC::Machine::cti_op_mod): + (JSC::Machine::cti_op_less): + (JSC::Machine::cti_op_neq): + (JSC::Machine::cti_op_post_dec): + (JSC::Machine::cti_op_urshift): + (JSC::Machine::cti_op_bitxor): + (JSC::Machine::cti_op_new_regexp): + (JSC::Machine::cti_op_bitor): + (JSC::Machine::cti_op_call_eval): + (JSC::Machine::cti_op_throw): + (JSC::Machine::cti_op_get_pnames): + (JSC::Machine::cti_op_next_pname): + (JSC::Machine::cti_op_push_scope): + (JSC::Machine::cti_op_pop_scope): + (JSC::Machine::cti_op_typeof): + (JSC::Machine::cti_op_to_jsnumber): + (JSC::Machine::cti_op_in): + (JSC::Machine::cti_op_push_new_scope): + (JSC::Machine::cti_op_jmp_scopes): + (JSC::Machine::cti_op_put_by_index): + (JSC::Machine::cti_op_switch_imm): + (JSC::Machine::cti_op_switch_char): + (JSC::Machine::cti_op_switch_string): + (JSC::Machine::cti_op_del_by_val): + (JSC::Machine::cti_op_put_getter): + (JSC::Machine::cti_op_put_setter): + (JSC::Machine::cti_op_new_error): + (JSC::Machine::cti_op_debug): + (JSC::Machine::cti_vm_throw): + * VM/Machine.h: + * VM/Register.h: + * VM/RegisterFile.h: + * kjs/Arguments.h: + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::functionName): + (JSC::DebuggerCallFrame::type): + (JSC::DebuggerCallFrame::thisObject): + (JSC::DebuggerCallFrame::evaluate): + * kjs/DebuggerCallFrame.h: + * kjs/ExecState.cpp: + (JSC::CallFrame::thisValue): + * kjs/ExecState.h: + * kjs/FunctionConstructor.cpp: + (JSC::constructFunction): + * kjs/JSActivation.cpp: + (JSC::JSActivation::JSActivation): + (JSC::JSActivation::argumentsGetter): + * kjs/JSActivation.h: + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::init): + * kjs/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): + * kjs/JSVariableObject.h: + * kjs/Parser.cpp: + (JSC::Parser::parse): + * kjs/RegExpConstructor.cpp: + (JSC::constructRegExp): + * kjs/RegExpPrototype.cpp: + (JSC::regExpProtoFuncCompile): + * kjs/Shell.cpp: + (prettyPrintScript): + * kjs/StringPrototype.cpp: + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + * kjs/identifier.cpp: + (JSC::Identifier::checkSameIdentifierTable): + * kjs/interpreter.cpp: + (JSC::Interpreter::checkSyntax): + (JSC::Interpreter::evaluate): + * kjs/nodes.cpp: + (JSC::ThrowableExpressionData::emitThrowError): + (JSC::RegExpNode::emitCode): + (JSC::ArrayNode::emitCode): + (JSC::InstanceOfNode::emitCode): + * kjs/nodes.h: + * kjs/regexp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::create): + * kjs/regexp.h: + * profiler/HeavyProfile.h: + * profiler/Profile.h: + * wrec/WREC.cpp: + * wrec/WREC.h: + +2008-10-08 Mark Rowe <mrowe@apple.com> + + Typed by Maciej Stachowiak, reviewed by Mark Rowe. + + Fix crash in fast/js/constant-folding.html with CTI disabled. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + +2008-10-08 Timothy Hatcher <timothy@apple.com> + + Roll out r37427 because it causes an infinite recursion loading about:blank. + + https://bugs.webkit.org/show_bug.cgi?id=21476 + +2008-10-08 Darin Adler <darin@apple.com> + + Reviewed by Cameron Zwarich. + + - https://bugs.webkit.org/show_bug.cgi?id=21403 + Bug 21403: use new CallFrame class rather than Register* for call frame manipulation + + Add CallFrame as a synonym for ExecState. Arguably, some day we should switch every + client over to the new name. + + Use CallFrame* consistently rather than Register* or ExecState* in low-level code such + as Machine.cpp and CTI.cpp. Similarly, use callFrame rather than r as its name and use + accessor functions to get at things in the frame. + + Eliminate other uses of ExecState* that aren't needed, replacing in some cases with + JSGlobalData* and in other cases eliminating them entirely. + + * API/JSObjectRef.cpp: + (JSObjectMakeFunctionWithCallback): + (JSObjectMakeFunction): + (JSObjectHasProperty): + (JSObjectGetProperty): + (JSObjectSetProperty): + (JSObjectDeleteProperty): + * API/OpaqueJSString.cpp: + * API/OpaqueJSString.h: + * VM/CTI.cpp: + (JSC::CTI::getConstant): + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::getConstantImmediateNumericArg): + (JSC::CTI::printOpcodeOperandTypes): + (JSC::CTI::CTI): + (JSC::CTI::compileOpCall): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::compileRegExp): + * VM/CTI.h: + * VM/CodeBlock.h: + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitEqualityOp): + (JSC::CodeGenerator::emitLoad): + (JSC::CodeGenerator::emitUnexpectedLoad): + (JSC::CodeGenerator::emitConstruct): + * VM/CodeGenerator.h: + * VM/Machine.cpp: + (JSC::jsLess): + (JSC::jsLessEq): + (JSC::jsAddSlowCase): + (JSC::jsAdd): + (JSC::jsTypeStringForValue): + (JSC::Machine::resolve): + (JSC::Machine::resolveSkip): + (JSC::Machine::resolveGlobal): + (JSC::inlineResolveBase): + (JSC::Machine::resolveBase): + (JSC::Machine::resolveBaseAndProperty): + (JSC::Machine::resolveBaseAndFunc): + (JSC::Machine::slideRegisterWindowForCall): + (JSC::isNotObject): + (JSC::Machine::callEval): + (JSC::Machine::dumpCallFrame): + (JSC::Machine::dumpRegisters): + (JSC::Machine::unwindCallFrame): + (JSC::Machine::throwException): + (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): + (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope): + (JSC::Machine::execute): + (JSC::Machine::debug): + (JSC::Machine::createExceptionScope): + (JSC::cachePrototypeChain): + (JSC::Machine::tryCachePutByID): + (JSC::Machine::tryCacheGetByID): + (JSC::Machine::privateExecute): + (JSC::Machine::retrieveArguments): + (JSC::Machine::retrieveCaller): + (JSC::Machine::retrieveLastCaller): + (JSC::Machine::findFunctionCallFrame): + (JSC::Machine::getArgumentsData): + (JSC::Machine::tryCTICachePutByID): + (JSC::Machine::getCTIArrayLengthTrampoline): + (JSC::Machine::getCTIStringLengthTrampoline): + (JSC::Machine::tryCTICacheGetByID): + (JSC::Machine::cti_op_convert_this): + (JSC::Machine::cti_op_end): + (JSC::Machine::cti_op_add): + (JSC::Machine::cti_op_pre_inc): + (JSC::Machine::cti_timeout_check): + (JSC::Machine::cti_op_loop_if_less): + (JSC::Machine::cti_op_loop_if_lesseq): + (JSC::Machine::cti_op_new_object): + (JSC::Machine::cti_op_put_by_id): + (JSC::Machine::cti_op_put_by_id_second): + (JSC::Machine::cti_op_put_by_id_generic): + (JSC::Machine::cti_op_put_by_id_fail): + (JSC::Machine::cti_op_get_by_id): + (JSC::Machine::cti_op_get_by_id_second): + (JSC::Machine::cti_op_get_by_id_generic): + (JSC::Machine::cti_op_get_by_id_fail): + (JSC::Machine::cti_op_instanceof): + (JSC::Machine::cti_op_del_by_id): + (JSC::Machine::cti_op_mul): + (JSC::Machine::cti_op_new_func): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_vm_compile): + (JSC::Machine::cti_op_push_activation): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_create_arguments): + (JSC::Machine::cti_op_tear_off_activation): + (JSC::Machine::cti_op_tear_off_arguments): + (JSC::Machine::cti_op_ret_profiler): + (JSC::Machine::cti_op_ret_scopeChain): + (JSC::Machine::cti_op_new_array): + (JSC::Machine::cti_op_resolve): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_get_by_val): + (JSC::Machine::cti_op_resolve_func): + (JSC::Machine::cti_op_sub): + (JSC::Machine::cti_op_put_by_val): + (JSC::Machine::cti_op_put_by_val_array): + (JSC::Machine::cti_op_lesseq): + (JSC::Machine::cti_op_loop_if_true): + (JSC::Machine::cti_op_negate): + (JSC::Machine::cti_op_resolve_base): + (JSC::Machine::cti_op_resolve_skip): + (JSC::Machine::cti_op_resolve_global): + (JSC::Machine::cti_op_div): + (JSC::Machine::cti_op_pre_dec): + (JSC::Machine::cti_op_jless): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_jtrue): + (JSC::Machine::cti_op_post_inc): + (JSC::Machine::cti_op_eq): + (JSC::Machine::cti_op_lshift): + (JSC::Machine::cti_op_bitand): + (JSC::Machine::cti_op_rshift): + (JSC::Machine::cti_op_bitnot): + (JSC::Machine::cti_op_resolve_with_base): + (JSC::Machine::cti_op_new_func_exp): + (JSC::Machine::cti_op_mod): + (JSC::Machine::cti_op_less): + (JSC::Machine::cti_op_neq): + (JSC::Machine::cti_op_post_dec): + (JSC::Machine::cti_op_urshift): + (JSC::Machine::cti_op_bitxor): + (JSC::Machine::cti_op_new_regexp): + (JSC::Machine::cti_op_bitor): + (JSC::Machine::cti_op_call_eval): + (JSC::Machine::cti_op_throw): + (JSC::Machine::cti_op_get_pnames): + (JSC::Machine::cti_op_next_pname): + (JSC::Machine::cti_op_push_scope): + (JSC::Machine::cti_op_pop_scope): + (JSC::Machine::cti_op_typeof): + (JSC::Machine::cti_op_to_jsnumber): + (JSC::Machine::cti_op_in): + (JSC::Machine::cti_op_push_new_scope): + (JSC::Machine::cti_op_jmp_scopes): + (JSC::Machine::cti_op_put_by_index): + (JSC::Machine::cti_op_switch_imm): + (JSC::Machine::cti_op_switch_char): + (JSC::Machine::cti_op_switch_string): + (JSC::Machine::cti_op_del_by_val): + (JSC::Machine::cti_op_put_getter): + (JSC::Machine::cti_op_put_setter): + (JSC::Machine::cti_op_new_error): + (JSC::Machine::cti_op_debug): + (JSC::Machine::cti_vm_throw): + * VM/Machine.h: + * VM/Register.h: + * VM/RegisterFile.h: + * kjs/Arguments.h: + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::functionName): + (JSC::DebuggerCallFrame::type): + (JSC::DebuggerCallFrame::thisObject): + (JSC::DebuggerCallFrame::evaluate): + * kjs/DebuggerCallFrame.h: + * kjs/ExecState.cpp: + (JSC::CallFrame::thisValue): + * kjs/ExecState.h: + * kjs/FunctionConstructor.cpp: + (JSC::constructFunction): + * kjs/JSActivation.cpp: + (JSC::JSActivation::JSActivation): + (JSC::JSActivation::argumentsGetter): + * kjs/JSActivation.h: + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::init): + * kjs/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): + * kjs/JSVariableObject.h: + * kjs/Parser.cpp: + (JSC::Parser::parse): + * kjs/RegExpConstructor.cpp: + (JSC::constructRegExp): + * kjs/RegExpPrototype.cpp: + (JSC::regExpProtoFuncCompile): + * kjs/Shell.cpp: + (prettyPrintScript): + * kjs/StringPrototype.cpp: + (JSC::stringProtoFuncMatch): + (JSC::stringProtoFuncSearch): + * kjs/identifier.cpp: + (JSC::Identifier::checkSameIdentifierTable): + * kjs/interpreter.cpp: + (JSC::Interpreter::checkSyntax): + (JSC::Interpreter::evaluate): + * kjs/nodes.cpp: + (JSC::ThrowableExpressionData::emitThrowError): + (JSC::RegExpNode::emitCode): + (JSC::ArrayNode::emitCode): + (JSC::InstanceOfNode::emitCode): + * kjs/nodes.h: + * kjs/regexp.cpp: + (JSC::RegExp::RegExp): + (JSC::RegExp::create): + * kjs/regexp.h: + * profiler/HeavyProfile.h: + * profiler/Profile.h: + * wrec/WREC.cpp: + * wrec/WREC.h: + +2008-10-08 Prasanth Ullattil <pullatti@trolltech.com> + + Reviewed by Oliver Hunt. + + Avoid endless loops when compiling without the computed goto + optimization. + + NEXT_OPCODE expands to "continue", which will not work inside + loops. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + +2008-10-08 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Oliver Hunt. + + Re-landing the following fix with the crashing bug in it fixed (r37405): + + - optimize away multiplication by constant 1.0 + + 2.3% speedup on v8 RayTrace benchmark + + Apparently it's not uncommon for JavaScript code to multiply by + constant 1.0 in the mistaken belief that this converts integer to + floating point and that there is any operational difference. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): Optimize to_jsnumber for + case where parameter is already number. + (JSC::CTI::privateCompileSlowCases): ditto + * VM/Machine.cpp: + (JSC::Machine::privateExecute): ditto + * kjs/grammar.y: + (makeMultNode): Transform as follows: + +FOO * BAR ==> FOO * BAR + FOO * +BAR ==> FOO * BAR + FOO * 1 ==> +FOO + 1 * FOO ==> +FOO + (makeDivNode): Transform as follows: + +FOO / BAR ==> FOO / BAR + FOO / +BAR ==> FOO / BAR + (makeSubNode): Transform as follows: + +FOO - BAR ==> FOO - BAR + FOO - +BAR ==> FOO - BAR + * kjs/nodes.h: + (JSC::ExpressionNode::stripUnaryPlus): Helper for above + grammar.y changes + (JSC::UnaryPlusNode::stripUnaryPlus): ditto + +2008-10-08 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Oliver Hunt. + + - correctly handle appending -0 to a string, it should stringify as just 0 + + * kjs/ustring.cpp: + (JSC::concatenate): + +2008-10-08 Prasanth Ullattil <pullatti@trolltech.com> + + Reviewed by Simon. + + Fix WebKit compilation with VC2008SP1 + + Apply the TR1 workaround for JavaScriptCore, too. + + * JavaScriptCore.pro: + +2008-10-08 Prasanth Ullattil <pullatti@trolltech.com> + + Reviewed by Simon. + + Fix compilation errors on VS2008 64Bit + + * kjs/collector.cpp: + (JSC::currentThreadStackBase): + +2008-10-08 André Pönitz <apoenitz@trolltech.com> + + Reviewed by Simon. + + Fix compilation with Qt namespaces. + + * wtf/Threading.h: + +2008-10-07 Sam Weinig <sam@webkit.org> + + Roll out r37405. + +2008-10-07 Oliver Hunt <oliver@apple.com> + + Reviewed by Cameron Zwarich. + + Switch CTI runtime calls to the fastcall calling convention + + Basically this means that we get to store the argument for CTI + calls in the ECX register, which saves a register->memory write + and subsequent memory->register read. + + This is a 1.7% progression in SunSpider and 2.4% on commandline + v8 tests on Windows + + * VM/CTI.cpp: + (JSC::): + (JSC::CTI::privateCompilePutByIdTransition): + (JSC::CTI::privateCompilePatchGetArrayLength): + * VM/CTI.h: + * VM/Machine.h: + * masm/X86Assembler.h: + (JSC::X86Assembler::emitRestoreArgumentReference): + (JSC::X86Assembler::emitRestoreArgumentReferenceForTrampoline): + We need this to correctly reload ecx from inside certain property access + trampolines. + * wtf/Platform.h: + +2008-10-07 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Mark Rowe. + + - optimize away multiplication by constant 1.0 + + 2.3% speedup on v8 RayTrace benchmark + + Apparently it's not uncommon for JavaScript code to multiply by + constant 1.0 in the mistaken belief that this converts integer to + floating point and that there is any operational difference. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): Optimize to_jsnumber for + case where parameter is already number. + (JSC::CTI::privateCompileSlowCases): ditto + * VM/Machine.cpp: + (JSC::Machine::privateExecute): ditto + * kjs/grammar.y: + (makeMultNode): Transform as follows: + +FOO * BAR ==> FOO * BAR + FOO * +BAR ==> FOO * BAR + FOO * 1 ==> +FOO + 1 * FOO ==> +FOO + (makeDivNode): Transform as follows: + +FOO / BAR ==> FOO / BAR + FOO / +BAR ==> FOO / BAR + (makeSubNode): Transform as follows: + +FOO - BAR ==> FOO - BAR + FOO - +BAR ==> FOO - BAR + * kjs/nodes.h: + (JSC::ExpressionNode::stripUnaryPlus): Helper for above + grammar.y changes + (JSC::UnaryPlusNode::stripUnaryPlus): ditto + +2008-10-07 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Oliver Hunt. + + - make constant folding code more consistent + + Added a makeSubNode to match add, mult and div; use the makeFooNode functions always, + instead of allocating nodes directly in other places in the grammar. + + * kjs/grammar.y: + +2008-10-07 Sam Weinig <sam@webkit.org> + + Reviewed by Cameron Zwarich. + + Move hasGetterSetterProperties flag from PropertyMap to StructureID. + + * kjs/JSObject.cpp: + (JSC::JSObject::put): + (JSC::JSObject::defineGetter): + (JSC::JSObject::defineSetter): + * kjs/JSObject.h: + (JSC::JSObject::hasGetterSetterProperties): + (JSC::JSObject::getOwnPropertySlotForWrite): + (JSC::JSObject::getOwnPropertySlot): + * kjs/PropertyMap.h: + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::addPropertyTransition): + (JSC::StructureID::toDictionaryTransition): + (JSC::StructureID::changePrototypeTransition): + (JSC::StructureID::getterSetterTransition): + * kjs/StructureID.h: + (JSC::StructureID::hasGetterSetterProperties): + (JSC::StructureID::setHasGetterSetterProperties): + +2008-10-07 Sam Weinig <sam@webkit.org> + + Reviewed by Cameron Zwarich. + + Roll r37370 back in with bug fixes. + + - PropertyMap::storageSize() should reflect the number of keys + deletedOffsets + and has nothing to do with the internal deletedSentinel count anymore. + +2008-10-07 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Move callframe initialization into JIT code, again. + + As a part of the restructuring the second result from functions is now + returned in edx, allowing the new value of 'r' to be returned via a + register, and stored to the stack from JIT code, too. + + 4.5% progression on v8-tests. (3% in their harness) + + * VM/CTI.cpp: + (JSC::): + (JSC::CTI::emitCall): + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + * VM/CTI.h: + (JSC::CallRecord::CallRecord): + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_resolve_func): + (JSC::Machine::cti_op_post_inc): + (JSC::Machine::cti_op_resolve_with_base): + (JSC::Machine::cti_op_post_dec): + * VM/Machine.h: + * kjs/JSFunction.h: + * kjs/ScopeChain.h: + +2008-10-07 Mark Rowe <mrowe@apple.com> + + Fix typo in method name. + + * wrec/WREC.cpp: + * wrec/WREC.h: + +2008-10-07 Cameron Zwarich <zwarich@apple.com> + + Rubber-stamped by Mark Rowe. + + Roll out r37370. + +2008-10-06 Sam Weinig <sam@webkit.org> + + Reviewed by Cameron Zwarich. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=21415 + Improve the division between PropertyStorageArray and PropertyMap + + - Rework ProperyMap to store offsets in the value so that they don't + change when rehashing. This allows us not to have to keep the + PropertyStorageArray in sync and thus not have to pass it in. + - Rename PropertyMap::getOffset -> PropertyMap::get since put/remove + now also return offsets. + - A Vector of deleted offsets is now needed since the storage is out of + band. + + 1% win on SunSpider. Wash on V8 suite. + + * JavaScriptCore.exp: + * VM/CTI.cpp: + (JSC::transitionWillNeedStorageRealloc): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + Transition logic can be greatly simplified by the fact that + the storage capacity is always known, and is correct for the + inline case. + * kjs/JSObject.cpp: + (JSC::JSObject::put): Rename getOffset -> get. + (JSC::JSObject::deleteProperty): Ditto. + (JSC::JSObject::getPropertyAttributes): Ditto. + (JSC::JSObject::removeDirect): Use returned offset to + clear the value in the PropertyNameArray. + (JSC::JSObject::allocatePropertyStorage): Add assert. + * kjs/JSObject.h: + (JSC::JSObject::getDirect): Rename getOffset -> get + (JSC::JSObject::getDirectLocation): Rename getOffset -> get + (JSC::JSObject::putDirect): Use propertyStorageCapacity to determine whether + or not to resize. Also, since put now returns an offset (and thus + addPropertyTransition does also) setting of the PropertyStorageArray is + now done here. + (JSC::JSObject::transitionTo): + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::checkConsistency): PropertyStorageArray is no longer + passed in. + (JSC::PropertyMap::operator=): Copy the delete offsets vector. + (JSC::PropertyMap::put): Instead of setting the PropertyNameArray + explicitly, return the offset where the value should go. + (JSC::PropertyMap::remove): Instead of removing from the PropertyNameArray + explicitly, return the offset where the value should be removed. + (JSC::PropertyMap::get): Switch to using the stored offset, instead + of the implicit one. + (JSC::PropertyMap::insert): + (JSC::PropertyMap::expand): This is never called when m_table is null, + so remove that branch and add it as an assertion. + (JSC::PropertyMap::createTable): Consistency checks no longer take + a PropertyNameArray. + (JSC::PropertyMap::rehash): No need to rehash the PropertyNameArray + now that it is completely out of band. + * kjs/PropertyMap.h: + (JSC::PropertyMapEntry::PropertyMapEntry): Store offset into PropertyNameArray. + (JSC::PropertyMap::get): Switch to using the stored offset, instead + of the implicit one. + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): Initialize the propertyStorageCapacity to + JSObject::inlineStorageCapacity. + (JSC::StructureID::growPropertyStorageCapacity): Grow the storage capacity as + described below. + (JSC::StructureID::addPropertyTransition): Copy the storage capacity. + (JSC::StructureID::toDictionaryTransition): Ditto. + (JSC::StructureID::changePrototypeTransition): Ditto. + (JSC::StructureID::getterSetterTransition): Ditto. + * kjs/StructureID.h: + (JSC::StructureID::propertyStorageCapacity): Add propertyStorageCapacity + which is the current capacity for the JSObjects PropertyStorageArray. + It starts at the JSObject::inlineStorageCapacity (currently 2), then + when it first needs to be resized moves to the JSObject::nonInlineBaseStorageCapacity + (currently 16), and after that doubles each time. + +2008-10-06 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Oliver Hunt. + + Bug 21396: Remove the OptionalCalleeActivation call frame slot + <https://bugs.webkit.org/show_bug.cgi?id=21396> + + Remove the OptionalCalleeActivation call frame slot. We have to be + careful to store the activation object in a register, because objects + in the scope chain do not get marked. + + This is a 0.3% speedup on both SunSpider and the V8 benchmark. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): + (JSC::CodeGenerator::emitReturn): + * VM/CodeGenerator.h: + * VM/Machine.cpp: + (JSC::Machine::dumpRegisters): + (JSC::Machine::unwindCallFrame): + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_push_activation): + (JSC::Machine::cti_op_tear_off_activation): + (JSC::Machine::cti_op_construct_JSConstruct): + * VM/Machine.h: + (JSC::Machine::initializeCallFrame): + * VM/RegisterFile.h: + (JSC::RegisterFile::): + +2008-10-06 Tony Chang <tony@chromium.org> + + Reviewed by Alexey Proskuryakov. + + Chromium doesn't use pthreads on windows, so make its use conditional. + + Also convert a WORD to a DWORD to avoid a compiler warning. This + matches the other methods around it. + + * wtf/ThreadingWin.cpp: + (WTF::wtfThreadEntryPoint): + (WTF::ThreadCondition::broadcast): + +2008-10-06 Mark Mentovai <mark@moxienet.com> + + Reviewed by Tim Hatcher. + + Allow ENABLE_DASHBOARD_SUPPORT and ENABLE_MAC_JAVA_BRIDGE to be + disabled on the Mac. + + https://bugs.webkit.org/show_bug.cgi?id=21333 + + * wtf/Platform.h: + +2008-10-06 Steve Falkenburg <sfalken@apple.com> + + https://bugs.webkit.org/show_bug.cgi?id=21416 + Pass 0 for size to VirtualAlloc, as documented by MSDN. + Identified by Application Verifier. + + Reviewed by Darin Adler. + + * kjs/collector.cpp: + (KJS::freeBlock): + +2008-10-06 Kevin McCullough <kmccullough@apple.com> + + Reviewed by Tim Hatcheri and Oliver Hunt. + + https://bugs.webkit.org/show_bug.cgi?id=21412 + Bug 21412: Refactor user initiated profile count to be more stable + - Export UString::from for use with creating the profile title. + + * JavaScriptCore.exp: + +2008-10-06 Maciej Stachowiak <mjs@apple.com> + + Not reviewed. Build fix. + + - revert toBoolean changes (r37333 and r37335); need to make WebCore work with these + + * API/JSValueRef.cpp: + (JSValueToBoolean): + * ChangeLog: + * JavaScriptCore.exp: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_loop_if_true): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_jtrue): + * kjs/ArrayPrototype.cpp: + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncSome): + * kjs/BooleanConstructor.cpp: + (JSC::constructBoolean): + (JSC::callBooleanConstructor): + * kjs/GetterSetter.h: + * kjs/JSCell.h: + (JSC::JSValue::toBoolean): + * kjs/JSNumberCell.cpp: + (JSC::JSNumberCell::toBoolean): + * kjs/JSNumberCell.h: + * kjs/JSObject.cpp: + (JSC::JSObject::toBoolean): + * kjs/JSObject.h: + * kjs/JSString.cpp: + (JSC::JSString::toBoolean): + * kjs/JSString.h: + * kjs/JSValue.h: + * kjs/RegExpConstructor.cpp: + (JSC::setRegExpConstructorMultiline): + * kjs/RegExpObject.cpp: + (JSC::RegExpObject::match): + * kjs/RegExpPrototype.cpp: + (JSC::regExpProtoFuncToString): + +2008-10-06 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Sam Weinig. + + - optimize op_jtrue, op_loop_if_true and op_not in various ways + https://bugs.webkit.org/show_bug.cgi?id=21404 + + 1) Make JSValue::toBoolean nonvirtual and completely inline by + making use of the StructureID type field. + + 2) Make JSValue::toBoolean not take an ExecState; doesn't need it. + + 3) Make op_not, op_loop_if_true and op_jtrue not read the + ExecState (toBoolean doesn't need it any more) and not check + exceptions (toBoolean can't throw). + + * API/JSValueRef.cpp: + (JSValueToBoolean): + * JavaScriptCore.exp: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_loop_if_true): + (JSC::Machine::cti_op_not): + (JSC::Machine::cti_op_jtrue): + * kjs/ArrayPrototype.cpp: + (JSC::arrayProtoFuncFilter): + (JSC::arrayProtoFuncEvery): + (JSC::arrayProtoFuncSome): + * kjs/BooleanConstructor.cpp: + (JSC::constructBoolean): + (JSC::callBooleanConstructor): + * kjs/GetterSetter.h: + * kjs/JSCell.h: + (JSC::JSValue::toBoolean): + * kjs/JSNumberCell.cpp: + * kjs/JSNumberCell.h: + (JSC::JSNumberCell::toBoolean): + * kjs/JSObject.cpp: + * kjs/JSObject.h: + (JSC::JSObject::toBoolean): + (JSC::JSCell::toBoolean): + * kjs/JSString.cpp: + * kjs/JSString.h: + (JSC::JSString::toBoolean): + * kjs/JSValue.h: + * kjs/RegExpConstructor.cpp: + (JSC::setRegExpConstructorMultiline): + * kjs/RegExpObject.cpp: + (JSC::RegExpObject::match): + * kjs/RegExpPrototype.cpp: + (JSC::regExpProtoFuncToString): + +2008-10-06 Ariya Hidayat <ariya.hidayat@trolltech.com> + + Reviewed by Simon. + + Build fix for MinGW. + + * JavaScriptCore.pri: + * kjs/DateMath.cpp: + (JSC::highResUpTime): + +2008-10-05 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Oliver Hunt. + + Remove ScopeNode::containsClosures() now that it is unused. + + * kjs/nodes.h: + (JSC::ScopeNode::containsClosures): + +2008-10-05 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich. + + - fix releas-only test failures caused by the fix to bug 21375 + + * VM/Machine.cpp: + (JSC::Machine::unwindCallFrame): Update ExecState while unwinding call frames; + it now matters more to have a still-valid ExecState, since dynamicGlobalObject + will make use of the ExecState's scope chain. + * VM/Machine.h: + +2008-10-05 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Oliver Hunt. + + Bug 21364: Remove the branch in op_ret for OptionalCalleeActivation and OptionalCalleeArguments + <https://bugs.webkit.org/show_bug.cgi?id=21364> + + Use information from the parser to detect whether an activation is + needed or 'arguments' is used, and emit explicit instructions to tear + them off before op_ret. This allows a branch to be removed from op_ret + and simplifies some other code. This does cause a small change in the + behaviour of 'f.arguments'; it is no longer live when 'arguments' is not + mentioned in the lexical scope of the function. + + It should now be easy to remove the OptionaCalleeActivation slot in the + call frame, but this will be done in a later patch. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitReturn): + * VM/CodeGenerator.h: + * VM/Machine.cpp: + (JSC::Machine::unwindCallFrame): + (JSC::Machine::privateExecute): + (JSC::Machine::retrieveArguments): + (JSC::Machine::cti_op_create_arguments): + (JSC::Machine::cti_op_tear_off_activation): + (JSC::Machine::cti_op_tear_off_arguments): + * VM/Machine.h: + * VM/Opcode.h: + * kjs/Arguments.cpp: + (JSC::Arguments::mark): + * kjs/Arguments.h: + (JSC::Arguments::isTornOff): + (JSC::Arguments::Arguments): + (JSC::Arguments::copyRegisters): + (JSC::JSActivation::copyRegisters): + * kjs/JSActivation.cpp: + (JSC::JSActivation::argumentsGetter): + * kjs/JSActivation.h: + +2008-10-05 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Oliver Hunt. + + - fixed "REGRESSION (r37297): fast/js/deep-recursion-test takes too long and times out" + https://bugs.webkit.org/show_bug.cgi?id=21375 + + The problem is that dynamicGlobalObject had become O(N) in number + of call frames, but unwinding the stack for an exception called it + for every call frame, resulting in O(N^2) behavior for an + exception thrown from inside deep recursion. + + Instead of doing it that way, stash the dynamic global object in JSGlobalData. + + * JavaScriptCore.exp: + * VM/Machine.cpp: + (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): Helper class to temporarily + store and later restore a dynamicGlobalObject in JSGlobalData. + (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope): + (JSC::Machine::execute): In each version, establish a DynamicGlobalObjectScope. + For ProgramNode, always establish set new dynamicGlobalObject, for FunctionBody and Eval, + only if none is currently set. + * VM/Machine.h: + * kjs/ExecState.h: + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Ininitalize new dynamicGlobalObject field to 0. + * kjs/JSGlobalData.h: + * kjs/JSGlobalObject.h: + (JSC::ExecState::dynamicGlobalObject): Moved here from ExecState for benefit of inlining. + Return lexical global object if this is a globalExec(), otherwise look in JSGlobalData + for the one stashed there. + +2008-10-05 Sam Weinig <sam@webkit.org> + + Reviewed by Maciej Stachowiak. + + Avoid an extra lookup when transitioning to an existing StructureID + by caching the offset of property that caused the transition. + + 1% win on V8 suite. Wash on SunSpider. + + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::put): + * kjs/PropertyMap.h: + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::addPropertyTransition): + * kjs/StructureID.h: + (JSC::StructureID::setCachedTransistionOffset): + (JSC::StructureID::cachedTransistionOffset): + +2008-10-05 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Maciej Stachowiak. + + Bug 21364: Remove the branch in op_ret for OptionalCalleeActivation and OptionalCalleeArguments + <https://bugs.webkit.org/show_bug.cgi?id=21364> + + This patch does not yet remove the branch, but it does a bit of refactoring + so that a CodeGenerator now knows whether the associated CodeBlock will need + a full scope before doing any code generation. This makes it possible to emit + explicit tear-off instructions before every op_ret. + + * VM/CodeBlock.h: + (JSC::CodeBlock::CodeBlock): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::generate): + (JSC::CodeGenerator::CodeGenerator): + (JSC::CodeGenerator::emitPushScope): + (JSC::CodeGenerator::emitPushNewScope): + * kjs/nodes.h: + (JSC::ScopeNode::needsActivation): + +2008-10-05 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Cameron Zwarich. + + Fix for bug #21387 - using SamplingTool with CTI. + + (1) A repatch offset offset changes due to an additional instruction to update SamplingTool state. + (2) Fix an incusion order problem due to ExecState changes. + (3) Change to a MACHINE_SAMPLING macro, use of exec should now be accessing global data. + + * VM/CTI.h: + (JSC::CTI::execute): + * VM/SamplingTool.h: + (JSC::SamplingTool::privateExecuteReturned): + * kjs/Shell.cpp: + +2008-10-04 Mark Rowe <mrowe@apple.com> + + Reviewed by Tim Hatcher. + + Add a 'Check For Weak VTables' build phase to catch weak vtables as early as possible. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-10-04 Sam Weinig <sam@webkit.org> + + Reviewed by Oliver Hunt. + + Fix https://bugs.webkit.org/show_bug.cgi?id=21320 + leaks of PropertyNameArrayData seen on buildbot + + - Fix RefPtr cycle by making PropertyNameArrayData's pointer back + to the StructureID a weak pointer. + + * kjs/PropertyNameArray.h: + (JSC::PropertyNameArrayData::setCachedStructureID): + (JSC::PropertyNameArrayData::cachedStructureID): + * kjs/StructureID.cpp: + (JSC::StructureID::getEnumerablePropertyNames): + (JSC::StructureID::clearEnumerationCache): + (JSC::StructureID::~StructureID): + +2008-10-04 Darin Adler <darin@apple.com> + + Reviewed by Cameron Zwarich. + + - https://bugs.webkit.org/show_bug.cgi?id=21295 + Bug 21295: Replace ExecState with a call frame Register pointer + + 10% faster on Richards; other v8 benchmarks faster too. + A wash on SunSpider. + + This does the minimum necessary to get the speedup. Next step in + cleaning this up is to replace ExecState with a CallFrame class, + and be more judicious about when to pass a call frame and when + to pass a global data pointer, global object pointer, or perhaps + something else entirely. + + * VM/CTI.cpp: Remove the debug-only check of the exception in + ctiVMThrowTrampoline -- already checked in the code the trampoline + jumps to, so not all that useful. Removed the exec argument from + ctiTrampoline. Removed emitDebugExceptionCheck -- no longer needed. + (JSC::CTI::emitCall): Removed code to set ExecState::m_callFrame. + (JSC::CTI::privateCompileMainPass): Removed code in catch to extract + the exception from ExecState::m_exception; instead, the code that + jumps into catch will make sure the exception is already in eax. + * VM/CTI.h: Removed exec from the ctiTrampoline. Also removed the + non-helpful "volatile". Temporarily left ARG_exec in as a synonym + for ARG_r; I'll change that on a future cleanup pass when introducing + more use of the CallFrame type. + (JSC::CTI::execute): Removed the ExecState* argument. + + * VM/ExceptionHelpers.cpp: + (JSC::InterruptedExecutionError::InterruptedExecutionError): Take + JSGlobalData* instead of ExecState*. + (JSC::createInterruptedExecutionException): Ditto. + * VM/ExceptionHelpers.h: Ditto. Also removed an unneeded include. + + * VM/Machine.cpp: + (JSC::slideRegisterWindowForCall): Removed the exec and + exceptionValue arguments. Changed to return 0 when there's a stack + overflow rather than using a separate exception argument to cut + down on memory accesses in the calling convention. + (JSC::Machine::unwindCallFrame): Removed the exec argument when + constructing a DebuggerCallFrame. Also removed code to set + ExecState::m_callFrame. + (JSC::Machine::throwException): Removed the exec argument when + construction a DebuggerCallFrame. + (JSC::Machine::execute): Updated to use the register instead of + ExecState and also removed various uses of ExecState. + (JSC::Machine::debug): + (JSC::Machine::privateExecute): Put globalData into a local + variable so it can be used throughout the interpreter. Changed + the VM_CHECK_EXCEPTION to get the exception in globalData instead + of through ExecState. + (JSC::Machine::retrieveLastCaller): Turn exec into a registers + pointer by calling registers() instead of by getting m_callFrame. + (JSC::Machine::callFrame): Ditto. + Tweaked exception macros. Made new versions for when you know + you have an exception. Get at global exception with ARG_globalData. + Got rid of the need to pass in the return value type. + (JSC::Machine::cti_op_add): Update to use new version of exception + macros. + (JSC::Machine::cti_op_pre_inc): Ditto. + (JSC::Machine::cti_timeout_check): Ditto. + (JSC::Machine::cti_op_instanceof): Ditto. + (JSC::Machine::cti_op_new_func): Ditto. + (JSC::Machine::cti_op_call_JSFunction): Optimized by using the + ARG values directly instead of through local variables -- this gets + rid of code that just shuffles things around in the stack frame. + Also get rid of ExecState and update for the new way exceptions are + handled in slideRegisterWindowForCall. + (JSC::Machine::cti_vm_compile): Update to make exec out of r since + they are both the same thing now. + (JSC::Machine::cti_op_call_NotJSFunction): Ditto. + (JSC::Machine::cti_op_init_arguments): Ditto. + (JSC::Machine::cti_op_resolve): Ditto. + (JSC::Machine::cti_op_construct_JSConstruct): Ditto. + (JSC::Machine::cti_op_construct_NotJSConstruct): Ditto. + (JSC::Machine::cti_op_resolve_func): Ditto. + (JSC::Machine::cti_op_put_by_val): Ditto. + (JSC::Machine::cti_op_put_by_val_array): Ditto. + (JSC::Machine::cti_op_resolve_skip): Ditto. + (JSC::Machine::cti_op_resolve_global): Ditto. + (JSC::Machine::cti_op_post_inc): Ditto. + (JSC::Machine::cti_op_resolve_with_base): Ditto. + (JSC::Machine::cti_op_post_dec): Ditto. + (JSC::Machine::cti_op_call_eval): Ditto. + (JSC::Machine::cti_op_throw): Ditto. Also rearranged to return + the exception value as the return value so it can be used by + op_catch. + (JSC::Machine::cti_op_push_scope): Ditto. + (JSC::Machine::cti_op_in): Ditto. + (JSC::Machine::cti_op_del_by_val): Ditto. + (JSC::Machine::cti_vm_throw): Ditto. Also rearranged to return + the exception value as the return value so it can be used by + op_catch. + + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::functionName): Pass globalData. + (JSC::DebuggerCallFrame::evaluate): Eliminated code to make a + new ExecState. + * kjs/DebuggerCallFrame.h: Removed ExecState argument from + constructor. + + * kjs/ExecState.h: Eliminated all data members and made ExecState + inherit privately from Register instead. Also added a typedef to + the future name for this class, which is CallFrame. It's just a + Register* that knows it's a pointer at a call frame. The new class + can't be constructed or copied. Changed all functions to use + the this pointer instead of m_callFrame. Changed exception-related + functions to access an exception in JSGlobalData. Removed functions + used by CTI to pass the return address to the throw machinery -- + this is now done directly with a global in the global data. + + * kjs/FunctionPrototype.cpp: + (JSC::functionProtoFuncToString): Pass globalData instead of exec. + + * kjs/InternalFunction.cpp: + (JSC::InternalFunction::name): Take globalData instead of exec. + * kjs/InternalFunction.h: Ditto. + + * kjs/JSGlobalData.cpp: Initialize the new exception global to 0. + * kjs/JSGlobalData.h: Declare two new globals. One for the current + exception and another for the return address used by CTI to + implement the throw operation. + + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::init): Removed code to set up globalExec, + which is now the same thing as globalCallFrame. + (JSC::JSGlobalObject::reset): Get globalExec from our globalExec + function so we don't have to repeat the logic twice. + (JSC::JSGlobalObject::mark): Removed code to mark the exception; + the exception is now stored in JSGlobalData and marked there. + (JSC::JSGlobalObject::globalExec): Return a pointer to the end + of the global call frame. + * kjs/JSGlobalObject.h: Removed the globalExec data member. + + * kjs/JSObject.cpp: + (JSC::JSObject::putDirectFunction): Pass globalData instead of exec. + + * kjs/collector.cpp: + (JSC::Heap::collect): Mark the global exception. + + * profiler/ProfileGenerator.cpp: + (JSC::ProfileGenerator::addParentForConsoleStart): Pass globalData + instead of exec to createCallIdentifier. + + * profiler/Profiler.cpp: + (JSC::Profiler::willExecute): Pass globalData instead of exec to + createCallIdentifier. + (JSC::Profiler::didExecute): Ditto. + (JSC::Profiler::createCallIdentifier): Take globalData instead of + exec. + (JSC::createCallIdentifierFromFunctionImp): Ditto. + * profiler/Profiler.h: Change interface to take a JSGlobalData + instead of an ExecState. + +2008-10-04 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Darin Adler. + + Bug 21369: Add opcode documentation for all undocumented opcodes + <https://bugs.webkit.org/show_bug.cgi?id=21369> + + This patch adds opcode documentation for all undocumented opcodes, and + it also renames op_init_arguments to op_create_arguments. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_create_arguments): + * VM/Machine.h: + * VM/Opcode.h: + +2008-10-03 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich. + + - "this" object in methods called on primitives should be wrapper object + https://bugs.webkit.org/show_bug.cgi?id=21362 + + I changed things so that functions which use "this" do a fast + version of toThisObject conversion if needed. Currently we miss + the conversion entirely, at least for primitive types. Using + TypeInfo and the primitive check, I made the fast case bail out + pretty fast. + + This is inexplicably an 1.007x SunSpider speedup (and a wash on V8 benchmarks). + + Also renamed some opcodes for clarity: + + init ==> enter + init_activation ==> enter_with_activation + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::generate): + (JSC::CodeGenerator::CodeGenerator): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_convert_this): + * VM/Machine.h: + * VM/Opcode.h: + * kjs/JSActivation.cpp: + (JSC::JSActivation::JSActivation): + * kjs/JSActivation.h: + (JSC::JSActivation::createStructureID): + * kjs/JSCell.h: + (JSC::JSValue::needsThisConversion): + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * kjs/JSGlobalData.h: + * kjs/JSNumberCell.h: + (JSC::JSNumberCell::createStructureID): + * kjs/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::JSStaticScopeObject): + (JSC::JSStaticScopeObject::createStructureID): + * kjs/JSString.h: + (JSC::JSString::createStructureID): + * kjs/JSValue.h: + * kjs/TypeInfo.h: + (JSC::TypeInfo::needsThisConversion): + * kjs/nodes.h: + (JSC::ScopeNode::usesThis): + +2008-10-03 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Maciej Stachowiak. + + Bug 21356: The size of the RegisterFile differs depending on 32-bit / 64-bit and Debug / Release + <https://bugs.webkit.org/show_bug.cgi?id=21356> + + The RegisterFile decreases in size (measured in terms of numbers of + Registers) as the size of a Register increases. This causes + + js1_5/Regress/regress-159334.js + + to fail in 64-bit debug builds. This fix makes the RegisterFile on all + platforms the same size that it is in 32-bit Release builds. + + * VM/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): + +2008-10-03 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich. + + - Some code cleanup to how we handle code features. + + 1) Rename FeatureInfo typedef to CodeFeatures. + 2) Rename NodeFeatureInfo template to NodeInfo. + 3) Keep CodeFeature bitmask in ScopeNode instead of trying to break it out into individual bools. + 4) Rename misleadingly named "needsClosure" method to "containsClosures", which better describes the meaning + of ClosureFeature. + 5) Make setUsersArguments() not take an argument since it only goes one way. + + * JavaScriptCore.exp: + * VM/CodeBlock.h: + (JSC::CodeBlock::CodeBlock): + * kjs/NodeInfo.h: + * kjs/Parser.cpp: + (JSC::Parser::didFinishParsing): + * kjs/Parser.h: + (JSC::Parser::parse): + * kjs/grammar.y: + * kjs/nodes.cpp: + (JSC::ScopeNode::ScopeNode): + (JSC::ProgramNode::ProgramNode): + (JSC::ProgramNode::create): + (JSC::EvalNode::EvalNode): + (JSC::EvalNode::create): + (JSC::FunctionBodyNode::FunctionBodyNode): + (JSC::FunctionBodyNode::create): + * kjs/nodes.h: + (JSC::ScopeNode::usesEval): + (JSC::ScopeNode::containsClosures): + (JSC::ScopeNode::usesArguments): + (JSC::ScopeNode::setUsesArguments): + +2008-10-03 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Maciej Stachowiak. + + Bug 21343: REGRESSSION (r37160): ecma_3/ExecutionContexts/10.1.3-1.js and js1_4/Functions/function-001.js fail on 64-bit + <https://bugs.webkit.org/show_bug.cgi?id=21343> + + A fix was landed for this issue in r37253, and the ChangeLog assumes + that it is a compiler bug, but it turns out that it is a subtle issue + with mixing signed and unsigned 32-bit values in a 64-bit environment. + In order to properly fix this bug, we should convert our signed offsets + into the register file to use ptrdiff_t. + + This may not be the only instance of this issue, but I will land this + fix first and look for more later. + + * VM/Machine.cpp: + (JSC::Machine::getArgumentsData): + * VM/Machine.h: + * kjs/Arguments.cpp: + (JSC::Arguments::getOwnPropertySlot): + * kjs/Arguments.h: + (JSC::Arguments::init): + +2008-10-03 Darin Adler <darin@apple.com> + + * VM/CTI.cpp: Another Windows build fix. Change the args of ctiTrampoline. + + * kjs/JSNumberCell.h: A build fix for newer versions of gcc. Added + declarations of JSGlobalData overloads of jsNumberCell. + +2008-10-03 Darin Adler <darin@apple.com> + + - try to fix Windows build + + * kjs/ScopeChain.h: Add forward declaration of JSGlobalData. + +2008-10-03 Darin Adler <darin@apple.com> + + Reviewed by Geoff Garen. + + - next step of https://bugs.webkit.org/show_bug.cgi?id=21295 + Turn ExecState into a call frame pointer. + + Remove m_globalObject and m_globalData from ExecState. + + SunSpider says this is a wash (slightly faster but not statistically + significant); which is good enough since it's a preparation step and + not supposed to be a spedup. + + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::JSCallbackFunction): + * kjs/ArrayConstructor.cpp: + (JSC::ArrayConstructor::ArrayConstructor): + * kjs/BooleanConstructor.cpp: + (JSC::BooleanConstructor::BooleanConstructor): + * kjs/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + * kjs/ErrorConstructor.cpp: + (JSC::ErrorConstructor::ErrorConstructor): + * kjs/FunctionPrototype.cpp: + (JSC::FunctionPrototype::FunctionPrototype): + * kjs/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + * kjs/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + * kjs/NumberConstructor.cpp: + (JSC::NumberConstructor::NumberConstructor): + * kjs/ObjectConstructor.cpp: + (JSC::ObjectConstructor::ObjectConstructor): + * kjs/PrototypeFunction.cpp: + (JSC::PrototypeFunction::PrototypeFunction): + * kjs/RegExpConstructor.cpp: + (JSC::RegExpConstructor::RegExpConstructor): + * kjs/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + Pass JSGlobalData* instead of ExecState* to the InternalFunction + constructor. + + * API/OpaqueJSString.cpp: Added now-needed include. + + * JavaScriptCore.exp: Updated. + + * VM/CTI.cpp: + (JSC::CTI::emitSlowScriptCheck): Changed to use ARGS_globalData + instead of ARGS_exec. + + * VM/CTI.h: Added a new argument to the CTI, the global data pointer. + While it's possible to get to the global data pointer using the + ExecState pointer, it's slow enough that it's better to just keep + it around in the CTI arguments. + + * VM/CodeBlock.h: Moved the CodeType enum here from ExecState.h. + + * VM/Machine.cpp: + (JSC::Machine::execute): Pass fewer arguments when constructing + ExecState, and pass the global data pointer when invoking CTI. + (JSC::Machine::firstCallFrame): Added. Used to get the dynamic global + object, which is in the scope chain of the first call frame. + (JSC::Machine::cti_op_add): Use globalData instead of exec when + possible, to keep fast cases fast, since it's now more expensive to + get to it through the exec pointer. + (JSC::Machine::cti_timeout_check): Ditto. + (JSC::Machine::cti_op_put_by_id_second): Ditto. + (JSC::Machine::cti_op_get_by_id_second): Ditto. + (JSC::Machine::cti_op_mul): Ditto. + (JSC::Machine::cti_vm_compile): Ditto. + (JSC::Machine::cti_op_get_by_val): Ditto. + (JSC::Machine::cti_op_sub): Ditto. + (JSC::Machine::cti_op_put_by_val): Ditto. + (JSC::Machine::cti_op_put_by_val_array): Ditto. + (JSC::Machine::cti_op_negate): Ditto. + (JSC::Machine::cti_op_div): Ditto. + (JSC::Machine::cti_op_pre_dec): Ditto. + (JSC::Machine::cti_op_post_inc): Ditto. + (JSC::Machine::cti_op_lshift): Ditto. + (JSC::Machine::cti_op_bitand): Ditto. + (JSC::Machine::cti_op_rshift): Ditto. + (JSC::Machine::cti_op_bitnot): Ditto. + (JSC::Machine::cti_op_mod): Ditto. + (JSC::Machine::cti_op_post_dec): Ditto. + (JSC::Machine::cti_op_urshift): Ditto. + (JSC::Machine::cti_op_bitxor): Ditto. + (JSC::Machine::cti_op_bitor): Ditto. + (JSC::Machine::cti_op_call_eval): Ditto. + (JSC::Machine::cti_op_throw): Ditto. + (JSC::Machine::cti_op_is_string): Ditto. + (JSC::Machine::cti_op_debug): Ditto. + (JSC::Machine::cti_vm_throw): Ditto. + + * VM/Machine.h: Added firstCallFrame. + + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::evaluate): Pass fewer arguments when + constructing ExecState. + + * kjs/ExecState.cpp: Deleted contents. Later we'll remove the + file altogether. + + * kjs/ExecState.h: Removed m_globalObject and m_globalData. + Moved CodeType into another header. + (JSC::ExecState::ExecState): Take only a single argument, a + call frame pointer. + (JSC::ExecState::dynamicGlobalObject): Get the object from + the first call frame since it's no longer stored. + (JSC::ExecState::globalData): Get the global data from the + scope chain, since we no longer store a pointer to it here. + (JSC::ExecState::identifierTable): Ditto. + (JSC::ExecState::propertyNames): Ditto. + (JSC::ExecState::emptyList): Ditto. + (JSC::ExecState::lexer): Ditto. + (JSC::ExecState::parser): Ditto. + (JSC::ExecState::machine): Ditto. + (JSC::ExecState::arrayTable): Ditto. + (JSC::ExecState::dateTable): Ditto. + (JSC::ExecState::mathTable): Ditto. + (JSC::ExecState::numberTable): Ditto. + (JSC::ExecState::regExpTable): Ditto. + (JSC::ExecState::regExpConstructorTable): Ditto. + (JSC::ExecState::stringTable): Ditto. + (JSC::ExecState::heap): Ditto. + + * kjs/FunctionConstructor.cpp: + (JSC::FunctionConstructor::FunctionConstructor): Pass + JSGlobalData* instead of ExecState* to the InternalFunction + constructor. + (JSC::constructFunction): Pass the global data pointer when + constructing a new scope chain. + + * kjs/InternalFunction.cpp: + (JSC::InternalFunction::InternalFunction): Take a JSGlobalData* + instead of an ExecState*. Later we can change more places to + work this way -- it's more efficient to take the type you need + since the caller might already have it. + * kjs/InternalFunction.h: Ditto. + + * kjs/JSCell.h: + (JSC::JSCell::operator new): Added an overload that takes a + JSGlobalData* so you can construct without an ExecState*. + + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::init): Moved creation of the global scope + chain in here, since it now requires a pointer to the global data. + Moved the initialization of the call frame in here since it requires + the global scope chain node. Removed the extra argument to ExecState + when creating the global ExecState*. + * kjs/JSGlobalObject.h: Removed initialization of globalScopeChain + and the call frame from the JSGlobalObjectData constructor. Added + a thisValue argument to the init function. + + * kjs/JSNumberCell.cpp: Added versions of jsNumberCell that take + JSGlobalData* rather than ExecState*. + * kjs/JSNumberCell.h: + (JSC::JSNumberCell::operator new): Added a version that takes + JSGlobalData*. + (JSC::JSNumberCell::JSNumberCell): Ditto. + (JSC::jsNumber): Ditto. + * kjs/JSString.cpp: + (JSC::jsString): Ditto. + (JSC::jsSubstring): Ditto. + (JSC::jsOwnedString): Ditto. + * kjs/JSString.h: + (JSC::JSString::JSString): Changed to take JSGlobalData*. + (JSC::jsEmptyString): Added a version that takes JSGlobalData*. + (JSC::jsSingleCharacterString): Ditto. + (JSC::jsSingleCharacterSubstring): Ditto. + (JSC::jsNontrivialString): Ditto. + (JSC::JSString::getIndex): Ditto. + (JSC::jsString): Ditto. + (JSC::jsSubstring): Ditto. + (JSC::jsOwnedString): Ditto. + + * kjs/ScopeChain.h: Added a globalData pointer to each node. + (JSC::ScopeChainNode::ScopeChainNode): Initialize the globalData + pointer. + (JSC::ScopeChainNode::push): Set the global data pointer in the + new node. + (JSC::ScopeChain::ScopeChain): Take a globalData argument. + + * kjs/SmallStrings.cpp: + (JSC::SmallStrings::createEmptyString): Take JSGlobalData* instead of + ExecState*. + (JSC::SmallStrings::createSingleCharacterString): Ditto. + * kjs/SmallStrings.h: + (JSC::SmallStrings::emptyString): Ditto. + (JSC::SmallStrings::singleCharacterString): Ditto. + +2008-10-03 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Geoff Garen. + + Bug 21343: REGRESSSION (r37160): ecma_3/ExecutionContexts/10.1.3-1.js and js1_4/Functions/function-001.js fail on 64-bit + <https://bugs.webkit.org/show_bug.cgi?id=21343> + + Add a workaround for a bug in GCC, which affects GCC 4.0, GCC 4.2, and + llvm-gcc 4.2. I put it in an #ifdef because it was a slight regression + on SunSpider in 32-bit, although that might be entirely random. + + * kjs/Arguments.cpp: + (JSC::Arguments::getOwnPropertySlot): + +2008-10-03 Darin Adler <darin@apple.com> + + Rubber stamped by Alexey Proskuryakov. + + * kjs/Shell.cpp: (main): Don't delete JSGlobalData. Later, we need to change + this tool to use public JavaScriptCore API instead. + +2008-10-03 Darin Adler <darin@apple.com> + + Suggested by Alexey Proskuryakov. + + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::~JSGlobalData): Remove call to heap.destroy() because + it's too late to ref the JSGlobalData object once it's already being + destroyed. In practice this is not a problem because WebCore's JSGlobalData + is never destroyed and JSGlobalContextRelease takes care of calling + heap.destroy() in advance. + +2008-10-02 Oliver Hunt <oliver@apple.com> + + Reviewed by Maciej Stachowiak. + + Replace SSE3 check with an SSE2 check, and implement SSE2 check on windows. + + 5.6% win on SunSpider on windows. + + * VM/CTI.cpp: + (JSC::isSSE2Present): + (JSC::CTI::compileBinaryArithOp): + (JSC::CTI::compileBinaryArithOpSlowCase): + +2008-10-03 Maciej Stachowiak <mjs@apple.com> + + Rubber stamped by Cameron Zwarich. + + - fix mistaken change of | to || which caused a big perf regression on EarleyBoyer + + * kjs/grammar.y: + +2008-10-02 Darin Adler <darin@apple.com> + + Reviewed by Geoff Garen. + + - https://bugs.webkit.org/show_bug.cgi?id=21321 + Bug 21321: speed up JavaScriptCore by inlining Heap in JSGlobalData + + 1.019x as fast on SunSpider. + + * API/JSBase.cpp: + (JSEvaluateScript): Use heap. instead of heap-> to work with the heap. + (JSCheckScriptSyntax): Ditto. + (JSGarbageCollect): Ditto. + (JSReportExtraMemoryCost): Ditto. + * API/JSContextRef.cpp: + (JSGlobalContextRetain): Ditto. + (JSGlobalContextRelease): Destroy the heap with the destroy function instead + of the delete operator. + (JSContextGetGlobalObject): Use heap. instead of heap-> to work with the heap. + * API/JSObjectRef.cpp: + (JSObjectMake): Use heap. instead of heap-> to work with the heap. + (JSObjectMakeFunctionWithCallback): Ditto. + (JSObjectMakeConstructor): Ditto. + (JSObjectMakeFunction): Ditto. + (JSObjectMakeArray): Ditto. + (JSObjectMakeDate): Ditto. + (JSObjectMakeError): Ditto. + (JSObjectMakeRegExp): Ditto. + (JSObjectHasProperty): Ditto. + (JSObjectGetProperty): Ditto. + (JSObjectSetProperty): Ditto. + (JSObjectGetPropertyAtIndex): Ditto. + (JSObjectSetPropertyAtIndex): Ditto. + (JSObjectDeleteProperty): Ditto. + (JSObjectCallAsFunction): Ditto. + (JSObjectCallAsConstructor): Ditto. + (JSObjectCopyPropertyNames): Ditto. + (JSPropertyNameAccumulatorAddName): Ditto. + * API/JSValueRef.cpp: + (JSValueIsEqual): Ditto. + (JSValueIsInstanceOfConstructor): Ditto. + (JSValueMakeNumber): Ditto. + (JSValueMakeString): Ditto. + (JSValueToNumber): Ditto. + (JSValueToStringCopy): Ditto. + (JSValueToObject): Ditto. + (JSValueProtect): Ditto. + (JSValueUnprotect): Ditto. + + * kjs/ExecState.h: + (JSC::ExecState::heap): Update to use the & operator. + + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Update to initialize a heap member + instead of calling new to make a heap. + (JSC::JSGlobalData::~JSGlobalData): Destroy the heap with the destroy + function instead of the delete operator. + * kjs/JSGlobalData.h: Change from Heap* to a Heap. + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::mark): Use the & operator here. + (JSC::JSGlobalObject::operator new): Use heap. instead of heap-> to work + with the heap. + +2008-10-02 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Geoff Garen. + + Bug 21317: Replace RegisterFile size and capacity information with Register pointers + <https://bugs.webkit.org/show_bug.cgi?id=21317> + + This is a 2.3% speedup on the V8 DeltaBlue benchmark, a 3.3% speedup on + the V8 Raytrace benchmark, and a 1.0% speedup on SunSpider. + + * VM/Machine.cpp: + (JSC::slideRegisterWindowForCall): + (JSC::Machine::callEval): + (JSC::Machine::execute): + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_construct_JSConstruct): + * VM/RegisterFile.cpp: + (JSC::RegisterFile::~RegisterFile): + * VM/RegisterFile.h: + (JSC::RegisterFile::RegisterFile): + (JSC::RegisterFile::start): + (JSC::RegisterFile::end): + (JSC::RegisterFile::size): + (JSC::RegisterFile::shrink): + (JSC::RegisterFile::grow): + (JSC::RegisterFile::lastGlobal): + (JSC::RegisterFile::markGlobals): + (JSC::RegisterFile::markCallFrames): + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::copyGlobalsTo): + +2008-10-02 Cameron Zwarich <zwarich@apple.com> + + Rubber-stamped by Darin Adler. + + Change bitwise operations introduced in r37166 to boolean operations. We + only use bitwise operations over boolean operations for increasing + performance in extremely hot code, but that does not apply to anything + in the parser. + + * kjs/grammar.y: + +2008-10-02 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Darin Adler. + + Fix for bug #21232 - should reset m_isPendingDash on flush, + and should allow '\-' as beginning or end of a range (though + not to specifiy a range itself). + + * ChangeLog: + * wrec/CharacterClassConstructor.cpp: + (JSC::CharacterClassConstructor::put): + (JSC::CharacterClassConstructor::flush): + * wrec/CharacterClassConstructor.h: + (JSC::CharacterClassConstructor::flushBeforeEscapedHyphen): + * wrec/WREC.cpp: + (JSC::WRECGenerator::generateDisjunction): + (JSC::WRECParser::parseCharacterClass): + (JSC::WRECParser::parseDisjunction): + * wrec/WREC.h: + +2008-10-02 Darin Adler <darin@apple.com> + + Reviewed by Sam Weinig. + + - remove the "static" from declarations in a header file, since we + don't want them to have internal linkage + + * VM/Machine.h: Remove the static keyword from the constant and the + three inline functions that Geoff just moved here. + +2008-10-02 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=21283. + Profiler Crashes When Started + + * VM/Machine.cpp: + * VM/Machine.h: + (JSC::makeHostCallFramePointer): + (JSC::isHostCallFrame): + (JSC::stripHostCallFrameBit): Moved some things to the header so + JSGlobalObject could use them. + + * kjs/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Call the + new makeHostCallFramePointer API, since 0 no longer indicates a host + call frame. + +2008-10-02 Alexey Proskuryakov <ap@webkit.org> + + Reviewed by Darin Adler. + + https://bugs.webkit.org/show_bug.cgi?id=21304 + Stop using a static wrapper map for WebCore JS bindings + + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + (JSC::JSGlobalData::~JSGlobalData): + (JSC::JSGlobalData::ClientData::~ClientData): + * kjs/JSGlobalData.h: + Added a client data member to JSGlobalData. WebCore will use it to store bindings-related + global data. + + * JavaScriptCore.exp: Export virtual ClientData destructor. + +2008-10-02 Geoffrey Garen <ggaren@apple.com> + + Not reviewed. + + Try to fix Qt build. + + * kjs/Error.h: + +2008-10-01 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler and Cameron Zwarich. + + Preliminary step toward dynamic recompilation: Standardized and + simplified the parsing interface. + + The main goal in this patch is to make it easy to ask for a duplicate + compilation, and get back a duplicate result -- same source URL, same + debugger / profiler ID, same toString behavior, etc. + + The basic unit of compilation and evaluation is now SourceCode, which + encompasses a SourceProvider, a range in that provider, and a starting + line number. + + A SourceProvider now encompasses a source URL, and *is* a source ID, + since a pointer is a unique identifier. + + * API/JSBase.cpp: + (JSEvaluateScript): + (JSCheckScriptSyntax): Provide a SourceCode to the Interpreter, since + other APIs are no longer supported. + + * VM/CodeBlock.h: + (JSC::EvalCodeCache::get): Provide a SourceCode to the Interpreter, since + other APIs are no longer supported. + (JSC::CodeBlock::CodeBlock): ASSERT something that used to be ASSERTed + by our caller -- this is a better bottleneck. + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): Updated for the fact that + FunctionBodyNode's parameters are no longer a WTF::Vector. + + * kjs/Arguments.cpp: + (JSC::Arguments::Arguments): ditto + + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::evaluate): Provide a SourceCode to the Parser, + since other APIs are no longer supported. + + * kjs/FunctionConstructor.cpp: + (JSC::constructFunction): Provide a SourceCode to the Parser, since + other APIs are no longer supported. Adopt FunctionBodyNode's new + "finishParsing" API. + + * kjs/JSFunction.cpp: + (JSC::JSFunction::lengthGetter): + (JSC::JSFunction::getParameterName): Updated for the fact that + FunctionBodyNode's parameters are no longer a wtf::Vector. + + * kjs/JSFunction.h: Nixed some cruft. + + * kjs/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): Provide a SourceCode to the Parser, since + other APIs are no longer supported. + + * kjs/Parser.cpp: + (JSC::Parser::parse): Require a SourceCode argument, instead of a bunch + of broken out parameters. Stop tracking sourceId as an integer, since we + use the SourceProvider pointer for this now. Don't clamp the + startingLineNumber, since SourceCode does that now. + + * kjs/Parser.h: + (JSC::Parser::parse): Standardized the parsing interface to require a + SourceCode. + + * kjs/Shell.cpp: + (functionRun): + (functionLoad): + (prettyPrintScript): + (runWithScripts): + (runInteractive): Provide a SourceCode to the Interpreter, since + other APIs are no longer supported. + + * kjs/SourceProvider.h: + (JSC::SourceProvider::SourceProvider): + (JSC::SourceProvider::url): + (JSC::SourceProvider::asId): + (JSC::UStringSourceProvider::create): + (JSC::UStringSourceProvider::UStringSourceProvider): Added new + responsibilities described above. + + * kjs/SourceRange.h: + (JSC::SourceCode::SourceCode): + (JSC::SourceCode::toString): + (JSC::SourceCode::provider): + (JSC::SourceCode::firstLine): + (JSC::SourceCode::data): + (JSC::SourceCode::length): Added new responsibilities described above. + Renamed SourceRange to SourceCode, based on review feedback. Added + a makeSource function for convenience. + + * kjs/debugger.h: Provide a SourceCode to the client, since other APIs + are no longer supported. + + * kjs/grammar.y: Provide startingLineNumber when creating a SourceCode. + + * kjs/debugger.h: Treat sourceId as intptr_t to avoid loss of precision + on 64bit platforms. + + * kjs/interpreter.cpp: + (JSC::Interpreter::checkSyntax): + (JSC::Interpreter::evaluate): + * kjs/interpreter.h: Require a SourceCode instead of broken out arguments. + + * kjs/lexer.cpp: + (JSC::Lexer::setCode): + * kjs/lexer.h: + (JSC::Lexer::sourceRange): Fold together the SourceProvider and line number + into a SourceCode. Fixed a bug where the Lexer would accidentally keep + alive the last SourceProvider forever. + + * kjs/nodes.cpp: + (JSC::ScopeNode::ScopeNode): + (JSC::ProgramNode::ProgramNode): + (JSC::ProgramNode::create): + (JSC::EvalNode::EvalNode): + (JSC::EvalNode::generateCode): + (JSC::EvalNode::create): + (JSC::FunctionBodyNode::FunctionBodyNode): + (JSC::FunctionBodyNode::finishParsing): + (JSC::FunctionBodyNode::create): + (JSC::FunctionBodyNode::generateCode): + (JSC::ProgramNode::generateCode): + (JSC::FunctionBodyNode::paramString): + * kjs/nodes.h: + (JSC::ScopeNode::): + (JSC::ScopeNode::sourceId): + (JSC::FunctionBodyNode::): + (JSC::FunctionBodyNode::parameterCount): + (JSC::FuncExprNode::): + (JSC::FuncDeclNode::): Store a SourceCode in all ScopeNodes, since + SourceCode is now responsible for tracking URL, ID, etc. Streamlined + some ad hoc FunctionBodyNode fixups into a "finishParsing" function, to + help make clear what you need to do in order to finish parsing a + FunctionBodyNode. + + * wtf/Vector.h: + (WTF::::releaseBuffer): Don't ASSERT that releaseBuffer() is only called + when buffer is not 0, since FunctionBodyNode is more than happy + to get back a 0 buffer, and other functions like RefPtr::release() allow + for 0, too. + +2008-10-01 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Maciej Stachowiak. + + Bug 21289: REGRESSION (r37160): Inspector crashes on load + <https://bugs.webkit.org/show_bug.cgi?id=21289> + + The code in Arguments::mark() in r37160 was wrong. It marks indices in + d->registers, but that makes no sense (they are local variables, not + arguments). It should mark those indices in d->registerArray instead. + + This patch also changes Arguments::copyRegisters() to use d->numParameters + instead of recomputing it. + + * kjs/Arguments.cpp: + (JSC::Arguments::mark): + * kjs/Arguments.h: + (JSC::Arguments::copyRegisters): + +2008-09-30 Darin Adler <darin@apple.com> + + Reviewed by Eric Seidel. + + - https://bugs.webkit.org/show_bug.cgi?id=21214 + work on getting rid of ExecState + + Eliminate some unneeded uses of dynamicGlobalObject. + + * API/JSClassRef.cpp: + (OpaqueJSClass::contextData): Changed to use a map in the global data instead + of on the global object. Also fixed to use only a single hash table lookup. + + * API/JSObjectRef.cpp: + (JSObjectMakeConstructor): Use lexicalGlobalObject rather than dynamicGlobalObject + to get the object prototype. + + * kjs/ArrayPrototype.cpp: + (JSC::arrayProtoFuncToString): Use arrayVisitedElements set in global data rather + than in the global object. + (JSC::arrayProtoFuncToLocaleString): Ditto. + (JSC::arrayProtoFuncJoin): Ditto. + + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): Don't initialize opaqueJSClassData, since + it's no longer a pointer. + (JSC::JSGlobalData::~JSGlobalData): We still need to delete all the values, but + we don't need to delete the map since it's no longer a pointer. + + * kjs/JSGlobalData.h: Made opaqueJSClassData a map instead of a pointer to a map. + Also added arrayVisitedElements. + + * kjs/JSGlobalObject.h: Removed arrayVisitedElements. + + * kjs/Shell.cpp: + (functionRun): Use lexicalGlobalObject instead of dynamicGlobalObject. + (functionLoad): Ditto. + +2008-10-01 Cameron Zwarich <zwarich@apple.com> + + Not reviewed. + + Speculative Windows build fix. + + * kjs/grammar.y: + +2008-10-01 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Darin Adler. + + Bug 21123: using "arguments" in a function should not force creation of an activation object + <https://bugs.webkit.org/show_bug.cgi?id=21123> + + Make the 'arguments' object not require a JSActivation. We store the + 'arguments' object in the OptionalCalleeArguments call frame slot. We + need to be able to get the original 'arguments' object to tear it off + when returning from a function, but 'arguments' may be assigned to in a + number of ways. + + Therefore, we use the OptionalCalleeArguments slot when we want to get + the original activation or we know that 'arguments' was not assigned a + different value. When 'arguments' may have been assigned a new value, + we use a new local variable that is initialized with 'arguments'. Since + a function parameter named 'arguments' may overwrite the value of + 'arguments', we also need to be careful to look up 'arguments' in the + symbol table, so we get the parameter named 'arguments' instead of the + local variable that we have added for holding the 'arguments' object. + + This is a 19.1% win on the V8 Raytrace benchmark using the SunSpider + harness, and a 20.7% win using the V8 harness. This amounts to a 6.5% + total speedup on the V8 benchmark suite using the V8 harness. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/CodeBlock.h: + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): + * VM/Machine.cpp: + (JSC::Machine::unwindCallFrame): + (JSC::Machine::privateExecute): + (JSC::Machine::retrieveArguments): + (JSC::Machine::cti_op_init_arguments): + (JSC::Machine::cti_op_ret_activation_arguments): + * VM/Machine.h: + * VM/RegisterFile.h: + (JSC::RegisterFile::): + * kjs/Arguments.cpp: + (JSC::Arguments::mark): + (JSC::Arguments::fillArgList): + (JSC::Arguments::getOwnPropertySlot): + (JSC::Arguments::put): + * kjs/Arguments.h: + (JSC::Arguments::setRegisters): + (JSC::Arguments::init): + (JSC::Arguments::Arguments): + (JSC::Arguments::copyRegisters): + (JSC::JSActivation::copyRegisters): + * kjs/JSActivation.cpp: + (JSC::JSActivation::argumentsGetter): + * kjs/JSActivation.h: + (JSC::JSActivation::JSActivationData::JSActivationData): + * kjs/grammar.y: + * kjs/nodes.h: + (JSC::ScopeNode::setUsesArguments): + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::orl_mr): + +2008-10-01 Kevin McCullough <kmccullough@apple.com> + + Rubberstamped by Geoff Garen. + + Remove BreakpointCheckStatement because it's not used anymore. + No effect on sunspider or the jsc tests. + + * kjs/nodes.cpp: + * kjs/nodes.h: + +2008-09-30 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoff Garen. + + Improve performance of CTI on windows. + + Currently on platforms where the compiler doesn't allow us to safely + index relative to the address of a parameter we need to actually + provide a pointer to CTI runtime call arguments. This patch improves + performance in this case by making the CTI logic for restoring this + parameter much less conservative by only resetting it before we actually + make a call, rather than between each and every SF bytecode we generate + code for. + + This results in a 3.6% progression on the v8 benchmark when compiled with MSVC. + + * VM/CTI.cpp: + (JSC::CTI::emitCall): + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompilePutByIdTransition): + * VM/CTI.h: + * masm/X86Assembler.h: + * wtf/Platform.h: + +2008-09-30 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Oliver Hunt. + + - track uses of "this", "with" and "catch" in the parser + + Knowing this up front will be useful for future optimizations. + + Perf and correctness remain the same. + + * kjs/NodeInfo.h: + * kjs/grammar.y: + +2008-09-30 Sam Weinig <sam@webkit.org> + + Reviewed by Mark Rowe. + + Add WebKitAvailability macros for JSObjectMakeArray, JSObjectMakeDate, JSObjectMakeError, + and JSObjectMakeRegExp + + * API/JSObjectRef.h: + +2008-09-30 Darin Adler <darin@apple.com> + + Reviewed by Geoff Garen. + + - https://bugs.webkit.org/show_bug.cgi?id=21214 + work on getting rid of ExecState + + Replaced the m_prev field of ExecState with a bit in the + call frame pointer to indicate "host" call frames. + + * VM/Machine.cpp: + (JSC::makeHostCallFramePointer): Added. Sets low bit. + (JSC::isHostCallFrame): Added. Checks low bit. + (JSC::stripHostCallFrameBit): Added. Clears low bit. + (JSC::Machine::unwindCallFrame): Replaced null check that was + formerly used to detect host call frames with an isHostCallFrame check. + (JSC::Machine::execute): Pass in a host call frame pointer rather than + always passing 0 when starting execution from the host. This allows us + to follow the entire call frame pointer chain when desired, or to stop + at the host calls when that's desired. + (JSC::Machine::privateExecute): Replaced null check that was + formerly used to detect host call frames with an isHostCallFrame check. + (JSC::Machine::retrieveCaller): Ditto. + (JSC::Machine::retrieveLastCaller): Ditto. + (JSC::Machine::callFrame): Removed the code to walk up m_prev pointers + and replaced it with code that uses the caller pointer and uses the + stripHostCallFrameBit function. + + * kjs/ExecState.cpp: Removed m_prev. + * kjs/ExecState.h: Ditto. + +2008-09-30 Cameron Zwarich <zwarich@apple.com> + + Reviewed by Geoff Garen. + + Move all detection of 'arguments' in a lexical scope to the parser, in + preparation for fixing + + Bug 21123: using "arguments" in a function should not force creation of an activation object + <https://bugs.webkit.org/show_bug.cgi?id=21123> + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): + * kjs/NodeInfo.h: + * kjs/grammar.y: + +2008-09-30 Geoffrey Garen <ggaren@apple.com> + + Not reviewed. + + * kjs/Shell.cpp: + (runWithScripts): Fixed indentation. + +2008-09-30 Mark Rowe <mrowe@apple.com> + + Rubber-stamped by Sam Weinig. + + Build fix. Move InternalFunction::classInfo implementation into the .cpp + file to prevent the vtable for InternalFunction being generated as a weak symbol. + Has no effect on SunSpider. + + * kjs/InternalFunction.cpp: + (JSC::InternalFunction::classInfo): + * kjs/InternalFunction.h: + +2008-09-29 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Darin Adler. + + - optimize appending a number to a string + https://bugs.webkit.org/show_bug.cgi?id=21203 + + It's pretty common in real-world code (and on some of the v8 + benchmarks) to append a number to a string, so I made this one of + the fast cases, and also added support to UString to do it + directly without allocating a temporary UString. + + ~1% speedup on v8 benchmark. + + * VM/Machine.cpp: + (JSC::jsAddSlowCase): Make this NEVER_INLINE because somehow otherwise + the change is a regression. + (JSC::jsAdd): Handle number + string special case. + (JSC::Machine::cti_op_add): Integrate much of the logic of jsAdd to + avoid exception check in the str + str, num + num and str + num cases. + * kjs/ustring.cpp: + (JSC::expandedSize): Make this a non-member function, since it needs to be + called in non-member functions but not outside this file. + (JSC::expandCapacity): Ditto. + (JSC::UString::expandCapacity): Call the non-member version. + (JSC::createRep): Helper to make a rep from a char*. + (JSC::UString::UString): Use above helper. + (JSC::concatenate): Guts of concatenating constructor for cases where first + item is a UString::Rep, and second is a UChar* and length, or a char*. + (JSC::UString::append): Implement for cases where first item is a UString::Rep, + and second is an int or double. Sadly duplicates logic of UString::from(int) + and UString::from(double). + * kjs/ustring.h: + +2008-09-29 Darin Adler <darin@apple.com> + + Reviewed by Sam Weinig. + + - https://bugs.webkit.org/show_bug.cgi?id=21214 + work on getting rid of ExecState + + * JavaScriptCore.exp: Updated since JSGlobalObject::init + no longer takes a parameter. + + * VM/Machine.cpp: + (JSC::Machine::execute): Removed m_registerFile argument + for ExecState constructors. + + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::evaluate): Removed globalThisValue + argument for ExecState constructor. + + * kjs/ExecState.cpp: + (JSC::ExecState::ExecState): Removed globalThisValue and + registerFile arguments to constructors. + + * kjs/ExecState.h: Removed m_globalThisValue and + m_registerFile data members. + + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::init): Removed globalThisValue + argument for ExecState constructor. + + * kjs/JSGlobalObject.h: + (JSC::JSGlobalObject::JSGlobalObject): Got rid of parameter + for the init function. + +2008-09-29 Geoffrey Garen <ggaren@apple.com> + + Rubber-stamped by Cameron Zwarich. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=21225 + Machine::retrieveLastCaller should check for a NULL codeBlock + + In order to crash, you would need to call retrieveCaller in a situation + where you had two host call frames in a row in the register file. I + don't know how to make that happen, or if it's even possible, so I don't + have a test case -- but better safe than sorry! + + * VM/Machine.cpp: + (JSC::Machine::retrieveLastCaller): + +2008-09-29 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Cameron Zwarich. + + Store the callee ScopeChain, not the caller ScopeChain, in the call frame + header. Nix the "scopeChain" local variable and ExecState::m_scopeChain, and + access the callee ScopeChain through the call frame header instead. + + Profit: call + return are simpler, because they don't have to update the + "scopeChain" local variable, or ExecState::m_scopeChain. + + Because CTI keeps "r" in a register, reading the callee ScopeChain relative + to "r" can be very fast, in any cases we care to optimize. + + 0% speedup on empty function call benchmark. (5.5% speedup in bytecode.) + 0% speedup on SunSpider. (7.5% speedup on controlflow-recursive.) + 2% speedup on SunSpider --v8. + 2% speedup on v8 benchmark. + + * VM/CTI.cpp: Changed scope chain access to read the scope chain from + the call frame header. Sped up op_ret by changing it not to fuss with + the "scopeChain" local variable or ExecState::m_scopeChain. + + * VM/CTI.h: Updated CTI trampolines not to take a ScopeChainNode* + argument, since that's stored in the call frame header now. + + * VM/Machine.cpp: Access "scopeChain" and "codeBlock" through new helper + functions that read from the call frame header. Updated functions operating + on ExecState::m_callFrame to account for / take advantage of the fact that + Exec:m_callFrame is now never NULL. + + Fixed a bug in op_construct, where it would use the caller's default + object prototype, rather than the callee's, when constructing a new object. + + * VM/Machine.h: Made some helper functions available. Removed + ScopeChainNode* arguments to a lot of functions, since the ScopeChainNode* + is now stored in the call frame header. + + * VM/RegisterFile.h: Renamed "CallerScopeChain" to "ScopeChain", since + that's what it is now. + + * kjs/DebuggerCallFrame.cpp: Updated for change to ExecState signature. + + * kjs/ExecState.cpp: + * kjs/ExecState.h: Nixed ExecState::m_callFrame, along with the unused + isGlobalObject function. + + * kjs/JSGlobalObject.cpp: + * kjs/JSGlobalObject.h: Gave the global object a fake call frame in + which to store the global scope chain, since our code now assumes that + it can always read the scope chain out of the ExecState's call frame. + +2008-09-29 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Sam Weinig. + + Remove the isActivationObject() virtual method on JSObject and use + StructureID information instead. This should be slightly faster, but + isActivationObject() is only used in assertions and unwinding the stack + for exceptions. + + * VM/Machine.cpp: + (JSC::depth): + (JSC::Machine::unwindCallFrame): + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_ret_activation): + * kjs/JSActivation.cpp: + * kjs/JSActivation.h: + * kjs/JSObject.h: + +2008-09-29 Peter Gal <galpeter@inf.u-szeged.hu> + + Reviewed and tweaked by Darin Adler. + + Fix build for non-all-in-one platforms. + + * kjs/StringPrototype.cpp: Added missing ASCIICType.h include. + +2008-09-29 Bradley T. Hughes <bradley.hughes@nokia.com> + + Reviewed by Simon Hausmann. + + Fix compilation with icpc + + * wtf/HashSet.h: + (WTF::::find): + (WTF::::contains): + +2008-09-29 Thiago Macieira <thiago.macieira@nokia.com> + + Reviewed by Simon Hausmann. + + Changed copyright from Trolltech ASA to Nokia. + + Nokia acquired Trolltech ASA, assets were transferred on September 26th 2008. + + + * wtf/qt/MainThreadQt.cpp: + +2008-09-29 Simon Hausmann <hausmann@webkit.org> + + Reviewed by Lars Knoll. + + Don't accidentially install libJavaScriptCore.a for the build inside + Qt. + + * JavaScriptCore.pro: + +2008-09-28 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Bug 21200: Allow direct access to 'arguments' without using op_resolve + <https://bugs.webkit.org/show_bug.cgi?id=21200> + + Allow fast access to the 'arguments' object by adding an extra slot to + the callframe to store it. + + This is a 3.0% speedup on the V8 Raytrace benchmark. + + * JavaScriptCore.exp: + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): + (JSC::CodeGenerator::registerFor): + * VM/CodeGenerator.h: + (JSC::CodeGenerator::registerFor): + * VM/Machine.cpp: + (JSC::Machine::initializeCallFrame): + (JSC::Machine::dumpRegisters): + (JSC::Machine::privateExecute): + (JSC::Machine::retrieveArguments): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_create_arguments): + (JSC::Machine::cti_op_construct_JSConstruct): + * VM/Machine.h: + * VM/Opcode.h: + * VM/RegisterFile.h: + (JSC::RegisterFile::): + * kjs/JSActivation.cpp: + (JSC::JSActivation::mark): + (JSC::JSActivation::argumentsGetter): + * kjs/JSActivation.h: + (JSC::JSActivation::JSActivationData::JSActivationData): + * kjs/NodeInfo.h: + * kjs/Parser.cpp: + (JSC::Parser::didFinishParsing): + * kjs/Parser.h: + (JSC::Parser::parse): + * kjs/grammar.y: + * kjs/nodes.cpp: + (JSC::ScopeNode::ScopeNode): + (JSC::ProgramNode::ProgramNode): + (JSC::ProgramNode::create): + (JSC::EvalNode::EvalNode): + (JSC::EvalNode::create): + (JSC::FunctionBodyNode::FunctionBodyNode): + (JSC::FunctionBodyNode::create): + * kjs/nodes.h: + (JSC::ScopeNode::usesArguments): + +2008-09-28 Mark Rowe <mrowe@apple.com> + + Reviewed by Sam Weinig. + + Add an ASCII fast-path to toLowerCase and toUpperCase. + + The fast path speeds up the common case of an ASCII-only string by up to 60% while adding a less than 5% penalty + to the less common non-ASCII case. + + This also removes stringProtoFuncToLocaleLowerCase and stringProtoFuncToLocaleUpperCase, which were identical + to the non-locale variants of the functions. toLocaleLowerCase and toLocaleUpperCase now use the non-locale + variants of the functions directly. + + * kjs/StringPrototype.cpp: + (JSC::stringProtoFuncToLowerCase): + (JSC::stringProtoFuncToUpperCase): + +2008-09-28 Mark Rowe <mrowe@apple.com> + + Reviewed by Cameron Zwarich. + + Speed up parseInt and parseFloat. + + Repeatedly indexing into a UString is slow, so retrieve a pointer into the underlying buffer once up front + and use that instead. This is a 7% win on a parseInt/parseFloat micro-benchmark. + + * kjs/JSGlobalObjectFunctions.cpp: + (JSC::parseInt): + (JSC::parseFloat): + +2008-09-28 Simon Hausmann <hausmann@webkit.org> + + Reviewed by David Hyatt. + + In Qt's initializeThreading re-use an existing thread identifier for the main + thread if it exists. + + currentThread() implicitly creates new identifiers and it could be that + it is called before initializeThreading(). + + * wtf/ThreadingQt.cpp: + (WTF::initializeThreading): + +2008-09-27 Keishi Hattori <casey.hattori@gmail.com> + + Added Machine::retrieveCaller to the export list. + + Reviewed by Kevin McCullough and Tim Hatcher. + + * JavaScriptCore.exp: Added Machine::retrieveCaller. + +2008-09-27 Anders Carlsson <andersca@apple.com> + + Fix build. + + * VM/CTI.cpp: + (JSC::): + +2008-09-27 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Cameron Zwarich. + + https://bugs.webkit.org/show_bug.cgi?id=21175 + + Store the callee CodeBlock, not the caller CodeBlock, in the call frame + header. Nix the "codeBlock" local variable, and access the callee + CodeBlock through the call frame header instead. + + Profit: call + return are simpler, because they don't have to update the + "codeBlock" local variable. + + Because CTI keeps "r" in a register, reading the callee CodeBlock relative + to "r" can be very fast, in any cases we care to optimize. Presently, + no such cases seem important. + + Also, stop writing "dst" to the call frame header. CTI doesn't use it. + + 21.6% speedup on empty function call benchmark. + 3.8% speedup on SunSpider --v8. + 2.1% speedup on v8 benchmark. + 0.7% speedup on SunSpider (6% speedup on controlflow-recursive). + + Small regression in bytecode, because currently every op_ret reads the + callee CodeBlock to check needsFullScopeChain, and bytecode does not + keep "r" in a register. On-balance, this is probably OK, since CTI is + our high-performance execution model. Also, this should go away once + we make needsFullScopeChain statically determinable at parse time. + + * VM/CTI.cpp: + (JSC::CTI::compileOpCall): The speedup! + (JSC::CTI::privateCompileSlowCases): ditto + + * VM/CTI.h: + (JSC::): Fixed up magic trampoline constants to account for the nixed + "codeBlock" argument. + (JSC::CTI::execute): Changed trampoline function not to take a "codeBlock" + argument, since codeBlock is now stored in the call frame header. + + * VM/Machine.cpp: Read the callee CodeBlock from the register file. Use + a NULL CallerRegisters in the call frame header to signal a built-in + caller, since CodeBlock is now never NULL. + + * VM/Machine.h: Made some stand-alone functions Machine member functions + so they could call the private codeBlock() accessor in the Register + class, of which Machine is a friend. Renamed "CallerCodeBlock" to + "CodeBlock", since it's no longer the caller's CodeBlock. + + * VM/RegisterFile.h: Marked some methods const to accommodate a + const RegisterFile* being passed around in Machine.cpp. + +2008-09-26 Jan Michael Alonzo <jmalonzo@webkit.org> + + Gtk build fix. Not reviewed. + + Narrow-down the target of the JavaScriptCore .lut.h generator so + it won't try to create the WebCore .lut.hs. + + * GNUmakefile.am: + +2008-09-26 Matt Lilek <webkit@mattlilek.com> + + Reviewed by Tim Hatcher. + + Update FEATURE_DEFINES after ENABLE_CROSS_DOCUMENT_MESSAGING was removed. + + * Configurations/JavaScriptCore.xcconfig: + +2008-09-26 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Rubber-stamped by Anders Carlson. + + Change the name 'sc' to 'scopeChainNode' in a few places. + + * kjs/nodes.cpp: + (JSC::EvalNode::generateCode): + (JSC::FunctionBodyNode::generateCode): + (JSC::ProgramNode::generateCode): + +2008-09-26 Sam Weinig <sam@webkit.org> + + Reviewed by Darin Adler. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=21152 + Speedup static property get/put + + Convert getting/setting static property values to use static functions + instead of storing an integer and switching in getValueProperty/putValueProperty. + + * kjs/JSObject.cpp: + (JSC::JSObject::deleteProperty): + (JSC::JSObject::getPropertyAttributes): + * kjs/MathObject.cpp: + (JSC::MathObject::getOwnPropertySlot): + * kjs/NumberConstructor.cpp: + (JSC::numberConstructorNaNValue): + (JSC::numberConstructorNegInfinity): + (JSC::numberConstructorPosInfinity): + (JSC::numberConstructorMaxValue): + (JSC::numberConstructorMinValue): + * kjs/PropertySlot.h: + (JSC::PropertySlot::): + * kjs/RegExpConstructor.cpp: + (JSC::regExpConstructorDollar1): + (JSC::regExpConstructorDollar2): + (JSC::regExpConstructorDollar3): + (JSC::regExpConstructorDollar4): + (JSC::regExpConstructorDollar5): + (JSC::regExpConstructorDollar6): + (JSC::regExpConstructorDollar7): + (JSC::regExpConstructorDollar8): + (JSC::regExpConstructorDollar9): + (JSC::regExpConstructorInput): + (JSC::regExpConstructorMultiline): + (JSC::regExpConstructorLastMatch): + (JSC::regExpConstructorLastParen): + (JSC::regExpConstructorLeftContext): + (JSC::regExpConstructorRightContext): + (JSC::setRegExpConstructorInput): + (JSC::setRegExpConstructorMultiline): + (JSC::RegExpConstructor::setInput): + (JSC::RegExpConstructor::setMultiline): + (JSC::RegExpConstructor::multiline): + * kjs/RegExpConstructor.h: + * kjs/RegExpObject.cpp: + (JSC::regExpObjectGlobal): + (JSC::regExpObjectIgnoreCase): + (JSC::regExpObjectMultiline): + (JSC::regExpObjectSource): + (JSC::regExpObjectLastIndex): + (JSC::setRegExpObjectLastIndex): + * kjs/RegExpObject.h: + (JSC::RegExpObject::setLastIndex): + (JSC::RegExpObject::lastIndex): + (JSC::RegExpObject::RegExpObjectData::RegExpObjectData): + * kjs/StructureID.cpp: + (JSC::StructureID::getEnumerablePropertyNames): + * kjs/create_hash_table: + * kjs/lexer.cpp: + (JSC::Lexer::lex): + * kjs/lookup.cpp: + (JSC::HashTable::createTable): + (JSC::HashTable::deleteTable): + (JSC::setUpStaticFunctionSlot): + * kjs/lookup.h: + (JSC::HashEntry::initialize): + (JSC::HashEntry::setKey): + (JSC::HashEntry::key): + (JSC::HashEntry::attributes): + (JSC::HashEntry::function): + (JSC::HashEntry::functionLength): + (JSC::HashEntry::propertyGetter): + (JSC::HashEntry::propertyPutter): + (JSC::HashEntry::lexerValue): + (JSC::HashEntry::): + (JSC::HashTable::entry): + (JSC::getStaticPropertySlot): + (JSC::getStaticValueSlot): + (JSC::lookupPut): + +2008-09-26 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Maciej Stachowiak & Oliver Hunt. + + Add support for reusing temporary JSNumberCells. This change is based on the observation + that if the result of certain operations is a JSNumberCell and is consumed by a subsequent + operation that would produce a JSNumberCell, we can reuse the object rather than allocating + a fresh one. E.g. given the expression ((a * b) * c), we can statically determine that + (a * b) will have a numeric result (or else it will have thrown an exception), so the result + will either be a JSNumberCell or a JSImmediate. + + This patch changes three areas of JSC: + * The AST now tracks type information about the result of each node. + * This information is consumed in bytecode compilation, and certain bytecode operations + now carry the statically determined type information about their operands. + * CTI uses the information in a number of fashions: + * Where an operand to certain arithmetic operations is reusable, it will plant code + to try to perform the operation in JIT code & reuse the cell, where appropriate. + * Where it can be statically determined that an operand can only be numeric (typically + the result of another arithmetic operation) the code will not redundantly check that + the JSCell is a JSNumberCell. + * Where either of the operands to an add are non-numeric do not plant an optimized + arithmetic code path, just call straight out to the C function. + + +6% Sunspider (10% progression on 3D, 16% progression on math, 60% progression on access-nbody), + +1% v8-tests (improvements in raytrace & crypto) + + * VM/CTI.cpp: Add optimized code generation with reuse of temporary JSNumberCells. + * VM/CTI.h: + * kjs/JSNumberCell.h: + * masm/X86Assembler.h: + + * VM/CodeBlock.cpp: Add type information to specific bytecodes. + * VM/CodeGenerator.cpp: + * VM/CodeGenerator.h: + * VM/Machine.cpp: + + * kjs/nodes.cpp: Track static type information for nodes. + * kjs/nodes.h: + * kjs/ResultDescriptor.h: (Added) + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-09-26 Yichao Yin <yichao.yin@torchmobile.com.cn> + + Reviewed by George Staikos, Maciej Stachowiak. + + Add utility functions needed for upcoming WML code. + + * wtf/ASCIICType.h: + (WTF::isASCIIPrintable): + +2008-09-26 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + Reverted the part of r36614 that used static data because static data + is not thread-safe. + +2008-09-26 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Maciej Stachowiak. + + Removed dynamic check for whether the callee needs an activation object. + Replaced with callee code to create the activation object. + + 0.5% speedup on SunSpider. + No change on v8 benchmark. (Might be a speedup, but it's in range of the + variance.) + + 0.7% speedup on v8 benchmark in bytecode. + 1.3% speedup on empty call benchmark in bytecode. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): Added support for op_init_activation, + the new opcode that specifies that the callee's initialization should + create an activation object. + (JSC::CTI::privateCompile): Removed previous code that did a similar + thing in an ad-hoc way. + + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): Added a case for dumping op_init_activation. + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::generate): Added fixup code to change op_init to + op_init_activation if necessary. (With a better parser, we would know + which to use from the beginning.) + + * VM/Instruction.h: + (JSC::Instruction::Instruction): + (WTF::): Faster traits for the instruction vector. An earlier version + of this patch relied on inserting at the beginning of the vector, and + depended on this change for speed. + + * VM/Machine.cpp: + (JSC::Machine::execute): Removed clients of setScopeChain, the old + abstraction for dynamically checking for whether an activation object + needed to be created. + (JSC::Machine::privateExecute): ditto + + (JSC::Machine::cti_op_push_activation): Renamed this function from + cti_vm_updateScopeChain, and made it faster by removing the call to + setScopeChain. + * VM/Machine.h: + + * VM/Opcode.h: Declared op_init_activation. + +2008-09-24 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Maciej Stachowiak. + + Move most of the return code back into the callee, now that the callee + doesn't have to calculate anything dynamically. + + 11.5% speedup on empty function call benchmark. + + SunSpider says 0.3% faster. SunSpider --v8 says no change. + + * VM/CTI.cpp: + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + +2008-09-24 Sam Weinig <sam@webkit.org> + + Reviewed by Maciej Stachowiak. + + Remove staticFunctionGetter. There is only one remaining user of + staticFunctionGetter and it can be converted to use setUpStaticFunctionSlot. + + * JavaScriptCore.exp: + * kjs/lookup.cpp: + * kjs/lookup.h: + +2008-09-24 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Oliver Hunt. + + - inline JIT fast case of op_neq + - remove extra level of function call indirection from slow cases of eq and neq + + 1% speedup on Richards + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_eq): + (JSC::Machine::cti_op_neq): + * kjs/operations.cpp: + (JSC::equal): + (JSC::equalSlowCase): + * kjs/operations.h: + (JSC::equalSlowCaseInline): + +2008-09-24 Sam Weinig <sam@webkit.org> + + Reviewed by Darin Adler. + + Fix for https://bugs.webkit.org/show_bug.cgi?id=21080 + <rdar://problem/6243534> + Crash below Function.apply when using a runtime array as the argument list + + Test: plugins/bindings-array-apply-crash.html + + * kjs/FunctionPrototype.cpp: + (JSC::functionProtoFuncApply): Revert to the slow case if the object inherits from + JSArray (via ClassInfo) but is not a JSArray. + +2008-09-24 Kevin McCullough <kmccullough@apple.com> + + Style change. + + * kjs/nodes.cpp: + (JSC::statementListEmitCode): + +2008-09-24 Kevin McCullough <kmccullough@apple.com> + + Reviewed by Geoff. + + Bug 21031: Breakpoints in the condition of loops only breaks the first + time + - Now when setting breakpoints in the condition of a loop (for, while, + for in, and do while) will successfully break each time throught the + loop. + - For 'for' loops we need a little more complicated behavior that cannot + be accomplished without some more significant changes: + https://bugs.webkit.org/show_bug.cgi?id=21073 + + * kjs/nodes.cpp: + (JSC::statementListEmitCode): We don't want to blindly emit a debug hook + at the first line of loops, instead let the loop emit the debug hooks. + (JSC::DoWhileNode::emitCode): + (JSC::WhileNode::emitCode): + (JSC::ForNode::emitCode): + (JSC::ForInNode::emitCode): + * kjs/nodes.h: + (JSC::StatementNode::): + (JSC::DoWhileNode::): + (JSC::WhileNode::): + (JSC::ForInNode::): + +2008-09-24 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + Fixed <rdar://problem/5605532> Need a SPI for telling JS the size of + the objects it retains + + * API/tests/testapi.c: Test the new SPI a little. + + * API/JSSPI.cpp: Add the new SPI. + * API/JSSPI.h: Add the new SPI. + * JavaScriptCore.exp: Add the new SPI. + * JavaScriptCore.xcodeproj/project.pbxproj: Add the new SPI. + +2008-09-24 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + * API/JSBase.h: Filled in some missing function names. + +2008-09-24 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Cameron Zwarich. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=21057 + Crash in RegisterID::deref() running fast/canvas/canvas-putImageData.html + + * VM/CodeGenerator.h: Changed declaration order to ensure the + m_lastConstant, which is a RefPtr that points into m_calleeRegisters, + has its destructor called before the destructor for m_calleeRegisters. + +2008-09-24 Darin Adler <darin@apple.com> + + Reviewed by Sam Weinig. + + - https://bugs.webkit.org/show_bug.cgi?id=21047 + speed up ret_activation with inlining + + About 1% on v8-raytrace. + + * JavaScriptCore.exp: Removed JSVariableObject::setRegisters. + + * kjs/JSActivation.cpp: Moved copyRegisters to the header to make it inline. + * kjs/JSActivation.h: + (JSC::JSActivation::copyRegisters): Moved here. Also removed the registerArraySize + argument to setRegisters, since the object doesn't need to store the number of + registers. + + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): Removed unnecessary clearing left over from when we + used this on objects that weren't brand new. These days, this function is really + just part of the constructor. + + * kjs/JSGlobalObject.h: Added registerArraySize to JSGlobalObjectData, since + JSVariableObjectData no longer needs it. Added a setRegisters override here + that handles storing the size. + + * kjs/JSStaticScopeObject.h: Removed code to set registerArraySize, since it + no longer exists. + + * kjs/JSVariableObject.cpp: Moved copyRegisterArray and setRegisters to the + header to make them inline. + * kjs/JSVariableObject.h: Removed registerArraySize from JSVariableObjectData, + since it was only used for the global object. + (JSC::JSVariableObject::copyRegisterArray): Moved here ot make it inline. + (JSC::JSVariableObject::setRegisters): Moved here to make it inline. Also + removed the code to set registerArraySize and changed an if statement into + an assert to save an unnnecessary branch. + +2008-09-24 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Oliver Hunt. + + - inline PropertyMap::getOffset to speed up polymorphic lookups + + ~1.5% speedup on v8 benchmark + no effect on SunSpider + + * JavaScriptCore.exp: + * kjs/PropertyMap.cpp: + * kjs/PropertyMap.h: + (JSC::PropertyMap::getOffset): + +2008-09-24 Jan Michael Alonzo <jmalonzo@webkit.org> + + Reviewed by Alp Toker. + + https://bugs.webkit.org/show_bug.cgi?id=20992 + Build fails on GTK+ Mac OS + + * wtf/ThreadingGtk.cpp: Remove platform ifdef as suggested by + Richard Hult. + (WTF::initializeThreading): + +2008-09-23 Oliver Hunt <oliver@apple.com> + + Reviewed by Maciej Stachowiak. + + Bug 19968: Slow Script at www.huffingtonpost.com + <https://bugs.webkit.org/show_bug.cgi?id=19968> + + Finally found the cause of this accursed issue. It is triggered + by synchronous creation of a new global object from JS. The new + global object resets the timer state in this execution group's + Machine, taking timerCheckCount to 0. Then when JS returns the + timerCheckCount is decremented making it non-zero. The next time + we execute JS we will start the timeout counter, however the non-zero + timeoutCheckCount means we don't reset the timer information. This + means that the timeout check is now checking the cumulative time + since the creation of the global object rather than the time since + JS was last entered. At this point the slow script dialog is guaranteed + to eventually be displayed incorrectly unless a page is loaded + asynchronously (which will reset everything into a sane state). + + The fix for this is rather trivial -- the JSGlobalObject constructor + should not be resetting the machine timer state. + + * VM/Machine.cpp: + (JSC::Machine::Machine): + Now that we can't rely on the GlobalObject initialising the timeout + state, we do it in the Machine constructor. + + * VM/Machine.h: + (JSC::Machine::stopTimeoutCheck): + Add assertions to guard against this happening. + + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::init): + Don't reset the timeout state. + +2008-09-23 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Fixed https://bugs.webkit.org/show_bug.cgi?id=21038 | <rdar://problem/6240812> + Uncaught exceptions in regex replace callbacks crash webkit + + This was a combination of two problems: + + (1) the replace function would continue execution after an exception + had been thrown. + + (2) In some cases, the Machine would return 0 in the case of an exception, + despite the fact that a few clients dereference the Machine's return + value without first checking for an exception. + + * VM/Machine.cpp: + (JSC::Machine::execute): + + ^ Return jsNull() instead of 0 in the case of an exception, since some + clients depend on using our return value. + + ^ ASSERT that execution does not continue after an exception has been + thrown, to help catch problems like this in the future. + + * kjs/StringPrototype.cpp: + (JSC::stringProtoFuncReplace): + + ^ Stop execution if an exception has been thrown. + +2008-09-23 Geoffrey Garen <ggaren@apple.com> + + Try to fix the windows build. + + * VM/CTI.cpp: + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + +2008-09-23 Alp Toker <alp@nuanti.com> + + Build fix. + + * VM/CTI.h: + +2008-09-23 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + * wtf/Platform.h: Removed duplicate #if. + +2008-09-23 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + Changed the layout of the call frame from + + { header, parameters, locals | constants, temporaries } + + to + + { parameters, header | locals, constants, temporaries } + + This simplifies function entry+exit, and enables a number of future + optimizations. + + 13.5% speedup on empty call benchmark for bytecode; 23.6% speedup on + empty call benchmark for CTI. + + SunSpider says no change. SunSpider --v8 says 1% faster. + + * VM/CTI.cpp: + + Added a bit of abstraction for calculating whether a register is a + constant, since this patch changes that calculation: + (JSC::CTI::isConstant): + (JSC::CTI::getConstant): + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::getConstantImmediateNumericArg): + + Updated for changes to callframe header location: + (JSC::CTI::emitPutToCallFrameHeader): + (JSC::CTI::emitGetFromCallFrameHeader): + (JSC::CTI::printOpcodeOperandTypes): + + Renamed to spite Oliver: + (JSC::CTI::emitInitRegister): + + Added an abstraction for emitting a call through a register, so that + calls through registers generate exception info, too: + (JSC::CTI::emitCall): + + Updated to match the new callframe header layout, and to support calls + through registers, which have no destination address: + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + + * VM/CTI.h: + + More of the above: + (JSC::CallRecord::CallRecord): + + * VM/CodeBlock.cpp: + + Updated for new register layout: + (JSC::registerName): + (JSC::CodeBlock::dump): + + * VM/CodeBlock.h: + + Updated CodeBlock to track slightly different information about the + register frame, and tweaked the style of an ASSERT_NOT_REACHED. + (JSC::CodeBlock::CodeBlock): + (JSC::CodeBlock::getStubInfo): + + * VM/CodeGenerator.cpp: + + Added some abstraction around constant register allocation, since this + patch changes it, changed codegen to account for the new callframe + layout, and added abstraction around register fetching code + that used to assume that all local registers lived at negative indices, + since vars now live at positive indices: + (JSC::CodeGenerator::generate): + (JSC::CodeGenerator::addVar): + (JSC::CodeGenerator::addGlobalVar): + (JSC::CodeGenerator::allocateConstants): + (JSC::CodeGenerator::CodeGenerator): + (JSC::CodeGenerator::addParameter): + (JSC::CodeGenerator::registerFor): + (JSC::CodeGenerator::constRegisterFor): + (JSC::CodeGenerator::newRegister): + (JSC::CodeGenerator::newTemporary): + (JSC::CodeGenerator::highestUsedRegister): + (JSC::CodeGenerator::addConstant): + + ASSERT that our caller referenced the registers it passed to us. + Otherwise, we might overwrite them with parameters: + (JSC::CodeGenerator::emitCall): + (JSC::CodeGenerator::emitConstruct): + + * VM/CodeGenerator.h: + + Added some abstraction for getting a RegisterID for a given index, + since the rules are a little weird: + (JSC::CodeGenerator::registerFor): + + * VM/Machine.cpp: + + Utility function to transform a machine return PC to a virtual machine + return VPC, for the sake of stack unwinding, since both PCs are stored + in the same location now: + (JSC::vPCForPC): + + Tweaked to account for new call frame: + (JSC::Machine::initializeCallFrame): + + Tweaked to account for registerOffset supplied by caller: + (JSC::slideRegisterWindowForCall): + + Tweaked to account for new register layout: + (JSC::scopeChainForCall): + (JSC::Machine::callEval): + (JSC::Machine::dumpRegisters): + (JSC::Machine::unwindCallFrame): + (JSC::Machine::execute): + + Changed op_call and op_construct to implement the new calling convention: + (JSC::Machine::privateExecute): + + Tweaked to account for the new register layout: + (JSC::Machine::retrieveArguments): + (JSC::Machine::retrieveCaller): + (JSC::Machine::retrieveLastCaller): + (JSC::Machine::callFrame): + (JSC::Machine::getArgumentsData): + + Changed CTI call helpers to implement the new calling convention: + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_call_NotJSFunction): + (JSC::Machine::cti_op_ret_activation): + (JSC::Machine::cti_op_ret_profiler): + (JSC::Machine::cti_op_construct_JSConstruct): + (JSC::Machine::cti_op_construct_NotJSConstruct): + (JSC::Machine::cti_op_call_eval): + + * VM/Machine.h: + + * VM/Opcode.h: + + Renamed op_initialise_locals to op_init, because this opcode + doesn't initialize all locals, and it doesn't initialize only locals. + Also, to spite Oliver. + + * VM/RegisterFile.h: + + New call frame enumeration values: + (JSC::RegisterFile::): + + Simplified the calculation of whether a RegisterID is a temporary, + since we can no longer assume that all positive non-constant registers + are temporaries: + * VM/RegisterID.h: + (JSC::RegisterID::RegisterID): + (JSC::RegisterID::setTemporary): + (JSC::RegisterID::isTemporary): + + Renamed firstArgumentIndex to firstParameterIndex because the assumption + that this variable pertained to the actual arguments supplied by the + caller caused me to write some buggy code: + * kjs/Arguments.cpp: + (JSC::ArgumentsData::ArgumentsData): + (JSC::Arguments::Arguments): + (JSC::Arguments::fillArgList): + (JSC::Arguments::getOwnPropertySlot): + (JSC::Arguments::put): + + Updated for new call frame layout: + * kjs/DebuggerCallFrame.cpp: + (JSC::DebuggerCallFrame::functionName): + (JSC::DebuggerCallFrame::type): + * kjs/DebuggerCallFrame.h: + + Changed the activation object to account for the fact that a call frame + header now sits between parameters and local variables. This change + requires all variable objects to do their own marking, since they + now use their register storage differently: + * kjs/JSActivation.cpp: + (JSC::JSActivation::mark): + (JSC::JSActivation::copyRegisters): + (JSC::JSActivation::createArgumentsObject): + * kjs/JSActivation.h: + + Updated global object to use the new interfaces required by the change + to JSActivation above: + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + (JSC::JSGlobalObject::mark): + (JSC::JSGlobalObject::copyGlobalsFrom): + (JSC::JSGlobalObject::copyGlobalsTo): + * kjs/JSGlobalObject.h: + (JSC::JSGlobalObject::addStaticGlobals): + + Updated static scope object to use the new interfaces required by the + change to JSActivation above: + * kjs/JSStaticScopeObject.cpp: + (JSC::JSStaticScopeObject::mark): + (JSC::JSStaticScopeObject::~JSStaticScopeObject): + * kjs/JSStaticScopeObject.h: + (JSC::JSStaticScopeObject::JSStaticScopeObject): + (JSC::JSStaticScopeObject::d): + + Updated variable object to use the new interfaces required by the + change to JSActivation above: + * kjs/JSVariableObject.cpp: + (JSC::JSVariableObject::copyRegisterArray): + (JSC::JSVariableObject::setRegisters): + * kjs/JSVariableObject.h: + + Changed the bit twiddling in symbol table not to assume that all indices + are negative, since they can be positive now: + * kjs/SymbolTable.h: + (JSC::SymbolTableEntry::SymbolTableEntry): + (JSC::SymbolTableEntry::isNull): + (JSC::SymbolTableEntry::getIndex): + (JSC::SymbolTableEntry::getAttributes): + (JSC::SymbolTableEntry::setAttributes): + (JSC::SymbolTableEntry::isReadOnly): + (JSC::SymbolTableEntry::pack): + (JSC::SymbolTableEntry::isValidIndex): + + Changed call and construct nodes to ref their functions and/or bases, + so that emitCall/emitConstruct doesn't overwrite them with parameters. + Also, updated for rename to registerFor: + * kjs/nodes.cpp: + (JSC::ResolveNode::emitCode): + (JSC::NewExprNode::emitCode): + (JSC::EvalFunctionCallNode::emitCode): + (JSC::FunctionCallValueNode::emitCode): + (JSC::FunctionCallResolveNode::emitCode): + (JSC::FunctionCallBracketNode::emitCode): + (JSC::FunctionCallDotNode::emitCode): + (JSC::PostfixResolveNode::emitCode): + (JSC::DeleteResolveNode::emitCode): + (JSC::TypeOfResolveNode::emitCode): + (JSC::PrefixResolveNode::emitCode): + (JSC::ReadModifyResolveNode::emitCode): + (JSC::AssignResolveNode::emitCode): + (JSC::ConstDeclNode::emitCodeSingle): + (JSC::ForInNode::emitCode): + + Added abstraction for getting exception info out of a call through a + register: + * masm/X86Assembler.h: + (JSC::X86Assembler::emitCall): + + Removed duplicate #if: + * wtf/Platform.h: + +2008-09-23 Kevin McCullough <kmccullough@apple.com> + + Reviewed by Darin. + + Bug 21030: The JS debugger breaks on the do of a do-while not the while + (where the conditional statement is) + https://bugs.webkit.org/show_bug.cgi?id=21030 + Now the statementListEmitCode detects if a do-while node is being + emited and emits the debug hook on the last line instead of the first. + + This change had no effect on sunspider. + + * kjs/nodes.cpp: + (JSC::statementListEmitCode): + * kjs/nodes.h: + (JSC::StatementNode::isDoWhile): + (JSC::DoWhileNode::isDoWhile): + +2008-09-23 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Camron Zwarich. + + - inline the fast case of instanceof + https://bugs.webkit.org/show_bug.cgi?id=20818 + + ~2% speedup on EarleyBoyer test. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/Machine.cpp: + (JSC::Machine::cti_op_instanceof): + +2008-09-23 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich. + + - add forgotten slow case logic for !== + + * VM/CTI.cpp: + (JSC::CTI::privateCompileSlowCases): + +2008-09-23 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich. + + - inline the fast cases of !==, same as for === + + 2.9% speedup on EarleyBoyer benchmark + + * VM/CTI.cpp: + (JSC::CTI::compileOpStrictEq): Factored stricteq codegen into this function, + and parameterized so it can do the reverse version as well. + (JSC::CTI::privateCompileMainPass): Use the above for stricteq and nstricteq. + * VM/CTI.h: + (JSC::CTI::): Declare above stuff. + * VM/Machine.cpp: + (JSC::Machine::cti_op_nstricteq): Removed fast cases, now handled inline. + +2008-09-23 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Oliver Hunt. + + Bug 20989: Aguments constructor should put 'callee' and 'length' properties in a more efficient way + <https://bugs.webkit.org/show_bug.cgi?id=20989> + + Make special cases for the 'callee' and 'length' properties in the + Arguments object. + + This is somewhere between a 7.8% speedup and a 10% speedup on the V8 + Raytrace benchmark, depending on whether it is run alone or with the + other V8 benchmarks. + + * kjs/Arguments.cpp: + (JSC::ArgumentsData::ArgumentsData): + (JSC::Arguments::Arguments): + (JSC::Arguments::mark): + (JSC::Arguments::getOwnPropertySlot): + (JSC::Arguments::put): + (JSC::Arguments::deleteProperty): + +2008-09-23 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Darin. + + - speed up instanceof some more + https://bugs.webkit.org/show_bug.cgi?id=20818 + + ~2% speedup on EarleyBoyer + + The idea here is to record in the StructureID whether the class + needs a special hasInstance or if it can use the normal logic from + JSObject. + + Based on this I inlined the real work directly into + cti_op_instanceof and put the fastest checks up front and the + error handling at the end (so it should be fairly straightforward + to split off the beginning to be inlined if desired). + + I only did this for CTI, not the bytecode interpreter. + + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::createStructureID): + * ChangeLog: + * VM/Machine.cpp: + (JSC::Machine::cti_op_instanceof): + * kjs/JSImmediate.h: + (JSC::JSImmediate::isAnyImmediate): + * kjs/TypeInfo.h: + (JSC::TypeInfo::overridesHasInstance): + (JSC::TypeInfo::flags): + +2008-09-22 Darin Adler <darin@apple.com> + + Reviewed by Sam Weinig. + + - https://bugs.webkit.org/show_bug.cgi?id=21019 + make FunctionBodyNode::ref/deref fast + + Speeds up v8-raytrace by 7.2%. + + * kjs/nodes.cpp: + (JSC::FunctionBodyNode::FunctionBodyNode): Initialize m_refCount to 0. + * kjs/nodes.h: + (JSC::FunctionBodyNode::ref): Call base class ref once, and thereafter use + m_refCount. + (JSC::FunctionBodyNode::deref): Ditto, but the deref side. + +2008-09-22 Darin Adler <darin@apple.com> + + Pointed out by Sam Weinig. + + * kjs/Arguments.cpp: + (JSC::Arguments::fillArgList): Fix bad copy and paste. Oops! + +2008-09-22 Darin Adler <darin@apple.com> + + Reviewed by Cameron Zwarich. + + - https://bugs.webkit.org/show_bug.cgi?id=20983 + ArgumentsData should have some room to allocate some extra arguments inline + + Speeds up v8-raytrace by 5%. + + * kjs/Arguments.cpp: + (JSC::ArgumentsData::ArgumentsData): Use a fixed buffer if there are 4 or fewer + extra arguments. + (JSC::Arguments::Arguments): Use a fixed buffer if there are 4 or fewer + extra arguments. + (JSC::Arguments::~Arguments): Delete the buffer if necessary. + (JSC::Arguments::mark): Update since extraArguments are now Register. + (JSC::Arguments::fillArgList): Added special case for the only case that's + actually used in the practice, when there are no parameters. There are some + other special cases in there too, but that's the only one that matters. + (JSC::Arguments::getOwnPropertySlot): Updated to use setValueSlot since there's + no operation to get you at the JSValue* inside a Register as a "slot". + +2008-09-22 Sam Weinig <sam@webkit.org> + + Reviewed by Maciej Stachowiak. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=21014 + Speed up for..in by using StructureID to avoid calls to hasProperty + + Speeds up fasta by 8%. + + * VM/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::invalidate): + * VM/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::next): + * kjs/PropertyNameArray.h: + (JSC::PropertyNameArrayData::begin): + (JSC::PropertyNameArrayData::end): + (JSC::PropertyNameArrayData::setCachedStructureID): + (JSC::PropertyNameArrayData::cachedStructureID): + * kjs/StructureID.cpp: + (JSC::StructureID::getEnumerablePropertyNames): + (JSC::structureIDChainsAreEqual): + * kjs/StructureID.h: + +2008-09-22 Kelvin Sherlock <ksherlock@gmail.com> + + Updated and tweaked by Sam Weinig. + + Reviewed by Geoffrey Garen. + + Bug 20020: Proposed enhancement to JavaScriptCore API + <https://bugs.webkit.org/show_bug.cgi?id=20020> + + Add JSObjectMakeArray, JSObjectMakeDate, JSObjectMakeError, and JSObjectMakeRegExp + functions to create JavaScript Array, Date, Error, and RegExp objects, respectively. + + * API/JSObjectRef.cpp: The functions + * API/JSObjectRef.h: Function prototype and documentation + * JavaScriptCore.exp: Added functions to exported function list + * API/tests/testapi.c: Added basic functionality tests. + + * kjs/DateConstructor.cpp: + Replaced static JSObject* constructDate(ExecState* exec, JSObject*, const ArgList& args) + with JSObject* constructDate(ExecState* exec, const ArgList& args). + Added static JSObject* constructWithDateConstructor(ExecState* exec, JSObject*, const ArgList& args) function + + * kjs/DateConstructor.h: + added prototype for JSObject* constructDate(ExecState* exec, const ArgList& args) + + * kjs/ErrorConstructor.cpp: + removed static qualifier from ErrorInstance* constructError(ExecState* exec, const ArgList& args) + + * kjs/ErrorConstructor.h: + added prototype for ErrorInstance* constructError(ExecState* exec, const ArgList& args) + + * kjs/RegExpConstructor.cpp: + removed static qualifier from JSObject* constructRegExp(ExecState* exec, const ArgList& args) + + * kjs/RegExpConstructor.h: + added prototype for JSObject* constructRegExp(ExecState* exec, const ArgList& args) + +2008-09-22 Matt Lilek <webkit@mattlilek.com> + + Not reviewed, Windows build fix. + + * kjs/Arguments.cpp: + * kjs/FunctionPrototype.cpp: + +2008-09-22 Sam Weinig <sam@webkit.org> + + Reviewed by Darin Adler. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=20982 + Speed up the apply method of functions by special-casing array and 'arguments' objects + + 1% speedup on v8-raytrace. + + Test: fast/js/function-apply.html + + * kjs/Arguments.cpp: + (JSC::Arguments::fillArgList): + * kjs/Arguments.h: + * kjs/FunctionPrototype.cpp: + (JSC::functionProtoFuncApply): + * kjs/JSArray.cpp: + (JSC::JSArray::fillArgList): + * kjs/JSArray.h: + +2008-09-22 Darin Adler <darin@apple.com> + + Reviewed by Sam Weinig. + + - https://bugs.webkit.org/show_bug.cgi?id=20993 + Array.push/pop need optimized cases for JSArray + + 3% or so speedup on DeltaBlue benchmark. + + * kjs/ArrayPrototype.cpp: + (JSC::arrayProtoFuncPop): Call JSArray::pop when appropriate. + (JSC::arrayProtoFuncPush): Call JSArray::push when appropriate. + + * kjs/JSArray.cpp: + (JSC::JSArray::putSlowCase): Set m_fastAccessCutoff when appropriate, getting + us into the fast code path. + (JSC::JSArray::pop): Added. + (JSC::JSArray::push): Added. + * kjs/JSArray.h: Added push and pop. + + * kjs/operations.cpp: + (JSC::throwOutOfMemoryError): Don't inline this. Helps us avoid PIC branches. + +2008-09-22 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich. + + - speed up instanceof operator by replacing implementsHasInstance method with a TypeInfo flag + + Partial work towards <https://bugs.webkit.org/show_bug.cgi?id=20818> + + 2.2% speedup on EarleyBoyer benchmark. + + * API/JSCallbackConstructor.cpp: + * API/JSCallbackConstructor.h: + (JSC::JSCallbackConstructor::createStructureID): + * API/JSCallbackFunction.cpp: + * API/JSCallbackFunction.h: + (JSC::JSCallbackFunction::createStructureID): + * API/JSCallbackObject.h: + (JSC::JSCallbackObject::createStructureID): + * API/JSCallbackObjectFunctions.h: + (JSC::::hasInstance): + * API/JSValueRef.cpp: + (JSValueIsInstanceOfConstructor): + * JavaScriptCore.exp: + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_instanceof): + * kjs/InternalFunction.cpp: + * kjs/InternalFunction.h: + (JSC::InternalFunction::createStructureID): + * kjs/JSObject.cpp: + * kjs/JSObject.h: + * kjs/TypeInfo.h: + (JSC::TypeInfo::implementsHasInstance): + +2008-09-22 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Dave Hyatt. + + Based on initial work by Darin Adler. + + - replace masqueradesAsUndefined virtual method with a flag in TypeInfo + - use this to JIT inline code for eq_null and neq_null + https://bugs.webkit.org/show_bug.cgi?id=20823 + + 0.5% speedup on SunSpider + ~4% speedup on Richards benchmark + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/Machine.cpp: + (JSC::jsTypeStringForValue): + (JSC::jsIsObjectType): + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_is_undefined): + * VM/Machine.h: + * kjs/JSCell.h: + * kjs/JSValue.h: + * kjs/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::create): + (JSC::StringObjectThatMasqueradesAsUndefined::createStructureID): + * kjs/StructureID.h: + (JSC::StructureID::mutableTypeInfo): + * kjs/TypeInfo.h: + (JSC::TypeInfo::TypeInfo): + (JSC::TypeInfo::masqueradesAsUndefined): + * kjs/operations.cpp: + (JSC::equal): + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::setne_r): + (JSC::X86Assembler::setnz_r): + (JSC::X86Assembler::testl_i32m): + +2008-09-22 Tor Arne Vestbø <tavestbo@trolltech.com> + + Reviewed by Simon. + + Initialize QCoreApplication in kjs binary/Shell.cpp + + This allows us to use QCoreApplication::instance() to + get the main thread in ThreadingQt.cpp + + * kjs/Shell.cpp: + (main): + * wtf/ThreadingQt.cpp: + (WTF::initializeThreading): + +2008-09-21 Darin Adler <darin@apple.com> + + - blind attempt to fix non-all-in-one builds + + * kjs/JSGlobalObject.cpp: Added includes of Arguments.h and RegExpObject.h. + +2008-09-21 Darin Adler <darin@apple.com> + + - fix debug build + + * kjs/StructureID.cpp: + (JSC::StructureID::addPropertyTransition): Use typeInfo().type() instead of m_type. + (JSC::StructureID::createCachedPrototypeChain): Ditto. + +2008-09-21 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Darin Adler. + + - introduce a TypeInfo class, for holding per-type (in the C++ class sense) date in StructureID + https://bugs.webkit.org/show_bug.cgi?id=20981 + + * JavaScriptCore.exp: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompilePutByIdTransition): + * VM/Machine.cpp: + (JSC::jsIsObjectType): + (JSC::Machine::Machine): + * kjs/AllInOneFile.cpp: + * kjs/JSCell.h: + (JSC::JSCell::isObject): + (JSC::JSCell::isString): + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::reset): + * kjs/JSGlobalObject.h: + (JSC::StructureID::prototypeForLookup): + * kjs/JSNumberCell.h: + (JSC::JSNumberCell::createStructureID): + * kjs/JSObject.cpp: + (JSC::JSObject::createInheritorID): + * kjs/JSObject.h: + (JSC::JSObject::createStructureID): + * kjs/JSString.h: + (JSC::JSString::createStructureID): + * kjs/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + * kjs/RegExpConstructor.cpp: + * kjs/RegExpMatchesArray.h: Added. + (JSC::RegExpMatchesArray::getOwnPropertySlot): + (JSC::RegExpMatchesArray::put): + (JSC::RegExpMatchesArray::deleteProperty): + (JSC::RegExpMatchesArray::getPropertyNames): + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::addPropertyTransition): + (JSC::StructureID::toDictionaryTransition): + (JSC::StructureID::changePrototypeTransition): + (JSC::StructureID::getterSetterTransition): + * kjs/StructureID.h: + (JSC::StructureID::create): + (JSC::StructureID::typeInfo): + * kjs/TypeInfo.h: Added. + (JSC::TypeInfo::TypeInfo): + (JSC::TypeInfo::type): + +2008-09-21 Darin Adler <darin@apple.com> + + Reviewed by Cameron Zwarich. + + - fix crash logging into Gmail due to recent Arguments change + + * kjs/Arguments.cpp: + (JSC::Arguments::Arguments): Fix window where mark() function could + see d->extraArguments with uninitialized contents. + (JSC::Arguments::mark): Check d->extraArguments for 0 to handle two + cases: 1) Inside the constructor before it's initialized. + 2) numArguments <= numParameters. + +2008-09-21 Darin Adler <darin@apple.com> + + - fix loose end from the "duplicate constant values" patch + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitLoad): Add a special case for values the + hash table can't handle. + +2008-09-21 Mark Rowe <mrowe@apple.com> + + Fix the non-AllInOneFile build. + + * kjs/Arguments.cpp: Add missing #include. + +2008-09-21 Darin Adler <darin@apple.com> + + Reviewed by Cameron Zwarich and Mark Rowe. + + - fix test failure caused by my recent IndexToNameMap patch + + * kjs/Arguments.cpp: + (JSC::Arguments::deleteProperty): Added the accidentally-omitted + check of the boolean result from toArrayIndex. + +2008-09-21 Darin Adler <darin@apple.com> + + Reviewed by Maciej Stachowiak. + + - https://bugs.webkit.org/show_bug.cgi?id=20975 + inline immediate-number case of == + + * VM/CTI.h: Renamed emitJumpSlowCaseIfNotImm to + emitJumpSlowCaseIfNotImmNum, since the old name was incorrect. + + * VM/CTI.cpp: Updated for new name. + (JSC::CTI::privateCompileMainPass): Added op_eq. + (JSC::CTI::privateCompileSlowCases): Added op_eq. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_eq): Removed fast case, since it's now + compiled. + +2008-09-21 Peter Gal <galpter@inf.u-szeged.hu> + + Reviewed by Tim Hatcher and Eric Seidel. + + Fix the QT/Linux JavaScriptCore segmentation fault. + https://bugs.webkit.org/show_bug.cgi?id=20914 + + * wtf/ThreadingQt.cpp: + (WTF::initializeThreading): Use currentThread() if + platform is not a MAC (like in pre 36541 revisions) + +2008-09-21 Darin Adler <darin@apple.com> + + Reviewed by Sam Weinig. + + * kjs/debugger.h: Removed some unneeded includes and declarations. + +2008-09-21 Darin Adler <darin@apple.com> + + Reviewed by Sam Weinig. + + - https://bugs.webkit.org/show_bug.cgi?id=20972 + speed up Arguments further by eliminating the IndexToNameMap + + No change on SunSpider. 1.29x as fast on V8 Raytrace. + + * kjs/Arguments.cpp: Moved ArgumentsData in here. Eliminated the + indexToNameMap and hadDeletes data members. Changed extraArguments into + an OwnArrayPtr and added deletedArguments, another OwnArrayPtr. + Replaced numExtraArguments with numParameters, since that's what's + used more directly in hot code paths. + (JSC::Arguments::Arguments): Pass in argument count instead of ArgList. + Initialize ArgumentsData the new way. + (JSC::Arguments::mark): Updated. + (JSC::Arguments::getOwnPropertySlot): Overload for the integer form so + we don't have to convert integers to identifiers just to get an argument. + Integrated the deleted case with the fast case. + (JSC::Arguments::put): Ditto. + (JSC::Arguments::deleteProperty): Ditto. + + * kjs/Arguments.h: Minimized includes. Made everything private. Added + overloads for the integral property name case. Eliminated mappedIndexSetter. + Moved ArgumentsData into the .cpp file. + + * kjs/IndexToNameMap.cpp: Emptied out and prepared for deletion. + * kjs/IndexToNameMap.h: Ditto. + + * kjs/JSActivation.cpp: + (JSC::JSActivation::createArgumentsObject): Elminated ArgList. + + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * kjs/AllInOneFile.cpp: + Removed IndexToNameMap. + +2008-09-21 Darin Adler <darin@apple.com> + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitLoad): One more tweak: Wrote this in a slightly + clearer style. + +2008-09-21 Judit Jasz <jasy@inf.u-szeged.hu> + + Reviewed and tweaked by Darin Adler. + + - https://bugs.webkit.org/show_bug.cgi?id=20645 + Elminate duplicate constant values in CodeBlocks. + + Seems to be a wash on SunSpider. + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitLoad): Use m_numberMap and m_stringMap to guarantee + we emit the same JSValue* for identical numbers and strings. + * VM/CodeGenerator.h: Added overload of emitLoad for const Identifier&. + Add NumberMap and IdentifierStringMap types and m_numberMap and m_stringMap. + * kjs/nodes.cpp: + (JSC::StringNode::emitCode): Call the new emitLoad and let it do the + JSString creation. + +2008-09-21 Paul Pedriana <webkit@pedriana.com> + + Reviewed and tweaked by Darin Adler. + + - https://bugs.webkit.org/show_bug.cgi?id=16925 + Fixed lack of Vector buffer alignment for both GCC and MSVC. + Since there's no portable way to do this, for now we don't support + other compilers. + + * wtf/Vector.h: Added WTF_ALIGH_ON, WTF_ALIGNED, AlignedBufferChar, and AlignedBuffer. + Use AlignedBuffer insteadof an array of char in VectorBuffer. + +2008-09-21 Gabor Loki <loki@inf.u-szeged.hu> + + Reviewed by Darin Adler. + + - https://bugs.webkit.org/show_bug.cgi?id=19408 + Add lightweight constant folding to the parser for *, /, + (only for numbers), <<, >>, ~ operators. + + 1.008x as fast on SunSpider. + + * kjs/grammar.y: + (makeNegateNode): Fold if expression is a number > 0. + (makeBitwiseNotNode): Fold if expression is a number. + (makeMultNode): Fold if expressions are both numbers. + (makeDivNode): Fold if expressions are both numbers. + (makeAddNode): Fold if expressions are both numbers. + (makeLeftShiftNode): Fold if expressions are both numbers. + (makeRightShiftNode): Fold if expressions are both numbers. + +2008-09-21 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Oliver. + + - speed up === operator by generating inline machine code for the fast paths + https://bugs.webkit.org/show_bug.cgi?id=20820 + + * VM/CTI.cpp: + (JSC::CTI::emitJumpSlowCaseIfNotImmediateNumber): + (JSC::CTI::emitJumpSlowCaseIfNotImmediateNumbers): + (JSC::CTI::emitJumpSlowCaseIfNotImmediates): + (JSC::CTI::emitTagAsBoolImmediate): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CTI.h: + * VM/Machine.cpp: + (JSC::Machine::cti_op_stricteq): + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::sete_r): + (JSC::X86Assembler::setz_r): + (JSC::X86Assembler::movzbl_rr): + (JSC::X86Assembler::emitUnlinkedJnz): + +2008-09-21 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Free memory allocated for extra arguments in the destructor of the + Arguments object. + + * kjs/Arguments.cpp: + (JSC::Arguments::~Arguments): + * kjs/Arguments.h: + +2008-09-21 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Bug 20815: 'arguments' object creation is non-optimal + <https://bugs.webkit.org/show_bug.cgi?id=20815> + + Fix our inefficient way of creating the arguments object by only + creating named properties for each of the arguments after a use of the + 'delete' statement. This patch also speeds up access to the 'arguments' + object slightly, but it still does not use the array fast path for + indexed access that exists for many opcodes. + + This is about a 20% improvement on the V8 Raytrace benchmark, and a 1.5% + improvement on the Earley-Boyer benchmark, which gives a 4% improvement + overall. + + * kjs/Arguments.cpp: + (JSC::Arguments::Arguments): + (JSC::Arguments::mark): + (JSC::Arguments::getOwnPropertySlot): + (JSC::Arguments::put): + (JSC::Arguments::deleteProperty): + * kjs/Arguments.h: + (JSC::Arguments::ArgumentsData::ArgumentsData): + * kjs/IndexToNameMap.h: + (JSC::IndexToNameMap::size): + * kjs/JSActivation.cpp: + (JSC::JSActivation::createArgumentsObject): + * kjs/JSActivation.h: + (JSC::JSActivation::uncheckedSymbolTableGet): + (JSC::JSActivation::uncheckedSymbolTableGetValue): + (JSC::JSActivation::uncheckedSymbolTablePut): + * kjs/JSFunction.h: + (JSC::JSFunction::numParameters): + +2008-09-20 Darin Adler <darin@apple.com> + + Reviewed by Mark Rowe. + + - fix crash seen on buildbot + + * kjs/JSGlobalObject.cpp: + (JSC::JSGlobalObject::mark): Add back mark of arrayPrototype, + deleted by accident in my recent check-in. + +2008-09-20 Maciej Stachowiak <mjs@apple.com> + + Not reviewed, build fix. + + - speculative fix for non-AllInOne builds + + * kjs/operations.h: + +2008-09-20 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Darin Adler. + + - assorted optimizations to === and !== operators + (work towards <https://bugs.webkit.org/show_bug.cgi?id=20820>) + + 2.5% speedup on earley-boyer test + + * VM/Machine.cpp: + (JSC::Machine::cti_op_stricteq): Use inline version of + strictEqualSlowCase; remove unneeded exception check. + (JSC::Machine::cti_op_nstricteq): ditto + * kjs/operations.cpp: + (JSC::strictEqual): Use strictEqualSlowCaseInline + (JSC::strictEqualSlowCase): ditto + * kjs/operations.h: + (JSC::strictEqualSlowCaseInline): Version of strictEqualSlowCase that can be inlined, + since the extra function call indirection is a lose for CTI. + +2008-09-20 Darin Adler <darin@apple.com> + + Reviewed by Maciej Stachowiak. + + - finish https://bugs.webkit.org/show_bug.cgi?id=20858 + make each distinct C++ class get a distinct JSC::Structure + + This also includes some optimizations that make the change an overall + small speedup. Without those it was a bit of a slowdown. + + * API/JSCallbackConstructor.cpp: + (JSC::JSCallbackConstructor::JSCallbackConstructor): Take a structure. + * API/JSCallbackConstructor.h: Ditto. + * API/JSCallbackFunction.cpp: + (JSC::JSCallbackFunction::JSCallbackFunction): Pass a structure. + * API/JSCallbackObject.h: Take a structure. + * API/JSCallbackObjectFunctions.h: + (JSC::JSCallbackObject::JSCallbackObject): Ditto. + + * API/JSClassRef.cpp: + (OpaqueJSClass::prototype): Pass in a structure. Call setPrototype + if there's a custom prototype involved. + * API/JSObjectRef.cpp: + (JSObjectMake): Ditto. + (JSObjectMakeConstructor): Pass in a structure. + + * JavaScriptCore.exp: Updated. + + * VM/Machine.cpp: + (JSC::jsLess): Added a special case for when both arguments are strings. + This avoids converting both strings to with UString::toDouble. + (JSC::jsLessEq): Ditto. + (JSC::Machine::privateExecute): Pass in a structure. + (JSC::Machine::cti_op_construct_JSConstruct): Ditto. + (JSC::Machine::cti_op_new_regexp): Ditto. + (JSC::Machine::cti_op_is_string): Ditto. + * VM/Machine.h: Made isJSString public so it can be used in the CTI. + + * kjs/Arguments.cpp: + (JSC::Arguments::Arguments): Pass in a structure. + + * kjs/JSCell.h: Mark constructor explicit. + + * kjs/JSGlobalObject.cpp: + (JSC::markIfNeeded): Added an overload for marking structures. + (JSC::JSGlobalObject::reset): Eliminate code to set data members to + zero. We now do that in the constructor, and we no longer use this + anywhere except in the constructor. Added code to create structures. + Pass structures rather than prototypes when creating objects. + (JSC::JSGlobalObject::mark): Mark the structures. + + * kjs/JSGlobalObject.h: Removed unneeded class declarations. + Added initializers for raw pointers in JSGlobalObjectData so + everything starts with a 0. Added structure data and accessor + functions. + + * kjs/JSImmediate.cpp: + (JSC::JSImmediate::nonInlineNaN): Added. + * kjs/JSImmediate.h: + (JSC::JSImmediate::toDouble): Rewrote to avoid PIC branches. + + * kjs/JSNumberCell.cpp: + (JSC::jsNumberCell): Made non-inline to avoid PIC branches + in functions that call this one. + (JSC::jsNaN): Ditto. + * kjs/JSNumberCell.h: Ditto. + + * kjs/JSObject.h: Removed constructor that takes a prototype. + All callers now pass structures. + + * kjs/ArrayConstructor.cpp: + (JSC::ArrayConstructor::ArrayConstructor): + (JSC::constructArrayWithSizeQuirk): + * kjs/ArrayConstructor.h: + * kjs/ArrayPrototype.cpp: + (JSC::ArrayPrototype::ArrayPrototype): + * kjs/ArrayPrototype.h: + * kjs/BooleanConstructor.cpp: + (JSC::BooleanConstructor::BooleanConstructor): + (JSC::constructBoolean): + (JSC::constructBooleanFromImmediateBoolean): + * kjs/BooleanConstructor.h: + * kjs/BooleanObject.cpp: + (JSC::BooleanObject::BooleanObject): + * kjs/BooleanObject.h: + * kjs/BooleanPrototype.cpp: + (JSC::BooleanPrototype::BooleanPrototype): + * kjs/BooleanPrototype.h: + * kjs/DateConstructor.cpp: + (JSC::DateConstructor::DateConstructor): + (JSC::constructDate): + * kjs/DateConstructor.h: + * kjs/DateInstance.cpp: + (JSC::DateInstance::DateInstance): + * kjs/DateInstance.h: + * kjs/DatePrototype.cpp: + (JSC::DatePrototype::DatePrototype): + * kjs/DatePrototype.h: + * kjs/ErrorConstructor.cpp: + (JSC::ErrorConstructor::ErrorConstructor): + (JSC::constructError): + * kjs/ErrorConstructor.h: + * kjs/ErrorInstance.cpp: + (JSC::ErrorInstance::ErrorInstance): + * kjs/ErrorInstance.h: + * kjs/ErrorPrototype.cpp: + (JSC::ErrorPrototype::ErrorPrototype): + * kjs/ErrorPrototype.h: + * kjs/FunctionConstructor.cpp: + (JSC::FunctionConstructor::FunctionConstructor): + * kjs/FunctionConstructor.h: + * kjs/FunctionPrototype.cpp: + (JSC::FunctionPrototype::FunctionPrototype): + (JSC::FunctionPrototype::addFunctionProperties): + * kjs/FunctionPrototype.h: + * kjs/GlobalEvalFunction.cpp: + (JSC::GlobalEvalFunction::GlobalEvalFunction): + * kjs/GlobalEvalFunction.h: + * kjs/InternalFunction.cpp: + (JSC::InternalFunction::InternalFunction): + * kjs/InternalFunction.h: + (JSC::InternalFunction::InternalFunction): + * kjs/JSArray.cpp: + (JSC::JSArray::JSArray): + (JSC::constructEmptyArray): + (JSC::constructArray): + * kjs/JSArray.h: + * kjs/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::construct): + * kjs/JSObject.cpp: + (JSC::constructEmptyObject): + * kjs/JSString.cpp: + (JSC::StringObject::create): + * kjs/JSWrapperObject.h: + * kjs/MathObject.cpp: + (JSC::MathObject::MathObject): + * kjs/MathObject.h: + * kjs/NativeErrorConstructor.cpp: + (JSC::NativeErrorConstructor::NativeErrorConstructor): + (JSC::NativeErrorConstructor::construct): + * kjs/NativeErrorConstructor.h: + * kjs/NativeErrorPrototype.cpp: + (JSC::NativeErrorPrototype::NativeErrorPrototype): + * kjs/NativeErrorPrototype.h: + * kjs/NumberConstructor.cpp: + (JSC::NumberConstructor::NumberConstructor): + (JSC::constructWithNumberConstructor): + * kjs/NumberConstructor.h: + * kjs/NumberObject.cpp: + (JSC::NumberObject::NumberObject): + (JSC::constructNumber): + (JSC::constructNumberFromImmediateNumber): + * kjs/NumberObject.h: + * kjs/NumberPrototype.cpp: + (JSC::NumberPrototype::NumberPrototype): + * kjs/NumberPrototype.h: + * kjs/ObjectConstructor.cpp: + (JSC::ObjectConstructor::ObjectConstructor): + (JSC::constructObject): + * kjs/ObjectConstructor.h: + * kjs/ObjectPrototype.cpp: + (JSC::ObjectPrototype::ObjectPrototype): + * kjs/ObjectPrototype.h: + * kjs/PrototypeFunction.cpp: + (JSC::PrototypeFunction::PrototypeFunction): + * kjs/PrototypeFunction.h: + * kjs/RegExpConstructor.cpp: + (JSC::RegExpConstructor::RegExpConstructor): + (JSC::RegExpMatchesArray::RegExpMatchesArray): + (JSC::constructRegExp): + * kjs/RegExpConstructor.h: + * kjs/RegExpObject.cpp: + (JSC::RegExpObject::RegExpObject): + * kjs/RegExpObject.h: + * kjs/RegExpPrototype.cpp: + (JSC::RegExpPrototype::RegExpPrototype): + * kjs/RegExpPrototype.h: + * kjs/Shell.cpp: + (GlobalObject::GlobalObject): + * kjs/StringConstructor.cpp: + (JSC::StringConstructor::StringConstructor): + (JSC::constructWithStringConstructor): + * kjs/StringConstructor.h: + * kjs/StringObject.cpp: + (JSC::StringObject::StringObject): + * kjs/StringObject.h: + * kjs/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): + * kjs/StringPrototype.cpp: + (JSC::StringPrototype::StringPrototype): + * kjs/StringPrototype.h: + Take and pass structures. + +2008-09-19 Alp Toker <alp@nuanti.com> + + Build fix for the 'gold' linker and recent binutils. New behaviour + requires that we link to used libraries explicitly. + + * GNUmakefile.am: + +2008-09-19 Sam Weinig <sam@webkit.org> + + Roll r36694 back in. It did not cause the crash. + + * JavaScriptCore.exp: + * VM/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::~JSPropertyNameIterator): + (JSC::JSPropertyNameIterator::invalidate): + * VM/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::JSPropertyNameIterator): + (JSC::JSPropertyNameIterator::create): + * kjs/JSObject.cpp: + (JSC::JSObject::getPropertyNames): + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::getEnumerablePropertyNames): + * kjs/PropertyMap.h: + * kjs/PropertyNameArray.cpp: + (JSC::PropertyNameArray::add): + * kjs/PropertyNameArray.h: + (JSC::PropertyNameArrayData::create): + (JSC::PropertyNameArrayData::propertyNameVector): + (JSC::PropertyNameArrayData::setCachedPrototypeChain): + (JSC::PropertyNameArrayData::cachedPrototypeChain): + (JSC::PropertyNameArrayData::begin): + (JSC::PropertyNameArrayData::end): + (JSC::PropertyNameArrayData::PropertyNameArrayData): + (JSC::PropertyNameArray::PropertyNameArray): + (JSC::PropertyNameArray::addKnownUnique): + (JSC::PropertyNameArray::size): + (JSC::PropertyNameArray::operator[]): + (JSC::PropertyNameArray::begin): + (JSC::PropertyNameArray::end): + (JSC::PropertyNameArray::setData): + (JSC::PropertyNameArray::data): + (JSC::PropertyNameArray::releaseData): + * kjs/StructureID.cpp: + (JSC::structureIDChainsAreEqual): + (JSC::StructureID::getEnumerablePropertyNames): + (JSC::StructureID::clearEnumerationCache): + (JSC::StructureID::createCachedPrototypeChain): + * kjs/StructureID.h: + +2008-09-19 Sam Weinig <sam@webkit.org> + + Roll out r36694. + + * JavaScriptCore.exp: + * VM/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::~JSPropertyNameIterator): + (JSC::JSPropertyNameIterator::invalidate): + * VM/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::JSPropertyNameIterator): + (JSC::JSPropertyNameIterator::create): + * kjs/JSObject.cpp: + (JSC::JSObject::getPropertyNames): + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::getEnumerablePropertyNames): + * kjs/PropertyMap.h: + * kjs/PropertyNameArray.cpp: + (JSC::PropertyNameArray::add): + * kjs/PropertyNameArray.h: + (JSC::PropertyNameArray::PropertyNameArray): + (JSC::PropertyNameArray::addKnownUnique): + (JSC::PropertyNameArray::begin): + (JSC::PropertyNameArray::end): + (JSC::PropertyNameArray::size): + (JSC::PropertyNameArray::operator[]): + (JSC::PropertyNameArray::releaseIdentifiers): + * kjs/StructureID.cpp: + (JSC::StructureID::getEnumerablePropertyNames): + * kjs/StructureID.h: + (JSC::StructureID::clearEnumerationCache): + +2008-09-19 Oliver Hunt <oliver@apple.com> + + Reviewed by Maciej Stachowiak. + + Improve peformance of local variable initialisation. + + Pull local and constant initialisation out of slideRegisterWindowForCall + and into its own opcode. This allows the JIT to generate the initialisation + code for a function directly into the instruction stream and so avoids a few + branches on function entry. + + Results a 1% progression in SunSpider, particularly in a number of the bitop + tests where the called functions are very fast. + + * VM/CTI.cpp: + (JSC::CTI::emitInitialiseRegister): + (JSC::CTI::privateCompileMainPass): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::CodeGenerator): + * VM/Machine.cpp: + (JSC::slideRegisterWindowForCall): + (JSC::Machine::privateExecute): + * VM/Opcode.h: + +2008-09-19 Sam Weinig <sam@webkit.org> + + Reviewed by Darin Adler. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=20928 + Speed up JS property enumeration by caching entire PropertyNameArray + + 1.3% speedup on Sunspider, 30% on string-fasta. + + * JavaScriptCore.exp: + * VM/JSPropertyNameIterator.cpp: + (JSC::JSPropertyNameIterator::~JSPropertyNameIterator): + (JSC::JSPropertyNameIterator::invalidate): + * VM/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::JSPropertyNameIterator): + (JSC::JSPropertyNameIterator::create): + * kjs/JSObject.cpp: + (JSC::JSObject::getPropertyNames): + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::getEnumerablePropertyNames): + * kjs/PropertyMap.h: + * kjs/PropertyNameArray.cpp: + (JSC::PropertyNameArray::add): + * kjs/PropertyNameArray.h: + (JSC::PropertyNameArrayData::create): + (JSC::PropertyNameArrayData::propertyNameVector): + (JSC::PropertyNameArrayData::setCachedPrototypeChain): + (JSC::PropertyNameArrayData::cachedPrototypeChain): + (JSC::PropertyNameArrayData::begin): + (JSC::PropertyNameArrayData::end): + (JSC::PropertyNameArrayData::PropertyNameArrayData): + (JSC::PropertyNameArray::PropertyNameArray): + (JSC::PropertyNameArray::addKnownUnique): + (JSC::PropertyNameArray::size): + (JSC::PropertyNameArray::operator[]): + (JSC::PropertyNameArray::begin): + (JSC::PropertyNameArray::end): + (JSC::PropertyNameArray::setData): + (JSC::PropertyNameArray::data): + (JSC::PropertyNameArray::releaseData): + * kjs/ScopeChain.cpp: + (JSC::ScopeChainNode::print): + * kjs/StructureID.cpp: + (JSC::structureIDChainsAreEqual): + (JSC::StructureID::getEnumerablePropertyNames): + (JSC::StructureID::clearEnumerationCache): + (JSC::StructureID::createCachedPrototypeChain): + * kjs/StructureID.h: + +2008-09-19 Holger Hans Peter Freyther <zecke@selfish.org> + + Reviewed by Maciej Stachowiak. + + Fix a mismatched new[]/delete in JSObject::allocatePropertyStorage + + * kjs/JSObject.cpp: + (JSC::JSObject::allocatePropertyStorage): Spotted by valgrind. + +2008-09-19 Darin Adler <darin@apple.com> + + Reviewed by Sam Weinig. + + - part 2 of https://bugs.webkit.org/show_bug.cgi?id=20858 + make each distinct C++ class get a distinct JSC::Structure + + * JavaScriptCore.exp: Exported constructEmptyObject for use in WebCore. + + * kjs/JSGlobalObject.h: Changed the protected constructor to take a + structure instead of a prototype. + + * kjs/JSVariableObject.h: Removed constructor that takes a prototype. + +2008-09-19 Julien Chaffraix <jchaffraix@pleyo.com> + + Reviewed by Alexey Proskuryakov. + + Use the template hoisting technique on the RefCounted class. This reduces the code bloat due to + non-template methods' code been copied for each instance of the template. + The patch splits RefCounted between a base class that holds non-template methods and attributes + and the template RefCounted class that keeps the same functionnality. + + On my Linux with gcc 4.3 for the Gtk port, this is: + - a ~600KB save on libwebkit.so in release. + - a ~1.6MB save on libwebkit.so in debug. + + It is a wash on Sunspider and a small win on Dromaeo (not sure it is relevant). + On the whole, it should be a small win as we reduce the compiled code size and the only + new function call should be inlined by the compiler. + + * wtf/RefCounted.h: + (WTF::RefCountedBase::ref): Copied from RefCounted. + (WTF::RefCountedBase::hasOneRef): Ditto. + (WTF::RefCountedBase::refCount): Ditto. + (WTF::RefCountedBase::RefCountedBase): Ditto. + (WTF::RefCountedBase::~RefCountedBase): Ditto. + (WTF::RefCountedBase::derefBase): Tweaked from the RefCounted version to remove + template section. + (WTF::RefCounted::RefCounted): + (WTF::RefCounted::deref): Small wrapper around RefCountedBase::derefBase(). + (WTF::RefCounted::~RefCounted): Keep private destructor. + +2008-09-18 Darin Adler <darin@apple.com> + + Reviewed by Maciej Stachowiak. + + - part 1 of https://bugs.webkit.org/show_bug.cgi?id=20858 + make each distinct C++ class get a distinct JSC::Structure + + * kjs/lookup.h: Removed things here that were used only in WebCore: + cacheGlobalObject, JSC_DEFINE_PROTOTYPE, JSC_DEFINE_PROTOTYPE_WITH_PROTOTYPE, + and JSC_IMPLEMENT_PROTOTYPE. + +2008-09-18 Darin Adler <darin@apple.com> + + Reviewed by Maciej Stachowiak. + + - https://bugs.webkit.org/show_bug.cgi?id=20927 + simplify/streamline the code to turn strings into identifiers while parsing + + * kjs/grammar.y: Get rid of string from the union, and use ident for STRING as + well as for IDENT. + + * kjs/lexer.cpp: + (JSC::Lexer::lex): Use makeIdentifier instead of makeUString for String. + * kjs/lexer.h: Remove makeUString. + + * kjs/nodes.h: Changed StringNode to hold an Identifier instead of UString. + + * VM/CodeGenerator.cpp: + (JSC::keyForCharacterSwitch): Updated since StringNode now holds an Identifier. + (JSC::prepareJumpTableForStringSwitch): Ditto. + * kjs/nodes.cpp: + (JSC::StringNode::emitCode): Ditto. The comment from here is now in the lexer. + (JSC::processClauseList): Ditto. + * kjs/nodes2string.cpp: + (JSC::StringNode::streamTo): Ditto. + +2008-09-18 Sam Weinig <sam@webkit.org> + + Fix style. + + * VM/Instruction.h: + (JSC::Instruction::Instruction): + +2008-09-18 Oliver Hunt <oliver@apple.com> + + Reviewed by Maciej Stachowiak. + + Bug 20911: REGRESSION(r36480?): Reproducible assertion failure below derefStructureIDs 64-bit JavaScriptCore + <https://bugs.webkit.org/show_bug.cgi?id=20911> + + The problem was simply caused by the int constructor for Instruction + failing to initialise the full struct in 64bit builds. + + * VM/Instruction.h: + (JSC::Instruction::Instruction): + +2008-09-18 Darin Adler <darin@apple.com> + + - fix release build + + * wtf/RefCountedLeakCounter.cpp: Removed stray "static". + +2008-09-18 Darin Adler <darin@apple.com> + + Reviewed by Sam Weinig. + + * kjs/JSGlobalObject.h: Tiny style guideline tweak. + +2008-09-18 Darin Adler <darin@apple.com> + + Reviewed by Sam Weinig. + + - fix https://bugs.webkit.org/show_bug.cgi?id=20925 + LEAK messages appear every time I quit + + * JavaScriptCore.exp: Updated, and also added an export + needed for future WebCore use of JSC::StructureID. + + * wtf/RefCountedLeakCounter.cpp: + (WTF::RefCountedLeakCounter::suppressMessages): Added. + (WTF::RefCountedLeakCounter::cancelMessageSuppression): Added. + (WTF::RefCountedLeakCounter::RefCountedLeakCounter): Tweaked a bit. + (WTF::RefCountedLeakCounter::~RefCountedLeakCounter): Added code to + log the reason there was no leak checking done. + (WTF::RefCountedLeakCounter::increment): Tweaked a bit. + (WTF::RefCountedLeakCounter::decrement): Ditto. + + * wtf/RefCountedLeakCounter.h: Replaced setLogLeakMessages with two + new functions, suppressMessages and cancelMessageSuppression. Also + added m_ prefixes to the data member names. + +2008-09-18 Holger Hans Peter Freyther <zecke@selfish.org> + + Reviewed by Mark Rowe. + + https://bugs.webkit.org/show_bug.cgi?id=20437 + + Add a proper #define to define which XML Parser implementation to use. Client + code can use #if USE(QXMLSTREAM) to decide if the Qt XML StreamReader + implementation is going to be used. + + * wtf/Platform.h: + +2008-09-18 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Make a Unicode non-breaking space count as a whitespace character in + PCRE. This change was already made in WREC, and it fixes one of the + Mozilla JS tests. Since it is now fixed in PCRE as well, we can check + in a new set of expected test results. + + * pcre/pcre_internal.h: + (isSpaceChar): + * tests/mozilla/expected.html: + +2008-09-18 Stephanie Lewis <slewis@apple.com> + + Reviewed by Mark Rowe and Maciej Stachowiak. + + add an option use arch to specify which architecture to run. + + * tests/mozilla/jsDriver.pl: + +2008-09-17 Oliver Hunt <oliver@apple.com> + + Correctly restore argument reference prior to SFX runtime calls. + + Reviewed by Steve Falkenburg. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + +2008-09-17 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Bug 20876: REGRESSION (r36417, r36427): fast/js/exception-expression-offset.html fails + <https://bugs.webkit.org/show_bug.cgi?id=20876> + + r36417 and r36427 caused an get_by_id opcode to be emitted before the + instanceof and construct opcodes, in order to enable inline caching of + the prototype property. Unfortunately, this regressed some tests dealing + with exceptions thrown by 'instanceof' and the 'new' operator. We fix + these problems by detecting whether an "is not an object" exception is + thrown before op_instanceof or op_construct, and emit the proper + exception in those cases. + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitConstruct): + * VM/CodeGenerator.h: + * VM/ExceptionHelpers.cpp: + (JSC::createInvalidParamError): + (JSC::createNotAConstructorError): + (JSC::createNotAnObjectError): + * VM/ExceptionHelpers.h: + * VM/Machine.cpp: + (JSC::Machine::getOpcode): + (JSC::Machine::privateExecute): + * VM/Machine.h: + * kjs/nodes.cpp: + (JSC::NewExprNode::emitCode): + (JSC::InstanceOfNode::emitCode): + +2008-09-17 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + JIT generation cti_op_construct_verify. + + Quarter to half percent progression on v8-tests. + Roughly not change on SunSpider (possible minor progression). + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/Machine.cpp: + * VM/Machine.h: + +2008-09-15 Steve Falkenburg <sfalken@apple.com> + + Improve timer accuracy for JavaScript Date object on Windows. + + Use a combination of ftime and QueryPerformanceCounter. + ftime returns the information we want, but doesn't have sufficient resolution. + QueryPerformanceCounter has high resolution, but is only usable to measure time intervals. + To combine them, we call ftime and QueryPerformanceCounter initially. Later calls will use + QueryPerformanceCounter by itself, adding the delta to the saved ftime. We re-sync to + correct for drift if the low-res and high-res elapsed time between calls differs by more + than twice the low-resolution timer resolution. + + QueryPerformanceCounter may be inaccurate due to a problems with: + - some PCI bridge chipsets (http://support.microsoft.com/kb/274323) + - BIOS bugs (http://support.microsoft.com/kb/895980/) + - BIOS/HAL bugs on multiprocessor/multicore systems (http://msdn.microsoft.com/en-us/library/ms644904.aspx) + + Reviewed by Darin Adler. + + * kjs/DateMath.cpp: + (JSC::highResUpTime): + (JSC::lowResUTCTime): + (JSC::qpcAvailable): + (JSC::getCurrentUTCTimeWithMicroseconds): + +2008-09-17 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + Implement JIT generation of CallFrame initialization, for op_call. + + 1% sunspider 2.5% v8-tests. + + * VM/CTI.cpp: + (JSC::CTI::compileOpCall): + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_op_call_NotJSFunction): + +2008-09-17 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + Optimizations for op_call in CTI. Move check for (ctiCode == 0) into JIT code, + move copying of scopeChain for CodeBlocks that needFullScopeChain into head of + functions, instead of checking prior to making the call. + + 3% on v8-tests (4% on richards, 6% in delta-blue) + + * VM/CTI.cpp: + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + * VM/Machine.cpp: + (JSC::Machine::execute): + (JSC::Machine::cti_op_call_JSFunction): + (JSC::Machine::cti_vm_compile): + (JSC::Machine::cti_vm_updateScopeChain): + (JSC::Machine::cti_op_construct_JSConstruct): + * VM/Machine.h: + +2008-09-17 Tor Arne Vestbø <tavestbo@trolltech.com> + + Fix the QtWebKit/Mac build + + * wtf/ThreadingQt.cpp: + (WTF::initializeThreading): use QCoreApplication to get the main thread + +2008-09-16 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Bug 20857: REGRESSION (r36427): ASSERTION FAILED: m_refCount >= 0 in RegisterID::deref() + <https://bugs.webkit.org/show_bug.cgi?id=20857> + + Fix a problem stemming from the slightly unsafe behaviour of the + CodeGenerator::finalDestination() method by putting the "func" argument + of the emitConstruct() method in a RefPtr in its caller. Also, add an + assertion guaranteeing that this is always the case. + + CodeGenerator::finalDestination() is still incorrect and can cause + problems with a different allocator; see bug 20340 for more details. + + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitConstruct): + * kjs/nodes.cpp: + (JSC::NewExprNode::emitCode): + +2008-09-16 Alice Liu <alice.liu@apple.com> + + build fix. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + +2008-09-16 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + CTI code generation for op_ret. The majority of the work + (updating variables on the stack & on exec) can be performed + directly in generated code. + + We still need to check, & to call out to C-code to handle + activation records, profiling, and full scope chains. + + +1.5% Sunspider, +5/6% v8 tests. + + * VM/CTI.cpp: + (JSC::CTI::emitPutCTIParam): + (JSC::CTI::compileOpCall): + (JSC::CTI::privateCompileMainPass): + * VM/CTI.h: + * VM/Machine.cpp: + (JSC::Machine::cti_op_ret_activation): + (JSC::Machine::cti_op_ret_profiler): + (JSC::Machine::cti_op_ret_scopeChain): + * VM/Machine.h: + +2008-09-16 Dimitri Glazkov <dglazkov@chromium.org> + + Fix the Windows build. + + Add some extra parentheses to stop MSVC from complaining so much. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_stricteq): + (JSC::Machine::cti_op_nstricteq): + * kjs/operations.cpp: + (JSC::strictEqual): + +2008-09-15 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich. + + - speed up the === and !== operators by choosing the fast cases better + + No effect on SunSpider but speeds up the V8 EarlyBoyer benchmark about 4%. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_stricteq): + (JSC::Machine::cti_op_nstricteq): + * kjs/JSImmediate.h: + (JSC::JSImmediate::areBothImmediate): + * kjs/operations.cpp: + (JSC::strictEqual): + (JSC::strictEqualSlowCase): + * kjs/operations.h: + +2008-09-15 Oliver Hunt <oliver@apple.com> + + RS=Sam Weinig. + + Coding style cleanup. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + +2008-09-15 Oliver Hunt <oliver@apple.com> + + Reviewed by Cameron Zwarich. + + Bug 20874: op_resolve does not do any form of caching + <https://bugs.webkit.org/show_bug.cgi?id=20874> + + This patch adds an op_resolve_global opcode to handle (and cache) + property lookup we can statically determine must occur on the global + object (if at all). + + 3% progression on sunspider, 3.2x improvement to bitops-bitwise-and, and + 10% in math-partial-sums + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::findScopedProperty): + (JSC::CodeGenerator::emitResolve): + * VM/Machine.cpp: + (JSC::resolveGlobal): + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_resolve_global): + * VM/Machine.h: + * VM/Opcode.h: + +2008-09-15 Sam Weinig <sam@webkit.org> + + Roll out r36462. It broke document.all. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CTI.h: + * VM/Machine.cpp: + (JSC::Machine::Machine): + (JSC::Machine::cti_op_eq_null): + (JSC::Machine::cti_op_neq_null): + * VM/Machine.h: + (JSC::Machine::isJSString): + * kjs/JSCell.h: + * kjs/JSWrapperObject.h: + * kjs/StringObject.h: + * kjs/StringObjectThatMasqueradesAsUndefined.h: + +2008-09-15 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Bug 20863: ASSERTION FAILED: addressOffset < instructions.size() in CodeBlock::getHandlerForVPC + <https://bugs.webkit.org/show_bug.cgi?id=20863> + + r36427 changed the number of arguments to op_construct without changing + the argument index for the vPC in the call to initializeCallFrame() in + the CTI case. This caused a JSC test failure. Correcting the argument + index fixes the test failure. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_construct_JSConstruct): + +2008-09-15 Mark Rowe <mrowe@apple.com> + + Fix GCC 4.2 build. + + * VM/CTI.h: + +2008-09-15 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Maciej Stachowiak. + + Fixed a typo in op_get_by_id_chain that caused it to miss every time + in the interpreter. + + Also, a little cleanup. + + * VM/Machine.cpp: + (JSC::Machine::privateExecute): Set up baseObject before entering the + loop, so we compare against the right values. + +2008-09-15 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Removed the CalledAsConstructor flag from the call frame header. Now, + we use an explicit opcode at the call site to fix up constructor results. + + SunSpider says 0.4% faster. + + cti_op_construct_verify is an out-of-line function call for now, but we + can fix that once StructureID holds type information like isObject. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): Codegen for the new opcode. + + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + + * VM/CodeGenerator.cpp: Codegen for the new opcode. Also... + (JSC::CodeGenerator::emitCall): ... don't test for known non-zero value. + (JSC::CodeGenerator::emitConstruct): ... ditto. + + * VM/Machine.cpp: No more CalledAsConstructor + (JSC::Machine::privateExecute): Implementation for the new opcode. + (JSC::Machine::cti_op_ret): The speedup: no need to check whether we were + called as a constructor. + (JSC::Machine::cti_op_construct_verify): Implementation for the new opcode. + * VM/Machine.h: + + * VM/Opcode.h: Declare new opcode. + + * VM/RegisterFile.h: + (JSC::RegisterFile::): No more CalledAsConstructor + +2008-09-15 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + Inline code generation of eq_null/neq_null for CTI. Uses vptr checking for + StringObjectsThatAreMasqueradingAsBeingUndefined. In the long run, the + masquerading may be handled differently (through the StructureIDs - see bug + #20823). + + >1% on v8-tests. + + * VM/CTI.cpp: + (JSC::CTI::emitJumpSlowCaseIfIsJSCell): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CTI.h: + * VM/Machine.cpp: + (JSC::Machine::Machine): + (JSC::Machine::cti_op_eq_null): + (JSC::Machine::cti_op_neq_null): + * VM/Machine.h: + (JSC::Machine::doesMasqueradesAsUndefined): + * kjs/JSWrapperObject.h: + (JSC::JSWrapperObject::): + (JSC::JSWrapperObject::JSWrapperObject): + * kjs/StringObject.h: + (JSC::StringObject::StringObject): + * kjs/StringObjectThatMasqueradesAsUndefined.h: + (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): + +2008-09-15 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Rubber-stamped by Oliver Hunt. + + r36427 broke CodeBlock::dump() by changing the number of arguments to + op_construct without changing the code that prints it. This patch fixes + it by printing the additional argument. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + +2008-09-15 Adam Roben <aroben@apple.com> + + Build fix + + * kjs/StructureID.cpp: Removed a stray semicolon. + +2008-09-15 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Fix a crash in fast/js/exception-expression-offset.html caused by not + updating all mentions of the length of op_construct in r36427. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_construct_NotJSConstruct): + +2008-09-15 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich. + + - fix layout test failure introduced by fix for 20849 + + (The failing test was fast/js/delete-then-put.html) + + * kjs/JSObject.cpp: + (JSC::JSObject::removeDirect): Clear enumeration cache + in the dictionary case. + * kjs/JSObject.h: + (JSC::JSObject::putDirect): Ditto. + * kjs/StructureID.h: + (JSC::StructureID::clearEnumerationCache): Inline to handle the + clear. + +2008-09-15 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich. + + - fix JSC test failures introduced by fix for 20849 + + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::getEnumerablePropertyNames): Use the correct count. + +2008-09-15 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Bug 20851: REGRESSION (r36410): fast/js/kde/GlobalObject.html fails + <https://bugs.webkit.org/show_bug.cgi?id=20851> + + r36410 introduced an optimization for parseInt() that is incorrect when + its argument is larger than the range of a 32-bit integer. If the + argument is a number that is not an immediate integer, then the correct + behaviour is to return the floor of its value, unless it is an infinite + value, in which case the correct behaviour is to return 0. + + * kjs/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): + +2008-09-15 Sam Weinig <sam@webkit.org> + + Reviewed by Maciej Stachowiak. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=20849 + Cache property names for getEnumerablePropertyNames in the StructureID. + + ~0.5% speedup on Sunspider overall (9.7% speedup on string-fasta). ~1% speedup + on the v8 test suite. + + * kjs/JSObject.cpp: + (JSC::JSObject::getPropertyNames): + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::getEnumerablePropertyNames): + * kjs/PropertyMap.h: + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::getEnumerablePropertyNames): + * kjs/StructureID.h: + +2008-09-14 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich. + + - speed up JS construction by extracting "prototype" lookup so PIC applies. + + ~0.5% speedup on SunSpider + Speeds up some of the V8 tests as well, most notably earley-boyer. + + * VM/CTI.cpp: + (JSC::CTI::compileOpCall): Account for extra arg for prototype. + (JSC::CTI::privateCompileMainPass): Account for increased size of op_construct. + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitConstruct): Emit separate lookup to get prototype property. + * VM/Machine.cpp: + (JSC::Machine::privateExecute): Expect prototype arg in op_construct. + (JSC::Machine::cti_op_construct_JSConstruct): ditto + (JSC::Machine::cti_op_construct_NotJSConstruct): ditto + +2008-09-10 Alexey Proskuryakov <ap@webkit.org> + + Reviewed by Eric Seidel. + + Add a protected destructor for RefCounted. + + It is wrong to call its destructor directly, because (1) this should be taken care of by + deref(), and (2) many classes that use RefCounted have non-virtual destructors. + + No change in behavior. + + * wtf/RefCounted.h: (WTF::RefCounted::~RefCounted): + +2008-09-14 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Accelerated property accesses. + + Inline more of the array access code into the JIT code for get/put_by_val. + Accelerate get/put_by_id by speculatively inlining a disable direct access + into the hot path of the code, and repatch this with the correct StructureID + and property map offset once these are known. In the case of accesses to the + prototype and reading the array-length a trampoline is genertaed, and the + branch to the slow-case is relinked to jump to this. + + By repatching, we mean rewriting the x86 instruction stream. Instructions are + only modified in a simple fasion - altering immediate operands, memory access + deisplacements, and branch offsets. + + For regular get_by_id/put_by_id accesses to an object, a StructureID in an + instruction's immediate operant is updateded, and a memory access operation's + displacement is updated to access the correct field on the object. In the case + of more complex accesses (array length and get_by_id_prototype) the offset on + the branch to slow-case is updated, to now jump to a trampoline. + + +2.8% sunspider, +13% v8-tests + + * VM/CTI.cpp: + (JSC::CTI::emitCall): + (JSC::CTI::emitJumpSlowCaseIfNotJSCell): + (JSC::CTI::CTI): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdSelf): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::privateCompilePutByIdReplace): + (JSC::CTI::privateCompilePutByIdTransition): + (JSC::CTI::privateCompileArrayLengthTrampoline): + (JSC::CTI::privateCompileStringLengthTrampoline): + (JSC::CTI::patchGetByIdSelf): + (JSC::CTI::patchPutByIdReplace): + (JSC::CTI::privateCompilePatchGetArrayLength): + (JSC::CTI::privateCompilePatchGetStringLength): + * VM/CTI.h: + (JSC::CTI::compileGetByIdSelf): + (JSC::CTI::compileGetByIdProto): + (JSC::CTI::compileGetByIdChain): + (JSC::CTI::compilePutByIdReplace): + (JSC::CTI::compilePutByIdTransition): + (JSC::CTI::compileArrayLengthTrampoline): + (JSC::CTI::compileStringLengthTrampoline): + (JSC::CTI::compilePatchGetArrayLength): + (JSC::CTI::compilePatchGetStringLength): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + (JSC::CodeBlock::~CodeBlock): + * VM/CodeBlock.h: + (JSC::StructureStubInfo::StructureStubInfo): + (JSC::CodeBlock::getStubInfo): + * VM/Machine.cpp: + (JSC::Machine::tryCTICachePutByID): + (JSC::Machine::tryCTICacheGetByID): + (JSC::Machine::cti_op_put_by_val_array): + * VM/Machine.h: + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::cmpl_i8m): + (JSC::X86Assembler::emitUnlinkedJa): + (JSC::X86Assembler::getRelocatedAddress): + (JSC::X86Assembler::getDifferenceBetweenLabels): + (JSC::X86Assembler::emitModRm_opmsib): + +2008-09-14 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Cameron Zwarich. + + - split the "prototype" lookup for hasInstance into opcode stream so it can be cached + + ~5% speedup on v8 earley-boyer test + + * API/JSCallbackObject.h: Add a parameter for the pre-looked-up prototype. + * API/JSCallbackObjectFunctions.h: + (JSC::::hasInstance): Ditto. + * API/JSValueRef.cpp: + (JSValueIsInstanceOfConstructor): Look up and pass in prototype. + * JavaScriptCore.exp: + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): Pass along prototype. + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): Print third arg. + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitInstanceOf): Implement this, now that there + is a third argument. + * VM/CodeGenerator.h: + * VM/Machine.cpp: + (JSC::Machine::privateExecute): Pass along the prototype. + (JSC::Machine::cti_op_instanceof): ditto + * kjs/JSObject.cpp: + (JSC::JSObject::hasInstance): Expect to get a pre-looked-up prototype. + * kjs/JSObject.h: + * kjs/nodes.cpp: + (JSC::InstanceOfNode::emitCode): Emit a get_by_id of the prototype + property and pass that register to instanceof. + * kjs/nodes.h: + +2008-09-14 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Remove unnecessary virtual function call from cti_op_call_JSFunction - + ~5% on richards, ~2.5% on v8-tests, ~0.5% on sunspider. + + * VM/Machine.cpp: + (JSC::Machine::cti_op_call_JSFunction): + +2008-09-14 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Bug 20827: the 'typeof' operator is slow + <https://bugs.webkit.org/show_bug.cgi?id=20827> + + Optimize the 'typeof' operator when its result is compared to a constant + string. + + This is a 5.5% speedup on the V8 Earley-Boyer test. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitEqualityOp): + * VM/CodeGenerator.h: + * VM/Machine.cpp: + (JSC::jsIsObjectType): + (JSC::jsIsFunctionType): + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_is_undefined): + (JSC::Machine::cti_op_is_boolean): + (JSC::Machine::cti_op_is_number): + (JSC::Machine::cti_op_is_string): + (JSC::Machine::cti_op_is_object): + (JSC::Machine::cti_op_is_function): + * VM/Machine.h: + * VM/Opcode.h: + * kjs/nodes.cpp: + (JSC::BinaryOpNode::emitCode): + (JSC::EqualNode::emitCode): + (JSC::StrictEqualNode::emitCode): + * kjs/nodes.h: + +2008-09-14 Sam Weinig <sam@webkit.org> + + Reviewed by Cameron Zwarich. + + Patch for https://bugs.webkit.org/show_bug.cgi?id=20844 + Speed up parseInt for numbers + + Sunspider reports this as 1.029x as fast overall and 1.37x as fast on string-unpack-code. + No change on the v8 suite. + + * kjs/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncParseInt): Don't convert numbers to strings just to + convert them back to numbers. + +2008-09-14 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Oliver Hunt. + + Bug 20816: op_lesseq should be optimized + <https://bugs.webkit.org/show_bug.cgi?id=20816> + + Add a loop_if_lesseq opcode that is similar to the loop_if_less opcode. + + This is a 9.4% speedup on the V8 Crypto benchmark. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitJumpIfTrue): + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_loop_if_lesseq): + * VM/Machine.h: + * VM/Opcode.h: + +2008-09-14 Sam Weinig <sam@webkit.org> + + Reviewed by Cameron Zwarich. + + Cleanup Sampling code. + + * VM/CTI.cpp: + (JSC::CTI::emitCall): + (JSC::CTI::privateCompileMainPass): + * VM/CTI.h: + (JSC::CTI::execute): + * VM/SamplingTool.cpp: + (JSC::): + (JSC::SamplingTool::run): + (JSC::SamplingTool::dump): + * VM/SamplingTool.h: + (JSC::SamplingTool::callingHostFunction): + +2008-09-13 Oliver Hunt <oliver@apple.com> + + Reviewed by Cameron Zwarich. + + Bug 20821: Cache property transitions to speed up object initialization + https://bugs.webkit.org/show_bug.cgi?id=20821 + + Implement a transition cache to improve the performance of new properties + being added to objects. This is extremely beneficial in constructors and + shows up as a 34% improvement on access-binary-trees in SunSpider (0.8% + overall) + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::): + (JSC::transitionWillNeedStorageRealloc): + (JSC::CTI::privateCompilePutByIdTransition): + * VM/CTI.h: + (JSC::CTI::compilePutByIdTransition): + * VM/CodeBlock.cpp: + (JSC::printPutByIdOp): + (JSC::CodeBlock::printStructureIDs): + (JSC::CodeBlock::dump): + (JSC::CodeBlock::derefStructureIDs): + (JSC::CodeBlock::refStructureIDs): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::emitPutById): + * VM/Machine.cpp: + (JSC::cachePrototypeChain): + (JSC::Machine::tryCachePutByID): + (JSC::Machine::tryCacheGetByID): + (JSC::Machine::privateExecute): + (JSC::Machine::tryCTICachePutByID): + (JSC::Machine::tryCTICacheGetByID): + * VM/Machine.h: + * VM/Opcode.h: + * kjs/JSObject.h: + (JSC::JSObject::putDirect): + (JSC::JSObject::transitionTo): + * kjs/PutPropertySlot.h: + (JSC::PutPropertySlot::PutPropertySlot): + (JSC::PutPropertySlot::wasTransition): + (JSC::PutPropertySlot::setWasTransition): + * kjs/StructureID.cpp: + (JSC::StructureID::transitionTo): + (JSC::StructureIDChain::StructureIDChain): + * kjs/StructureID.h: + (JSC::StructureID::previousID): + (JSC::StructureID::setCachedPrototypeChain): + (JSC::StructureID::cachedPrototypeChain): + (JSC::StructureID::propertyMap): + * masm/X86Assembler.h: + (JSC::X86Assembler::addl_i8m): + (JSC::X86Assembler::subl_i8m): + +2008-09-12 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Bug 20819: JSValue::isObject() is slow + <https://bugs.webkit.org/show_bug.cgi?id=20819> + + Optimize JSCell::isObject() and JSCell::isString() by making them + non-virtual calls that rely on the StructureID type information. + + This is a 0.7% speedup on SunSpider and a 1.0% speedup on the V8 + benchmark suite. + + * JavaScriptCore.exp: + * kjs/JSCell.cpp: + * kjs/JSCell.h: + (JSC::JSCell::isObject): + (JSC::JSCell::isString): + * kjs/JSObject.cpp: + * kjs/JSObject.h: + * kjs/JSString.cpp: + * kjs/JSString.h: + (JSC::JSString::JSString): + * kjs/StructureID.h: + (JSC::StructureID::type): + +2008-09-11 Stephanie Lewis <slewis@apple.com> + + Reviewed by Oliver Hunt. + + Turn off PGO Optimization on CTI.cpp -> <rdar://problem/6207709>. Fixes + crash on CNN and on Dromaeo. + Fix Missing close tag in vcproj. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + +2008-09-11 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Not reviewed. + + Correct an SVN problem with the last commit and actually add the new + files. + + * wrec/CharacterClassConstructor.cpp: Added. + (JSC::): + (JSC::getCharacterClassNewline): + (JSC::getCharacterClassDigits): + (JSC::getCharacterClassSpaces): + (JSC::getCharacterClassWordchar): + (JSC::getCharacterClassNondigits): + (JSC::getCharacterClassNonspaces): + (JSC::getCharacterClassNonwordchar): + (JSC::CharacterClassConstructor::addSorted): + (JSC::CharacterClassConstructor::addSortedRange): + (JSC::CharacterClassConstructor::put): + (JSC::CharacterClassConstructor::flush): + (JSC::CharacterClassConstructor::append): + * wrec/CharacterClassConstructor.h: Added. + (JSC::CharacterClassConstructor::CharacterClassConstructor): + (JSC::CharacterClassConstructor::isUpsideDown): + (JSC::CharacterClassConstructor::charClass): + +2008-09-11 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Bug 20788: Split CharacterClassConstructor into its own file + <https://bugs.webkit.org/show_bug.cgi?id=20788> + + Split CharacterClassConstructor into its own file and clean up some + style issues. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * wrec/CharacterClassConstructor.cpp: Added. + (JSC::): + (JSC::getCharacterClassNewline): + (JSC::getCharacterClassDigits): + (JSC::getCharacterClassSpaces): + (JSC::getCharacterClassWordchar): + (JSC::getCharacterClassNondigits): + (JSC::getCharacterClassNonspaces): + (JSC::getCharacterClassNonwordchar): + (JSC::CharacterClassConstructor::addSorted): + (JSC::CharacterClassConstructor::addSortedRange): + (JSC::CharacterClassConstructor::put): + (JSC::CharacterClassConstructor::flush): + (JSC::CharacterClassConstructor::append): + * wrec/CharacterClassConstructor.h: Added. + (JSC::CharacterClassConstructor::CharacterClassConstructor): + (JSC::CharacterClassConstructor::isUpsideDown): + (JSC::CharacterClassConstructor::charClass): + * wrec/WREC.cpp: + (JSC::WRECParser::parseCharacterClass): + +2008-09-10 Simon Hausmann <hausmann@webkit.org> + + Not reviewed but trivial one-liner for yet unused macro. + + Changed PLATFORM(WINCE) to PLATFORM(WIN_CE) as requested by Mark. + + (part of https://bugs.webkit.org/show_bug.cgi?id=20746) + + * wtf/Platform.h: + +2008-09-10 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Rubber-stamped by Oliver Hunt. + + Fix a typo by renaming the overloaded orl_rr that takes an immediate to + orl_i32r. + + * VM/CTI.cpp: + (JSC::CTI::emitFastArithPotentiallyReTagImmediate): + * masm/X86Assembler.h: + (JSC::X86Assembler::orl_i32r): + * wrec/WREC.cpp: + (JSC::WRECGenerator::generatePatternCharacter): + (JSC::WRECGenerator::generateCharacterClassInverted): + +2008-09-10 Sam Weinig <sam@webkit.org> + + Reviewed by Geoff Garen. + + Add inline property storage for JSObject. + + 1.2% progression on Sunspider. .5% progression on the v8 test suite. + + * JavaScriptCore.exp: + * VM/CTI.cpp: + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + * kjs/JSObject.cpp: + (JSC::JSObject::mark): There is no reason to check storageSize now that + we start from 0. + (JSC::JSObject::allocatePropertyStorage): Allocates/reallocates heap storage. + * kjs/JSObject.h: + (JSC::JSObject::offsetForLocation): m_propertyStorage is not an OwnArrayPtr + now so there is no reason to .get() + (JSC::JSObject::usingInlineStorage): + (JSC::JSObject::JSObject): Start with m_propertyStorage pointing to the + inline storage. + (JSC::JSObject::~JSObject): Free the heap storage if not using the inline + storage. + (JSC::JSObject::putDirect): Switch to the heap storage only when we know + we know that we are about to add a property that will overflow the inline + storage. + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::createTable): Don't allocate the propertyStorage, that is + now handled by JSObject. + (JSC::PropertyMap::rehash): PropertyStorage is not a OwnArrayPtr anymore. + * kjs/PropertyMap.h: + (JSC::PropertyMap::storageSize): Rename from markingCount. + * kjs/StructureID.cpp: + (JSC::StructureID::addPropertyTransition): Don't resize the property storage + if we are using inline storage. + * kjs/StructureID.h: + +2008-09-10 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoff Garen. + + Inline immediate number version of op_mul. + + Renamed mull_rr to imull_rr as that's what it's + actually doing, and added imull_i32r for the constant + case immediate multiply. + + 1.1% improvement to SunSpider. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * masm/X86Assembler.h: + (JSC::X86Assembler::): + (JSC::X86Assembler::imull_rr): + (JSC::X86Assembler::imull_i32r): + +2008-09-10 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Not reviewed. + + Mac build fix. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-09-09 Oliver Hunt <oliver@apple.com> + + Reviewed by Maciej Stachowiak. + + Add optimised access to known properties on the global object. + + Improve cross scope access to the global object by emitting + code to access it directly rather than by walking the scope chain. + + This is a 0.8% win in SunSpider and a 1.7% win in the v8 benchmarks. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::emitGetVariableObjectRegister): + (JSC::CTI::emitPutVariableObjectRegister): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (JSC::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (JSC::CodeGenerator::findScopedProperty): + (JSC::CodeGenerator::emitResolve): + (JSC::CodeGenerator::emitGetScopedVar): + (JSC::CodeGenerator::emitPutScopedVar): + * VM/CodeGenerator.h: + * VM/Machine.cpp: + (JSC::Machine::privateExecute): + * VM/Opcode.h: + * kjs/nodes.cpp: + (JSC::FunctionCallResolveNode::emitCode): + (JSC::PostfixResolveNode::emitCode): + (JSC::PrefixResolveNode::emitCode): + (JSC::ReadModifyResolveNode::emitCode): + (JSC::AssignResolveNode::emitCode): + +2008-09-10 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Oliver. + + - enable polymorphic inline caching of properties of primitives + + 1.012x speedup on SunSpider. + + We create special structure IDs for JSString and + JSNumberCell. Unlike normal structure IDs, these cannot hold the + true prototype. Due to JS autoboxing semantics, the prototype used + when looking up string or number properties depends on the lexical + global object of the call site, not the creation site. Thus we + enable StructureIDs to handle this quirk for primitives. + + Everything else should be straightforward. + + * VM/CTI.cpp: + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + * VM/CTI.h: + (JSC::CTI::compileGetByIdProto): + (JSC::CTI::compileGetByIdChain): + * VM/JSPropertyNameIterator.h: + (JSC::JSPropertyNameIterator::JSPropertyNameIterator): + * VM/Machine.cpp: + (JSC::Machine::Machine): + (JSC::cachePrototypeChain): + (JSC::Machine::tryCachePutByID): + (JSC::Machine::tryCacheGetByID): + (JSC::Machine::privateExecute): + (JSC::Machine::tryCTICachePutByID): + (JSC::Machine::tryCTICacheGetByID): + * kjs/GetterSetter.h: + (JSC::GetterSetter::GetterSetter): + * kjs/JSCell.h: + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * kjs/JSGlobalData.h: + * kjs/JSGlobalObject.h: + (JSC::StructureID::prototypeForLookup): + * kjs/JSNumberCell.h: + (JSC::JSNumberCell::JSNumberCell): + (JSC::jsNumberCell): + * kjs/JSObject.h: + (JSC::JSObject::prototype): + * kjs/JSString.cpp: + (JSC::jsString): + (JSC::jsSubstring): + (JSC::jsOwnedString): + * kjs/JSString.h: + (JSC::JSString::JSString): + (JSC::JSString::): + (JSC::jsSingleCharacterString): + (JSC::jsSingleCharacterSubstring): + (JSC::jsNontrivialString): + * kjs/SmallStrings.cpp: + (JSC::SmallStrings::createEmptyString): + (JSC::SmallStrings::createSingleCharacterString): + * kjs/StructureID.cpp: + (JSC::StructureID::StructureID): + (JSC::StructureID::addPropertyTransition): + (JSC::StructureID::getterSetterTransition): + (JSC::StructureIDChain::StructureIDChain): + * kjs/StructureID.h: + (JSC::StructureID::create): + (JSC::StructureID::storedPrototype): + +2008-09-09 Joerg Bornemann <joerg.bornemann@trolltech.com> + + Reviewed by Sam Weinig. + + https://bugs.webkit.org/show_bug.cgi?id=20746 + + Added WINCE platform macro. + + * wtf/Platform.h: + +2008-09-09 Sam Weinig <sam@webkit.org> + + Reviewed by Mark Rowe. + + Remove unnecessary override of getOffset. + + Sunspider reports this as a .6% progression. + + * JavaScriptCore.exp: + * kjs/JSObject.h: + (JSC::JSObject::getDirectLocation): + (JSC::JSObject::getOwnPropertySlotForWrite): + (JSC::JSObject::putDirect): + * kjs/PropertyMap.cpp: + * kjs/PropertyMap.h: + +2008-09-09 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Bug 20759: Remove MacroAssembler + <https://bugs.webkit.org/show_bug.cgi?id=20759> + + Remove MacroAssembler and move its functionality to X86Assembler. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::emitPutArg): + (JSC::CTI::emitPutCTIParam): + (JSC::CTI::emitGetCTIParam): + (JSC::CTI::emitPutToCallFrameHeader): + (JSC::CTI::emitGetFromCallFrameHeader): + (JSC::CTI::emitPutResult): + (JSC::CTI::emitDebugExceptionCheck): + (JSC::CTI::emitJumpSlowCaseIfNotImm): + (JSC::CTI::emitJumpSlowCaseIfNotImms): + (JSC::CTI::emitFastArithDeTagImmediate): + (JSC::CTI::emitFastArithReTagImmediate): + (JSC::CTI::emitFastArithPotentiallyReTagImmediate): + (JSC::CTI::emitFastArithImmToInt): + (JSC::CTI::emitFastArithIntToImmOrSlowCase): + (JSC::CTI::emitFastArithIntToImmNoCheck): + (JSC::CTI::compileOpCall): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdSelf): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::privateCompilePutByIdReplace): + (JSC::CTI::privateArrayLengthTrampoline): + (JSC::CTI::privateStringLengthTrampoline): + (JSC::CTI::compileRegExp): + * VM/CTI.h: + (JSC::CallRecord::CallRecord): + (JSC::JmpTable::JmpTable): + (JSC::SlowCaseEntry::SlowCaseEntry): + (JSC::CTI::JSRInfo::JSRInfo): + * masm/MacroAssembler.h: Removed. + * masm/MacroAssemblerWin.cpp: Removed. + * masm/X86Assembler.h: + (JSC::X86Assembler::emitConvertToFastCall): + (JSC::X86Assembler::emitRestoreArgumentReference): + * wrec/WREC.h: + (JSC::WRECGenerator::WRECGenerator): + (JSC::WRECParser::WRECParser): + +2008-09-09 Sam Weinig <sam@webkit.org> + + Reviewed by Cameron Zwarich. + + Don't waste the first item in the PropertyStorage. + + - Fix typo (makingCount -> markingCount) + - Remove undefined method declaration. + + No change on Sunspider. + + * kjs/JSObject.cpp: + (JSC::JSObject::mark): + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::put): + (JSC::PropertyMap::remove): + (JSC::PropertyMap::getOffset): + (JSC::PropertyMap::insert): + (JSC::PropertyMap::rehash): + (JSC::PropertyMap::resizePropertyStorage): + (JSC::PropertyMap::checkConsistency): + * kjs/PropertyMap.h: + (JSC::PropertyMap::markingCount): Fix typo. + +2008-09-09 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Not reviewed. + + Speculative Windows build fix. + + * masm/MacroAssemblerWin.cpp: + (JSC::MacroAssembler::emitConvertToFastCall): + (JSC::MacroAssembler::emitRestoreArgumentReference): + +2008-09-09 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Bug 20755: Create an X86 namespace for register names and other things + <https://bugs.webkit.org/show_bug.cgi?id=20755> + + Create an X86 namespace to put X86 register names. Perhaps I will move + opcode names here later as well. + + * VM/CTI.cpp: + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::emitPutArg): + (JSC::CTI::emitPutArgConstant): + (JSC::CTI::emitPutCTIParam): + (JSC::CTI::emitGetCTIParam): + (JSC::CTI::emitPutToCallFrameHeader): + (JSC::CTI::emitGetFromCallFrameHeader): + (JSC::CTI::emitPutResult): + (JSC::CTI::emitDebugExceptionCheck): + (JSC::CTI::emitJumpSlowCaseIfNotImms): + (JSC::CTI::compileOpCall): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdSelf): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::privateCompilePutByIdReplace): + (JSC::CTI::privateArrayLengthTrampoline): + (JSC::CTI::privateStringLengthTrampoline): + (JSC::CTI::compileRegExp): + * VM/CTI.h: + * masm/X86Assembler.h: + (JSC::X86::): + (JSC::X86Assembler::emitModRm_rm): + (JSC::X86Assembler::emitModRm_rm_Unchecked): + (JSC::X86Assembler::emitModRm_rmsib): + * wrec/WREC.cpp: + (JSC::WRECGenerator::generateNonGreedyQuantifier): + (JSC::WRECGenerator::generateGreedyQuantifier): + (JSC::WRECGenerator::generateParentheses): + (JSC::WRECGenerator::generateBackreference): + (JSC::WRECGenerator::gernerateDisjunction): + * wrec/WREC.h: + +2008-09-09 Sam Weinig <sam@webkit.org> + + Reviewed by Geoffrey Garen. + + Remove unnecessary friend declaration. + + * kjs/PropertyMap.h: + +2008-09-09 Sam Weinig <sam@webkit.org> + + Reviewed by Geoffrey Garen. + + Replace uses of PropertyMap::get and PropertyMap::getLocation with + PropertyMap::getOffset. + + Sunspider reports this as a .6% improvement. + + * JavaScriptCore.exp: + * kjs/JSObject.cpp: + (JSC::JSObject::put): + (JSC::JSObject::deleteProperty): + (JSC::JSObject::getPropertyAttributes): + * kjs/JSObject.h: + (JSC::JSObject::getDirect): + (JSC::JSObject::getDirectLocation): + (JSC::JSObject::locationForOffset): + * kjs/PropertyMap.cpp: + (JSC::PropertyMap::remove): + (JSC::PropertyMap::getOffset): + * kjs/PropertyMap.h: + +2008-09-09 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Sam Weinig. + + Bug 20754: Remove emit prefix from assembler opcode methods + <https://bugs.webkit.org/show_bug.cgi?id=20754> + + * VM/CTI.cpp: + (JSC::CTI::emitGetArg): + (JSC::CTI::emitGetPutArg): + (JSC::CTI::emitPutArg): + (JSC::CTI::emitPutArgConstant): + (JSC::CTI::emitPutCTIParam): + (JSC::CTI::emitGetCTIParam): + (JSC::CTI::emitPutToCallFrameHeader): + (JSC::CTI::emitGetFromCallFrameHeader): + (JSC::CTI::emitPutResult): + (JSC::CTI::emitDebugExceptionCheck): + (JSC::CTI::emitCall): + (JSC::CTI::emitJumpSlowCaseIfNotImm): + (JSC::CTI::emitJumpSlowCaseIfNotImms): + (JSC::CTI::emitFastArithDeTagImmediate): + (JSC::CTI::emitFastArithReTagImmediate): + (JSC::CTI::emitFastArithPotentiallyReTagImmediate): + (JSC::CTI::emitFastArithImmToInt): + (JSC::CTI::emitFastArithIntToImmOrSlowCase): + (JSC::CTI::emitFastArithIntToImmNoCheck): + (JSC::CTI::compileOpCall): + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + (JSC::CTI::privateCompile): + (JSC::CTI::privateCompileGetByIdSelf): + (JSC::CTI::privateCompileGetByIdProto): + (JSC::CTI::privateCompileGetByIdChain): + (JSC::CTI::privateCompilePutByIdReplace): + (JSC::CTI::privateArrayLengthTrampoline): + (JSC::CTI::privateStringLengthTrampoline): + (JSC::CTI::compileRegExp): + * masm/MacroAssemblerWin.cpp: + (JSC::MacroAssembler::emitConvertToFastCall): + (JSC::MacroAssembler::emitRestoreArgumentReference): + * masm/X86Assembler.h: + (JSC::X86Assembler::pushl_r): + (JSC::X86Assembler::pushl_m): + (JSC::X86Assembler::popl_r): + (JSC::X86Assembler::popl_m): + (JSC::X86Assembler::movl_rr): + (JSC::X86Assembler::addl_rr): + (JSC::X86Assembler::addl_i8r): + (JSC::X86Assembler::addl_i32r): + (JSC::X86Assembler::addl_mr): + (JSC::X86Assembler::andl_rr): + (JSC::X86Assembler::andl_i32r): + (JSC::X86Assembler::cmpl_i8r): + (JSC::X86Assembler::cmpl_rr): + (JSC::X86Assembler::cmpl_rm): + (JSC::X86Assembler::cmpl_i32r): + (JSC::X86Assembler::cmpl_i32m): + (JSC::X86Assembler::cmpw_rm): + (JSC::X86Assembler::orl_rr): + (JSC::X86Assembler::subl_rr): + (JSC::X86Assembler::subl_i8r): + (JSC::X86Assembler::subl_i32r): + (JSC::X86Assembler::subl_mr): + (JSC::X86Assembler::testl_i32r): + (JSC::X86Assembler::testl_rr): + (JSC::X86Assembler::xorl_i8r): + (JSC::X86Assembler::xorl_rr): + (JSC::X86Assembler::sarl_i8r): + (JSC::X86Assembler::sarl_CLr): + (JSC::X86Assembler::shl_i8r): + (JSC::X86Assembler::shll_CLr): + (JSC::X86Assembler::mull_rr): + (JSC::X86Assembler::idivl_r): + (JSC::X86Assembler::cdq): + (JSC::X86Assembler::movl_mr): + (JSC::X86Assembler::movzwl_mr): + (JSC::X86Assembler::movl_rm): + (JSC::X86Assembler::movl_i32r): + (JSC::X86Assembler::movl_i32m): + (JSC::X86Assembler::leal_mr): + (JSC::X86Assembler::ret): + (JSC::X86Assembler::jmp_r): + (JSC::X86Assembler::jmp_m): + (JSC::X86Assembler::call_r): + * wrec/WREC.cpp: + (JSC::WRECGenerator::generateBacktrack1): + (JSC::WRECGenerator::generateBacktrackBackreference): + (JSC::WRECGenerator::generateBackreferenceQuantifier): + (JSC::WRECGenerator::generateNonGreedyQuantifier): + (JSC::WRECGenerator::generateGreedyQuantifier): + (JSC::WRECGenerator::generatePatternCharacter): + (JSC::WRECGenerator::generateCharacterClassInvertedRange): + (JSC::WRECGenerator::generateCharacterClassInverted): + (JSC::WRECGenerator::generateCharacterClass): + (JSC::WRECGenerator::generateParentheses): + (JSC::WRECGenerator::gererateParenthesesResetTrampoline): + (JSC::WRECGenerator::generateAssertionBOL): + (JSC::WRECGenerator::generateAssertionEOL): + (JSC::WRECGenerator::generateAssertionWordBoundary): + (JSC::WRECGenerator::generateBackreference): + (JSC::WRECGenerator::gernerateDisjunction): + +2008-09-09 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Clean up the WREC code some more. + + * VM/CTI.cpp: + (JSC::CTI::compileRegExp): + * wrec/WREC.cpp: + (JSC::getCharacterClassNewline): + (JSC::getCharacterClassDigits): + (JSC::getCharacterClassSpaces): + (JSC::getCharacterClassWordchar): + (JSC::getCharacterClassNondigits): + (JSC::getCharacterClassNonspaces): + (JSC::getCharacterClassNonwordchar): + (JSC::WRECGenerator::generateBacktrack1): + (JSC::WRECGenerator::generateBacktrackBackreference): + (JSC::WRECGenerator::generateBackreferenceQuantifier): + (JSC::WRECGenerator::generateNonGreedyQuantifier): + (JSC::WRECGenerator::generateGreedyQuantifier): + (JSC::WRECGenerator::generatePatternCharacter): + (JSC::WRECGenerator::generateCharacterClassInvertedRange): + (JSC::WRECGenerator::generateCharacterClassInverted): + (JSC::WRECGenerator::generateCharacterClass): + (JSC::WRECGenerator::generateParentheses): + (JSC::WRECGenerator::gererateParenthesesResetTrampoline): + (JSC::WRECGenerator::generateAssertionBOL): + (JSC::WRECGenerator::generateAssertionEOL): + (JSC::WRECGenerator::generateAssertionWordBoundary): + (JSC::WRECGenerator::generateBackreference): + (JSC::WRECGenerator::gernerateDisjunction): + (JSC::WRECParser::parseCharacterClass): + (JSC::WRECParser::parseEscape): + (JSC::WRECParser::parseTerm): + * wrec/WREC.h: + +2008-09-09 Mark Rowe <mrowe@apple.com> + + Build fix, rubber-stamped by Anders Carlsson. + + Silence spurious build warnings about missing format attributes on functions in Assertions.cpp. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-09-09 Mark Rowe <mrowe@apple.com> + + Rubber-stamped by Oliver Hunt. + + Fix builds using the "debug" variant. + + This reverts r36130 and tweaks Identifier to export the same symbols for Debug + and Release configurations. + + * Configurations/JavaScriptCore.xcconfig: + * DerivedSources.make: + * JavaScriptCore.Debug.exp: Removed. + * JavaScriptCore.base.exp: Removed. + * JavaScriptCore.exp: Added. + * JavaScriptCore.xcodeproj/project.pbxproj: + * kjs/identifier.cpp: + (JSC::Identifier::addSlowCase): #ifdef the call to checkSameIdentifierTable so that + there is no overhead in Release builds. + (JSC::Identifier::checkSameIdentifierTable): Add empty functions for Release builds. + * kjs/identifier.h: + (JSC::Identifier::add): #ifdef the calls to checkSameIdentifierTable so that there is + no overhead in Release builds, and remove the inline definitions of checkSameIdentifierTable. + +2008-09-09 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Clean up WREC a bit to bring it closer to our coding style guidelines. + + * wrec/WREC.cpp: + (JSC::): + (JSC::getCharacterClass_newline): + (JSC::getCharacterClass_d): + (JSC::getCharacterClass_s): + (JSC::getCharacterClass_w): + (JSC::getCharacterClass_D): + (JSC::getCharacterClass_S): + (JSC::getCharacterClass_W): + (JSC::CharacterClassConstructor::append): + (JSC::WRECGenerator::generateNonGreedyQuantifier): + (JSC::WRECGenerator::generateGreedyQuantifier): + (JSC::WRECGenerator::generateCharacterClassInverted): + (JSC::WRECParser::parseQuantifier): + (JSC::WRECParser::parsePatternCharacterQualifier): + (JSC::WRECParser::parseCharacterClassQuantifier): + (JSC::WRECParser::parseBackreferenceQuantifier): + * wrec/WREC.h: + (JSC::Quantifier::): + (JSC::Quantifier::Quantifier): + +2008-09-09 Jungshik Shin <jungshik.shin@gmail.com> + + Reviewed by Alexey Proskuryakov. + + Try MIME charset names before trying IANA names + ( https://bugs.webkit.org/show_bug.cgi?id=17537 ) + + * wtf/StringExtras.h: (strcasecmp): Added. + +2008-09-09 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Mark Rowe. + + Bug 20719: REGRESSION (r36135-36244): Hangs, then crashes after several seconds + <https://bugs.webkit.org/show_bug.cgi?id=20719> + <rdar://problem/6205787> + + Fix a typo in the case-insensitive matching of character patterns. + + * wrec/WREC.cpp: + (JSC::WRECGenerator::generatePatternCharacter): + +2008-09-09 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Sam Weinig. + + - allow polymorphic inline cache to handle Math object functions and possibly other similar things + + 1.012x speedup on SunSpider. + + * kjs/MathObject.cpp: + (JSC::MathObject::getOwnPropertySlot): + * kjs/lookup.cpp: + (JSC::setUpStaticFunctionSlot): + * kjs/lookup.h: + (JSC::getStaticPropertySlot): + +2008-09-08 Sam Weinig <sam@webkit.org> + + Reviewed by Maciej Stachowiak and Oliver Hunt. + + Split storage of properties out of the PropertyMap and into the JSObject + to allow sharing PropertyMap on the StructureID. In order to get this + function correctly, the StructureID's transition mappings were changed to + transition based on property name and attribute pairs, instead of just + property name. + + - Removes the single property optimization now that the PropertyMap is shared. + This will be replaced by in-lining some values on the JSObject. + + This is a wash on Sunspider and a 6.7% win on the v8 test suite. + + * JavaScriptCore.base.exp: + * VM/CTI.cpp: + (JSC::CTI::privateCompileGetByIdSelf): Get the storage directly off the JSObject. + (JSC::CTI::privateCompileGetByIdProto): Ditto. + (JSC::CTI::privateCompileGetByIdChain): Ditto. + (JSC::CTI::privateCompilePutByIdReplace): Ditto. + * kjs/JSObject.cpp: + (JSC::JSObject::mark): Mark the PropertyStorage. + (JSC::JSObject::put): Update to get the propertyMap of the StructureID. + (JSC::JSObject::deleteProperty): Ditto. + (JSC::JSObject::defineGetter): Return early if the property is already a getter/setter. + (JSC::JSObject::defineSetter): Ditto. + (JSC::JSObject::getPropertyAttributes): Update to get the propertyMap of the StructureID + (JSC::JSObject::getPropertyNames): Ditto. + (JSC::JSObject::removeDirect): Ditto. + * kjs/JSObject.h: Remove PropertyMap and add PropertyStorage. + (JSC::JSObject::propertyStorage): return the PropertyStorage. + (JSC::JSObject::getDirect): Update to get the propertyMap of the StructureID. + (JSC::JSObject::getDirectLocation): Ditto. + (JSC::JSObject::offsetForLocation): Compute location directly. + (JSC::JSObject::hasCustomProperties): Update to get the propertyMap of the StructureID. + (JSC::JSObject::hasGetterSetterProperties): Ditto. + (JSC::JSObject::getDirectOffset): Get by indexing into PropertyStorage. + (JSC::JSObject::putDirectOffset): Put by indexing into PropertyStorage. + (JSC::JSObject::getOwnPropertySlotForWrite): Update to get the propertyMap of the StructureID. + (JSC::JSObject::getOwnPropertySlot): Ditto. + (JSC::JSObject::putDirect): Move putting into the StructureID unless the property already exists. + * kjs/PropertyMap.cpp: Use the propertyStorage as the storage for the JSValues. + (JSC::PropertyMap::checkConsistency): + (JSC::PropertyMap::operator=): + (JSC::PropertyMap::~PropertyMap): + (JSC::PropertyMap::get): + (JSC::PropertyMap::getLocation): + (JSC::PropertyMap::put): + (JSC::PropertyMap::getOffset): + (JSC::PropertyMap::insert): + (JSC::PropertyMap::expand): + (JSC::PropertyMap::rehash): + (JSC::PropertyMap::createTable): + (JSC::PropertyMap::resizePropertyStorage): Resize the storage to match the size of the map + (JSC::PropertyMap::remove): + (JSC::PropertyMap::getEnumerablePropertyNames): + * kjs/PropertyMap.h: + (JSC::PropertyMapEntry::PropertyMapEntry): + (JSC::PropertyMap::isEmpty): + (JSC::PropertyMap::size): + (JSC::PropertyMap::makingCount): + (JSC::PropertyMap::PropertyMap): + + * kjs/StructureID.cpp: + (JSC::StructureID::addPropertyTransition): Transitions now are based off the property name + and attributes. + (JSC::StructureID::toDictionaryTransition): Copy the map. + (JSC::StructureID::changePrototypeTransition): Copy the map. + (JSC::StructureID::getterSetterTransition): Copy the map. + (JSC::StructureID::~StructureID): + * kjs/StructureID.h: + (JSC::TransitionTableHash::hash): Custom hash for transition map. + (JSC::TransitionTableHash::equal): Ditto. + (JSC::TransitionTableHashTraits::emptyValue): Custom traits for transition map + (JSC::TransitionTableHashTraits::constructDeletedValue): Ditto. + (JSC::TransitionTableHashTraits::isDeletedValue): Ditto. + (JSC::StructureID::propertyMap): Added. + +2008-09-08 Oliver Hunt <oliver@apple.com> + + Reviewed by Mark Rowe. + + Bug 20694: Slow Script error pops up when running Dromaeo tests + + Correct error in timeout logic where execution tick count would + be reset to incorrect value due to incorrect offset and indirection. + Codegen for the slow script dialog was factored out into a separate + method (emitSlowScriptCheck) rather than having multiple copies of + the same code. Also added calls to generate slow script checks + for loop_if_less and loop_if_true opcodes. + + * VM/CTI.cpp: + (JSC::CTI::emitSlowScriptCheck): + (JSC::CTI::privateCompileMainPass): + (JSC::CTI::privateCompileSlowCases): + * VM/CTI.h: + +2008-09-08 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Remove references to the removed WRECompiler class. + + * VM/Machine.h: + * wrec/WREC.h: + +2008-09-08 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Rubber-stamped by Mark Rowe. + + Fix the build with CTI enabled but WREC disabled. + + * VM/CTI.cpp: + * VM/CTI.h: + +2008-09-08 Dan Bernstein <mitz@apple.com> + + - build fix + + * kjs/nodes.h: + (JSC::StatementNode::): + (JSC::BlockNode::): + +2008-09-08 Kevin McCullough <kmccullough@apple.com> + + Reviewed by Geoff. + + <rdar://problem/6134407> Breakpoints in for loops, while loops or + conditions without curly braces don't break. (19306) + -Statement Lists already emit debug hooks but conditionals without + brackets are not lists. + + * kjs/nodes.cpp: + (KJS::IfNode::emitCode): + (KJS::IfElseNode::emitCode): + (KJS::DoWhileNode::emitCode): + (KJS::WhileNode::emitCode): + (KJS::ForNode::emitCode): + (KJS::ForInNode::emitCode): + * kjs/nodes.h: + (KJS::StatementNode::): + (KJS::BlockNode::): + +2008-09-08 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Anders Carlsson. + + - Cache the code generated for eval to speed up SunSpider and web sites + https://bugs.webkit.org/show_bug.cgi?id=20718 + + 1.052x on SunSpider + 2.29x on date-format-tofte + + Lots of real sites seem to get many hits on this cache as well, + including GMail, Google Spreadsheets, Slate and Digg (the last of + these gets over 100 hits on initial page load). + + * VM/CodeBlock.h: + (JSC::EvalCodeCache::get): + * VM/Machine.cpp: + (JSC::Machine::callEval): + (JSC::Machine::privateExecute): + (JSC::Machine::cti_op_call_eval): + * VM/Machine.h: + +2008-09-07 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Oliver Hunt. + + Bug 20711: Change KJS prefix on preprocessor macros to JSC + <https://bugs.webkit.org/show_bug.cgi?id=20711> + + * kjs/CommonIdentifiers.cpp: + (JSC::CommonIdentifiers::CommonIdentifiers): + * kjs/CommonIdentifiers.h: + * kjs/PropertySlot.h: + (JSC::PropertySlot::getValue): + (JSC::PropertySlot::putValue): + (JSC::PropertySlot::setValueSlot): + (JSC::PropertySlot::setValue): + (JSC::PropertySlot::setRegisterSlot): + * kjs/lookup.h: + * kjs/nodes.cpp: + * kjs/nodes.h: + (JSC::Node::): + (JSC::ExpressionNode::): + (JSC::StatementNode::): + (JSC::NullNode::): + (JSC::BooleanNode::): + (JSC::NumberNode::): + (JSC::ImmediateNumberNode::): + (JSC::StringNode::): + (JSC::RegExpNode::): + (JSC::ThisNode::): + (JSC::ResolveNode::): + (JSC::ElementNode::): + (JSC::ArrayNode::): + (JSC::PropertyNode::): + (JSC::PropertyListNode::): + (JSC::ObjectLiteralNode::): + (JSC::BracketAccessorNode::): + (JSC::DotAccessorNode::): + (JSC::ArgumentListNode::): + (JSC::ArgumentsNode::): + (JSC::NewExprNode::): + (JSC::EvalFunctionCallNode::): + (JSC::FunctionCallValueNode::): + (JSC::FunctionCallResolveNode::): + (JSC::FunctionCallBracketNode::): + (JSC::FunctionCallDotNode::): + (JSC::PrePostResolveNode::): + (JSC::PostfixResolveNode::): + (JSC::PostfixBracketNode::): + (JSC::PostfixDotNode::): + (JSC::PostfixErrorNode::): + (JSC::DeleteResolveNode::): + (JSC::DeleteBracketNode::): + (JSC::DeleteDotNode::): + (JSC::DeleteValueNode::): + (JSC::VoidNode::): + (JSC::TypeOfResolveNode::): + (JSC::TypeOfValueNode::): + (JSC::PrefixResolveNode::): + (JSC::PrefixBracketNode::): + (JSC::PrefixDotNode::): + (JSC::PrefixErrorNode::): + (JSC::UnaryPlusNode::): + (JSC::NegateNode::): + (JSC::BitwiseNotNode::): + (JSC::LogicalNotNode::): + (JSC::MultNode::): + (JSC::DivNode::): + (JSC::ModNode::): + (JSC::AddNode::): + (JSC::SubNode::): + (JSC::LeftShiftNode::): + (JSC::RightShiftNode::): + (JSC::UnsignedRightShiftNode::): + (JSC::LessNode::): + (JSC::GreaterNode::): + (JSC::LessEqNode::): + (JSC::GreaterEqNode::): + (JSC::ThrowableBinaryOpNode::): + (JSC::InstanceOfNode::): + (JSC::InNode::): + (JSC::EqualNode::): + (JSC::NotEqualNode::): + (JSC::StrictEqualNode::): + (JSC::NotStrictEqualNode::): + (JSC::BitAndNode::): + (JSC::BitOrNode::): + (JSC::BitXOrNode::): + (JSC::LogicalOpNode::): + (JSC::ConditionalNode::): + (JSC::ReadModifyResolveNode::): + (JSC::AssignResolveNode::): + (JSC::ReadModifyBracketNode::): + (JSC::AssignBracketNode::): + (JSC::AssignDotNode::): + (JSC::ReadModifyDotNode::): + (JSC::AssignErrorNode::): + (JSC::CommaNode::): + (JSC::VarDeclCommaNode::): + (JSC::ConstDeclNode::): + (JSC::ConstStatementNode::): + (JSC::EmptyStatementNode::): + (JSC::DebuggerStatementNode::): + (JSC::ExprStatementNode::): + (JSC::VarStatementNode::): + (JSC::IfNode::): + (JSC::IfElseNode::): + (JSC::DoWhileNode::): + (JSC::WhileNode::): + (JSC::ForNode::): + (JSC::ContinueNode::): + (JSC::BreakNode::): + (JSC::ReturnNode::): + (JSC::WithNode::): + (JSC::LabelNode::): + (JSC::ThrowNode::): + (JSC::TryNode::): + (JSC::ParameterNode::): + (JSC::ScopeNode::): + (JSC::ProgramNode::): + (JSC::EvalNode::): + (JSC::FunctionBodyNode::): + (JSC::FuncExprNode::): + (JSC::FuncDeclNode::): + (JSC::CaseClauseNode::): + (JSC::ClauseListNode::): + (JSC::CaseBlockNode::): + (JSC::SwitchNode::): + +2008-09-07 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Bug 20704: Replace the KJS namespace + <https://bugs.webkit.org/show_bug.cgi?id=20704> + + Rename the KJS namespace to JSC. There are still some uses of KJS in + preprocessor macros and comments, but these will also be changed some + time in the near future. + + * API/APICast.h: + (toJS): + (toRef): + (toGlobalRef): + * API/JSBase.cpp: + * API/JSCallbackConstructor.cpp: + * API/JSCallbackConstructor.h: + * API/JSCallbackFunction.cpp: + * API/JSCallbackFunction.h: + * API/JSCallbackObject.cpp: + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + * API/JSClassRef.cpp: + (OpaqueJSClass::staticValues): + (OpaqueJSClass::staticFunctions): + * API/JSClassRef.h: + * API/JSContextRef.cpp: + * API/JSObjectRef.cpp: + * API/JSProfilerPrivate.cpp: + * API/JSStringRef.cpp: + * API/JSValueRef.cpp: + (JSValueGetType): + * API/OpaqueJSString.cpp: + * API/OpaqueJSString.h: + * JavaScriptCore.Debug.exp: + * JavaScriptCore.base.exp: + * VM/CTI.cpp: + (JSC::): + * VM/CTI.h: + * VM/CodeBlock.cpp: + * VM/CodeBlock.h: + * VM/CodeGenerator.cpp: + * VM/CodeGenerator.h: + * VM/ExceptionHelpers.cpp: + * VM/ExceptionHelpers.h: + * VM/Instruction.h: + * VM/JSPropertyNameIterator.cpp: + * VM/JSPropertyNameIterator.h: + * VM/LabelID.h: + * VM/Machine.cpp: + * VM/Machine.h: + * VM/Opcode.cpp: + * VM/Opcode.h: + * VM/Register.h: + (WTF::): + * VM/RegisterFile.cpp: + * VM/RegisterFile.h: + * VM/RegisterID.h: + (WTF::): + * VM/SamplingTool.cpp: + * VM/SamplingTool.h: + * VM/SegmentedVector.h: + * kjs/ArgList.cpp: + * kjs/ArgList.h: + * kjs/Arguments.cpp: + * kjs/Arguments.h: + * kjs/ArrayConstructor.cpp: + * kjs/ArrayConstructor.h: + * kjs/ArrayPrototype.cpp: + * kjs/ArrayPrototype.h: + * kjs/BatchedTransitionOptimizer.h: + * kjs/BooleanConstructor.cpp: + * kjs/BooleanConstructor.h: + * kjs/BooleanObject.cpp: + * kjs/BooleanObject.h: + * kjs/BooleanPrototype.cpp: + * kjs/BooleanPrototype.h: + * kjs/CallData.cpp: + * kjs/CallData.h: + * kjs/ClassInfo.h: + * kjs/CommonIdentifiers.cpp: + * kjs/CommonIdentifiers.h: + * kjs/ConstructData.cpp: + * kjs/ConstructData.h: + * kjs/DateConstructor.cpp: + * kjs/DateConstructor.h: + * kjs/DateInstance.cpp: + (JSC::DateInstance::msToGregorianDateTime): + * kjs/DateInstance.h: + * kjs/DateMath.cpp: + * kjs/DateMath.h: + * kjs/DatePrototype.cpp: + * kjs/DatePrototype.h: + * kjs/DebuggerCallFrame.cpp: + * kjs/DebuggerCallFrame.h: + * kjs/Error.cpp: + * kjs/Error.h: + * kjs/ErrorConstructor.cpp: + * kjs/ErrorConstructor.h: + * kjs/ErrorInstance.cpp: + * kjs/ErrorInstance.h: + * kjs/ErrorPrototype.cpp: + * kjs/ErrorPrototype.h: + * kjs/ExecState.cpp: + * kjs/ExecState.h: + * kjs/FunctionConstructor.cpp: + * kjs/FunctionConstructor.h: + * kjs/FunctionPrototype.cpp: + * kjs/FunctionPrototype.h: + * kjs/GetterSetter.cpp: + * kjs/GetterSetter.h: + * kjs/GlobalEvalFunction.cpp: + * kjs/GlobalEvalFunction.h: + * kjs/IndexToNameMap.cpp: + * kjs/IndexToNameMap.h: + * kjs/InitializeThreading.cpp: + * kjs/InitializeThreading.h: + * kjs/InternalFunction.cpp: + * kjs/InternalFunction.h: + (JSC::InternalFunction::InternalFunction): + * kjs/JSActivation.cpp: + * kjs/JSActivation.h: + * kjs/JSArray.cpp: + * kjs/JSArray.h: + * kjs/JSCell.cpp: + * kjs/JSCell.h: + * kjs/JSFunction.cpp: + * kjs/JSFunction.h: + (JSC::JSFunction::JSFunction): + * kjs/JSGlobalData.cpp: + (JSC::JSGlobalData::JSGlobalData): + * kjs/JSGlobalData.h: + * kjs/JSGlobalObject.cpp: + * kjs/JSGlobalObject.h: + * kjs/JSGlobalObjectFunctions.cpp: + * kjs/JSGlobalObjectFunctions.h: + * kjs/JSImmediate.cpp: + * kjs/JSImmediate.h: + * kjs/JSLock.cpp: + * kjs/JSLock.h: + * kjs/JSNotAnObject.cpp: + * kjs/JSNotAnObject.h: + * kjs/JSNumberCell.cpp: + * kjs/JSNumberCell.h: + * kjs/JSObject.cpp: + * kjs/JSObject.h: + * kjs/JSStaticScopeObject.cpp: + * kjs/JSStaticScopeObject.h: + * kjs/JSString.cpp: + * kjs/JSString.h: + * kjs/JSType.h: + * kjs/JSValue.cpp: + * kjs/JSValue.h: + * kjs/JSVariableObject.cpp: + * kjs/JSVariableObject.h: + * kjs/JSWrapperObject.cpp: + * kjs/JSWrapperObject.h: + * kjs/LabelStack.cpp: + * kjs/LabelStack.h: + * kjs/MathObject.cpp: + * kjs/MathObject.h: + * kjs/NativeErrorConstructor.cpp: + * kjs/NativeErrorConstructor.h: + * kjs/NativeErrorPrototype.cpp: + * kjs/NativeErrorPrototype.h: + * kjs/NodeInfo.h: + * kjs/NumberConstructor.cpp: + * kjs/NumberConstructor.h: + * kjs/NumberObject.cpp: + * kjs/NumberObject.h: + * kjs/NumberPrototype.cpp: + * kjs/NumberPrototype.h: + * kjs/ObjectConstructor.cpp: + * kjs/ObjectConstructor.h: + * kjs/ObjectPrototype.cpp: + * kjs/ObjectPrototype.h: + * kjs/Parser.cpp: + * kjs/Parser.h: + * kjs/PropertyMap.cpp: + (JSC::PropertyMapStatisticsExitLogger::~PropertyMapStatisticsExitLogger): + * kjs/PropertyMap.h: + * kjs/PropertyNameArray.cpp: + * kjs/PropertyNameArray.h: + * kjs/PropertySlot.cpp: + * kjs/PropertySlot.h: + * kjs/PrototypeFunction.cpp: + * kjs/PrototypeFunction.h: + * kjs/PutPropertySlot.h: + * kjs/RegExpConstructor.cpp: + * kjs/RegExpConstructor.h: + * kjs/RegExpObject.cpp: + * kjs/RegExpObject.h: + * kjs/RegExpPrototype.cpp: + * kjs/RegExpPrototype.h: + * kjs/ScopeChain.cpp: + * kjs/ScopeChain.h: + * kjs/ScopeChainMark.h: + * kjs/Shell.cpp: + (jscmain): + * kjs/SmallStrings.cpp: + * kjs/SmallStrings.h: + * kjs/SourceProvider.h: + * kjs/SourceRange.h: + * kjs/StringConstructor.cpp: + * kjs/StringConstructor.h: + * kjs/StringObject.cpp: + * kjs/StringObject.h: + * kjs/StringObjectThatMasqueradesAsUndefined.h: + * kjs/StringPrototype.cpp: + * kjs/StringPrototype.h: + * kjs/StructureID.cpp: + * kjs/StructureID.h: + * kjs/SymbolTable.h: + * kjs/collector.cpp: + * kjs/collector.h: + * kjs/completion.h: + * kjs/create_hash_table: + * kjs/debugger.cpp: + * kjs/debugger.h: + * kjs/dtoa.cpp: + * kjs/dtoa.h: + * kjs/grammar.y: + * kjs/identifier.cpp: + * kjs/identifier.h: + (JSC::Identifier::equal): + * kjs/interpreter.cpp: + * kjs/interpreter.h: + * kjs/lexer.cpp: + (JSC::Lexer::Lexer): + (JSC::Lexer::clear): + (JSC::Lexer::makeIdentifier): + * kjs/lexer.h: + * kjs/lookup.cpp: + * kjs/lookup.h: + * kjs/nodes.cpp: + * kjs/nodes.h: + * kjs/nodes2string.cpp: + * kjs/operations.cpp: + * kjs/operations.h: + * kjs/protect.h: + * kjs/regexp.cpp: + * kjs/regexp.h: + * kjs/ustring.cpp: + * kjs/ustring.h: + (JSC::operator!=): + (JSC::IdentifierRepHash::hash): + (WTF::): + * masm/MacroAssembler.h: + * masm/MacroAssemblerWin.cpp: + * masm/X86Assembler.h: + * pcre/pcre_exec.cpp: + * profiler/CallIdentifier.h: + (WTF::): + * profiler/HeavyProfile.cpp: + * profiler/HeavyProfile.h: + * profiler/Profile.cpp: + * profiler/Profile.h: + * profiler/ProfileGenerator.cpp: + * profiler/ProfileGenerator.h: + * profiler/ProfileNode.cpp: + * profiler/ProfileNode.h: + * profiler/Profiler.cpp: + * profiler/Profiler.h: + * profiler/TreeProfile.cpp: + * profiler/TreeProfile.h: + * wrec/WREC.cpp: + * wrec/WREC.h: + * wtf/AVLTree.h: + +2008-09-07 Maciej Stachowiak <mjs@apple.com> + + Reviewed by Dan Bernstein. + + - rename IA32MacroAssembler class to X86Assembler + + We otherwise call the platform X86, and also, I don't see any macros. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * masm/IA32MacroAsm.h: Removed. + * masm/MacroAssembler.h: + (KJS::MacroAssembler::MacroAssembler): + * masm/MacroAssemblerWin.cpp: + (KJS::MacroAssembler::emitRestoreArgumentReference): + * masm/X86Assembler.h: Copied from masm/IA32MacroAsm.h. + (KJS::X86Assembler::X86Assembler): + * wrec/WREC.cpp: + (KJS::WRECGenerator::generateNonGreedyQuantifier): + (KJS::WRECGenerator::generateGreedyQuantifier): + (KJS::WRECGenerator::generateParentheses): + (KJS::WRECGenerator::generateBackreference): + (KJS::WRECGenerator::gernerateDisjunction): + * wrec/WREC.h: + +2008-09-07 Cameron Zwarich <cwzwarich@webkit.org> + + Not reviewed. + + Visual C++ seems to have some odd casting rules, so just convert the + offending cast back to a C-style cast for now. + + * kjs/collector.cpp: + (KJS::otherThreadStackPointer): + +2008-09-07 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Mark Rowe. + + Attempt to fix the Windows build by using a const_cast to cast regs.Esp + to a uintptr_t instead of a reinterpret_cast. + + * kjs/collector.cpp: + (KJS::otherThreadStackPointer): + +2008-09-07 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Sam Weinig. + + Remove C-style casts from kjs/collector.cpp. + + * kjs/collector.cpp: + (KJS::Heap::heapAllocate): + (KJS::currentThreadStackBase): + (KJS::Heap::markConservatively): + (KJS::otherThreadStackPointer): + (KJS::Heap::markOtherThreadConservatively): + (KJS::Heap::sweep): + +2008-09-07 Mark Rowe <mrowe@apple.com> + + Build fix for the debug variant. + + * DerivedSources.make: Also use the .Debug.exp exports file when building the debug variant. + +2008-09-07 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Timothy Hatcher. + + Remove C-style casts from the CTI code. + + * VM/CTI.cpp: + (KJS::CTI::emitGetArg): + (KJS::CTI::emitGetPutArg): + (KJS::ctiRepatchCallByReturnAddress): + (KJS::CTI::compileOpCall): + (KJS::CTI::privateCompileMainPass): + (KJS::CTI::privateCompileGetByIdSelf): + (KJS::CTI::privateCompileGetByIdProto): + (KJS::CTI::privateCompileGetByIdChain): + (KJS::CTI::privateCompilePutByIdReplace): + (KJS::CTI::privateArrayLengthTrampoline): + (KJS::CTI::privateStringLengthTrampoline): + +=== End merge of squirrelfish-extreme === + +2008-09-06 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. Adapted somewhat by Maciej Stachowiak. + + - refactor WREC to share more of the JIT infrastructure with CTI + + * VM/CTI.cpp: + (KJS::CTI::emitGetArg): + (KJS::CTI::emitGetPutArg): + (KJS::CTI::emitPutArg): + (KJS::CTI::emitPutArgConstant): + (KJS::CTI::emitPutCTIParam): + (KJS::CTI::emitGetCTIParam): + (KJS::CTI::emitPutToCallFrameHeader): + (KJS::CTI::emitGetFromCallFrameHeader): + (KJS::CTI::emitPutResult): + (KJS::CTI::emitDebugExceptionCheck): + (KJS::CTI::emitJumpSlowCaseIfNotImm): + (KJS::CTI::emitJumpSlowCaseIfNotImms): + (KJS::CTI::emitFastArithDeTagImmediate): + (KJS::CTI::emitFastArithReTagImmediate): + (KJS::CTI::emitFastArithPotentiallyReTagImmediate): + (KJS::CTI::emitFastArithImmToInt): + (KJS::CTI::emitFastArithIntToImmOrSlowCase): + (KJS::CTI::emitFastArithIntToImmNoCheck): + (KJS::CTI::CTI): + (KJS::CTI::compileOpCall): + (KJS::CTI::privateCompileMainPass): + (KJS::CTI::privateCompileSlowCases): + (KJS::CTI::privateCompile): + (KJS::CTI::privateCompileGetByIdSelf): + (KJS::CTI::privateCompileGetByIdProto): + (KJS::CTI::privateCompileGetByIdChain): + (KJS::CTI::privateCompilePutByIdReplace): + (KJS::CTI::privateArrayLengthTrampoline): + (KJS::CTI::privateStringLengthTrampoline): + (KJS::CTI::compileRegExp): + * VM/CTI.h: + (KJS::CallRecord::CallRecord): + (KJS::JmpTable::JmpTable): + (KJS::SlowCaseEntry::SlowCaseEntry): + (KJS::CTI::JSRInfo::JSRInfo): + * kjs/regexp.cpp: + (KJS::RegExp::RegExp): + * wrec/WREC.cpp: + (KJS::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor): + (KJS::GeneratePatternCharacterFunctor::generateAtom): + (KJS::GeneratePatternCharacterFunctor::backtrack): + (KJS::GenerateCharacterClassFunctor::generateAtom): + (KJS::GenerateCharacterClassFunctor::backtrack): + (KJS::GenerateBackreferenceFunctor::generateAtom): + (KJS::GenerateBackreferenceFunctor::backtrack): + (KJS::GenerateParenthesesNonGreedyFunctor::generateAtom): + (KJS::GenerateParenthesesNonGreedyFunctor::backtrack): + (KJS::WRECGenerate::generateBacktrack1): + (KJS::WRECGenerate::generateBacktrackBackreference): + (KJS::WRECGenerate::generateBackreferenceQuantifier): + (KJS::WRECGenerate::generateNonGreedyQuantifier): + (KJS::WRECGenerate::generateGreedyQuantifier): + (KJS::WRECGenerate::generatePatternCharacter): + (KJS::WRECGenerate::generateCharacterClassInvertedRange): + (KJS::WRECGenerate::generateCharacterClassInverted): + (KJS::WRECGenerate::generateCharacterClass): + (KJS::WRECGenerate::generateParentheses): + (KJS::WRECGenerate::generateParenthesesNonGreedy): + (KJS::WRECGenerate::gererateParenthesesResetTrampoline): + (KJS::WRECGenerate::generateAssertionBOL): + (KJS::WRECGenerate::generateAssertionEOL): + (KJS::WRECGenerate::generateAssertionWordBoundary): + (KJS::WRECGenerate::generateBackreference): + (KJS::WRECGenerate::gernerateDisjunction): + (KJS::WRECGenerate::terminateDisjunction): + (KJS::WRECParser::parseGreedyQuantifier): + (KJS::WRECParser::parseQuantifier): + (KJS::WRECParser::parsePatternCharacterQualifier): + (KJS::WRECParser::parseCharacterClassQuantifier): + (KJS::WRECParser::parseBackreferenceQuantifier): + (KJS::WRECParser::parseParentheses): + (KJS::WRECParser::parseCharacterClass): + (KJS::WRECParser::parseOctalEscape): + (KJS::WRECParser::parseEscape): + (KJS::WRECParser::parseTerm): + (KJS::WRECParser::parseDisjunction): + * wrec/WREC.h: + (KJS::WRECGenerate::WRECGenerate): + (KJS::WRECParser::): + (KJS::WRECParser::WRECParser): + (KJS::WRECParser::parseAlternative): + (KJS::WRECParser::isEndOfPattern): + +2008-09-06 Oliver Hunt <oliver@apple.com> + + Reviewed by NOBODY (Build fix). + + Fix the sampler build. + + * VM/SamplingTool.h: + +2008-09-06 Oliver Hunt <oliver@apple.com> + + Reviewed by Maciej Stachowiak. + + Jump through the necessary hoops required to make MSVC cooperate with SFX + + We now explicitly declare the calling convention on all cti_op_* cfunctions, + and return int instead of bool where appropriate (despite the cdecl calling + convention seems to state MSVC generates code that returns the result value + through ecx). SFX behaves slightly differently under MSVC, specifically it + stores the base argument address for the cti_op_* functions in the first + argument, and then does the required stack manipulation through that pointer. + This is necessary as MSVC's optimisations assume they have complete control + of the stack, and periodically elide our stack manipulations, or move + values in unexpected ways. MSVC also frequently produces tail calls which may + clobber the first argument, so the MSVC path is slightly less efficient due + to the need to restore it. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: + (KJS::): + (KJS::CTI::compileOpCall): + (KJS::CTI::privateCompileMainPass): + (KJS::CTI::privateCompileSlowCases): + * VM/CTI.h: + * VM/Machine.cpp: + * VM/Machine.h: + * masm/MacroAssembler.h: + (KJS::MacroAssembler::emitConvertToFastCall): + * masm/MacroAssemblerIA32GCC.cpp: Removed. + For performance reasons we need these no-op functions to be inlined. + + * masm/MacroAssemblerWin.cpp: + (KJS::MacroAssembler::emitRestoreArgumentReference): + * wtf/Platform.h: + +2008-09-05 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Maciej Stachowiak, or maybe the other way around. + + Added the ability to coalesce JITCode buffer grow operations by first + growing the buffer and then executing unchecked puts to it. + + About a 2% speedup on date-format-tofte. + + * VM/CTI.cpp: + (KJS::CTI::compileOpCall): + * masm/IA32MacroAsm.h: + (KJS::JITCodeBuffer::ensureSpace): + (KJS::JITCodeBuffer::putByteUnchecked): + (KJS::JITCodeBuffer::putByte): + (KJS::JITCodeBuffer::putShortUnchecked): + (KJS::JITCodeBuffer::putShort): + (KJS::JITCodeBuffer::putIntUnchecked): + (KJS::JITCodeBuffer::putInt): + (KJS::IA32MacroAssembler::emitTestl_i32r): + (KJS::IA32MacroAssembler::emitMovl_mr): + (KJS::IA32MacroAssembler::emitMovl_rm): + (KJS::IA32MacroAssembler::emitMovl_i32m): + (KJS::IA32MacroAssembler::emitUnlinkedJe): + (KJS::IA32MacroAssembler::emitModRm_rr): + (KJS::IA32MacroAssembler::emitModRm_rr_Unchecked): + (KJS::IA32MacroAssembler::emitModRm_rm_Unchecked): + (KJS::IA32MacroAssembler::emitModRm_rm): + (KJS::IA32MacroAssembler::emitModRm_opr): + (KJS::IA32MacroAssembler::emitModRm_opr_Unchecked): + (KJS::IA32MacroAssembler::emitModRm_opm_Unchecked): + +2008-09-05 Mark Rowe <mrowe@apple.com> + + Reviewed by Sam Weinig. + + Disable WREC and CTI on platforms that we have not yet had a chance to test with. + + * wtf/Platform.h: + +2008-09-05 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Use jo instead of a mask compare when fetching array.length and + string.length. 4% speedup on array.length / string.length torture + test. + + * VM/CTI.cpp: + (KJS::CTI::privateArrayLengthTrampoline): + (KJS::CTI::privateStringLengthTrampoline): + +2008-09-05 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Removed a CTI compilation pass by recording labels during bytecode + generation. This is more to reduce complexity than it is to improve + performance. + + SunSpider reports no change. + + CodeBlock now keeps a "labels" set, which holds the offsets of all the + instructions that can be jumped to. + + * VM/CTI.cpp: Nixed a pass. + + * VM/CodeBlock.h: Added a "labels" set. + + * VM/LabelID.h: No need for a special LableID for holding jump + destinations, since the CodeBlock now knows all jump destinations. + + * wtf/HashTraits.h: New hash traits to accomodate putting offset 0 in + the set. + + * kjs/nodes.cpp: + (KJS::TryNode::emitCode): Emit a dummy label to record sret targets. + +2008-09-05 Mark Rowe <mrowe@apple.com> + + Reviewed by Oliver Hunt and Gavin Barraclough. + + Move the JITCodeBuffer onto Machine and remove the static variables. + + * VM/CTI.cpp: Initialize m_jit with the Machine's code buffer. + * VM/Machine.cpp: + (KJS::Machine::Machine): Allocate a JITCodeBuffer. + * VM/Machine.h: + * kjs/RegExpConstructor.cpp: + (KJS::constructRegExp): Pass the ExecState through. + * kjs/RegExpPrototype.cpp: + (KJS::regExpProtoFuncCompile): Ditto. + * kjs/StringPrototype.cpp: + (KJS::stringProtoFuncMatch): Ditto. + (KJS::stringProtoFuncSearch): Ditto. + * kjs/nodes.cpp: + (KJS::RegExpNode::emitCode): Compile the pattern at code generation time + so that we have access to an ExecState. + * kjs/nodes.h: + (KJS::RegExpNode::): + * kjs/nodes2string.cpp: + * kjs/regexp.cpp: + (KJS::RegExp::RegExp): Pass the ExecState through. + (KJS::RegExp::create): Ditto. + * kjs/regexp.h: + * masm/IA32MacroAsm.h: + (KJS::IA32MacroAssembler::IA32MacroAssembler): Reset the JITCodeBuffer when we are + constructed. + * wrec/WREC.cpp: + (KJS::WRECompiler::compile): Retrieve the JITCodeBuffer from the Machine. + * wrec/WREC.h: + +2008-09-05 Mark Rowe <mrowe@apple.com> + + Reviewed by Oliver Hunt and Gavin Barraclough. + + Fix the build when CTI is disabled. + + * VM/CodeBlock.cpp: + (KJS::CodeBlock::~CodeBlock): + * VM/CodeGenerator.cpp: + (KJS::prepareJumpTableForStringSwitch): + * VM/Machine.cpp: + (KJS::Machine::Machine): + (KJS::Machine::~Machine): + +2008-09-05 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Mark Rowe. + + Fix some windows abi issues. + + * VM/CTI.cpp: + (KJS::CTI::privateCompileMainPass): + (KJS::CTI::privateCompileSlowCases): + * VM/CTI.h: + (KJS::CallRecord::CallRecord): + (KJS::): + * VM/Machine.cpp: + (KJS::Machine::cti_op_resolve_func): + (KJS::Machine::cti_op_post_inc): + (KJS::Machine::cti_op_resolve_with_base): + (KJS::Machine::cti_op_post_dec): + * VM/Machine.h: + +2008-09-05 Mark Rowe <mrowe@apple.com> + + Reviewed by Sam Weinig. + + Fix ecma/FunctionObjects/15.3.5.3.js after I broke it in r93. + + * VM/Machine.cpp: + (KJS::Machine::cti_op_call_NotJSFunction): Restore m_callFrame to the correct value after making the native call. + (KJS::Machine::cti_op_construct_NotJSConstruct): Ditto. + +2008-09-04 Mark Rowe <mrowe@apple.com> + + Reviewed by Sam Weinig. + + Fix fast/dom/Window/console-functions.html. + + The call frame on the ExecState was not being updated on calls into native functions. This meant that functions + such as console.log would use the line number of the last JS function on the call stack. + + * VM/Machine.cpp: + (KJS::Machine::cti_op_call_NotJSFunction): Update the ExecState's call frame before making a native function call, + and restore it when the function is done. + (KJS::Machine::cti_op_construct_NotJSConstruct): Ditto. + +2008-09-05 Oliver Hunt <oliver@apple.com> + + Start bringing up SFX on windows. + + Reviewed by Mark Rowe and Sam Weinig + + Start doing the work to bring up SFX on windows. Initially + just working on WREC, as it does not make any calls so reduces + the amount of code that needs to be corrected. + + Start abstracting the CTI JIT codegen engine. + + * ChangeLog: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: + * masm/IA32MacroAsm.h: + * masm/MacroAssembler.h: Added. + (KJS::MacroAssembler::MacroAssembler): + * masm/MacroAssemblerIA32GCC.cpp: Added. + (KJS::MacroAssembler::emitConvertToFastCall): + * masm/MacroAssemblerWin.cpp: Added. + (KJS::MacroAssembler::emitConvertToFastCall): + * wrec/WREC.cpp: + (KJS::WRECompiler::parseGreedyQuantifier): + (KJS::WRECompiler::parseCharacterClass): + (KJS::WRECompiler::parseEscape): + (KJS::WRECompiler::compilePattern): + * wrec/WREC.h: + +2008-09-04 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Support for slow scripts (timeout checking). + + * VM/CTI.cpp: + (KJS::CTI::privateCompileMainPass): + (KJS::CTI::privateCompile): + * VM/Machine.cpp: + (KJS::slideRegisterWindowForCall): + (KJS::Machine::cti_timeout_check): + (KJS::Machine::cti_vm_throw): + +2008-09-04 Sam Weinig <sam@webkit.org> + + Reviewed by Mark Rowe. + + Third round of style cleanup. + + * VM/CTI.cpp: + * VM/CTI.h: + * VM/CodeBlock.h: + * VM/Machine.cpp: + * VM/Machine.h: + * kjs/ExecState.h: + +2008-09-04 Sam Weinig <sam@webkit.org> + + Reviewed by Jon Honeycutt. + + Second round of style cleanup. + + * VM/CTI.cpp: + * VM/CTI.h: + * wrec/WREC.h: + +2008-09-04 Sam Weinig <sam@webkit.org> + + Reviewed by Mark Rowe. + + First round of style cleanup. + + * VM/CTI.cpp: + * VM/CTI.h: + * masm/IA32MacroAsm.h: + * wrec/WREC.cpp: + * wrec/WREC.h: + +2008-09-04 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Mark Rowe. + + Merged http://trac.webkit.org/changeset/36081 to work with CTI. + + * VM/Machine.cpp: + (KJS::Machine::tryCtiCacheGetByID): + +2008-09-04 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Enable profiling in CTI. + + * VM/CTI.h: + (KJS::): + (KJS::CTI::execute): + * VM/Machine.cpp: + (KJS::Machine::cti_op_call_JSFunction): + (KJS::Machine::cti_op_call_NotJSFunction): + (KJS::Machine::cti_op_ret): + (KJS::Machine::cti_op_construct_JSConstruct): + (KJS::Machine::cti_op_construct_NotJSConstruct): + +2008-09-04 Victor Hernandez <vhernandez@apple.com> + + Reviewed by Geoffrey Garen. + + Fixed an #if to support using WREC without CTI. + + * kjs/regexp.cpp: + (KJS::RegExp::match): + +2008-09-04 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + The array/string length trampolines are owned by the Machine, not the codeblock that compiled them. + + * VM/CTI.cpp: + (KJS::CTI::privateArrayLengthTrampoline): + (KJS::CTI::privateStringLengthTrampoline): + * VM/Machine.cpp: + (KJS::Machine::~Machine): + * VM/Machine.h: + +2008-09-04 Mark Rowe <mrowe@apple.com> + + Reviewed by Gavin Barraclough and Sam Weinig. + + Fix a crash on launch of jsc when GuardMalloc is enabled. + + * kjs/ScopeChain.h: + (KJS::ScopeChain::ScopeChain): Initialize m_node to 0 when we have no valid scope chain. + (KJS::ScopeChain::~ScopeChain): Null-check m_node before calling deref. + +2008-09-03 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough and Geoff Garen. + + Fix inspector and fast array access so that it bounds + checks correctly. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass2_Main): + * masm/IA32MacroAsm.h: + (KJS::IA32MacroAssembler::): + (KJS::IA32MacroAssembler::emitUnlinkedJb): + (KJS::IA32MacroAssembler::emitUnlinkedJbe): + +2008-09-03 Mark Rowe <mrowe@apple.com> + + Move the assertion after the InitializeAndReturn block, as + that is used even when CTI is enabled. + + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + +2008-09-03 Mark Rowe <mrowe@apple.com> + + Reviewed by Sam Weinig. + + Replace calls to exit with ASSERT_WITH_MESSAGE or ASSERT_NOT_REACHED. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile_pass4_SlowCases): + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + (KJS::Machine::cti_vm_throw): + +2008-09-03 Mark Rowe <mrowe@apple.com> + + Reviewed by Sam Weinig. + + Tweak JavaScriptCore to compile on non-x86 platforms. This is achieved + by wrapping more code with ENABLE(CTI), ENABLE(WREC), and PLATFORM(X86) + #if's. + + * VM/CTI.cpp: + * VM/CTI.h: + * VM/CodeBlock.cpp: + (KJS::CodeBlock::printStructureIDs): Use %td as the format specifier for + printing a ptrdiff_t. + * VM/Machine.cpp: + * VM/Machine.h: + * kjs/regexp.cpp: + (KJS::RegExp::RegExp): + (KJS::RegExp::~RegExp): + (KJS::RegExp::match): + * kjs/regexp.h: + * masm/IA32MacroAsm.h: + * wrec/WREC.cpp: + * wrec/WREC.h: + * wtf/Platform.h: Only enable CTI and WREC on x86. Add an extra define to + track whether any MASM-using features are enabled. + +2008-09-03 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Copy Geoff's array/string length optimization for CTI. + + * VM/CTI.cpp: + (KJS::CTI::privateArrayLengthTrampoline): + (KJS::CTI::privateStringLengthTrampoline): + * VM/CTI.h: + (KJS::CTI::compileArrayLengthTrampoline): + (KJS::CTI::compileStringLengthTrampoline): + * VM/Machine.cpp: + (KJS::Machine::Machine): + (KJS::Machine::getCtiArrayLengthTrampoline): + (KJS::Machine::getCtiStringLengthTrampoline): + (KJS::Machine::tryCtiCacheGetByID): + (KJS::Machine::cti_op_get_by_id_second): + * VM/Machine.h: + * kjs/JSString.h: + * kjs/ustring.h: + +2008-09-03 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Implement fast array accesses in CTI - 2-3% progression on sunspider. + + * VM/CTI.cpp: + (KJS::CTI::emitFastArithIntToImmNoCheck): + (KJS::CTI::compileOpCall): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile_pass4_SlowCases): + * VM/CTI.h: + * kjs/JSArray.h: + +2008-09-02 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Enable fast property access support in CTI. + + * VM/CTI.cpp: + (KJS::ctiSetReturnAddress): + (KJS::ctiRepatchCallByReturnAddress): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile): + (KJS::CTI::privateCompileGetByIdSelf): + (KJS::CTI::privateCompileGetByIdProto): + (KJS::CTI::privateCompileGetByIdChain): + (KJS::CTI::privateCompilePutByIdReplace): + * VM/CTI.h: + (KJS::CTI::compileGetByIdSelf): + (KJS::CTI::compileGetByIdProto): + (KJS::CTI::compileGetByIdChain): + (KJS::CTI::compilePutByIdReplace): + * VM/CodeBlock.cpp: + (KJS::CodeBlock::~CodeBlock): + * VM/CodeBlock.h: + * VM/Machine.cpp: + (KJS::doSetReturnAddressVmThrowTrampoline): + (KJS::Machine::tryCtiCachePutByID): + (KJS::Machine::tryCtiCacheGetByID): + (KJS::Machine::cti_op_put_by_id): + (KJS::Machine::cti_op_put_by_id_second): + (KJS::Machine::cti_op_put_by_id_generic): + (KJS::Machine::cti_op_put_by_id_fail): + (KJS::Machine::cti_op_get_by_id): + (KJS::Machine::cti_op_get_by_id_second): + (KJS::Machine::cti_op_get_by_id_generic): + (KJS::Machine::cti_op_get_by_id_fail): + (KJS::Machine::cti_op_throw): + (KJS::Machine::cti_vm_throw): + * VM/Machine.h: + * kjs/JSCell.h: + * kjs/JSObject.h: + * kjs/PropertyMap.h: + * kjs/StructureID.cpp: + (KJS::StructureIDChain::StructureIDChain): + * masm/IA32MacroAsm.h: + (KJS::IA32MacroAssembler::emitCmpl_i32m): + (KJS::IA32MacroAssembler::emitMovl_mr): + (KJS::IA32MacroAssembler::emitMovl_rm): + +2008-09-02 Sam Weinig <sam@webkit.org> + + Reviewed by Gavin Barraclough and Mark Rowe. + + A backslash (\) at the of a RegEx should produce an error. + Fixes fast/regex/test1.html. + + * wrec/WREC.cpp: + (KJS::WRECompiler::parseEscape): + +2008-09-02 Sam Weinig <sam@webkit.org> + + Reviewed by Geoff Garen. + + Link jumps for the slow case of op_loop_if_less. Fixes acid3. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass4_SlowCases): + +2008-09-01 Sam Weinig <sam@webkit.org> + + Rubber-stamped by Maciej Stachowiak. + + Switch WREC on by default. + + * wtf/Platform.h: + +2008-09-01 Sam Weinig <sam@webkit.org> + + Reviewed by Mark Rowe. + + Fix two failures in fast/regex/test1.html + - \- in a character class should be treated as a literal - + - A missing max quantifier needs to be treated differently than + a null max quantifier. + + * wrec/WREC.cpp: + (KJS::WRECompiler::generateNonGreedyQuantifier): + (KJS::WRECompiler::generateGreedyQuantifier): + (KJS::WRECompiler::parseCharacterClass): + * wrec/WREC.h: + (KJS::Quantifier::Quantifier): + +2008-09-01 Sam Weinig <sam@webkit.org> + + Reviewed by Mark Rowe. + + Fix crash in fast/js/kde/evil-n.html + + * kjs/regexp.cpp: Always pass a non-null offset vector to the wrec function. + +2008-09-01 Sam Weinig <sam@webkit.org> + + Reviewed by Gavin Barraclough and Mark Rowe. + + Add pattern length limit fixing one test in fast/js. + + * wrec/WREC.cpp: + (KJS::WRECompiler::compile): + * wrec/WREC.h: + (KJS::WRECompiler::): + +2008-09-01 Sam Weinig <sam@webkit.org> + + Reviewed by Gavin Barraclough and Mark Rowe. + + Make octal escape parsing/back-reference parsing more closely match + prior behavior fixing one test in fast/js. + + * wrec/WREC.cpp: + (KJS::WRECompiler::parseCharacterClass): 8 and 9 should be IdentityEscaped + (KJS::WRECompiler::parseEscape): + * wrec/WREC.h: + (KJS::WRECompiler::peekDigit): + +2008-09-01 Sam Weinig <sam@webkit.org> + + Reviewed by Gavin Barraclough and Mark Rowe. + + Fix one mozilla test. + + * wrec/WREC.cpp: + (KJS::WRECompiler::generateCharacterClassInverted): Fix incorrect not + ascii upper check. + +2008-09-01 Sam Weinig <sam@webkit.org> + + Reviewed by Gavin Barraclough and Mark Rowe. + + Parse octal escapes in character classes fixing one mozilla test. + + * wrec/WREC.cpp: + (KJS::WRECompiler::parseCharacterClass): + (KJS::WRECompiler::parseOctalEscape): + * wrec/WREC.h: + (KJS::WRECompiler::consumeOctal): + +2008-09-01 Sam Weinig <sam@webkit.org> + + Reviewed by Oliver Hunt. + + Fixes two mozilla tests with WREC enabled. + + * wrec/WREC.cpp: + (KJS::CharacterClassConstructor::append): Keep the character class sorted + when appending another character class. + +2008-09-01 Sam Weinig <sam@webkit.org> + + Reviewed by Gavin Barraclough and Mark Rowe. + + Fixes two mozilla tests with WREC enabled. + + * wrec/WREC.cpp: + (KJS::CharacterClassConstructor::addSortedRange): Insert the range at the correct position + instead of appending it to the end. + +2008-09-01 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Move cross-compilation unit call into NEVER_INLINE function. + + * VM/Machine.cpp: + (KJS::doSetReturnAddressVmThrowTrampoline): + +2008-09-01 Sam Weinig <sam@webkit.org> + + Reviewed by Gavin Barraclough and Geoff Garen. + + Fix one test in fast/js. + + * VM/Machine.cpp: + (KJS::Machine::cti_op_construct_NotJSConstruct): Throw a createNotAConstructorError, + instead of a createNotAFunctionError. + +2008-08-31 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Maciej Stachowiak. + + Zero-cost exception handling. This patch takes the exception checking + back of the hot path. When an exception occurs in a Machine::cti* + method, the return address to JIT code is recorded, and is then + overwritten with a pointer to a trampoline routine. When the method + returns the trampoline will cause the cti_vm_throw method to be invoked. + + cti_vm_throw uses the return address preserved above, to discover the + vPC of the bytecode that raised the exception (using a map build during + translation). From the VPC of the faulting bytecode the vPC of a catch + routine may be discovered (unwinding the stack where necesary), and then + a bytecode address for the catch routine is looked up. Final cti_vm_throw + overwrites its return address to JIT code again, to trampoline directly + to the catch routine. + + cti_op_throw is handled in a similar fashion. + + * VM/CTI.cpp: + (KJS::CTI::emitPutCTIParam): + (KJS::CTI::emitPutToCallFrameHeader): + (KJS::CTI::emitGetFromCallFrameHeader): + (KJS::ctiSetReturnAddressForArgs): + (KJS::CTI::emitDebugExceptionCheck): + (KJS::CTI::printOpcodeOperandTypes): + (KJS::CTI::emitCall): + (KJS::CTI::compileOpCall): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile): + * VM/CTI.h: + (KJS::CallRecord::CallRecord): + (KJS::): + (KJS::CTI::execute): + * VM/CodeBlock.h: + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + (KJS::Machine::cti_op_instanceof): + (KJS::Machine::cti_op_call_NotJSFunction): + (KJS::Machine::cti_op_resolve): + (KJS::Machine::cti_op_resolve_func): + (KJS::Machine::cti_op_resolve_skip): + (KJS::Machine::cti_op_resolve_with_base): + (KJS::Machine::cti_op_throw): + (KJS::Machine::cti_op_in): + (KJS::Machine::cti_vm_throw): + * VM/RegisterFile.h: + (KJS::RegisterFile::): + * kjs/ExecState.h: + (KJS::ExecState::setCtiReturnAddress): + (KJS::ExecState::ctiReturnAddress): + * masm/IA32MacroAsm.h: + (KJS::IA32MacroAssembler::): + (KJS::IA32MacroAssembler::emitPushl_m): + (KJS::IA32MacroAssembler::emitPopl_m): + (KJS::IA32MacroAssembler::getRelocatedAddress): + +2008-08-31 Mark Rowe <mrowe@apple.com> + + Reviewed by Oliver Hunt. + + Fall back to PCRE for any regexp containing parentheses until we correctly backtrack within them. + + * wrec/WREC.cpp: + (KJS::WRECompiler::parseParentheses): + * wrec/WREC.h: + (KJS::WRECompiler::): + +2008-08-31 Mark Rowe <mrowe@apple.com> + + Reviewed by Oliver Hunt. + + Fix several issues within ecma_3/RegExp/perlstress-001.js with WREC enabled. + + * wrec/WREC.cpp: + (KJS::WRECompiler::generateNonGreedyQuantifier): Compare with the maximum quantifier count rather than the minimum. + (KJS::WRECompiler::generateAssertionEOL): Do a register-to-register comparison rather than immediate-to-register. + (KJS::WRECompiler::parseCharacterClass): Pass through the correct inversion flag. + +2008-08-30 Mark Rowe <mrowe@apple.com> + + Reviewed by Oliver Hunt. + + Re-fix the six remaining failures in the Mozilla JavaScript tests in a manner that does not kill performance. + This shows up as a 0.6% progression on SunSpider on my machine. + + Grow the JITCodeBuffer's underlying buffer when we run out of space rather than just bailing out. + + * VM/CodeBlock.h: + (KJS::CodeBlock::~CodeBlock): Switch to using fastFree now that JITCodeBuffer::copy uses fastMalloc. + * kjs/regexp.cpp: Ditto. + * masm/IA32MacroAsm.h: + (KJS::JITCodeBuffer::growBuffer): + (KJS::JITCodeBuffer::JITCodeBuffer): + (KJS::JITCodeBuffer::~JITCodeBuffer): + (KJS::JITCodeBuffer::putByte): + (KJS::JITCodeBuffer::putShort): + (KJS::JITCodeBuffer::putInt): + (KJS::JITCodeBuffer::reset): + (KJS::JITCodeBuffer::copy): + +2008-08-29 Oliver Hunt <oliver@apple.com> + + RS=Maciej + + Roll out previous patch as it causes a 5% performance regression + + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: + (KJS::getJCB): + (KJS::CTI::privateCompile): + * VM/CodeBlock.h: + (KJS::CodeBlock::~CodeBlock): + * masm/IA32MacroAsm.h: + (KJS::JITCodeBuffer::JITCodeBuffer): + (KJS::JITCodeBuffer::putByte): + (KJS::JITCodeBuffer::putShort): + (KJS::JITCodeBuffer::putInt): + (KJS::JITCodeBuffer::getEIP): + (KJS::JITCodeBuffer::start): + (KJS::JITCodeBuffer::getOffset): + (KJS::JITCodeBuffer::reset): + (KJS::JITCodeBuffer::copy): + (KJS::IA32MacroAssembler::emitModRm_rr): + (KJS::IA32MacroAssembler::emitModRm_rm): + (KJS::IA32MacroAssembler::emitModRm_rmsib): + (KJS::IA32MacroAssembler::IA32MacroAssembler): + (KJS::IA32MacroAssembler::emitInt3): + (KJS::IA32MacroAssembler::emitPushl_r): + (KJS::IA32MacroAssembler::emitPopl_r): + (KJS::IA32MacroAssembler::emitMovl_rr): + (KJS::IA32MacroAssembler::emitAddl_rr): + (KJS::IA32MacroAssembler::emitAddl_i8r): + (KJS::IA32MacroAssembler::emitAddl_i32r): + (KJS::IA32MacroAssembler::emitAddl_mr): + (KJS::IA32MacroAssembler::emitAndl_rr): + (KJS::IA32MacroAssembler::emitAndl_i32r): + (KJS::IA32MacroAssembler::emitCmpl_i8r): + (KJS::IA32MacroAssembler::emitCmpl_rr): + (KJS::IA32MacroAssembler::emitCmpl_rm): + (KJS::IA32MacroAssembler::emitCmpl_i32r): + (KJS::IA32MacroAssembler::emitCmpl_i32m): + (KJS::IA32MacroAssembler::emitCmpw_rm): + (KJS::IA32MacroAssembler::emitOrl_rr): + (KJS::IA32MacroAssembler::emitOrl_i8r): + (KJS::IA32MacroAssembler::emitSubl_rr): + (KJS::IA32MacroAssembler::emitSubl_i8r): + (KJS::IA32MacroAssembler::emitSubl_i32r): + (KJS::IA32MacroAssembler::emitSubl_mr): + (KJS::IA32MacroAssembler::emitTestl_i32r): + (KJS::IA32MacroAssembler::emitTestl_rr): + (KJS::IA32MacroAssembler::emitXorl_i8r): + (KJS::IA32MacroAssembler::emitXorl_rr): + (KJS::IA32MacroAssembler::emitSarl_i8r): + (KJS::IA32MacroAssembler::emitSarl_CLr): + (KJS::IA32MacroAssembler::emitShl_i8r): + (KJS::IA32MacroAssembler::emitShll_CLr): + (KJS::IA32MacroAssembler::emitMull_rr): + (KJS::IA32MacroAssembler::emitIdivl_r): + (KJS::IA32MacroAssembler::emitCdq): + (KJS::IA32MacroAssembler::emitMovl_mr): + (KJS::IA32MacroAssembler::emitMovzwl_mr): + (KJS::IA32MacroAssembler::emitMovl_rm): + (KJS::IA32MacroAssembler::emitMovl_i32r): + (KJS::IA32MacroAssembler::emitMovl_i32m): + (KJS::IA32MacroAssembler::emitLeal_mr): + (KJS::IA32MacroAssembler::emitRet): + (KJS::IA32MacroAssembler::emitJmpN_r): + (KJS::IA32MacroAssembler::emitJmpN_m): + (KJS::IA32MacroAssembler::emitCall): + (KJS::IA32MacroAssembler::label): + (KJS::IA32MacroAssembler::emitUnlinkedJmp): + (KJS::IA32MacroAssembler::emitUnlinkedJne): + (KJS::IA32MacroAssembler::emitUnlinkedJe): + (KJS::IA32MacroAssembler::emitUnlinkedJl): + (KJS::IA32MacroAssembler::emitUnlinkedJle): + (KJS::IA32MacroAssembler::emitUnlinkedJge): + (KJS::IA32MacroAssembler::emitUnlinkedJae): + (KJS::IA32MacroAssembler::emitUnlinkedJo): + (KJS::IA32MacroAssembler::link): + * wrec/WREC.cpp: + (KJS::WRECompiler::compilePattern): + (KJS::WRECompiler::compile): + * wrec/WREC.h: + +2008-08-29 Mark Rowe <mrowe@apple.com> + + Reviewed by Oliver Hunt. + + Have JITCodeBuffer manage a Vector containing the generated code so that it can grow + as needed when generating code for a large function. This fixes all six remaining failures + in Mozilla tests in both debug and release builds. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile): + * VM/CodeBlock.h: + (KJS::CodeBlock::~CodeBlock): + * masm/IA32MacroAsm.h: + (KJS::JITCodeBuffer::putByte): + (KJS::JITCodeBuffer::putShort): + (KJS::JITCodeBuffer::putInt): + (KJS::JITCodeBuffer::getEIP): + (KJS::JITCodeBuffer::start): + (KJS::JITCodeBuffer::getOffset): + (KJS::JITCodeBuffer::getCode): + (KJS::IA32MacroAssembler::emitModRm_rr): + * wrec/WREC.cpp: + (KJS::WRECompiler::compilePattern): + * wrec/WREC.h: + +2008-08-29 Mark Rowe <mrowe@apple.com> + + Reviewed by Oliver Hunt. + + Implement parsing of octal escapes in regular expressions. This fixes three Mozilla tests. + + * wrec/WREC.cpp: + (KJS::WRECompiler::parseOctalEscape): + (KJS::WRECompiler::parseEscape): Parse the escape sequence as an octal escape if it has a leading zero. + Add a FIXME about treating invalid backreferences as octal escapes in the future. + * wrec/WREC.h: + (KJS::WRECompiler::consumeNumber): Multiply by 10 rather than 0 so that we handle numbers with more than + one digit. + * wtf/ASCIICType.h: + (WTF::isASCIIOctalDigit): + +2008-08-29 Sam Weinig <sam@webkit.org> + + Reviewed by Mark Rowe. + + Pass vPC to instanceof method. Fixes 2 mozilla tests in debug. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_instanceof): + +2008-08-29 Sam Weinig <sam@webkit.org> + + Reviewed by Mark Rowe. + + Pass vPCs to resolve methods for correct exception creation. Fixes + 17 mozilla tests in debug. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass2_Main): + * VM/CTI.h: + * VM/Machine.cpp: + (KJS::Machine::cti_op_resolve): + (KJS::Machine::cti_op_resolve_func): + (KJS::Machine::cti_op_resolve_skip): + (KJS::Machine::cti_op_resolve_with_base): + +2008-08-29 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Remembering to actually throw the exception passed to op throw helps. + Regressions 19 -> 6. + + * VM/Machine.cpp: + (KJS::Machine::cti_op_throw): + (KJS::Machine::cti_vm_throw): + +2008-08-29 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Sam Weinig. + + Support for exception unwinding the stack. + + Once upon a time, Sam asked me for a bettr ChangeLog entry. The return address + is now preserved on entry to a JIT code function (if we preserve lazily we need + restore the native return address during exception stack unwind). This takes + the number of regressions down from ~150 to 19. + + * VM/CTI.cpp: + (KJS::getJCB): + (KJS::CTI::emitExceptionCheck): + (KJS::CTI::compileOpCall): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile): + * VM/CTI.h: + (KJS::): + * VM/Machine.cpp: + (KJS::Machine::throwException): + (KJS::Machine::cti_op_call_JSFunction): + (KJS::Machine::cti_op_call_NotJSFunction): + (KJS::Machine::cti_op_construct_JSConstruct): + (KJS::Machine::cti_op_construct_NotJSConstruct): + (KJS::Machine::cti_op_throw): + (KJS::Machine::cti_vm_throw): + +2008-08-29 Mark Rowe <mrowe@apple.com> + + Reviewed by Oliver Hunt. + + Fix js1_2/regexp/word_boundary.js and four other Mozilla tests with WREC enabled. + + * wrec/WREC.cpp: + (KJS::WRECompiler::generateCharacterClassInvertedRange): If none of the exact matches + succeeded, jump to failure. + (KJS::WRECompiler::compilePattern): Restore and increment the current position stored + on the stack to ensure that it will be reset to the correct position after a failed + match has consumed input. + +2008-08-29 Mark Rowe <mrowe@apple.com> + + Reviewed by Oliver Hunt. + + Fix a hang in ecma_3/RegExp/15.10.2-1.js with WREC enabled. + A backreference with a quantifier would get stuck in an infinite + loop if the captured range was empty. + + * wrec/WREC.cpp: + (KJS::WRECompiler::generateBackreferenceQuantifier): If the captured range + was empty, do not attempt to match the backreference. + (KJS::WRECompiler::parseBackreferenceQuantifier): + * wrec/WREC.h: + (KJS::Quantifier::): + +2008-08-28 Sam Weinig <sam@webkit.org> + + Reviewed by Oliver Hunt. + + Implement op_debug. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::debug): + (KJS::Machine::privateExecute): + (KJS::Machine::cti_op_debug): + * VM/Machine.h: + +2008-08-28 Sam Weinig <sam@webkit.org> + + Reviewed by Gavin Barraclough and Geoff Garen. + + Implement op_switch_string fixing 1 mozilla test and one test in fast/js. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile): + * VM/CTI.h: + (KJS::SwitchRecord::): + (KJS::SwitchRecord::SwitchRecord): + * VM/CodeBlock.cpp: + (KJS::CodeBlock::dump): + * VM/CodeBlock.h: + (KJS::ExpressionRangeInfo::): + (KJS::StringJumpTable::offsetForValue): + (KJS::StringJumpTable::ctiForValue): + (KJS::SimpleJumpTable::add): + (KJS::SimpleJumpTable::ctiForValue): + * VM/CodeGenerator.cpp: + (KJS::prepareJumpTableForStringSwitch): + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + (KJS::Machine::cti_op_switch_string): + * VM/Machine.h: + +2008-08-28 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Do not recurse on the machine stack when executing op_call. + + * VM/CTI.cpp: + (KJS::CTI::emitGetPutArg): + (KJS::CTI::emitPutArg): + (KJS::CTI::emitPutArgConstant): + (KJS::CTI::compileOpCall): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile): + * VM/CTI.h: + (KJS::): + (KJS::CTI::compile): + (KJS::CTI::execute): + (KJS::CTI::): + * VM/Machine.cpp: + (KJS::Machine::Machine): + (KJS::Machine::execute): + (KJS::Machine::cti_op_call_JSFunction): + (KJS::Machine::cti_op_call_NotJSFunction): + (KJS::Machine::cti_op_ret): + (KJS::Machine::cti_op_construct_JSConstruct): + (KJS::Machine::cti_op_construct_NotJSConstruct): + (KJS::Machine::cti_op_call_eval): + * VM/Machine.h: + * VM/Register.h: + (KJS::Register::Register): + * VM/RegisterFile.h: + (KJS::RegisterFile::): + * kjs/InternalFunction.h: + (KJS::InternalFunction::InternalFunction): + * kjs/JSFunction.h: + (KJS::JSFunction::JSFunction): + * kjs/ScopeChain.h: + (KJS::ScopeChain::ScopeChain): + * masm/IA32MacroAsm.h: + (KJS::IA32MacroAssembler::): + (KJS::IA32MacroAssembler::emitModRm_opm): + (KJS::IA32MacroAssembler::emitCmpl_i32m): + (KJS::IA32MacroAssembler::emitCallN_r): + +2008-08-28 Sam Weinig <sam@webkit.org> + + Reviewed by Mark Rowe. + + Exit instead of crashing in ctiUnsupported and ctiTimedOut. + + * VM/Machine.cpp: + (KJS::ctiUnsupported): + (KJS::ctiTimedOut): + +2008-08-28 Oliver Hunt <oliver@apple.com> + + Reviewed by Maciej Stachowiak. + + Implement codegen for op_jsr and op_sret. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile): + * VM/CTI.h: + (KJS::CTI::JSRInfo::JSRInfo): + * masm/IA32MacroAsm.h: + (KJS::IA32MacroAssembler::emitJmpN_m): + (KJS::IA32MacroAssembler::linkAbsoluteAddress): + +2008-08-28 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Initial support for exceptions (throw / catch must occur in same CodeBlock). + + * VM/CTI.cpp: + (KJS::CTI::emitExceptionCheck): + (KJS::CTI::emitCall): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile_pass4_SlowCases): + (KJS::CTI::privateCompile): + * VM/CTI.h: + * VM/CodeBlock.cpp: + (KJS::CodeBlock::nativeExceptionCodeForHandlerVPC): + * VM/CodeBlock.h: + * VM/CodeGenerator.cpp: + (KJS::CodeGenerator::emitCatch): + * VM/Machine.cpp: + (KJS::Machine::throwException): + (KJS::Machine::privateExecute): + (KJS::ctiUnsupported): + (KJS::ctiTimedOut): + (KJS::Machine::cti_op_add): + (KJS::Machine::cti_op_pre_inc): + (KJS::Machine::cti_timeout_check): + (KJS::Machine::cti_op_loop_if_less): + (KJS::Machine::cti_op_put_by_id): + (KJS::Machine::cti_op_get_by_id): + (KJS::Machine::cti_op_instanceof): + (KJS::Machine::cti_op_del_by_id): + (KJS::Machine::cti_op_mul): + (KJS::Machine::cti_op_call): + (KJS::Machine::cti_op_resolve): + (KJS::Machine::cti_op_construct): + (KJS::Machine::cti_op_get_by_val): + (KJS::Machine::cti_op_resolve_func): + (KJS::Machine::cti_op_sub): + (KJS::Machine::cti_op_put_by_val): + (KJS::Machine::cti_op_lesseq): + (KJS::Machine::cti_op_loop_if_true): + (KJS::Machine::cti_op_negate): + (KJS::Machine::cti_op_resolve_skip): + (KJS::Machine::cti_op_div): + (KJS::Machine::cti_op_pre_dec): + (KJS::Machine::cti_op_jless): + (KJS::Machine::cti_op_not): + (KJS::Machine::cti_op_jtrue): + (KJS::Machine::cti_op_post_inc): + (KJS::Machine::cti_op_eq): + (KJS::Machine::cti_op_lshift): + (KJS::Machine::cti_op_bitand): + (KJS::Machine::cti_op_rshift): + (KJS::Machine::cti_op_bitnot): + (KJS::Machine::cti_op_resolve_with_base): + (KJS::Machine::cti_op_mod): + (KJS::Machine::cti_op_less): + (KJS::Machine::cti_op_neq): + (KJS::Machine::cti_op_post_dec): + (KJS::Machine::cti_op_urshift): + (KJS::Machine::cti_op_bitxor): + (KJS::Machine::cti_op_bitor): + (KJS::Machine::cti_op_call_eval): + (KJS::Machine::cti_op_throw): + (KJS::Machine::cti_op_push_scope): + (KJS::Machine::cti_op_stricteq): + (KJS::Machine::cti_op_nstricteq): + (KJS::Machine::cti_op_to_jsnumber): + (KJS::Machine::cti_op_in): + (KJS::Machine::cti_op_del_by_val): + (KJS::Machine::cti_vm_throw): + * VM/Machine.h: + * kjs/ExecState.h: + * masm/IA32MacroAsm.h: + (KJS::IA32MacroAssembler::emitCmpl_i32m): + +2008-08-28 Mark Rowe <mrowe@apple.com> + + Rubber-stamped by Oliver Hunt. + + Print debugging info to stderr so that run-webkit-tests can capture it. + This makes it easy to check whether test failures are due to unimplemented + op codes, missing support for exceptions, etc. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::printOpcodeOperandTypes): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile_pass4_SlowCases): + (KJS::CTI::privateCompile): + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + (KJS::ctiException): + (KJS::ctiUnsupported): + (KJS::Machine::cti_op_call): + (KJS::Machine::cti_op_resolve): + (KJS::Machine::cti_op_construct): + (KJS::Machine::cti_op_get_by_val): + (KJS::Machine::cti_op_resolve_func): + (KJS::Machine::cti_op_resolve_skip): + (KJS::Machine::cti_op_resolve_with_base): + (KJS::Machine::cti_op_call_eval): + +2008-08-27 Mark Rowe <mrowe@apple.com> + + Reviewed by Gavin Barraclough and Maciej Stachowiak. + + Fix fast/js/bitwise-and-on-undefined.html. + + A temporary value in the slow path of op_bitand was being stored in edx, but was + being clobbered by emitGetPutArg before we used it. To fix this, emitGetPutArg + now takes a third argument that specifies the scratch register to use when loading + from memory. This allows us to avoid clobbering the temporary in op_bitand. + + * VM/CTI.cpp: + (KJS::CTI::emitGetPutArg): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile_pass4_SlowCases): + * VM/CTI.h: + +2008-08-27 Mark Rowe <mrowe@apple.com> + + Rubber-stamped by Oliver Hunt. + + Switch CTI on by default. + + * wtf/Platform.h: + +2008-08-27 Mark Rowe <mrowe@apple.com> + + Reviewed by Oliver Hunt. + + Fix the build of the full WebKit stack. + + * JavaScriptCore.xcodeproj/project.pbxproj: Mark two new headers as private so they can be pulled in from WebCore. + * VM/CTI.h: Fix build issues that show up when compiled with GCC 4.2 as part of WebCore. + * wrec/WREC.h: Ditto. + +2008-08-27 Mark Rowe <mrowe@apple.com> + + Reviewed by Sam Weinig. + + Implement op_new_error. Does not fix any tests as it is always followed by the unimplemented op_throw. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_new_error): + * VM/Machine.h: + +2008-08-27 Sam Weinig <sam@webkit.org> + + Reviewed by Gavin Barraclough and Geoff Garen. + + Implement op_put_getter and op_put_setter. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_put_getter): + (KJS::Machine::cti_op_put_setter): + * VM/Machine.h: + +2008-08-27 Sam Weinig <sam@webkit.org> + + Reviewed by Gavin Barraclough and Geoff Garen. + + Implement op_del_by_val fixing 3 mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_del_by_val): + * VM/Machine.h: + +2008-08-27 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Quick & dirty fix to get SamplingTool sampling op_call. + + * VM/SamplingTool.h: + (KJS::SamplingTool::callingHostFunction): + +2008-08-27 Sam Weinig <sam@webkit.org> + + Reviewed by Gavin Barraclough and Geoff Garen. + + Fix op_put_by_index. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass2_Main): Use emitPutArgConstant instead of emitGetPutArg + for the property value. + * VM/Machine.cpp: + (KJS::Machine::cti_op_put_by_index): Get the property value from the correct argument. + +2008-08-27 Sam Weinig <sam@webkit.org> + + Reviewed by Gavin Barraclough and Geoff Garen. + + Implement op_switch_imm in the CTI fixing 13 mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_switch_imm): + * VM/Machine.h: + +2008-08-27 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + Implement op_switch_char in CTI. + + * VM/CTI.cpp: + (KJS::CTI::emitCall): + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile): + * VM/CTI.h: + (KJS::CallRecord::CallRecord): + (KJS::SwitchRecord::SwitchRecord): + * VM/CodeBlock.h: + (KJS::SimpleJumpTable::SimpleJumpTable::ctiForValue): + * VM/Machine.cpp: + (KJS::Machine::cti_op_switch_char): + * VM/Machine.h: + * masm/IA32MacroAsm.h: + (KJS::IA32MacroAssembler::): + (KJS::IA32MacroAssembler::emitJmpN_r): + (KJS::IA32MacroAssembler::getRelocatedAddress): + * wtf/Platform.h: + +2008-08-26 Sam Weinig <sam@webkit.org> + + Reviewed by Mark Rowe. + + Implement op_put_by_index to fix 1 mozilla test. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_put_by_index): + * VM/Machine.h: + +2008-08-26 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + More fixes from Geoff's review. + + * VM/CTI.cpp: + (KJS::CTI::emitGetArg): + (KJS::CTI::emitGetPutArg): + (KJS::CTI::emitPutArg): + (KJS::CTI::emitPutArgConstant): + (KJS::CTI::getConstantImmediateNumericArg): + (KJS::CTI::emitGetCTIParam): + (KJS::CTI::emitPutResult): + (KJS::CTI::emitCall): + (KJS::CTI::emitJumpSlowCaseIfNotImm): + (KJS::CTI::emitJumpSlowCaseIfNotImms): + (KJS::CTI::getDeTaggedConstantImmediate): + (KJS::CTI::emitFastArithDeTagImmediate): + (KJS::CTI::emitFastArithReTagImmediate): + (KJS::CTI::emitFastArithPotentiallyReTagImmediate): + (KJS::CTI::emitFastArithImmToInt): + (KJS::CTI::emitFastArithIntToImmOrSlowCase): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile_pass4_SlowCases): + (KJS::CTI::privateCompile): + * VM/CTI.h: + +2008-08-26 Mark Rowe <mrowe@apple.com> + + Reviewed by Gavin Barraclough and Geoff Garen. + + Implement op_jmp_scopes to fix 2 Mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_push_new_scope): Update ExecState::m_scopeChain after calling ARG_setScopeChain. + (KJS::Machine::cti_op_jmp_scopes): + * VM/Machine.h: + +2008-08-26 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Oliver Hunt. + + WebKit Regular Expression Compiler. (set ENABLE_WREC = 1 in Platform.h). + + * JavaScriptCore.xcodeproj/project.pbxproj: + * kjs/regexp.cpp: + * kjs/regexp.h: + * wrec: Added. + * wrec/WREC.cpp: Added. + * wrec/WREC.h: Added. + * wtf/Platform.h: + +2008-08-26 Sam Weinig <sam@webkit.org> + + Rubber-stamped by Oliver Hunt. + + Remove bogus assertion. + + * VM/Machine.cpp: + (KJS::Machine::cti_op_del_by_id): + +2008-08-26 Mark Rowe <mrowe@apple.com> + + Reviewed by Sam Weinig. + + Implement op_push_new_scope and stub out op_catch. This fixes 11 Mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_push_new_scope): + (KJS::Machine::cti_op_catch): + * VM/Machine.h: + +2008-08-26 Mark Rowe <mrowe@apple.com> + + Reviewed by Sam Weinig. + + Clean up op_resolve_base so that it shares its implementation with the bytecode interpreter. + + * VM/Machine.cpp: + (KJS::inlineResolveBase): + (KJS::resolveBase): + +2008-08-26 Oliver Hunt <oliver@apple.com> + + Reviewed by Sam Weinig. + + Add codegen support for op_instanceof, fixing 15 mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_instanceof): + (KJS::Machine::cti_op_del_by_id): + * VM/Machine.h: + * wtf/Platform.h: + +2008-08-26 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + Fixes for initial review comments. + + * VM/CTI.cpp: + (KJS::CTI::ctiCompileGetArg): + (KJS::CTI::ctiCompileGetPutArg): + (KJS::CTI::ctiCompilePutResult): + (KJS::CTI::ctiCompileCall): + (KJS::CTI::CTI): + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::printOpcodeOperandTypes): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile_pass4_SlowCases): + (KJS::CTI::privateCompile): + * VM/CTI.h: + * VM/Register.h: + * kjs/JSValue.h: + +2008-08-26 Sam Weinig <sam@webkit.org> + + Reviewed by Gavin Barraclough and Geoff Garen. + + Fix up exception checking code. + + * VM/Machine.cpp: + (KJS::Machine::cti_op_call): + (KJS::Machine::cti_op_resolve): + (KJS::Machine::cti_op_construct): + (KJS::Machine::cti_op_resolve_func): + (KJS::Machine::cti_op_resolve_skip): + (KJS::Machine::cti_op_resolve_with_base): + (KJS::Machine::cti_op_call_eval): + +2008-08-26 Sam Weinig <sam@webkit.org> + + Reviewed by Oliver Hunt. + + Fix slowcase for op_post_inc and op_post_dec fixing 2 mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass4_SlowCases): + +2008-08-26 Mark Rowe <mrowe@apple.com> + + Reviewed by Sam Weinig. + + Implement op_in, fixing 8 mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_in): + * VM/Machine.h: + +2008-08-26 Mark Rowe <mrowe@apple.com> + + Rubber-stamped by Oliver Hunt. + + Don't hardcode the size of a Register for op_new_array. Fixes a crash + seen during the Mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass2_Main): + +2008-08-26 Sam Weinig <sam@webkit.org> + + Reviewed by Gavin Barraclough and Geoff Garen. + + Add support for op_push_scope and op_pop_scope, fixing 20 mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/CTI.h: + * VM/Machine.cpp: + (KJS::Machine::cti_op_push_scope): + (KJS::Machine::cti_op_pop_scope): + * VM/Machine.h: + +2008-08-26 Oliver Hunt <oliver@apple.com> + + Reviewed by Maciej Stachowiak. + + Add codegen support for op_del_by_id, fixing 49 mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + * VM/Machine.cpp: + (KJS::Machine::cti_op_del_by_id): + * VM/Machine.h: + +2008-08-26 Sam Weinig <sam@webkit.org> + + Reviewed by Gavin Barraclough and Geoff Garen. + + Don't hardcode the size of a Register for op_get_scoped_var and op_put_scoped_var + fixing 513 mozilla tests in debug build. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass2_Main): + +2008-08-26 Oliver Hunt <oliver@apple.com> + + Reviewed by Maciej Stachowiak. + + Added code generator support for op_loop, fixing around 60 mozilla tests. + + * VM/CTI.cpp: + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::privateCompile_pass2_Main): + +2008-08-26 Mark Rowe <mrowe@apple.com> + + Reviewed by Sam Weinig. + + Set -fomit-frame-pointer in the correct location. + + * Configurations/JavaScriptCore.xcconfig: + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-08-26 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + Inital cut of CTI, Geoff's review fixes to follow. + + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/CTI.cpp: Added. + (KJS::getJCB): + (KJS::CTI::ctiCompileGetArg): + (KJS::CTI::ctiCompileGetPutArg): + (KJS::CTI::ctiCompilePutArg): + (KJS::CTI::ctiCompilePutArgImm): + (KJS::CTI::ctiImmediateNumericArg): + (KJS::CTI::ctiCompileGetCTIParam): + (KJS::CTI::ctiCompilePutResult): + (KJS::CTI::ctiCompileCall): + (KJS::CTI::slowCaseIfNotImm): + (KJS::CTI::slowCaseIfNotImms): + (KJS::CTI::ctiFastArithDeTagConstImmediate): + (KJS::CTI::ctiFastArithDeTagImmediate): + (KJS::CTI::ctiFastArithReTagImmediate): + (KJS::CTI::ctiFastArithPotentiallyReTagImmediate): + (KJS::CTI::ctiFastArithImmToInt): + (KJS::CTI::ctiFastArithIntToImmOrSlowCase): + (KJS::CTI::CTI): + (KJS::CTI::privateCompile_pass1_Scan): + (KJS::CTI::ctiCompileAdd): + (KJS::CTI::ctiCompileAddImm): + (KJS::CTI::ctiCompileAddImmNotInt): + (KJS::CTI::TEMP_HACK_PRINT_TYPES): + (KJS::CTI::privateCompile_pass2_Main): + (KJS::CTI::privateCompile_pass3_Link): + (KJS::CTI::privateCompile_pass4_SlowCases): + (KJS::CTI::privateCompile): + * VM/CTI.h: Added. + (KJS::CTI2Result::CTI2Result): + (KJS::CallRecord::CallRecord): + (KJS::JmpTable::JmpTable): + (KJS::SlowCaseEntry::SlowCaseEntry): + (KJS::CTI::compile): + (KJS::CTI::LabelInfo::LabelInfo): + * VM/CodeBlock.h: + (KJS::CodeBlock::CodeBlock): + (KJS::CodeBlock::~CodeBlock): + * VM/Machine.cpp: + (KJS::Machine::execute): + (KJS::Machine::privateExecute): + (KJS::ctiException): + (KJS::ctiUnsupported): + (KJS::ctiTimedOut): + (KJS::Machine::cti_op_end): + (KJS::Machine::cti_op_add): + (KJS::Machine::cti_op_pre_inc): + (KJS::Machine::cti_timeout_check): + (KJS::Machine::cti_op_loop_if_less): + (KJS::Machine::cti_op_new_object): + (KJS::Machine::cti_op_put_by_id): + (KJS::Machine::cti_op_get_by_id): + (KJS::Machine::cti_op_mul): + (KJS::Machine::cti_op_new_func): + (KJS::Machine::cti_op_call): + (KJS::Machine::cti_op_ret): + (KJS::Machine::cti_op_new_array): + (KJS::Machine::cti_op_resolve): + (KJS::Machine::cti_op_construct): + (KJS::Machine::cti_op_get_by_val): + (KJS::Machine::cti_op_resolve_func): + (KJS::Machine::cti_op_sub): + (KJS::Machine::cti_op_put_by_val): + (KJS::Machine::cti_op_lesseq): + (KJS::Machine::cti_op_loop_if_true): + (KJS::Machine::cti_op_negate): + (KJS::Machine::cti_op_resolve_base): + (KJS::Machine::cti_op_resolve_skip): + (KJS::Machine::cti_op_div): + (KJS::Machine::cti_op_pre_dec): + (KJS::Machine::cti_op_jless): + (KJS::Machine::cti_op_not): + (KJS::Machine::cti_op_jtrue): + (KJS::Machine::cti_op_post_inc): + (KJS::Machine::cti_op_eq): + (KJS::Machine::cti_op_lshift): + (KJS::Machine::cti_op_bitand): + (KJS::Machine::cti_op_rshift): + (KJS::Machine::cti_op_bitnot): + (KJS::Machine::cti_op_resolve_with_base): + (KJS::Machine::cti_op_new_func_exp): + (KJS::Machine::cti_op_mod): + (KJS::Machine::cti_op_less): + (KJS::Machine::cti_op_neq): + (KJS::Machine::cti_op_post_dec): + (KJS::Machine::cti_op_urshift): + (KJS::Machine::cti_op_bitxor): + (KJS::Machine::cti_op_new_regexp): + (KJS::Machine::cti_op_bitor): + (KJS::Machine::cti_op_call_eval): + (KJS::Machine::cti_op_throw): + (KJS::Machine::cti_op_get_pnames): + (KJS::Machine::cti_op_next_pname): + (KJS::Machine::cti_op_typeof): + (KJS::Machine::cti_op_stricteq): + (KJS::Machine::cti_op_nstricteq): + (KJS::Machine::cti_op_to_jsnumber): + * VM/Machine.h: + * VM/Register.h: + (KJS::Register::jsValue): + (KJS::Register::getJSValue): + (KJS::Register::codeBlock): + (KJS::Register::scopeChain): + (KJS::Register::i): + (KJS::Register::r): + (KJS::Register::vPC): + (KJS::Register::jsPropertyNameIterator): + * VM/SamplingTool.cpp: + (KJS::): + (KJS::SamplingTool::run): + (KJS::SamplingTool::dump): + * VM/SamplingTool.h: + * kjs/JSImmediate.h: + (KJS::JSImmediate::zeroImmediate): + (KJS::JSImmediate::oneImmediate): + * kjs/JSValue.h: + * kjs/JSVariableObject.h: + (KJS::JSVariableObject::JSVariableObjectData::offsetOf_registers): + (KJS::JSVariableObject::offsetOf_d): + (KJS::JSVariableObject::offsetOf_Data_registers): + * masm: Added. + * masm/IA32MacroAsm.h: Added. + (KJS::JITCodeBuffer::JITCodeBuffer): + (KJS::JITCodeBuffer::putByte): + (KJS::JITCodeBuffer::putShort): + (KJS::JITCodeBuffer::putInt): + (KJS::JITCodeBuffer::getEIP): + (KJS::JITCodeBuffer::start): + (KJS::JITCodeBuffer::getOffset): + (KJS::JITCodeBuffer::reset): + (KJS::JITCodeBuffer::copy): + (KJS::IA32MacroAssembler::): + (KJS::IA32MacroAssembler::emitModRm_rr): + (KJS::IA32MacroAssembler::emitModRm_rm): + (KJS::IA32MacroAssembler::emitModRm_rmsib): + (KJS::IA32MacroAssembler::emitModRm_opr): + (KJS::IA32MacroAssembler::emitModRm_opm): + (KJS::IA32MacroAssembler::IA32MacroAssembler): + (KJS::IA32MacroAssembler::emitInt3): + (KJS::IA32MacroAssembler::emitPushl_r): + (KJS::IA32MacroAssembler::emitPopl_r): + (KJS::IA32MacroAssembler::emitMovl_rr): + (KJS::IA32MacroAssembler::emitAddl_rr): + (KJS::IA32MacroAssembler::emitAddl_i8r): + (KJS::IA32MacroAssembler::emitAddl_i32r): + (KJS::IA32MacroAssembler::emitAddl_mr): + (KJS::IA32MacroAssembler::emitAndl_rr): + (KJS::IA32MacroAssembler::emitAndl_i32r): + (KJS::IA32MacroAssembler::emitCmpl_i8r): + (KJS::IA32MacroAssembler::emitCmpl_rr): + (KJS::IA32MacroAssembler::emitCmpl_rm): + (KJS::IA32MacroAssembler::emitCmpl_i32r): + (KJS::IA32MacroAssembler::emitCmpw_rm): + (KJS::IA32MacroAssembler::emitOrl_rr): + (KJS::IA32MacroAssembler::emitOrl_i8r): + (KJS::IA32MacroAssembler::emitSubl_rr): + (KJS::IA32MacroAssembler::emitSubl_i8r): + (KJS::IA32MacroAssembler::emitSubl_i32r): + (KJS::IA32MacroAssembler::emitSubl_mr): + (KJS::IA32MacroAssembler::emitTestl_i32r): + (KJS::IA32MacroAssembler::emitTestl_rr): + (KJS::IA32MacroAssembler::emitXorl_i8r): + (KJS::IA32MacroAssembler::emitXorl_rr): + (KJS::IA32MacroAssembler::emitSarl_i8r): + (KJS::IA32MacroAssembler::emitSarl_CLr): + (KJS::IA32MacroAssembler::emitShl_i8r): + (KJS::IA32MacroAssembler::emitShll_CLr): + (KJS::IA32MacroAssembler::emitMull_rr): + (KJS::IA32MacroAssembler::emitIdivl_r): + (KJS::IA32MacroAssembler::emitCdq): + (KJS::IA32MacroAssembler::emitMovl_mr): + (KJS::IA32MacroAssembler::emitMovzwl_mr): + (KJS::IA32MacroAssembler::emitMovl_rm): + (KJS::IA32MacroAssembler::emitMovl_i32r): + (KJS::IA32MacroAssembler::emitMovl_i32m): + (KJS::IA32MacroAssembler::emitLeal_mr): + (KJS::IA32MacroAssembler::emitRet): + (KJS::IA32MacroAssembler::JmpSrc::JmpSrc): + (KJS::IA32MacroAssembler::JmpDst::JmpDst): + (KJS::IA32MacroAssembler::emitCall): + (KJS::IA32MacroAssembler::label): + (KJS::IA32MacroAssembler::emitUnlinkedJmp): + (KJS::IA32MacroAssembler::emitUnlinkedJne): + (KJS::IA32MacroAssembler::emitUnlinkedJe): + (KJS::IA32MacroAssembler::emitUnlinkedJl): + (KJS::IA32MacroAssembler::emitUnlinkedJle): + (KJS::IA32MacroAssembler::emitUnlinkedJge): + (KJS::IA32MacroAssembler::emitUnlinkedJae): + (KJS::IA32MacroAssembler::emitUnlinkedJo): + (KJS::IA32MacroAssembler::emitPredictionNotTaken): + (KJS::IA32MacroAssembler::link): + (KJS::IA32MacroAssembler::copy): + * wtf/Platform.h: + +2008-08-26 Oliver Hunt <oliver@apple.com> + + RS=Maciej. + + Enabled -fomit-frame-pointer on Release and Production builds, add additional Profiling build config for shark, etc. + + * JavaScriptCore.xcodeproj/project.pbxproj: + +=== Start merge of squirrelfish-extreme === + +2008-09-06 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Fix the Mac Debug build by adding symbols that are exported only in a + Debug configuration. + + * Configurations/JavaScriptCore.xcconfig: + * DerivedSources.make: + * JavaScriptCore.Debug.exp: Added. + * JavaScriptCore.base.exp: Copied from JavaScriptCore.exp. + * JavaScriptCore.exp: Removed. + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-09-05 Darin Adler <darin@apple.com> + + Reviewed by Cameron Zwarich. + + - https://bugs.webkit.org/show_bug.cgi?id=20681 + JSPropertyNameIterator functions need to be inlined + + 1.007x as fast on SunSpider overall + 1.081x as fast on SunSpider math-cordic + + * VM/JSPropertyNameIterator.cpp: Moved functions out of here. + * VM/JSPropertyNameIterator.h: + (KJS::JSPropertyNameIterator::JSPropertyNameIterator): Moved + this into the header and marked it inline. + (KJS::JSPropertyNameIterator::create): Ditto. + (KJS::JSPropertyNameIterator::next): Ditto. + +2008-09-05 Darin Adler <darin@apple.com> + + Reviewed by Geoffrey Garen. + + - fix https://bugs.webkit.org/show_bug.cgi?id=20673 + single-character strings are churning in the Identifier table + + 1.007x as fast on SunSpider overall + 1.167x as fast on SunSpider string-fasta + + * JavaScriptCore.exp: Updated. + * kjs/SmallStrings.cpp: + (KJS::SmallStrings::singleCharacterStringRep): Added. + * kjs/SmallStrings.h: Added singleCharacterStringRep for clients that + need just a UString, not a JSString. + * kjs/identifier.cpp: + (KJS::Identifier::add): Added special cases for single character strings + so that the UString::Rep that ends up in the identifier table is the one + from the single-character string optimization; otherwise we end up having + to look it up in the identifier table over and over again. + (KJS::Identifier::addSlowCase): Ditto. + (KJS::Identifier::checkSameIdentifierTable): Made this function an empty + inline in release builds so that callers don't have to put #ifndef NDEBUG + at each call site. + * kjs/identifier.h: + (KJS::Identifier::add): Removed #ifndef NDEBUG around the calls to + checkSameIdentifierTable. + (KJS::Identifier::checkSameIdentifierTable): Added. Empty inline version + for NDEBUG builds. + +2008-09-05 Mark Rowe <mrowe@apple.com> + + Build fix. + + * kjs/JSObject.h: Move the inline virtual destructor after a non-inline + virtual function so that the symbol for the vtable is not marked as a + weakly exported symbol. + +2008-09-05 Darin Adler <darin@apple.com> + + Reviewed by Sam Weinig. + + - fix https://bugs.webkit.org/show_bug.cgi?id=20671 + JavaScriptCore string manipulation spends too much time in memcpy + + 1.011x as fast on SunSpider overall + 1.028x as fast on SunSpider string tests + + For small strings, use a loop rather than calling memcpy. The loop can + be faster because there's no function call overhead, and because it can + assume the pointers are aligned instead of checking that. Currently the + threshold is set at 20 characters, based on some testing on one particular + computer. Later we can tune this for various platforms by setting + USTRING_COPY_CHARS_INLINE_CUTOFF appropriately, but it does no great harm + if not perfectly tuned. + + * kjs/ustring.cpp: + (KJS::overflowIndicator): Removed bogus const. + (KJS::maxUChars): Ditto. + (KJS::copyChars): Added. + (KJS::UString::Rep::createCopying): Call copyChars instead of memcpy. + Also eliminated need for const_cast. + (KJS::UString::expandPreCapacity): Ditto. + (KJS::concatenate): Ditto. + (KJS::UString::spliceSubstringsWithSeparators): Ditto. + (KJS::UString::append): Ditto. + +2008-09-05 Kevin McCullough <kmccullough@apple.com> + + Reviewed by Sam and Alexey. + + Make the profiler work with a null exec state. This will allow other + applications start the profiler to get DTrace probes going without + needing a WebView. + + * ChangeLog: + * profiler/ProfileGenerator.cpp: + (KJS::ProfileGenerator::ProfileGenerator): + (KJS::ProfileGenerator::willExecute): + (KJS::ProfileGenerator::didExecute): + * profiler/Profiler.cpp: + (KJS::Profiler::startProfiling): + (KJS::Profiler::stopProfiling): + (KJS::dispatchFunctionToProfiles): + +2008-09-04 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoffrey Garen. + + Fixed an off-by-one error that would cause the StructureIDChain to + be one object too short. + + Can't construct a test case because other factors make this not crash + (yet!). + + * kjs/StructureID.cpp: + (KJS::StructureIDChain::StructureIDChain): + +2008-09-04 Kevin Ollivier <kevino@theolliviers.com> + + wx build fixes. + + * JavaScriptCoreSources.bkl: + +2008-09-04 Mark Rowe <mrowe@apple.com> + + Reviewed by Eric Seidel. + + Fix https://bugs.webkit.org/show_bug.cgi?id=20639. + Bug 20639: ENABLE_DASHBOARD_SUPPORT does not need to be a FEATURE_DEFINE + + * Configurations/JavaScriptCore.xcconfig: Remove ENABLE_DASHBOARD_SUPPORT from FEATURE_DEFINES. + * wtf/Platform.h: Set ENABLE_DASHBOARD_SUPPORT for PLATFORM(MAC). + +2008-09-04 Adele Peterson <adele@apple.com> + + Build fix. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.vcproj/jsc/jsc.vcproj: + +2008-09-04 Mark Rowe <mrowe@apple.com> + + Mac build fix. + + * kjs/config.h: Only check the value of HAVE_CONFIG_H if it is defined. + +2008-09-04 Marco Barisione <marco.barisione@collabora.co.uk> + + Reviewed by Eric Seidel. + + http://bugs.webkit.org/show_bug.cgi?id=20380 + [GTK][AUTOTOOLS] Include autotoolsconfig.h from config.h + + * kjs/config.h: Include the configuration header generated by + autotools if available. + +2008-09-04 Tor Arne Vestbø <tavestbo@trolltech.com> + + Reviewed by Simon. + + Fix the QtWebKit build to match changes in r36016 + + * JavaScriptCore.pri: + +2008-09-04 Mark Rowe <mrowe@apple.com> + + Fix the 64-bit build. + + * VM/CodeBlock.cpp: + (KJS::CodeBlock::printStructureID): Store the instruction offset into an unsigned local + to avoid a warning related to format specifiers. + (KJS::CodeBlock::printStructureIDs): Ditto. + +2008-09-04 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Rubber-stamped by Oliver Hunt. + + Correct the spelling of 'entryIndices'. + + * kjs/PropertyMap.cpp: + (KJS::PropertyMap::get): + (KJS::PropertyMap::getLocation): + (KJS::PropertyMap::put): + (KJS::PropertyMap::insert): + (KJS::PropertyMap::remove): + (KJS::PropertyMap::checkConsistency): + * kjs/PropertyMap.h: + (KJS::PropertyMapHashTable::entries): + (KJS::PropertyMap::getOffset): + (KJS::PropertyMap::putOffset): + (KJS::PropertyMap::offsetForTableLocation): + +2008-09-03 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Cameron Zwarich. + + Fixed <rdar://problem/6193925> REGRESSION: Crash occurs at + KJS::Machine::privateExecute() when attempting to load my Mobile Gallery + (http://www.me.com/gallery/#home) + + also + + https://bugs.webkit.org/show_bug.cgi?id=20633 Crash in privateExecute + @ cs.byu.edu + + The underlying problem was that we would cache prototype properties + even if the prototype was a dictionary. + + The fix is to transition a prototype back from dictionary to normal + status when an opcode caches access to it. (This is better than just + refusing to cache, since a heavily accessed prototype is almost + certainly not a true dictionary.) + + * VM/Machine.cpp: + (KJS::Machine::tryCacheGetByID): + * kjs/JSObject.h: + +2008-09-03 Eric Seidel <eric@webkit.org> + + Reviewed by Sam. + + Clean up Platform.h and add PLATFORM(CHROMIUM), PLATFORM(SKIA) and USE(V8_BINDINGS) + + * Configurations/JavaScriptCore.xcconfig: add missing ENABLE_* + * wtf/ASCIICType.h: include <wtf/Assertions.h> since it depends on it. + * wtf/Platform.h: + +2008-09-03 Kevin McCullough <kmccullough@apple.com> + + Reviewed by Tim. + + Remove the rest of the "zombie" code from the profiler. + - There is no longer a need for the ProfilerClient callback mechanism. + + * API/JSProfilerPrivate.cpp: + (JSStartProfiling): + * JavaScriptCore.exp: + * profiler/HeavyProfile.h: + * profiler/ProfileGenerator.cpp: + (KJS::ProfileGenerator::create): + (KJS::ProfileGenerator::ProfileGenerator): + * profiler/ProfileGenerator.h: + (KJS::ProfileGenerator::profileGroup): + * profiler/Profiler.cpp: + (KJS::Profiler::startProfiling): + (KJS::Profiler::stopProfiling): Immediately return the profile when + stopped instead of using a callback. + * profiler/Profiler.h: + * profiler/TreeProfile.h: + +2008-09-03 Adele Peterson <adele@apple.com> + + Build fix. + + * wtf/win/MainThreadWin.cpp: + +2008-09-02 Kevin McCullough <kmccullough@apple.com> + + Reviewed by Darin and Tim. + + Remove most of the "zombie" mode from the profiler. Next we will need + to remove the client callback mechanism in profiles. + + - This simplifies the code, leverages the recent changes I've made in + getting line numbers from SquirrelFish, and is a slight speed + improvement on SunSpider. + - Also the "zombie" mode was a constant source of odd edge cases and + obscure bugs so it's good to remove since all of its issues may not have + been found. + + * API/JSProfilerPrivate.cpp: No need to call didFinishAllExecution() any + more. + (JSEndProfiling): + * JavaScriptCore.exp: Export the new signature of retrieveLastCaller() + * VM/Machine.cpp: + (KJS::Machine::execute): No need to call didFinishAllExecution() any + more. + (KJS::Machine::retrieveCaller): Now operates on InternalFunctions now + since the RegisterFile is no longer guaranteeded to store only + JSFunctions + (KJS::Machine::retrieveLastCaller): Now also retrieve the function's + name + (KJS::Machine::callFrame): A result of changing retrieveCaller() + * VM/Machine.h: + * VM/Register.h: + * kjs/JSGlobalObject.cpp: + (KJS::JSGlobalObject::~JSGlobalObject): + * kjs/nodes.h: + * profiler/ProfileGenerator.cpp: + (KJS::ProfileGenerator::create): Now pass the original exec and get the + global exec and client when necessary. We need the original exec so we + can have the stack frame where profiling started. + (KJS::ProfileGenerator::ProfileGenerator): ditto. + (KJS::ProfileGenerator::addParentForConsoleStart): This is where the + parent to star of the profile is added, if there is one. + (KJS::ProfileGenerator::willExecute): Remove uglyness! + (KJS::ProfileGenerator::didExecute): Ditto! + (KJS::ProfileGenerator::stopProfiling): + (KJS::ProfileGenerator::removeProfileStart): Use a better way to find + and remove the function we are looking for. + (KJS::ProfileGenerator::removeProfileEnd): Ditto. + * profiler/ProfileGenerator.h: + (KJS::ProfileGenerator::client): + * profiler/ProfileNode.cpp: + (KJS::ProfileNode::removeChild): Add a better way to remove a child from + a ProfileNode. + (KJS::ProfileNode::stopProfiling): + (KJS::ProfileNode::debugPrintData): Modified a debug-only diagnostic + function to be sane. + * profiler/ProfileNode.h: + * profiler/Profiler.cpp: Change to pass the original exec state. + (KJS::Profiler::startProfiling): + (KJS::Profiler::stopProfiling): + (KJS::Profiler::willExecute): + (KJS::Profiler::didExecute): + (KJS::Profiler::createCallIdentifier): + * profiler/Profiler.h: + +2008-09-01 Alexey Proskuryakov <ap@webkit.org> + + Reviewed by Darin Adler. + + Implement callOnMainThreadAndWait(). + + This will be useful when a background thread needs to perform UI calls synchronously + (e.g. an openDatabase() call cannot return until the user answers to a confirmation dialog). + + * wtf/MainThread.cpp: + (WTF::FunctionWithContext::FunctionWithContext): Added a ThreadCondition member. When + non-zero, the condition is signalled after the function is called. + (WTF::mainThreadFunctionQueueMutex): Renamed from functionQueueMutex, sinc this is no longer + static. Changed to be initialized from initializeThreading() to avoid lock contention. + (WTF::initializeMainThread): On non-Windows platforms, just call mainThreadFunctionQueueMutex. + (WTF::dispatchFunctionsFromMainThread): Signal synchronous calls when done. + (WTF::callOnMainThread): Updated for functionQueueMutex rename. + (WTF::callOnMainThreadAndWait): Added. + + * wtf/MainThread.h: Added callOnMainThreadAndWait(); initializeMainThread() now exists on + all platforms. + + * wtf/win/MainThreadWin.cpp: (WTF::initializeMainThread): Added a callOnMainThreadAndWait() + call to initialize function queue mutex. + + * wtf/ThreadingGtk.cpp: (WTF::initializeThreading): + * wtf/ThreadingPthreads.cpp: (WTF::initializeThreading): + * wtf/ThreadingQt.cpp: (WTF::initializeThreading): + Only initialize mainThreadIdentifier on non-Darwin platforms. It was not guaranteed to be + accurate on Darwin. + +2008-09-03 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + Use isUndefinedOrNull() instead of separate checks for each in op_eq_null + and op_neq_null. + + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + +2008-09-02 Csaba Osztrogonac <oszi@inf.u-szeged.hu> + + Reviewed by Darin Adler. + + Bug 20296: OpcodeStats doesn't build on platforms which don't have mergesort(). + <https://bugs.webkit.org/show_bug.cgi?id=20296> + + * VM/Opcode.cpp: + (KJS::OpcodeStats::~OpcodeStats): mergesort() replaced with qsort() + +2008-09-02 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Fast path for array.length and string.length. + + SunSpider says 0.5% faster. + +2008-09-02 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Anders Carlsson. + + Added optimized paths for comparing to null. + + SunSpider says 0.5% faster. + +2008-09-02 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Changed jsDriver.pl to dump the exact text you would need in order to + reproduce a test result. This enables a fast workflow where you copy + and paste a test failure in the terminal. + + * tests/mozilla/jsDriver.pl: + +2008-09-02 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Implemented the rest of Darin's review comments for the 09-01 inline + caching patch. + + SunSpider says 0.5% faster, but that seems like noise. + + * JavaScriptCore.xcodeproj/project.pbxproj: Put PutPropertySlot into + its own file, and added BatchedTransitionOptimizer. + + * VM/CodeBlock.cpp: + (KJS::CodeBlock::~CodeBlock): Use array indexing instead of a pointer + iterator. + + * VM/CodeGenerator.cpp: + (KJS::CodeGenerator::CodeGenerator): Used BatchedTransitionOptimizer to + make batched put and remove for declared variables fast, without forever + pessimizing the global object. Removed the old getDirect/removeDirect hack + that tried to do the same in a more limited way. + + * VM/CodeGenerator.h: Moved IdentifierRepHash to the KJS namespace since + it doesn't specialize anything in WTF. + + * VM/Machine.cpp: + (KJS::Machine::Machine): Nixed the DummyConstruct tag because it was + confusingly named. + + (KJS::Machine::execute): Used BatchedTransitionOptimizer, as above. Fixed + up some comments. + + (KJS::cachePrototypeChain): Cast to JSObject*, since it's more specific. + + (KJS::Machine::tryCachePutByID): Use isNull() instead of comparing to + jsNull(), since isNull() leaves more options open for the future. + (KJS::Machine::tryCacheGetByID): ditto + (KJS::Machine::privateExecute): ditto + + * VM/SamplingTool.cpp: + (KJS::SamplingTool::dump): Use C++-style cast, to match our style + guidelines. + + * kjs/BatchedTransitionOptimizer.h: Added. New class that allows host + code to add a batch of properties to an object in an efficient way. + + * kjs/JSActivation.cpp: Use isNull(), as above. + + * kjs/JSArray.cpp: Get rid of DummyConstruct tag, as above. + * kjs/JSArray.h: + + * kjs/JSGlobalData.cpp: Nixed two unused StructureIDs. + * kjs/JSGlobalData.h: + + * kjs/JSImmediate.cpp: Use isNull(), as above. + + * kjs/JSObject.cpp: + (KJS::JSObject::mark): Moved mark tracing code elsewhere, to make this + function more readable. + + (KJS::JSObject::put): Use isNull(), as above. + + (KJS::JSObject::createInheritorID): Return a raw pointer, since the + object is owned by a data member, not necessarily the caller. + * kjs/JSObject.h: + + * kjs/JSString.cpp: Use isNull(), as above. + + * kjs/PropertyMap.h: Updated to use PropertySlot::invalidOffset. + + * kjs/PropertySlot.h: Changed KJS_INVALID_OFFSET to WTF::notFound + because C macros are so 80's. + + * kjs/PutPropertySlot.h: Added. Split out of PropertySlot.h. Also renamed + PutPropertySlot::SlotType to PutPropertySlot::Type, and slotBase to base, + since "slot" was redundant. + + * kjs/StructureID.cpp: Added a new transition *away* from dictionary + status, to support BatchedTransitionOptimizer. + + (KJS::StructureIDChain::StructureIDChain): No need to store m_size as + a data member, so keep it in a local, which might be faster. + * kjs/StructureID.h: + + * kjs/SymbolTable.h: Moved IdentifierRepHash to KJS namespace, as above. + * kjs/ustring.h: + +2008-09-02 Adam Roben <aroben@apple.com> + + Windows build fixes + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add + StructureID.{cpp,h} to the project. Also let VS reorder this file. + * VM/CodeBlock.cpp: Include StringExtras so that snprintf will be + defined on Windows. + +2008-09-01 Sam Weinig <sam@webkit.org> + + Fix release build. + + * JavaScriptCore.exp: + +2008-09-01 Jan Michael Alonzo <jmalonzo@webkit.org> + + Reviewed by Oliver Hunt. + + Gtk buildfix + + * GNUmakefile.am: + * kjs/PropertyMap.cpp: rename Identifier.h to identifier.h + * kjs/StructureID.cpp: include JSObject.h + +2008-09-01 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Darin Adler. + + First cut at inline caching for access to vanilla JavaScript properties. + + SunSpider says 4% faster. Tests heavy on dictionary-like access have + regressed a bit -- we have a lot of room to improve in this area, + but this patch is over-ripe as-is. + + JSCells now have a StructureID that uniquely identifies their layout, + and holds their prototype. + + JSValue::put takes a PropertySlot& argument, so it can fill in details + about where it put a value, for the sake of caching. + + * VM/CodeGenerator.cpp: + (KJS::CodeGenerator::CodeGenerator): Avoid calling removeDirect if we + can, since it disables inline caching in the global object. This can + probably improve in the future. + + * kjs/JSGlobalObject.cpp: Nixed reset(), since it complicates caching, and + wasn't really necessary. + + * kjs/JSObject.cpp: Tweaked getter / setter behavior not to rely on the + IsGetterSetter flag, since the flag was buggy. This is necessary in order + to avoid accidentally accessing a getter / setter as a normal property. + + Also changed getter / setter creation to honor ReadOnly, matching Mozilla. + + * kjs/PropertyMap.cpp: Nixed clear(), since it complicates caching and + isn't necessary. + + * kjs/Shell.cpp: Moved SamplingTool dumping outside the loop. This allows + you to aggregate sampling of multiple files (or the same file repeatedly), + which helped me track down regressions. + + * kjs/ustring.h: Moved IdentifierRepHash here to share it. + +2008-09-01 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Sam Weinig. + + Eagerly allocate the Math object's numeric constants. This avoids + constantly reallocating them in loops, and also ensures that the Math + object will not use the single property optimization, which makes + properties ineligible for caching. + + SunSpider reports a small speedup, in combination with inline caching. + + * kjs/MathObject.cpp: + (KJS::MathObject::MathObject): + (KJS::MathObject::getOwnPropertySlot): + * kjs/MathObject.h: + +2008-09-01 Jan Michael Alonzo <jmalonzo@webkit.org> + + Gtk build fix, not reviewed. + + * GNUmakefile.am: Add SmallStrings.cpp in both release and debug builds + +2008-08-31 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej Stachowiak. + + Bug 20577: REGRESSION (r36006): Gmail is broken + <https://bugs.webkit.org/show_bug.cgi?id=20577> + + r36006 changed stringProtoFuncSubstr() so that it is uses the more + efficient jsSubstring(), rather than using UString::substr() and then + calling jsString(). However, the change did not account for the case + where the start and the length of the substring extend beyond the length + of the original string. This patch corrects that. + + * kjs/StringPrototype.cpp: + (KJS::stringProtoFuncSubstr): + +2008-08-31 Simon Hausmann <hausmann@wekit.org> + + Unreviewed build fix (with gcc 4.3) + + * kjs/ustring.h: Properly forward declare operator== for UString and + the the concatenate functions inside the KJS namespace. + +2008-08-30 Darin Adler <darin@apple.com> + + Reviewed by Maciej. + + - https://bugs.webkit.org/show_bug.cgi?id=20333 + improve JavaScript speed when handling single-character strings + + 1.035x as fast on SunSpider overall. + 1.127x as fast on SunSpider string tests. + 1.910x as fast on SunSpider string-base64 test. + + * API/JSObjectRef.cpp: + (JSObjectMakeFunction): Removed unneeded explicit construction of UString. + + * GNUmakefile.am: Added SmallStrings.h and SmallStrings.cpp. + * JavaScriptCore.pri: Ditto. + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + Ditto. + * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. + * JavaScriptCoreSources.bkl: Ditto. + + * JavaScriptCore.exp: Updated. + + * VM/Machine.cpp: + (KJS::jsAddSlowCase): Changed to use a code path that doesn't involve + a UString constructor. This avoids an extra jump caused by the "in charge" + vs. "not in charge" constructors. + (KJS::jsAdd): Ditto. + (KJS::jsTypeStringForValue): Adopted jsNontrivialString. + + * kjs/ArrayPrototype.cpp: + (KJS::arrayProtoFuncToString): Adopted jsEmptyString. + (KJS::arrayProtoFuncToLocaleString): Ditto. + (KJS::arrayProtoFuncJoin): Ditto. + * kjs/BooleanPrototype.cpp: + (KJS::booleanProtoFuncToString): Adopted jsNontrivialString. + * kjs/DateConstructor.cpp: + (KJS::callDate): Ditto. + * kjs/DatePrototype.cpp: + (KJS::formatLocaleDate): Adopted jsEmptyString and jsNontrivialString. + (KJS::dateProtoFuncToString): Ditto. + (KJS::dateProtoFuncToUTCString): Ditto. + (KJS::dateProtoFuncToDateString): Ditto. + (KJS::dateProtoFuncToTimeString): Ditto. + (KJS::dateProtoFuncToLocaleString): Ditto. + (KJS::dateProtoFuncToLocaleDateString): Ditto. + (KJS::dateProtoFuncToLocaleTimeString): Ditto. + (KJS::dateProtoFuncToGMTString): Ditto. + + * kjs/ErrorPrototype.cpp: + (KJS::ErrorPrototype::ErrorPrototype): Ditto. + (KJS::errorProtoFuncToString): Ditto. + + * kjs/JSGlobalData.h: Added SmallStrings. + + * kjs/JSString.cpp: + (KJS::jsString): Eliminated the overload that takes a const char*. + Added code to use SmallStrings to get strings of small sizes rather + than creating a new JSString every time. + (KJS::jsSubstring): Added. Used when creating a string from a substring + to avoid creating a JSString in cases where the substring will end up + empty or as one character. + (KJS::jsOwnedString): Added the same code as in jsString. + + * kjs/JSString.h: Added new functions jsEmptyString, jsSingleCharacterString, + jsSingleCharacterSubstring, jsSubstring, and jsNontrivialString for various + cases where we want to create JSString, and want special handling for small + strings. + (KJS::JSString::JSString): Added an overload that takes a PassRefPtr of + a UString::Rep so you don't have to construct a UString; PassRefPtr can be + more efficient. + (KJS::jsEmptyString): Added. + (KJS::jsSingleCharacterString): Added. + (KJS::jsSingleCharacterSubstring): Added. + (KJS::jsNontrivialString): Added. + (KJS::JSString::getIndex): Adopted jsSingleCharacterSubstring. + (KJS::JSString::getStringPropertySlot): Ditto. + + * kjs/NumberPrototype.cpp: + (KJS::numberProtoFuncToFixed): Adopted jsNontrivialString. + (KJS::numberProtoFuncToExponential): Ditto. + (KJS::numberProtoFuncToPrecision): Ditto. + + * kjs/ObjectPrototype.cpp: + (KJS::objectProtoFuncToLocaleString): Adopted toThisJSString. + (KJS::objectProtoFuncToString): Adopted jsNontrivialString. + + * kjs/RegExpConstructor.cpp: Separated the lastInput value that's used + with the lastOvector to return matches from the input value that can be + changed via JavaScript. They will be equal in many cases, but not all. + (KJS::RegExpConstructor::performMatch): Set input. + (KJS::RegExpMatchesArray::RegExpMatchesArray): Ditto. + (KJS::RegExpMatchesArray::fillArrayInstance): Adopted jsSubstring. Also, + use input rather than lastInput in the appropriate place. + (KJS::RegExpConstructor::getBackref): Adopted jsSubstring and jsEmptyString. + Added code to handle the case where there is no backref -- before this + depended on range checking in UString::substr which is not present in + jsSubstring. + (KJS::RegExpConstructor::getLastParen): Ditto. + (KJS::RegExpConstructor::getLeftContext): Ditto. + (KJS::RegExpConstructor::getRightContext): Ditto. + (KJS::RegExpConstructor::getValueProperty): Use input rather than lastInput. + Also adopt jsEmptyString. + (KJS::RegExpConstructor::putValueProperty): Ditto. + (KJS::RegExpConstructor::input): Ditto. + + * kjs/RegExpPrototype.cpp: + (KJS::regExpProtoFuncToString): Adopt jsNonTrivialString. Also changed to + use UString::append to append single characters rather than using += and + a C-style string. + + * kjs/SmallStrings.cpp: Added. + (KJS::SmallStringsStorage::SmallStringsStorage): Construct the + buffer and UString::Rep for all 256 single-character strings for + the U+0000 through U+00FF. This covers all the values used in + the base64 test as well as most values seen elsewhere on the web + as well. It's possible that later we might fix this to only work + for U+0000 through U+007F but the others are used quite a bit in + the current version of the base64 test. + (KJS::SmallStringsStorage::~SmallStringsStorage): Free memory. + (KJS::SmallStrings::SmallStrings): Create a set of small strings, + initially not created; created later when they are used. + (KJS::SmallStrings::~SmallStrings): Deallocate. Not left compiler + generated because the SmallStringsStorage class's destructor needs + to be visible. + (KJS::SmallStrings::mark): Mark all the strings. + (KJS::SmallStrings::createEmptyString): Create a cell for the + empty string. Called only the first time. + (KJS::SmallStrings::createSingleCharacterString): Create a cell + for one of the single-character strings. Called only the first time. + * kjs/SmallStrings.h: Added. + + * kjs/StringConstructor.cpp: + (KJS::stringFromCharCodeSlowCase): Factored out of strinFromCharCode. + Only used for cases where the caller does not pass exactly one argument. + (KJS::stringFromCharCode): Adopted jsSingleCharacterString. + (KJS::callStringConstructor): Adopted jsEmptyString. + + * kjs/StringObject.cpp: + (KJS::StringObject::StringObject): Adopted jsEmptyString. + + * kjs/StringPrototype.cpp: + (KJS::stringProtoFuncReplace): Adopted jsSubstring. + (KJS::stringProtoFuncCharAt): Adopted jsEmptyString and + jsSingleCharacterSubstring and also added a special case when the + index is an immediate number to avoid conversion to and from floating + point, since that's the common case. + (KJS::stringProtoFuncCharCodeAt): Ditto. + (KJS::stringProtoFuncMatch): Adopted jsSubstring and jsEmptyString. + (KJS::stringProtoFuncSlice): Adopted jsSubstring and + jsSingleCharacterSubstring. Also got rid of some unneeded locals and + removed unneeded code to set the length property of the array, since it + is automatically updated as values are added to the array. + (KJS::stringProtoFuncSplit): Adopted jsEmptyString. + (KJS::stringProtoFuncSubstr): Adopted jsSubstring. + (KJS::stringProtoFuncSubstring): Ditto. + + * kjs/collector.cpp: + (KJS::Heap::collect): Added a call to mark SmallStrings. + + * kjs/ustring.cpp: + (KJS::UString::expandedSize): Made this a static member function since + it doesn't need to look at any data members. + (KJS::UString::expandCapacity): Use a non-inline function, makeNull, to + set the rep to null in failure cases. This avoids adding a PIC branch for + the normal case when there is no failure. + (KJS::UString::expandPreCapacity): Ditto. + (KJS::UString::UString): Ditto. + (KJS::concatenate): Refactored the concatenation constructor into this + separate function. Calling the concatenation constructor was leading to + an extra branch because of the in-charge vs. not-in-charge versions not + both being inlined, and this was showing up as nearly 1% on Shark. Also + added a special case for when the second string is a single character, + since it's a common idiom to build up a string that way and we can do + things much more quickly, without involving memcpy for example. Also + adopted the non-inline function, nullRep, for the same reason given for + makeNull above. + (KJS::UString::append): Adopted makeNull for failure cases. + (KJS::UString::operator=): Ditto. + (KJS::UString::toDouble): Added a special case for converting single + character strings to numbers. We're doing this a ton of times while + running the base64 test. + (KJS::operator==): Added special cases so we can compare single-character + strings without calling memcmp. Later we might want to special case other + short lengths similarly. + (KJS::UString::makeNull): Added. + (KJS::UString::nullRep): Added. + * kjs/ustring.h: Added declarations for the nullRep and makeNull. Changed + expandedSize to be a static member function. Added a declaration of the + concatenate function. Removed the concatenation constructor. Rewrote + operator+ to use the concatenate function. + +2008-08-29 Anders Carlsson <andersca@apple.com> + + Build fix. + + * VM/Machine.cpp: + (KJS::getCPUTime): + +2008-08-29 Anders Carlsson <andersca@apple.com> + + Reviewed by Darin Adler. + + <rdar://problem/6174667> + When a machine is under heavy load, the Slow Script dialog often comes up many times and just gets in the way + + Instead of using clock time, use the CPU time spent executing the current thread when + determining if the script has been running for too long. + + * VM/Machine.cpp: + (KJS::getCPUTime): + (KJS::Machine::checkTimeout): + +2008-08-28 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Rubber-stamped by Sam Weinig. + + Change 'term' to 'expr' in variable names to standardize terminology. + + * kjs/nodes.cpp: + (KJS::BinaryOpNode::emitCode): + (KJS::ReverseBinaryOpNode::emitCode): + (KJS::ThrowableBinaryOpNode::emitCode): + * kjs/nodes.h: + (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::ThrowableBinaryOpNode::): + (KJS::InstanceOfNode::): + (KJS::InNode::): + (KJS::EqualNode::): + (KJS::NotEqualNode::): + (KJS::StrictEqualNode::): + (KJS::NotStrictEqualNode::): + (KJS::BitAndNode::): + (KJS::BitOrNode::): + (KJS::BitXOrNode::): + * kjs/nodes2string.cpp: + (KJS::MultNode::streamTo): + (KJS::DivNode::streamTo): + (KJS::ModNode::streamTo): + (KJS::AddNode::streamTo): + (KJS::SubNode::streamTo): + (KJS::LeftShiftNode::streamTo): + (KJS::RightShiftNode::streamTo): + (KJS::UnsignedRightShiftNode::streamTo): + (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-08-28 Alp Toker <alp@nuanti.com> + + GTK+ dist/build fix. List newly added header files. + + * GNUmakefile.am: + +2008-08-28 Sam Weinig <sam@webkit.org> + + Reviewed by Oliver Hunt. + + Change to throw a ReferenceError at runtime instead of a ParseError + at parse time, when the left hand side expression of a for-in statement + is not an lvalue. + + * kjs/grammar.y: + * kjs/nodes.cpp: + (KJS::ForInNode::emitCode): + +2008-08-28 Alexey Proskuryakov <ap@webkit.org> + + Not reviewed, build fix (at least for OpenBSD, posssibly more). + + https://bugs.webkit.org/show_bug.cgi?id=20545 + missing #include <unistd.h> in JavaScriptCore/VM/SamplingTool.cpp + + * VM/SamplingTool.cpp: add the missing include. + +2008-08-26 Kevin McCullough <kmccullough@apple.com> + + Reviewed by Geoff and Cameron. + + <rdar://problem/6174603> Hitting assertion in Register::codeBlock when + loading facebook (20516). + + - This was a result of my line numbers change. After a host function is + called the stack does not get reset correctly. + - Oddly this also appears to be a slight speedup on SunSpider. + + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + +2008-08-26 Alexey Proskuryakov <ap@webkit.org> + + Reviewed by Geoff and Tim. + + Export new API methods. + + * JavaScriptCore.exp: + +2008-08-25 Kevin McCullough <kmccullough@apple.com> + + Reviewed by Geoff, Tim and Mark. + + <rdar://problem/6150623> JSProfiler: It would be nice if the profiles + in the console said what file and line number they came from + - Lay the foundation for getting line numbers and other data from the + JavaScript engine. With the cleanup in kjs/ExecState this is actually + a slight performance improvement. + + * JavaScriptCore.exp: Export retrieveLastCaller() for WebCore. + * JavaScriptCore.xcodeproj/project.pbxproj: + * VM/Machine.cpp: Now Host and JS functions set a call frame on the + exec state, so this and the profiler code were pulled out of the + branches. + (KJS::Machine::privateExecute): + (KJS::Machine::retrieveLastCaller): This get's the lineNumber, sourceID + and sourceURL for the previously called function. + * VM/Machine.h: + * kjs/ExecState.cpp: Remove references to JSFunction since it's not used + anywhere. + * kjs/ExecState.h: + +2008-08-25 Alexey Proskuryakov <ap@webkit.org> + + Reviewed by Darin Adler. + + Ensure that JSGlobalContextRelease() performs garbage collection, even if there are other + contexts in the current context's group. + + This is only really necessary when the last reference is released, but there is no way to + determine that, and no harm in collecting slightly more often. + + * API/JSContextRef.cpp: (JSGlobalContextRelease): Explicitly collect the heap if it is not + being destroyed. + +2008-08-24 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Oliver Hunt. + + Bug 20093: JSC shell does not clear exceptions after it executes toString on an expression + <https://bugs.webkit.org/show_bug.cgi?id=20093> + + Clear exceptions after evaluating any code in the JSC shell. We do not + report exceptions that are caused by calling toString on the final + valued, but at least we avoid incorrect behaviour. + + Also, print any exceptions that occurred while evaluating code at the + interactive prompt, not just while evaluating code from a file. + + * kjs/Shell.cpp: + (runWithScripts): + (runInteractive): + +2008-08-24 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Oliver. + + Remove an unnecessary RefPtr to a RegisterID. + + * kjs/nodes.cpp: + (KJS::DeleteBracketNode::emitCode): + +2008-08-24 Mark Rowe <mrowe@apple.com> + + Reviewed by Oliver Hunt. + + Use the correct version number for when JSGlobalContextCreate was introduced. + + * API/JSContextRef.h: + +2008-08-23 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Rubber-stamped by Mark Rowe. + + Remove modelines. + + * API/APICast.h: + * API/JSBase.cpp: + * API/JSCallbackConstructor.cpp: + * API/JSCallbackConstructor.h: + * API/JSCallbackFunction.cpp: + * API/JSCallbackFunction.h: + * API/JSCallbackObject.cpp: + * API/JSCallbackObject.h: + * API/JSCallbackObjectFunctions.h: + * API/JSClassRef.cpp: + * API/JSContextRef.cpp: + * API/JSObjectRef.cpp: + * API/JSProfilerPrivate.cpp: + * API/JSStringRef.cpp: + * API/JSStringRefBSTR.cpp: + * API/JSStringRefCF.cpp: + * API/JSValueRef.cpp: + * API/tests/JSNode.c: + * API/tests/JSNode.h: + * API/tests/JSNodeList.c: + * API/tests/JSNodeList.h: + * API/tests/Node.c: + * API/tests/Node.h: + * API/tests/NodeList.c: + * API/tests/NodeList.h: + * API/tests/minidom.c: + * API/tests/minidom.js: + * API/tests/testapi.c: + * API/tests/testapi.js: + * JavaScriptCore.pro: + * kjs/FunctionConstructor.h: + * kjs/FunctionPrototype.h: + * kjs/JSArray.h: + * kjs/JSString.h: + * kjs/JSWrapperObject.cpp: + * kjs/NumberConstructor.h: + * kjs/NumberObject.h: + * kjs/NumberPrototype.h: + * kjs/lexer.h: + * kjs/lookup.h: + * wtf/Assertions.cpp: + * wtf/Assertions.h: + * wtf/HashCountedSet.h: + * wtf/HashFunctions.h: + * wtf/HashIterators.h: + * wtf/HashMap.h: + * wtf/HashSet.h: + * wtf/HashTable.h: + * wtf/HashTraits.h: + * wtf/ListHashSet.h: + * wtf/ListRefPtr.h: + * wtf/Noncopyable.h: + * wtf/OwnArrayPtr.h: + * wtf/OwnPtr.h: + * wtf/PassRefPtr.h: + * wtf/Platform.h: + * wtf/RefPtr.h: + * wtf/RefPtrHashMap.h: + * wtf/RetainPtr.h: + * wtf/UnusedParam.h: + * wtf/Vector.h: + * wtf/VectorTraits.h: + * wtf/unicode/Unicode.h: + * wtf/unicode/icu/UnicodeIcu.h: + +2008-08-22 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Oliver. + + Some cleanup to match our coding style. + + * VM/CodeGenerator.h: + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + * kjs/ExecState.cpp: + * kjs/ExecState.h: + * kjs/completion.h: + * kjs/identifier.cpp: + (KJS::Identifier::equal): + (KJS::CStringTranslator::hash): + (KJS::CStringTranslator::equal): + (KJS::CStringTranslator::translate): + (KJS::UCharBufferTranslator::equal): + (KJS::UCharBufferTranslator::translate): + (KJS::Identifier::remove): + * kjs/operations.h: + +2008-08-20 Alexey Proskuryakov <ap@webkit.org> + + Windows build fix. + + * API/WebKitAvailability.h: Define DEPRECATED_ATTRIBUTE. + +2008-08-19 Alexey Proskuryakov <ap@webkit.org> + + Reviewed by Geoff Garen. + + Bring back shared JSGlobalData and implicit locking, because too many clients rely on it. + + * kjs/JSGlobalData.cpp: + (KJS::JSGlobalData::~JSGlobalData): + (KJS::JSGlobalData::JSGlobalData): Re-add shared instance. + (KJS::JSGlobalData::sharedInstanceExists): Ditto. + (KJS::JSGlobalData::sharedInstance): Ditto. + (KJS::JSGlobalData::sharedInstanceInternal): Ditto. + + * API/JSContextRef.h: Deprecated JSGlobalContextCreate(). Added a very conservative + description of its threading model (nothing is allowed). + + * API/JSContextRef.cpp: + (JSGlobalContextCreate): Use shared JSGlobalData. + (JSGlobalContextCreateInGroup): Support passing NULL group to request a unique one. + (JSGlobalContextRetain): Added back locking. + (JSGlobalContextRelease): Ditto. + (JSContextGetGlobalObject): Ditto. + + * API/tests/minidom.c: (main): + * API/tests/testapi.c: (main): + Switched to JSGlobalContextCreateInGroup() to avoid deprecation warnings. + + * JavaScriptCore.exp: Re-added JSLock methods. Added JSGlobalContextCreateInGroup (d'oh!). + + * 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/JSObjectRef.cpp: + (JSObjectMake): + (JSObjectMakeFunctionWithCallback): + (JSObjectMakeConstructor): + (JSObjectMakeFunction): + (JSObjectHasProperty): + (JSObjectGetProperty): + (JSObjectSetProperty): + (JSObjectGetPropertyAtIndex): + (JSObjectSetPropertyAtIndex): + (JSObjectDeleteProperty): + (JSObjectCallAsFunction): + (JSObjectCallAsConstructor): + (JSObjectCopyPropertyNames): + (JSPropertyNameArrayRelease): + (JSPropertyNameAccumulatorAddName): + * API/JSValueRef.cpp: + (JSValueIsEqual): + (JSValueIsInstanceOfConstructor): + (JSValueMakeNumber): + (JSValueMakeString): + (JSValueToNumber): + (JSValueToStringCopy): + (JSValueToObject): + (JSValueProtect): + (JSValueUnprotect): + * ForwardingHeaders/JavaScriptCore/JSLock.h: Added. + * GNUmakefile.am: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + * kjs/AllInOneFile.cpp: + * kjs/JSGlobalData.h: + * kjs/JSGlobalObject.cpp: + (KJS::JSGlobalObject::~JSGlobalObject): + (KJS::JSGlobalObject::init): + * kjs/JSLock.cpp: Added. + (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: Added. + (KJS::JSLock::JSLock): + (KJS::JSLock::~JSLock): + * 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): + Re-added implicit locking. + +2008-08-19 Kevin McCullough <kmccullough@apple.com> + + Reviewed by Tim and Mark. + + Implement DTrace hooks for dashcode and instruments. + + * API/JSProfilerPrivate.cpp: Added. Expose SPI so that profiling can be + turned on from a client. The DTrace probes were added within the + profiler mechanism for performance reasons so the profiler must be + started to enable tracing. + (JSStartProfiling): + (JSEndProfiling): + * API/JSProfilerPrivate.h: Added. Ditto. + * JavaScriptCore.exp: Exposing the start/stop methods to clients. + * JavaScriptCore.xcodeproj/project.pbxproj: + * kjs/Tracing.d: Define the DTrace probes. + * kjs/Tracing.h: Ditto. + * profiler/ProfileGenerator.cpp: Implement the DTrace probes in the + profiler. + (KJS::ProfileGenerator::willExecute): + (KJS::ProfileGenerator::didExecute): + +2008-08-19 Steve Falkenburg <sfalken@apple.com> + + Build fix. + + * kjs/operations.cpp: + (KJS::equal): + +2008-08-18 Timothy Hatcher <timothy@apple.com> + + Fix an assertion when generating a heavy profile because the + empty value and deleted value of CallIdentifier where equal. + + https://bugs.webkit.org/show_bug.cgi?id=20439 + + Reviewed by Dan Bernstein. + + * profiler/CallIdentifier.h: Make the emptyValue for CallIdentifier + use empty strings for URL and function name. + +2008-08-12 Darin Adler <darin@apple.com> + + Reviewed by Geoff. + + - eliminate JSValue::type() + + This will make it slightly easier to change the JSImmediate design without + having to touch so many call sites. + + SunSpider says this change is a wash (looked like a slight speedup, but not + statistically significant). + + * API/JSStringRef.cpp: Removed include of JSType.h. + * API/JSValueRef.cpp: Removed include of JSType.h. + (JSValueGetType): Replaced use of JSValue::type() with + JSValue::is functions. + + * JavaScriptCore.exp: Updated. + + * VM/JSPropertyNameIterator.cpp: Removed type() implementation. + (KJS::JSPropertyNameIterator::toPrimitive): Changed to take + PreferredPrimitiveType argument instead of JSType. + * VM/JSPropertyNameIterator.h: Ditto. + + * VM/Machine.cpp: + (KJS::fastIsNumber): Updated for name change. + (KJS::fastToInt32): Ditto. + (KJS::fastToUInt32): Ditto. + (KJS::jsAddSlowCase): Updated toPrimitive caller for change from + JSType to PreferredPrimitiveType. + (KJS::jsAdd): Replaced calls to JSValue::type() with calls to + JSValue::isString(). + (KJS::jsTypeStringForValue): Replaced calls to JSValue::type() + with multiple calls to JSValue::is -- we could make this a + virtual function instead if we want to have faster performance. + (KJS::Machine::privateExecute): Renamed JSImmediate::toTruncatedUInt32 + to JSImmediate::getTruncatedUInt32 for consistency with other functions. + Changed two calls of JSValue::type() to JSValue::isString(). + + * kjs/GetterSetter.cpp: + (KJS::GetterSetter::toPrimitive): Changed to take + PreferredPrimitiveType argument instead of JSType. + (KJS::GetterSetter::isGetterSetter): Added. + * kjs/GetterSetter.h: + + * kjs/JSCell.cpp: + (KJS::JSCell::isString): Added. + (KJS::JSCell::isGetterSetter): Added. + (KJS::JSCell::isObject): Added. + + * kjs/JSCell.h: Eliminated type function. Added isGetterSetter. + Made isString and isObject virtual. Changed toPrimitive to take + PreferredPrimitiveType argument instead of JSType. + (KJS::JSCell::isNumber): Use Heap::isNumber for faster performance. + (KJS::JSValue::isGetterSetter): Added. + (KJS::JSValue::toPrimitive): Changed to take + PreferredPrimitiveType argument instead of JSType. + + * kjs/JSImmediate.h: Removed JSValue::type() and replaced + JSValue::toTruncatedUInt32 with JSValue::getTruncatedUInt32. + (KJS::JSImmediate::isEitherImmediate): Added. + + * kjs/JSNotAnObject.cpp: + (KJS::JSNotAnObject::toPrimitive): Changed to take + PreferredPrimitiveType argument instead of JSType. + * kjs/JSNotAnObject.h: Ditto. + * kjs/JSNumberCell.cpp: + (KJS::JSNumberCell::toPrimitive): Ditto. + * kjs/JSNumberCell.h: + (KJS::JSNumberCell::toInt32): Renamed from fastToInt32. There's no + other "slow" version of this once you have a JSNumberCell, so there's + no need for "fast" in the name. It's a feature that this hides the + base class toInt32, which does the same job less efficiently (and has + an additional ExecState argument). + (KJS::JSNumberCell::toUInt32): Ditto. + + * kjs/JSObject.cpp: + (KJS::callDefaultValueFunction): Use isGetterSetter instead of type. + (KJS::JSObject::getPrimitiveNumber): Use PreferredPrimitiveType. + (KJS::JSObject::defaultValue): Ditto. + (KJS::JSObject::defineGetter): Use isGetterSetter. + (KJS::JSObject::defineSetter): Ditto. + (KJS::JSObject::lookupGetter): Ditto. + (KJS::JSObject::lookupSetter): Ditto. + (KJS::JSObject::toNumber): Use PreferredPrimitiveType. + (KJS::JSObject::toString): Ditto. + (KJS::JSObject::isObject): Added. + + * kjs/JSObject.h: + (KJS::JSObject::inherits): Call the isObject from JSCell; it's now + hidden by our override of isObject. + (KJS::JSObject::getOwnPropertySlotForWrite): Use isGetterSetter + instead of type. + (KJS::JSObject::getOwnPropertySlot): Ditto. + (KJS::JSObject::toPrimitive): Use PreferredPrimitiveType. + + * kjs/JSString.cpp: + (KJS::JSString::toPrimitive): Use PreferredPrimitiveType. + (KJS::JSString::isString): Added. + * kjs/JSString.h: Ditto. + + * kjs/JSValue.h: Removed type(), added isGetterSetter(). Added + PreferredPrimitiveType enum and used it as the argument for the + toPrimitive function. + (KJS::JSValue::getBoolean): Simplified a bit an removed a branch. + + * kjs/collector.cpp: + (KJS::typeName): Changed to use JSCell::is functions instead of + calling JSCell::type. + + * kjs/collector.h: + (KJS::Heap::isNumber): Renamed from fastIsNumber. + + * kjs/nodes.h: Added now-needed include of JSType, since the type + is used here to record types of values in the tree. + + * kjs/operations.cpp: + (KJS::equal): Rewrote to no longer depend on type(). + (KJS::strictEqual): Ditto. + +2008-08-18 Kevin McCullough <kmccullough@apple.com> + + Reviewed by Tim. + + If there are no nodes in a profile all the time should be attributed to + (idle) + + * profiler/Profile.cpp: If ther are no nodes make sure we still process + the head. + (KJS::Profile::forEach): + * profiler/ProfileGenerator.cpp: Remove some useless code. + (KJS::ProfileGenerator::stopProfiling): + +2008-08-18 Alexey Proskuryakov <ap@webkit.org> + + Reviewed by Maciej. + + Make JSGlobalContextRetain/Release actually work. + + * API/JSContextRef.cpp: + (JSGlobalContextRetain): + (JSGlobalContextRelease): + Ref/deref global data to give checking for globalData.refCount() some sense. + + * API/tests/testapi.c: (main): Added a test for this bug. + + * kjs/JSGlobalData.cpp: + (KJS::JSGlobalData::~JSGlobalData): + While checking for memory leaks, found that JSGlobalData::emptyList has changed to + a pointer, but it was not destructed, causing a huge leak in run-webkit-tests --threaded. + +2008-08-17 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej. + + Change the counting of constants so that preincrement and predecrement of + const local variables are considered unexpected loads. + + * kjs/nodes.cpp: + (KJS::PrefixResolveNode::emitCode): + * kjs/nodes.h: + (KJS::ScopeNode::neededConstants): + +2008-08-17 Oliver Hunt <oliver@apple.com> + + Reviewed by Cameron Zwarich. + + <rdar://problem/6150322> In Gmail, a crash occurs at KJS::Machine::privateExecute() when applying list styling to text after a quote had been removed + <https://bugs.webkit.org/show_bug.cgi?id=20386> + + This crash was caused by "depth()" incorrectly determining the scope depth + of a 0 depth function without a full scope chain. Because such a function + would not have an activation the depth function would return the scope depth + of the parent frame, thus triggering an incorrect unwind. Any subsequent + look up that walked the scope chain would result in incorrect behaviour, + leading to a crash or incorrect variable resolution. This can only actually + happen in try...finally statements as that's the only path that can result in + the need to unwind the scope chain, but not force the function to need a + full scope chain. + + The fix is simply to check for this case before attempting to walk the scope chain. + + * VM/Machine.cpp: + (KJS::depth): + (KJS::Machine::throwException): + +2008-08-17 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Maciej. + + Bug 20419: Remove op_jless + <https://bugs.webkit.org/show_bug.cgi?id=20419> + + Remove op_jless, which is rarely used now that we have op_loop_if_less. + + * VM/CodeBlock.cpp: + (KJS::CodeBlock::dump): + * VM/CodeGenerator.cpp: + (KJS::CodeGenerator::emitJumpIfTrue): + * VM/Machine.cpp: + (KJS::Machine::privateExecute): + * VM/Opcode.h: + +2008-08-17 Cameron Zwarich <cwzwarich@uwaterloo.ca> + + Reviewed by Dan Bernstein. + + Fix a typo in r35807 that is also causing build failures for + non-AllInOne builds. + + * kjs/NumberConstructor.cpp: + +2008-08-17 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Cameron Zwarich. + + Made room for a free word in JSCell. + + SunSpider says no change. + + I changed JSCallbackObjectData, Arguments, JSArray, and RegExpObject to + store auxiliary data in a secondary structure. + + I changed InternalFunction to store the function's name in the property + map. + + I changed JSGlobalObjectData to use a virtual destructor, so WebCore's + JSDOMWindowBaseData could inherit from it safely. (It's a strange design + for JSDOMWindowBase to allocate an object that JSGlobalObject deletes, + but that's really our only option, given the size constraint.) + + I also added a bunch of compile-time ASSERTs, and removed lots of comments + in JSObject.h because they were often out of date, and they got in the + way of reading what was actually going on. + + Also renamed JSArray::getLength to JSArray::length, to match our style + guidelines. + +2008-08-16 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Sped up property access for array.length and string.length by adding a + mechanism for returning a temporary value directly instead of returning + a pointer to a function that retrieves the value. + + Also removed some unused cruft from PropertySlot. + + SunSpider says 0.5% - 1.2% faster. + + NOTE: This optimization is not a good idea in general, because it's + actually a pessimization in the case of resolve for assignment, + and it may get in the way of other optimizations in the future. + +2008-08-16 Dan Bernstein <mitz@apple.com> + + Reviewed by Geoffrey Garen. + + Disable dead code stripping in debug builds. + + * Configurations/Base.xcconfig: + * JavaScriptCore.xcodeproj/project.pbxproj: + +2008-08-15 Mark Rowe <mrowe@apple.com> + + Reviewed by Oliver Hunt. + + <rdar://problem/6143072> FastMallocZone's enumeration code makes assumptions about handling of remote memory regions that overlap + + * wtf/FastMalloc.cpp: + (WTF::TCMalloc_Central_FreeList::enumerateFreeObjects): Don't directly compare pointers mapped into the local process with + a pointer that has not been mapped. Instead, calculate a local address for the pointer and compare with that. + (WTF::TCMallocStats::FreeObjectFinder::findFreeObjects): Pass in the remote address of the central free list so that it can + be used when calculating local addresses. + (WTF::TCMallocStats::FastMallocZone::enumerate): Ditto. + +2008-08-15 Mark Rowe <mrowe@apple.com> + + Rubber-stamped by Geoff Garen. + + <rdar://problem/6139914> Please include a _debug version of JavaScriptCore framework + + * Configurations/Base.xcconfig: Factor out the debug-only settings so that they can shared + between the Debug configuration and debug Production variant. + * JavaScriptCore.xcodeproj/project.pbxproj: Enable the debug variant. + +2008-08-15 Mark Rowe <mrowe@apple.com> + + Fix the 64-bit build. + + Add extra cast to avoid warnings about loss of precision when casting from + JSValue* to an integer type. + + * kjs/JSImmediate.h: + (KJS::JSImmediate::intValue): + (KJS::JSImmediate::uintValue): + +2008-08-15 Alexey Proskuryakov <ap@webkit.org> + + Still fixing Windows build. + + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make: Added OpaqueJSString + to yet another place. + +2008-08-15 Alexey Proskuryakov <ap@webkit.org> + + Trying to fix non-Apple builds. + + * ForwardingHeaders/JavaScriptCore/OpaqueJSString.h: Added. + +2008-08-15 Gavin Barraclough <barraclough@apple.com> + + Reviewed by Geoff Garen. + + Allow JSImmediate to hold 31 bit signed integer immediate values. The low two bits of a + JSValue* are a tag, with the tag value 00 indicating the JSValue* is a pointer to a + JSCell. Non-zero tag values used to indicate that the JSValue* is not a real pointer, + but instead holds an immediate value encoded within the pointer. This patch changes the + encoding so both the tag values 01 and 11 indicate the value is a signed integer, allowing + a 31 bit value to be stored. All other immediates are tagged with the value 10, and + distinguished by a secondary tag. + + Roughly +2% on SunSpider. + + * kjs/JSImmediate.h: Encoding of JSImmediates has changed - see comment at head of file for + descption of new layout. + +2008-08-15 Alexey Proskuryakov <ap@webkit.org> + + More build fixes. + + * API/OpaqueJSString.h: Add a namespace to friend declaration to appease MSVC. + * API/JSStringRefCF.h: (JSStringCreateWithCFString) Cast UniChar* to UChar* explicitly. + * JavaScriptCore.exp: Added OpaqueJSString::create(const KJS::UString&) to fix WebCore build. + +2008-08-15 Alexey Proskuryakov <ap@webkit.org> + + Build fix. + + * JavaScriptCore.xcodeproj/project.pbxproj: Marked OpaqueJSString as private + + * kjs/identifier.cpp: + (KJS::Identifier::checkSameIdentifierTable): + * kjs/identifier.h: + (KJS::Identifier::add): + Since checkSameIdentifierTable is exported for debug build's sake, gcc wants it to be + non-inline in release builds, too. + + * JavaScriptCore.exp: Don't export inline OpaqueJSString destructor. + +2008-08-15 Alexey Proskuryakov <ap@webkit.org> + + Reviewed by Geoff Garen. + + JSStringRef is created context-free, but can get linked to one via an identifier table, + breaking an implicit API contract. + + Made JSStringRef point to OpaqueJSString, which is a new string object separate from UString. + + * API/APICast.h: Removed toRef/toJS conversions for JSStringRef, as this is no longer a + simple typecast. + + * kjs/identifier.cpp: + (KJS::Identifier::checkSameIdentifierTable): + * kjs/identifier.h: + (KJS::Identifier::add): + (KJS::UString::checkSameIdentifierTable): + Added assertions to verify that an identifier is not being added to a different JSGlobalData. + + * API/JSObjectRef.cpp: + (OpaqueJSPropertyNameArray::OpaqueJSPropertyNameArray): Changed OpaqueJSPropertyNameArray to + hold JSStringRefs. This is necessary to avoid having to construct (and leak) a new instance + in JSPropertyNameArrayGetNameAtIndex(), now that making a JSStringRef is not just a typecast. + + * API/OpaqueJSString.cpp: Added. + (OpaqueJSString::create): + (OpaqueJSString::ustring): + (OpaqueJSString::identifier): + * API/OpaqueJSString.h: Added. + (OpaqueJSString::create): + (OpaqueJSString::characters): + (OpaqueJSString::length): + (OpaqueJSString::OpaqueJSString): + (OpaqueJSString::~OpaqueJSString): + + * API/JSBase.cpp: + (JSEvaluateScript): + (JSCheckScriptSyntax): + * API/JSCallbackObjectFunctions.h: + (KJS::::getOwnPropertySlot): + (KJS::::put): + (KJS::::deleteProperty): + (KJS::::staticValueGetter): + (KJS::::callbackGetter): + * API/JSStringRef.cpp: + (JSStringCreateWithCharacters): + (JSStringCreateWithUTF8CString): + (JSStringRetain): + (JSStringRelease): + (JSStringGetLength): + (JSStringGetCharactersPtr): + (JSStringGetMaximumUTF8CStringSize): + (JSStringGetUTF8CString): + (JSStringIsEqual): + * API/JSStringRefCF.cpp: + (JSStringCreateWithCFString): + (JSStringCopyCFString): + * API/JSValueRef.cpp: + (JSValueMakeString): + (JSValueToStringCopy): + Updated to use OpaqueJSString. + + * GNUmakefile.am: + * JavaScriptCore.exp: + * JavaScriptCore.pri: + * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + * JavaScriptCoreSources.bkl: + Added OpaqueJSString. + +2008-08-14 Kevin McCullough <kmccullough@apple.com> + + Reviewed by Tim. + + <rdar://problem/6115819> Notify of profile in console + - Profiles now have a unique ID so that they can be linked to the + console message that announces that a profile completed. + + * profiler/HeavyProfile.cpp: + (KJS::HeavyProfile::HeavyProfile): + * profiler/Profile.cpp: + (KJS::Profile::create): + (KJS::Profile::Profile): + * profiler/Profile.h: + (KJS::Profile::uid): + * profiler/ProfileGenerator.cpp: + (KJS::ProfileGenerator::create): + (KJS::ProfileGenerator::ProfileGenerator): + * profiler/ProfileGenerator.h: + * profiler/Profiler.cpp: + (KJS::Profiler::startProfiling): + * profiler/TreeProfile.cpp: + (KJS::TreeProfile::create): + (KJS::TreeProfile::TreeProfile): + * profiler/TreeProfile.h: + +2008-08-13 Geoffrey Garen <ggaren@apple.com> + + Reviewed by Oliver Hunt. + + Nixed a PIC branch from JSObject::getOwnPropertySlot, by forcing + fillGetterProperty, which references a global function pointer, + out-of-line. + + .2% SunSpider speedup, 4.3% access-nbody speedup, 8.7% speedup on a + custom property access benchmark for objects with one property. + + * kjs/JSObject.cpp: + (KJS::JSObject::fillGetterPropertySlot): + +2008-08-13 Alp Toker <alp@nuanti.com> + + Reviewed by Eric Seidel. + + https://bugs.webkit.org/show_bug.cgi?id=20349 + WTF::initializeThreading() fails if threading is already initialized + + Fix threading initialization logic to support cases where + g_thread_init() has already been called elsewhere. + + Resolves database-related crashers reported in several applications. + + * wtf/ThreadingGtk.cpp: + (WTF::initializeThreading): + +2008-08-13 Brad Hughes <bhughes@trolltech.com> + + Reviewed by Simon. + + Fix compiling of QtWebKit in release mode with the Intel C++ Compiler for Linux + + The latest upgrade of the intel compiler allows us to compile all of + Qt with optimizations enabled (yay!). + + * JavaScriptCore.pro: + +2008-08-12 Oliver Hunt <oliver@apple.com> + + Reviewed by Geoff Garen. + + Add peephole optimisation to 'op_not... jfalse...' (eg. if(!...) ) + + This is a very slight win in sunspider, and a fairly substantial win + in hot code that does if(!...), etc. + + * VM/CodeGenerator.cpp: + (KJS::CodeGenerator::retrieveLastUnaryOp): + (KJS::CodeGenerator::rewindBinaryOp): + (KJS::CodeGenerator::rewindUnaryOp): + (KJS::CodeGenerator::emitJumpIfFalse): + * VM/CodeGenerator.h: + +2008-08-12 Dan Bernstein <mitz@apple.com> + + - JavaScriptCore part of <rdar://problem/6121636> + Make fast*alloc() abort() on failure and add "try" variants that + return NULL on failure. + + Reviewed by Darin Adler. + + * JavaScriptCore.exp: Exported tryFastCalloc(). + * VM/RegisterFile.h: + (KJS::RegisterFile::RegisterFile): Removed an ASSERT(). + * kjs/JSArray.cpp: + (KJS::JSArray::putSlowCase): Changed to use tryFastRealloc(). + (KJS::JSArray::increaseVectorLength): Ditto. + * kjs/ustring.cpp: + (KJS::allocChars): Changed to use tryFastMalloc(). + (KJS::reallocChars): Changed to use tryFastRealloc(). + * wtf/FastMalloc.cpp: + (WTF::fastZeroedMalloc): Removed null checking of fastMalloc()'s result + and removed extra call to InvokeNewHook(). + (WTF::tryFastZeroedMalloc): Added. Uses tryFastMalloc(). + (WTF::tryFastMalloc): Renamed fastMalloc() to this. + (WTF::fastMalloc): Added. This version abort()s if allocation fails. + (WTF::tryFastCalloc): Renamed fastCalloc() to this. + (WTF::fastCalloc): Added. This version abort()s if allocation fails. + (WTF::tryFastRealloc): Renamed fastRealloc() to this. + (WTF::fastRealloc): Added. This version abort()s if allocation fails. + (WTF::do_malloc): Made this a function template. When the abortOnFailure + template parameter is set, the function abort()s on failure to allocate. + Otherwise, it sets errno to ENOMEM and returns zero. + (WTF::TCMallocStats::fastMalloc): Defined to abort() on failure. + (WTF::TCMallocStats::tryFastMalloc): Added. Does not abort() on + failure. + (WTF::TCMallocStats::fastCalloc): Defined to abort() on failure. + (WTF::TCMallocStats::tryFastCalloc): Added. Does not abort() on + failure. + (WTF::TCMallocStats::fastRealloc): Defined to abort() on failure. + (WTF::TCMallocStats::tryFastRealloc): Added. Does not abort() on + failure. + * wtf/FastMalloc.h: Declared the "try" variants. + +2008-08-11 Adam Roben <aroben@apple.com> + + Move WTF::notFound into its own header so that it can be used + independently of Vector + + Rubberstamped by Darin Adler. + + * JavaScriptCore.vcproj/WTF/WTF.vcproj: + * JavaScriptCore.xcodeproj/project.pbxproj: + Added NotFound.h to the project. + * wtf/NotFound.h: Added. Moved the notFound constant here... + * wtf/Vector.h: ...from here. + +2008-08-11 Alexey Proskuryakov <ap@webkit.org> + + Reviewed by Mark Rowe. + + <rdar://problem/6130393> REGRESSION: PhotoBooth hangs after launching under TOT Webkit + + * API/JSContextRef.cpp: (JSGlobalContextRelease): Corrected a comment. + + * kjs/collector.cpp: (KJS::Heap::~Heap): Ensure that JSGlobalData is not deleted while + sweeping the heap. + +== Rolled over to ChangeLog-2008-08-10 == |