| 2009-04-21 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Cameron Zwarich and Oliver Hunt. |
| |
| Re-Fixed <rdar://problem/6406045> REGRESSION: Stack overflow on PowerPC on |
| fast/workers/use-machine-stack.html (22531) |
| |
| SunSpider reports no change. |
| |
| Use a larger recursion limit on the main thread (because we can, and |
| there's some evidence that it may improve compatibility), and a smaller |
| recursion limit on secondary threads (because they tend to have smaller |
| stacks). |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::execute): |
| (JSC::Interpreter::prepareForRepeatCall): |
| * interpreter/Interpreter.h: |
| (JSC::): Ditto. I wrote the recursion test slightly funny, so that the |
| common case remains a simple compare to constant. |
| |
| * runtime/ArrayPrototype.cpp: |
| (JSC::arrayProtoFuncToString): |
| (JSC::arrayProtoFuncToLocaleString): |
| (JSC::arrayProtoFuncJoin): Conservatively, set the array recursion limits |
| to the lower, secondary thread limit. We can do something fancier if |
| compatibility moves us, but this seems sufficient for now. |
| |
| 2009-04-21 Geoffrey Garen <ggaren@apple.com> |
| |
| Rubber-stamped by Adam Roben. |
| |
| Disabled one more Mozilla JS test because it fails intermittently on Windows. |
| (See https://bugs.webkit.org/show_bug.cgi?id=25160.) |
| |
| * tests/mozilla/expected.html: |
| |
| 2009-04-21 Adam Roben <aroben@apple.com> |
| |
| Rename JavaScriptCore_debug.dll to JavaScriptCore.dll in the Debug |
| configuration |
| |
| This matches the naming scheme for WebKit.dll, and will be necessary |
| once Safari links against JavaScriptCore.dll. This change also causes |
| run-safari not to fail (because the launcher printed by FindSafari was |
| always looking for JavaScriptCore.dll, never |
| JavaScriptCore_debug.dll). |
| |
| Part of Bug 25305: can't run safari or drt on windows |
| <https://bugs.webkit.org/show_bug.cgi?id=25305> |
| |
| Reviewed by Steve Falkenburg and Sam Weinig. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.vcproj/jsc/jsc.vcproj: |
| * JavaScriptCore.vcproj/testapi/testapi.vcproj: |
| Use $(WebKitDLLConfigSuffix) for naming JavaScriptCore.{dll,lib}. |
| |
| 2009-04-21 Adam Roben <aroben@apple.com> |
| |
| Fix JavaScriptCore build on VC++ Express |
| |
| Reviewed by Steve Falkenburg and Sam Weinig. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Link |
| explicitly against gdi32.lib and oleaut32.lib. |
| |
| 2009-04-21 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Mark Rowe. |
| |
| Tiger crash fix: Put VM tags in their own header file, and fixed up the |
| #ifdefs so they're not used on Tiger. |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * interpreter/RegisterFile.h: |
| (JSC::RegisterFile::RegisterFile): |
| * jit/ExecutableAllocatorFixedVMPool.cpp: |
| (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): |
| * jit/ExecutableAllocatorPosix.cpp: |
| (JSC::ExecutablePool::systemAlloc): |
| * runtime/Collector.cpp: |
| (JSC::allocateBlock): |
| * wtf/VMTags.h: Added. |
| |
| 2009-04-20 Steve Falkenburg <sfalken@apple.com> |
| |
| More Windows build fixes. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore.make: Copy DLLs, PDBs. |
| * JavaScriptCore.vcproj/JavaScriptCore.resources: Added. |
| * JavaScriptCore.vcproj/JavaScriptCore.resources/Info.plist: Added. |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.rc: Added. |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Add version stamping, resource copying. |
| |
| 2009-04-20 Steve Falkenburg <sfalken@apple.com> |
| |
| Separate JavaScriptCore.dll from WebKit.dll. |
| Slight performance improvement or no change on benchmarks. |
| |
| Allows us to break a circular dependency between CFNetwork and WebKit on Windows, |
| and simplifies standalone JavaScriptCore builds. |
| |
| Reviewed by Oliver Hunt. |
| |
| * API/JSBase.h: Export symbols with JS_EXPORT when using MSVC. |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.vcproj/WTF/WTF.vcproj: Build JavaScriptCore as a DLL instead of a static library. |
| * config.h: Specify __declspec(dllexport/dllimport) appropriately when exporting data. |
| * runtime/InternalFunction.h: Specify JS_EXPORTDATA on exported data. |
| * runtime/JSArray.h: Specify JS_EXPORTDATA on exported data. |
| * runtime/JSFunction.h: Specify JS_EXPORTDATA on exported data. |
| * runtime/StringObject.h: Specify JS_EXPORTDATA on exported data. |
| * runtime/UString.h: Specify JS_EXPORTDATA on exported data. |
| |
| 2009-04-20 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Kevin McCullough. |
| |
| Always tag mmaped memory on darwin and clean up #defines |
| now that they are a little bigger. |
| |
| * interpreter/RegisterFile.h: |
| (JSC::RegisterFile::RegisterFile): |
| * jit/ExecutableAllocatorFixedVMPool.cpp: |
| (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): |
| * jit/ExecutableAllocatorPosix.cpp: |
| (JSC::ExecutablePool::systemAlloc): |
| * runtime/Collector.cpp: |
| (JSC::allocateBlock): |
| |
| 2009-04-20 Sam Weinig <sam@webkit.org> |
| |
| Rubber-stamped by Tim Hatcher. |
| |
| Add licenses for xcconfig files. |
| |
| * Configurations/Base.xcconfig: |
| * Configurations/DebugRelease.xcconfig: |
| * Configurations/FeatureDefines.xcconfig: |
| * Configurations/JavaScriptCore.xcconfig: |
| * Configurations/Version.xcconfig: |
| |
| 2009-04-20 Ariya Hidayat <ariya.hidayat@nokia.com> |
| |
| Build fix for Qt port (after r42646). Not reviewed. |
| |
| * wtf/unicode/qt4/UnicodeQt4.h: Added U16_PREV. |
| |
| 2009-04-19 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Darin Adler. |
| |
| Better fix for JSStringCreateWithCFString hardening. |
| |
| * API/JSStringRefCF.cpp: |
| (JSStringCreateWithCFString): |
| |
| 2009-04-19 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Dan Bernstein. |
| |
| Fix for <rdar://problem/5860954> |
| Harden JSStringCreateWithCFString against malformed CFStringRefs. |
| |
| * API/JSStringRefCF.cpp: |
| (JSStringCreateWithCFString): |
| |
| 2009-04-19 David Kilzer <ddkilzer@apple.com> |
| |
| Make FEATURE_DEFINES completely dynamic |
| |
| Reviewed by Darin Adler. |
| |
| Make FEATURE_DEFINES depend on individual ENABLE_FEATURE_NAME |
| variables for each feature, making it possible to remove all |
| knowledge of FEATURE_DEFINES from build-webkit. |
| |
| * Configurations/FeatureDefines.xcconfig: Extract a variable |
| from FEATURE_DEFINES for each feature setting. |
| |
| 2009-04-18 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Dan Bernstein. |
| |
| Fix typo. s/VM_MEMORY_JAVASCRIPT_JIT_REGISTER_FILE/VM_MEMORY_JAVASCRIPT_CORE/ |
| |
| * runtime/Collector.cpp: |
| (JSC::allocateBlock): Fix bozo typo. |
| |
| 2009-04-18 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Anders Carlsson. |
| |
| Fix for <rdar://problem/6801555> Tag JavaScript memory on SnowLeopard |
| |
| * interpreter/RegisterFile.h: |
| (JSC::RegisterFile::RegisterFile): |
| * jit/ExecutableAllocatorFixedVMPool.cpp: |
| (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): |
| * jit/ExecutableAllocatorPosix.cpp: |
| (JSC::ExecutablePool::systemAlloc): |
| * runtime/Collector.cpp: |
| (JSC::allocateBlock): |
| |
| 2009-04-18 Drew Wilson <amw@apple.com> |
| |
| <rdar://problem/6781407> VisiblePosition.characterAfter should return UChar32 |
| |
| Reviewed by Dan Bernstein. |
| |
| * wtf/unicode/icu/UnicodeIcu.h: |
| (WTF::Unicode::hasLineBreakingPropertyComplexContextOrIdeographic): Added. |
| |
| 2009-04-18 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Mark Rowe. |
| |
| Fix for <rdar://problem/5861045> |
| A little bit of hardening for UString. |
| |
| * runtime/UString.cpp: |
| (JSC::concatenate): |
| (JSC::UString::append): |
| |
| 2009-04-18 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Mark Rowe and Dan Bernstein. |
| |
| Fix for <rdar://problem/5861188> |
| A little bit of hardening for Vector. |
| |
| * wtf/Vector.h: |
| (WTF::Vector<T, inlineCapacity>::append): |
| (WTF::Vector<T, inlineCapacity>::insert): |
| |
| 2009-04-17 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| On x86_64, make all JIT-code allocations from a new heap, managed |
| by FixedVMPoolAllocator. This class allocates a single large (2Gb) |
| pool of virtual memory from which all further allocations take place. |
| Since all JIT code is allocated from this pool, we can continue to |
| safely assume (as is already asserted) that it will always be possible |
| to link any JIT-code to JIT-code jumps and calls. |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| Add new file. |
| * jit/ExecutableAllocatorFixedVMPool.cpp: Added. |
| (JSC::FreeListEntry::FreeListEntry): |
| (JSC::AVLTreeAbstractorForFreeList::get_less): |
| (JSC::AVLTreeAbstractorForFreeList::set_less): |
| (JSC::AVLTreeAbstractorForFreeList::get_greater): |
| (JSC::AVLTreeAbstractorForFreeList::set_greater): |
| (JSC::AVLTreeAbstractorForFreeList::get_balance_factor): |
| (JSC::AVLTreeAbstractorForFreeList::set_balance_factor): |
| (JSC::AVLTreeAbstractorForFreeList::null): |
| (JSC::AVLTreeAbstractorForFreeList::compare_key_key): |
| (JSC::AVLTreeAbstractorForFreeList::compare_key_node): |
| (JSC::AVLTreeAbstractorForFreeList::compare_node_node): |
| (JSC::sortFreeListEntriesByPointer): |
| (JSC::sortCommonSizedAllocations): |
| (JSC::FixedVMPoolAllocator::release): |
| (JSC::FixedVMPoolAllocator::reuse): |
| (JSC::FixedVMPoolAllocator::addToFreeList): |
| (JSC::FixedVMPoolAllocator::coalesceFreeSpace): |
| (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): |
| (JSC::FixedVMPoolAllocator::alloc): |
| (JSC::FixedVMPoolAllocator::free): |
| (JSC::ExecutableAllocator::intializePageSize): |
| (JSC::ExecutablePool::systemAlloc): |
| (JSC::ExecutablePool::systemRelease): |
| The new 2Gb heap class! |
| * jit/ExecutableAllocatorPosix.cpp: |
| Disable use of this implementation on x86_64. |
| * wtf/AVLTree.h: |
| Add missing variable initialization. |
| (WTF::::remove): |
| |
| 2009-04-17 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Fix bug where the VM reentry cache would not correctly unroll the cached callframe |
| |
| Fix a check that was intended to mark a cached call as invalid when the callframe could |
| not be constructed. Instead it was just checking that there was a place to put the |
| exception. This eventually results in a non-recoverable RegisterFile starvation. |
| |
| * interpreter/CachedCall.h: |
| (JSC::CachedCall::CachedCall): |
| (JSC::CachedCall::call): add assertion to ensure we don't use a bad callframe |
| |
| 2009-04-17 David Kilzer <ddkilzer@apple.com> |
| |
| Simplify FEATURE_DEFINES definition |
| |
| Reviewed by Darin Adler. |
| |
| This moves FEATURE_DEFINES and its related ENABLE_FEATURE_NAME |
| variables to their own FeatureDefines.xcconfig file. It also |
| extracts a new ENABLE_GEOLOCATION variable so that |
| FEATURE_DEFINES only needs to be defined once. |
| |
| * Configurations/FeatureDefines.xcconfig: Added. |
| * Configurations/JavaScriptCore.xcconfig: Removed definition of |
| ENABLE_SVG_DOM_OBJC_BINDINGS and FEATURE_DEFINES. Added include |
| of FeatureDefines.xcconfig. |
| * JavaScriptCore.xcodeproj/project.pbxproj: Added |
| FeatureDefines.xcconfig file. |
| |
| 2009-04-08 Mihnea Ovidenie <mihnea@adobe.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Bug 25027: JavaScript parseInt wrong on negative numbers |
| <https://bugs.webkit.org/show_bug.cgi?id=25027> |
| |
| When dealing with negative numbers, parseInt should use ceil instead of floor. |
| |
| * runtime/JSGlobalObjectFunctions.cpp: |
| (JSC::globalFuncParseInt): |
| |
| 2009-04-16 Stephanie Lewis <slewis@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| <rdar://problem/6744652> 32-bit to 64-bit: Javascript hash tables double in size |
| |
| Remove perfect hash optimization which removes 1 MB of overhead on 32-bit and almost 2 MB on 64-bit. Removing the optimization was not a regression on SunSpider and the acid 3 test still passes. |
| |
| * create_hash_table: |
| * runtime/Lookup.cpp: |
| (JSC::HashTable::createTable): |
| (JSC::HashTable::deleteTable): |
| * runtime/Lookup.h: |
| (JSC::HashEntry::initialize): |
| (JSC::HashEntry::next): |
| (JSC::HashTable::entry): |
| * runtime/Structure.cpp: |
| (JSC::Structure::getEnumerableNamesFromClassInfoTable): |
| |
| 2009-04-16 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Fix subtle error in optimised VM reentry in Array.sort |
| |
| Basically to ensure we don't accidentally invalidate the cached callframe |
| we should be using the cached callframe rather than our own exec state. |
| While the old behaviour was wrong i have been unable to actually create a |
| test case where anything actually ends up going wrong. |
| |
| * interpreter/CachedCall.h: |
| (JSC::CachedCall::newCallFrame): |
| * runtime/JSArray.cpp: |
| (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): |
| |
| 2009-04-16 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Optimise op_resolve_base |
| |
| If we can statically find a property we are trying to resolve |
| the base of, the base is guaranteed to be the global object. |
| |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::emitResolveBase): |
| |
| 2009-04-16 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Improve performance of read-write-modify operators |
| |
| Implement cross scope optimisation for read-write-modify |
| operators, to avoid unnecessary calls to property resolve |
| helper functions. |
| |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::BytecodeGenerator): |
| (JSC::BytecodeGenerator::emitLoadGlobalObject): |
| (JSC::BytecodeGenerator::emitResolveWithBase): |
| * bytecompiler/BytecodeGenerator.h: |
| |
| 2009-04-16 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Improve performance of remaining array enumeration functions |
| |
| Make use of function entry cache for remaining Array enumeration functions. |
| |
| * runtime/ArrayPrototype.cpp: |
| (JSC::arrayProtoFuncMap): |
| (JSC::arrayProtoFuncEvery): |
| (JSC::arrayProtoFuncForEach): |
| (JSC::arrayProtoFuncSome): |
| |
| 2009-04-15 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Improve performance of Array.sort |
| |
| Cache the VM entry for Array.sort when using a JS comparison function. |
| |
| * runtime/JSArray.cpp: |
| (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): |
| (JSC::JSArray::sort): |
| |
| 2009-04-15 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Bug 25229: Need support for Array.prototype.reduceRight |
| <https://bugs.webkit.org/show_bug.cgi?id=25229> |
| |
| Implement Array.reduceRight |
| |
| * runtime/ArrayPrototype.cpp: |
| (JSC::arrayProtoFuncReduceRight): |
| |
| 2009-04-15 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Bug 25227: Array.filter triggers an assertion when the target array shrinks while being filtered |
| <https://bugs.webkit.org/show_bug.cgi?id=25227> |
| |
| We correct this simply by making the fast array path fall back on the slow path if |
| we ever discover the fast access is unsafe. |
| |
| * runtime/ArrayPrototype.cpp: |
| (JSC::arrayProtoFuncFilter): |
| |
| 2009-04-13 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Bug 25159: Support Array.prototype.reduce |
| <https://bugs.webkit.org/show_bug.cgi?id=25159> |
| |
| Implement Array.prototype.reduce |
| |
| * runtime/ArrayPrototype.cpp: |
| (JSC::arrayProtoFuncReduce): |
| |
| 2009-04-15 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (Build fix). |
| |
| Move CallFrameClosure from inside the Interpreter class to its own file. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * interpreter/CachedCall.h: |
| * interpreter/CallFrameClosure.h: Copied from JavaScriptCore/yarr/RegexJIT.h. |
| (JSC::CallFrameClosure::setArgument): |
| (JSC::CallFrameClosure::resetCallFrame): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::prepareForRepeatCall): |
| * interpreter/Interpreter.h: |
| |
| 2009-04-14 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Bug 25202: Improve performance of repeated callbacks into the VM |
| |
| Add the concept of a CachedCall to native code for use in Array |
| prototype and similar functions where a single callback function |
| is called repeatedly with the same number of arguments. |
| |
| Used Array.prototype.filter as the test function and got a 50% win |
| over a naive non-caching specialised version. This makes the native |
| implementation of Array.prototype.filter faster than the JS one once |
| more. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore.sln: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * interpreter/CachedCall.h: Added. |
| (JSC::CachedCall::CachedCall): |
| (JSC::CachedCall::call): |
| (JSC::CachedCall::setThis): |
| (JSC::CachedCall::setArgument): |
| (JSC::CachedCall::~CachedCall): |
| CachedCall is a wrapper that automates the calling and teardown |
| for a CallFrameClosure |
| * interpreter/CallFrame.h: |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::prepareForRepeatCall): |
| Create the basic entry closure for a function |
| (JSC::Interpreter::execute): |
| A new ::execute method to enter the interpreter from a closure |
| (JSC::Interpreter::endRepeatCall): |
| Clear the entry closure |
| * interpreter/Interpreter.h: |
| (JSC::Interpreter::CallFrameClosure::setArgument): |
| (JSC::Interpreter::CallFrameClosure::resetCallFrame): |
| Helper functions to simplify setting up the closure's callframe |
| * runtime/ArrayPrototype.cpp: |
| (JSC::arrayProtoFuncFilter): |
| |
| 2009-04-14 Xan Lopez <xlopez@igalia.com> |
| |
| Fix the build. |
| |
| Add the yarr headers (and only the headers) to the build, so that |
| RegExp.cpp can compile. The headers are ifdefed out with yarr |
| disabled, so we don't need anything else for now. |
| |
| * GNUmakefile.am: |
| |
| 2009-04-14 Adam Roben <aroben@apple.com> |
| |
| Remove support for profile-guided optimization on Windows |
| |
| Rubber-stamped by Steve Falkenburg. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Removed |
| the Release_PGO configuration. Also let VS re-order the source files |
| list. |
| |
| 2009-04-14 Xan Lopez <xlopez@igalia.com> |
| |
| Unreviewed build fix. |
| |
| * GNUmakefile.am: |
| |
| 2009-04-14 Jan Michael Alonzo <jmalonzo@webkit.org> |
| |
| Gtk build fix when building minidom. Not reviewed. |
| |
| Use C-style comment instead of C++ style since autotools builds |
| minidom using gcc and not g++. |
| |
| * wtf/Platform.h: |
| |
| 2009-04-14 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by NOBODY - speculative build fix. |
| |
| * runtime/RegExp.h: |
| |
| 2009-04-13 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Cap'n Geoff Garen. |
| |
| Yarr! |
| (Yet another regex runtime). |
| |
| Currently disabled by default since the interpreter, whilst awesomely |
| functional, has not been optimized and is likely slower than PCRE, and |
| the JIT, whilst faster than WREC, is presently incomplete and does not |
| fallback to using an interpreter for the cases it cannot handle. |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * assembler/MacroAssemblerX86Common.h: |
| (JSC::MacroAssemblerX86Common::move): |
| (JSC::MacroAssemblerX86Common::swap): |
| (JSC::MacroAssemblerX86Common::signExtend32ToPtr): |
| (JSC::MacroAssemblerX86Common::zeroExtend32ToPtr): |
| (JSC::MacroAssemblerX86Common::branch32): |
| (JSC::MacroAssemblerX86Common::branch16): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::cmpw_im): |
| (JSC::X86Assembler::testw_rr): |
| (JSC::X86Assembler::X86InstructionFormatter::immediate16): |
| * runtime/RegExp.cpp: |
| (JSC::RegExp::RegExp): |
| (JSC::RegExp::~RegExp): |
| (JSC::RegExp::create): |
| (JSC::RegExp::compile): |
| (JSC::RegExp::match): |
| * runtime/RegExp.h: |
| * wtf/Platform.h: |
| * yarr: Added. |
| * yarr/RegexCompiler.cpp: Added. |
| (JSC::Yarr::CharacterClassConstructor::CharacterClassConstructor): |
| (JSC::Yarr::CharacterClassConstructor::reset): |
| (JSC::Yarr::CharacterClassConstructor::append): |
| (JSC::Yarr::CharacterClassConstructor::putChar): |
| (JSC::Yarr::CharacterClassConstructor::isUnicodeUpper): |
| (JSC::Yarr::CharacterClassConstructor::isUnicodeLower): |
| (JSC::Yarr::CharacterClassConstructor::putRange): |
| (JSC::Yarr::CharacterClassConstructor::charClass): |
| (JSC::Yarr::CharacterClassConstructor::addSorted): |
| (JSC::Yarr::CharacterClassConstructor::addSortedRange): |
| (JSC::Yarr::newlineCreate): |
| (JSC::Yarr::digitsCreate): |
| (JSC::Yarr::spacesCreate): |
| (JSC::Yarr::wordcharCreate): |
| (JSC::Yarr::nondigitsCreate): |
| (JSC::Yarr::nonspacesCreate): |
| (JSC::Yarr::nonwordcharCreate): |
| (JSC::Yarr::RegexPatternConstructor::RegexPatternConstructor): |
| (JSC::Yarr::RegexPatternConstructor::~RegexPatternConstructor): |
| (JSC::Yarr::RegexPatternConstructor::reset): |
| (JSC::Yarr::RegexPatternConstructor::assertionBOL): |
| (JSC::Yarr::RegexPatternConstructor::assertionEOL): |
| (JSC::Yarr::RegexPatternConstructor::assertionWordBoundary): |
| (JSC::Yarr::RegexPatternConstructor::atomPatternCharacter): |
| (JSC::Yarr::RegexPatternConstructor::atomBuiltInCharacterClass): |
| (JSC::Yarr::RegexPatternConstructor::atomCharacterClassBegin): |
| (JSC::Yarr::RegexPatternConstructor::atomCharacterClassAtom): |
| (JSC::Yarr::RegexPatternConstructor::atomCharacterClassRange): |
| (JSC::Yarr::RegexPatternConstructor::atomCharacterClassBuiltIn): |
| (JSC::Yarr::RegexPatternConstructor::atomCharacterClassEnd): |
| (JSC::Yarr::RegexPatternConstructor::atomParenthesesSubpatternBegin): |
| (JSC::Yarr::RegexPatternConstructor::atomParentheticalAssertionBegin): |
| (JSC::Yarr::RegexPatternConstructor::atomParenthesesEnd): |
| (JSC::Yarr::RegexPatternConstructor::atomBackReference): |
| (JSC::Yarr::RegexPatternConstructor::copyDisjunction): |
| (JSC::Yarr::RegexPatternConstructor::copyTerm): |
| (JSC::Yarr::RegexPatternConstructor::quantifyAtom): |
| (JSC::Yarr::RegexPatternConstructor::disjunction): |
| (JSC::Yarr::RegexPatternConstructor::regexBegin): |
| (JSC::Yarr::RegexPatternConstructor::regexEnd): |
| (JSC::Yarr::RegexPatternConstructor::regexError): |
| (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): |
| (JSC::Yarr::RegexPatternConstructor::setupDisjunctionOffsets): |
| (JSC::Yarr::RegexPatternConstructor::setupOffsets): |
| (JSC::Yarr::compileRegex): |
| * yarr/RegexCompiler.h: Added. |
| * yarr/RegexInterpreter.cpp: Added. |
| (JSC::Yarr::Interpreter::appendParenthesesDisjunctionContext): |
| (JSC::Yarr::Interpreter::popParenthesesDisjunctionContext): |
| (JSC::Yarr::Interpreter::DisjunctionContext::DisjunctionContext): |
| (JSC::Yarr::Interpreter::DisjunctionContext::operator new): |
| (JSC::Yarr::Interpreter::allocDisjunctionContext): |
| (JSC::Yarr::Interpreter::freeDisjunctionContext): |
| (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::ParenthesesDisjunctionContext): |
| (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::operator new): |
| (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::restoreOutput): |
| (JSC::Yarr::Interpreter::ParenthesesDisjunctionContext::getDisjunctionContext): |
| (JSC::Yarr::Interpreter::allocParenthesesDisjunctionContext): |
| (JSC::Yarr::Interpreter::freeParenthesesDisjunctionContext): |
| (JSC::Yarr::Interpreter::InputStream::InputStream): |
| (JSC::Yarr::Interpreter::InputStream::next): |
| (JSC::Yarr::Interpreter::InputStream::rewind): |
| (JSC::Yarr::Interpreter::InputStream::read): |
| (JSC::Yarr::Interpreter::InputStream::readChecked): |
| (JSC::Yarr::Interpreter::InputStream::reread): |
| (JSC::Yarr::Interpreter::InputStream::prev): |
| (JSC::Yarr::Interpreter::InputStream::getPos): |
| (JSC::Yarr::Interpreter::InputStream::setPos): |
| (JSC::Yarr::Interpreter::InputStream::atStart): |
| (JSC::Yarr::Interpreter::InputStream::atEnd): |
| (JSC::Yarr::Interpreter::InputStream::checkInput): |
| (JSC::Yarr::Interpreter::InputStream::uncheckInput): |
| (JSC::Yarr::Interpreter::testCharacterClass): |
| (JSC::Yarr::Interpreter::tryConsumeCharacter): |
| (JSC::Yarr::Interpreter::checkCharacter): |
| (JSC::Yarr::Interpreter::tryConsumeCharacterClass): |
| (JSC::Yarr::Interpreter::checkCharacterClass): |
| (JSC::Yarr::Interpreter::tryConsumeBackReference): |
| (JSC::Yarr::Interpreter::matchAssertionBOL): |
| (JSC::Yarr::Interpreter::matchAssertionEOL): |
| (JSC::Yarr::Interpreter::matchAssertionWordBoundary): |
| (JSC::Yarr::Interpreter::matchPatternCharacter): |
| (JSC::Yarr::Interpreter::backtrackPatternCharacter): |
| (JSC::Yarr::Interpreter::matchCharacterClass): |
| (JSC::Yarr::Interpreter::backtrackCharacterClass): |
| (JSC::Yarr::Interpreter::matchBackReference): |
| (JSC::Yarr::Interpreter::backtrackBackReference): |
| (JSC::Yarr::Interpreter::recordParenthesesMatch): |
| (JSC::Yarr::Interpreter::resetMatches): |
| (JSC::Yarr::Interpreter::resetAssertionMatches): |
| (JSC::Yarr::Interpreter::parenthesesDoBacktrack): |
| (JSC::Yarr::Interpreter::matchParenthesesOnceBegin): |
| (JSC::Yarr::Interpreter::matchParenthesesOnceEnd): |
| (JSC::Yarr::Interpreter::backtrackParenthesesOnceBegin): |
| (JSC::Yarr::Interpreter::backtrackParenthesesOnceEnd): |
| (JSC::Yarr::Interpreter::matchParentheticalAssertionOnceBegin): |
| (JSC::Yarr::Interpreter::matchParentheticalAssertionOnceEnd): |
| (JSC::Yarr::Interpreter::backtrackParentheticalAssertionOnceBegin): |
| (JSC::Yarr::Interpreter::backtrackParentheticalAssertionOnceEnd): |
| (JSC::Yarr::Interpreter::matchParentheses): |
| (JSC::Yarr::Interpreter::backtrackParentheses): |
| (JSC::Yarr::Interpreter::matchTerm): |
| (JSC::Yarr::Interpreter::backtrackTerm): |
| (JSC::Yarr::Interpreter::matchAlternative): |
| (JSC::Yarr::Interpreter::matchDisjunction): |
| (JSC::Yarr::Interpreter::matchNonZeroDisjunction): |
| (JSC::Yarr::Interpreter::interpret): |
| (JSC::Yarr::Interpreter::Interpreter): |
| (JSC::Yarr::ByteCompiler::ParenthesesStackEntry::ParenthesesStackEntry): |
| (JSC::Yarr::ByteCompiler::ByteCompiler): |
| (JSC::Yarr::ByteCompiler::compile): |
| (JSC::Yarr::ByteCompiler::checkInput): |
| (JSC::Yarr::ByteCompiler::assertionBOL): |
| (JSC::Yarr::ByteCompiler::assertionEOL): |
| (JSC::Yarr::ByteCompiler::assertionWordBoundary): |
| (JSC::Yarr::ByteCompiler::atomPatternCharacter): |
| (JSC::Yarr::ByteCompiler::atomCharacterClass): |
| (JSC::Yarr::ByteCompiler::atomBackReference): |
| (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin): |
| (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin): |
| (JSC::Yarr::ByteCompiler::popParenthesesStack): |
| (JSC::Yarr::ByteCompiler::dumpDisjunction): |
| (JSC::Yarr::ByteCompiler::closeAlternative): |
| (JSC::Yarr::ByteCompiler::atomParenthesesEnd): |
| (JSC::Yarr::ByteCompiler::regexBegin): |
| (JSC::Yarr::ByteCompiler::regexEnd): |
| (JSC::Yarr::ByteCompiler::alterantiveDisjunction): |
| (JSC::Yarr::ByteCompiler::emitDisjunction): |
| (JSC::Yarr::byteCompileRegex): |
| (JSC::Yarr::interpretRegex): |
| * yarr/RegexInterpreter.h: Added. |
| (JSC::Yarr::ByteTerm::): |
| (JSC::Yarr::ByteTerm::ByteTerm): |
| (JSC::Yarr::ByteTerm::BOL): |
| (JSC::Yarr::ByteTerm::CheckInput): |
| (JSC::Yarr::ByteTerm::EOL): |
| (JSC::Yarr::ByteTerm::WordBoundary): |
| (JSC::Yarr::ByteTerm::BackReference): |
| (JSC::Yarr::ByteTerm::AlternativeBegin): |
| (JSC::Yarr::ByteTerm::AlternativeDisjunction): |
| (JSC::Yarr::ByteTerm::AlternativeEnd): |
| (JSC::Yarr::ByteTerm::PatternEnd): |
| (JSC::Yarr::ByteTerm::invert): |
| (JSC::Yarr::ByteTerm::capture): |
| (JSC::Yarr::ByteDisjunction::ByteDisjunction): |
| (JSC::Yarr::BytecodePattern::BytecodePattern): |
| (JSC::Yarr::BytecodePattern::~BytecodePattern): |
| * yarr/RegexJIT.cpp: Added. |
| (JSC::Yarr::RegexGenerator::optimizeAlternative): |
| (JSC::Yarr::RegexGenerator::matchCharacterClassRange): |
| (JSC::Yarr::RegexGenerator::matchCharacterClass): |
| (JSC::Yarr::RegexGenerator::jumpIfNoAvailableInput): |
| (JSC::Yarr::RegexGenerator::jumpIfAvailableInput): |
| (JSC::Yarr::RegexGenerator::checkInput): |
| (JSC::Yarr::RegexGenerator::atEndOfInput): |
| (JSC::Yarr::RegexGenerator::notAtEndOfInput): |
| (JSC::Yarr::RegexGenerator::jumpIfCharEquals): |
| (JSC::Yarr::RegexGenerator::jumpIfCharNotEquals): |
| (JSC::Yarr::RegexGenerator::readCharacter): |
| (JSC::Yarr::RegexGenerator::storeToFrame): |
| (JSC::Yarr::RegexGenerator::loadFromFrame): |
| (JSC::Yarr::RegexGenerator::TermGenerationState::TermGenerationState): |
| (JSC::Yarr::RegexGenerator::TermGenerationState::resetAlternative): |
| (JSC::Yarr::RegexGenerator::TermGenerationState::alternativeValid): |
| (JSC::Yarr::RegexGenerator::TermGenerationState::nextAlternative): |
| (JSC::Yarr::RegexGenerator::TermGenerationState::alternative): |
| (JSC::Yarr::RegexGenerator::TermGenerationState::resetTerm): |
| (JSC::Yarr::RegexGenerator::TermGenerationState::termValid): |
| (JSC::Yarr::RegexGenerator::TermGenerationState::nextTerm): |
| (JSC::Yarr::RegexGenerator::TermGenerationState::term): |
| (JSC::Yarr::RegexGenerator::TermGenerationState::lookaheadTerm): |
| (JSC::Yarr::RegexGenerator::TermGenerationState::isSinglePatternCharacterLookaheadTerm): |
| (JSC::Yarr::RegexGenerator::TermGenerationState::inputOffset): |
| (JSC::Yarr::RegexGenerator::TermGenerationState::jumpToBacktrack): |
| (JSC::Yarr::RegexGenerator::TermGenerationState::setBacktrackGenerated): |
| (JSC::Yarr::RegexGenerator::jumpToBacktrackCheckEmitPending): |
| (JSC::Yarr::RegexGenerator::genertateAssertionBOL): |
| (JSC::Yarr::RegexGenerator::genertateAssertionEOL): |
| (JSC::Yarr::RegexGenerator::matchAssertionWordchar): |
| (JSC::Yarr::RegexGenerator::genertateAssertionWordBoundary): |
| (JSC::Yarr::RegexGenerator::genertatePatternCharacterSingle): |
| (JSC::Yarr::RegexGenerator::genertatePatternCharacterPair): |
| (JSC::Yarr::RegexGenerator::genertatePatternCharacterFixed): |
| (JSC::Yarr::RegexGenerator::genertatePatternCharacterGreedy): |
| (JSC::Yarr::RegexGenerator::genertatePatternCharacterNonGreedy): |
| (JSC::Yarr::RegexGenerator::genertateCharacterClassSingle): |
| (JSC::Yarr::RegexGenerator::genertateCharacterClassFixed): |
| (JSC::Yarr::RegexGenerator::genertateCharacterClassGreedy): |
| (JSC::Yarr::RegexGenerator::genertateCharacterClassNonGreedy): |
| (JSC::Yarr::RegexGenerator::generateParenthesesSingleDisjunctionOneAlternative): |
| (JSC::Yarr::RegexGenerator::generateParenthesesSingle): |
| (JSC::Yarr::RegexGenerator::generateTerm): |
| (JSC::Yarr::RegexGenerator::generateDisjunction): |
| (JSC::Yarr::RegexGenerator::RegexGenerator): |
| (JSC::Yarr::RegexGenerator::generate): |
| (JSC::Yarr::jitCompileRegex): |
| (JSC::Yarr::executeRegex): |
| * yarr/RegexJIT.h: Added. |
| (JSC::Yarr::RegexCodeBlock::RegexCodeBlock): |
| * yarr/RegexParser.h: Added. |
| (JSC::Yarr::): |
| (JSC::Yarr::Parser::): |
| (JSC::Yarr::Parser::CharacterClassParserDelegate::CharacterClassParserDelegate): |
| (JSC::Yarr::Parser::CharacterClassParserDelegate::begin): |
| (JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacterUnescaped): |
| (JSC::Yarr::Parser::CharacterClassParserDelegate::atomPatternCharacter): |
| (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBuiltInCharacterClass): |
| (JSC::Yarr::Parser::CharacterClassParserDelegate::end): |
| (JSC::Yarr::Parser::CharacterClassParserDelegate::assertionWordBoundary): |
| (JSC::Yarr::Parser::CharacterClassParserDelegate::atomBackReference): |
| (JSC::Yarr::Parser::CharacterClassParserDelegate::flush): |
| (JSC::Yarr::Parser::CharacterClassParserDelegate::): |
| (JSC::Yarr::Parser::Parser): |
| (JSC::Yarr::Parser::parseEscape): |
| (JSC::Yarr::Parser::parseAtomEscape): |
| (JSC::Yarr::Parser::parseCharacterClassEscape): |
| (JSC::Yarr::Parser::parseCharacterClass): |
| (JSC::Yarr::Parser::parseParenthesesBegin): |
| (JSC::Yarr::Parser::parseParenthesesEnd): |
| (JSC::Yarr::Parser::parseQuantifier): |
| (JSC::Yarr::Parser::parseTokens): |
| (JSC::Yarr::Parser::parse): |
| (JSC::Yarr::Parser::saveState): |
| (JSC::Yarr::Parser::restoreState): |
| (JSC::Yarr::Parser::atEndOfPattern): |
| (JSC::Yarr::Parser::peek): |
| (JSC::Yarr::Parser::peekIsDigit): |
| (JSC::Yarr::Parser::peekDigit): |
| (JSC::Yarr::Parser::consume): |
| (JSC::Yarr::Parser::consumeDigit): |
| (JSC::Yarr::Parser::consumeNumber): |
| (JSC::Yarr::Parser::consumeOctal): |
| (JSC::Yarr::Parser::tryConsume): |
| (JSC::Yarr::Parser::tryConsumeHex): |
| (JSC::Yarr::parse): |
| * yarr/RegexPattern.h: Added. |
| (JSC::Yarr::CharacterRange::CharacterRange): |
| (JSC::Yarr::): |
| (JSC::Yarr::PatternTerm::): |
| (JSC::Yarr::PatternTerm::PatternTerm): |
| (JSC::Yarr::PatternTerm::BOL): |
| (JSC::Yarr::PatternTerm::EOL): |
| (JSC::Yarr::PatternTerm::WordBoundary): |
| (JSC::Yarr::PatternTerm::invert): |
| (JSC::Yarr::PatternTerm::capture): |
| (JSC::Yarr::PatternTerm::quantify): |
| (JSC::Yarr::PatternAlternative::PatternAlternative): |
| (JSC::Yarr::PatternAlternative::lastTerm): |
| (JSC::Yarr::PatternAlternative::removeLastTerm): |
| (JSC::Yarr::PatternDisjunction::PatternDisjunction): |
| (JSC::Yarr::PatternDisjunction::~PatternDisjunction): |
| (JSC::Yarr::PatternDisjunction::addNewAlternative): |
| (JSC::Yarr::RegexPattern::RegexPattern): |
| (JSC::Yarr::RegexPattern::~RegexPattern): |
| (JSC::Yarr::RegexPattern::reset): |
| (JSC::Yarr::RegexPattern::containsIllegalBackReference): |
| (JSC::Yarr::RegexPattern::newlineCharacterClass): |
| (JSC::Yarr::RegexPattern::digitsCharacterClass): |
| (JSC::Yarr::RegexPattern::spacesCharacterClass): |
| (JSC::Yarr::RegexPattern::wordcharCharacterClass): |
| (JSC::Yarr::RegexPattern::nondigitsCharacterClass): |
| (JSC::Yarr::RegexPattern::nonspacesCharacterClass): |
| (JSC::Yarr::RegexPattern::nonwordcharCharacterClass): |
| |
| 2009-04-13 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (Missed code from last patch). |
| |
| * runtime/InternalFunction.cpp: |
| (JSC::InternalFunction::displayName): |
| (JSC::InternalFunction::calculatedDisplayName): |
| * runtime/InternalFunction.h: |
| |
| 2009-04-13 Francisco Tolmasky <francisco@280north.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| BUG 25171: It should be possible to manually set the name of an anonymous function |
| <https://bugs.webkit.org/show_bug.cgi?id=25171> |
| |
| This change adds the displayName property to functions, which when set overrides the |
| normal name when appearing in the console. |
| |
| * profiler/Profiler.cpp: |
| (JSC::createCallIdentifierFromFunctionImp): Changed call to InternalFunction::name to InternalFunction::calculatedDisplayName |
| * runtime/CommonIdentifiers.h: Added displayName common identifier. |
| * runtime/InternalFunction.cpp: |
| (JSC::InternalFunction::displayName): Access to user settable displayName property |
| (JSC::InternalFunction::calculatedDisplayName): Returns displayName if it exists, if not then the natural name |
| |
| 2009-04-13 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Disabled another JavaScriptCore test because it fails on Windows but |
| not Mac, so it makes the bots red. |
| |
| * tests/mozilla/expected.html: |
| |
| 2009-04-13 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Disabled two JavaScriptCore tests because they fail on Window or Mac but |
| not both, so they make the bots red. |
| |
| * tests/mozilla/expected.html: Updated expected results. |
| |
| 2009-04-09 Ben Murdoch <benm@google.com> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=25091 |
| The Android platform requires threads to be registered with the VM. |
| This patch implements this behaviour inside ThreadingPthreads.cpp. |
| |
| * wtf/ThreadingPthreads.cpp: Add a level above threadEntryPoint that takes care of (un)registering threads with the VM. |
| (WTF::runThreadWithRegistration): register the thread and run entryPoint. Unregister the thread afterwards. |
| (WTF::createThreadInternal): call runThreadWithRegistration instead of entryPoint directly. |
| |
| 2009-04-09 David Kilzer <ddkilzer@apple.com> |
| |
| Reinstating <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings |
| |
| Rolled r42345 back in. The build failure was caused by an |
| internal script which had not been updated the same way that |
| build-webkit was updated. |
| |
| * Configurations/JavaScriptCore.xcconfig: |
| |
| 2009-04-09 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reverting <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings. |
| It broke Mac build, and I don't know how to fix it. |
| |
| * Configurations/JavaScriptCore.xcconfig: |
| |
| 2009-04-09 Xan Lopez <xlopez@igalia.com> |
| |
| Unreviewed build fix. |
| |
| Checking for __GLIBCXX__ being bigger than some date is not enough |
| to get std::tr1, C++0x has to be in use too. Add another check for |
| __GXX_EXPERIMENTAL_CXX0X__. |
| |
| * wtf/TypeTraits.h: |
| |
| 2009-04-08 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Adam Roben. |
| |
| Fix assertion failure in function.apply |
| |
| The result of excess arguments to function.apply is irrelevant |
| so we don't need to provide a result register. We were providing |
| temporary result register but not ref'ing it resulting in an |
| assertion failure. |
| |
| * parser/Nodes.cpp: |
| (JSC::ApplyFunctionCallDotNode::emitBytecode): |
| |
| 2009-04-08 David Kilzer <ddkilzer@apple.com> |
| |
| <rdar://problem/6718589> Option to turn off SVG DOM Objective-C bindings |
| |
| Reviewed by Darin Adler and Maciej Stachowiak. |
| |
| Introduce the ENABLE_SVG_DOM_OBJC_BINDINGS feature define so |
| that SVG DOM Objective-C bindings may be optionally disabled. |
| |
| * Configurations/JavaScriptCore.xcconfig: Added |
| ENABLE_SVG_DOM_OBJC_BINDINGS variable and use it in |
| FEATURE_DEFINES. |
| |
| 2009-04-08 Paul Pedriana <ppedriana@ea.com> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=20422 |
| Allow custom memory allocation control. |
| |
| * wtf/FastAllocBase.h: |
| New added file. Implements allocation base class. |
| * wtf/TypeTraits.h: |
| Augments existing type traits support as needed by FastAllocBase. |
| * wtf/FastMalloc.h: |
| Changed to support FastMalloc match validation. |
| * wtf/FastMalloc.cpp: |
| Changed to support FastMalloc match validation. |
| * wtf/Platform.h: |
| Added ENABLE_FAST_MALLOC_MATCH_VALIDATION; defaults to 0. |
| * GNUmakefile.am: |
| Updated to include added FastAllocBase.h. |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| Updated to include added FastAllocBase.h. |
| * JavaScriptCore.vcproj/WTF/WTF.vcproj: |
| Updated to include added FastAllocBase.h. |
| |
| 2009-04-07 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Improve function.apply performance |
| |
| Jump through a few hoops to improve performance of function.apply in the general case. |
| |
| In the case of zero or one arguments, or if there are only two arguments and the |
| second is an array literal we treat function.apply as function.call. |
| |
| Otherwise we use the new opcodes op_load_varargs and op_call_varargs to do the .apply call |
| without re-entering the virtual machine. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dump): |
| * bytecode/Opcode.h: |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::emitJumpIfNotFunctionApply): |
| (JSC::BytecodeGenerator::emitLoadVarargs): |
| (JSC::BytecodeGenerator::emitCallVarargs): |
| * bytecompiler/BytecodeGenerator.h: |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| * jit/JIT.h: |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallSetupArgs): |
| (JSC::JIT::compileOpCallVarargsSetupArgs): |
| (JSC::JIT::compileOpCallVarargs): |
| (JSC::JIT::compileOpCallVarargsSlowCase): |
| * jit/JITStubs.cpp: |
| (JSC::JITStubs::cti_op_load_varargs): |
| * jit/JITStubs.h: |
| * parser/Grammar.y: |
| * parser/Nodes.cpp: |
| (JSC::ArrayNode::isSimpleArray): |
| (JSC::ArrayNode::toArgumentList): |
| (JSC::CallFunctionCallDotNode::emitBytecode): |
| (JSC::ApplyFunctionCallDotNode::emitBytecode): |
| * parser/Nodes.h: |
| (JSC::ExpressionNode::): |
| (JSC::ApplyFunctionCallDotNode::): |
| * runtime/Arguments.cpp: |
| (JSC::Arguments::copyToRegisters): |
| (JSC::Arguments::fillArgList): |
| * runtime/Arguments.h: |
| (JSC::Arguments::numProvidedArguments): |
| * runtime/FunctionPrototype.cpp: |
| (JSC::FunctionPrototype::addFunctionProperties): |
| * runtime/FunctionPrototype.h: |
| * runtime/JSArray.cpp: |
| (JSC::JSArray::copyToRegisters): |
| * runtime/JSArray.h: |
| * runtime/JSGlobalObject.cpp: |
| (JSC::JSGlobalObject::reset): |
| (JSC::JSGlobalObject::mark): |
| * runtime/JSGlobalObject.h: |
| |
| 2009-04-08 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=25073 |
| JavaScriptCore tests don't run if time zone is not PST |
| |
| * API/tests/testapi.c: |
| (timeZoneIsPST): Added a function that checks whether the time zone is PST, using the same |
| method as functions in DateMath.cpp do for formatting the result. |
| (main): Skip date string format test if the time zone is not PST. |
| |
| 2009-04-07 David Levin <levin@chromium.org> |
| |
| Reviewed by Sam Weinig and Geoff Garen. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=25039 |
| UString refactoring to support UChar* sharing. |
| |
| No change in sunspider perf. |
| |
| * runtime/SmallStrings.cpp: |
| (JSC::SmallStringsStorage::SmallStringsStorage): |
| * runtime/UString.cpp: |
| (JSC::initializeStaticBaseString): |
| (JSC::initializeUString): |
| (JSC::UString::BaseString::isShared): |
| Encapsulate the meaning behind the refcount == 1 checks because |
| this needs to do slightly more when sharing is added. |
| (JSC::concatenate): |
| (JSC::UString::append): |
| (JSC::UString::operator=): |
| * runtime/UString.h: |
| Make m_baseString part of a union to get rid of casts, but make it protected because |
| it is tricky to use it correctly since it is only valid when the Rep is not a BaseString. |
| The void* will be filled in when sharing is added. |
| |
| Add constructors due to the making members protected and it make ensuring proper |
| initialization work better (like in SmallStringsStorage). |
| (JSC::UString::Rep::create): |
| (JSC::UString::Rep::Rep): |
| (JSC::UString::Rep::): |
| (JSC::UString::BaseString::BaseString): |
| (JSC::UString::Rep::setBaseString): |
| (JSC::UString::Rep::baseString): |
| |
| 2009-04-04 Xan Lopez <xlopez@igalia.com> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=25033 |
| dtoa.cpp segfaults with g++ 4.4.0 |
| |
| g++ 4.4.0 seems to be more strict about aliasing rules, so it |
| produces incorrect code if dtoa.cpp is compiled with |
| -fstrict-aliasing (it also emits a ton of warnings, so fair enough |
| I guess). The problem was that we were only casting variables to |
| union types in order to do type punning, but GCC and the C |
| standard require that we actually use a union to store the value. |
| |
| This patch does just that, the code is mostly copied from the dtoa |
| version in GCC: |
| http://gcc.gnu.org/viewcvs/trunk/libjava/classpath/native/fdlibm/dtoa.c?view=markup. |
| |
| * wtf/dtoa.cpp: |
| (WTF::ulp): |
| (WTF::b2d): |
| (WTF::ratio): |
| (WTF::hexnan): |
| (WTF::strtod): |
| (WTF::dtoa): |
| |
| 2009-04-04 Kevin Ollivier <kevino@theolliviers.com> |
| |
| wx build fix for Win port. Build the assembler sources to get missing functions. |
| |
| * JavaScriptCoreSources.bkl: |
| * jscore.bkl: |
| * wtf/Platform.h: |
| |
| 2009-04-02 Darin Adler <darin@apple.com> |
| |
| Reviewed by Kevin Decker. |
| |
| <rdar://problem/6744471> crash in GC due to uninitialized callFunction pointer |
| |
| * runtime/JSGlobalObject.h: |
| (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): Initialize |
| callFunction as we do the other data members that are used in the mark function. |
| |
| 2009-04-02 Yael Aharon <yael.aharon@nokia.com> |
| |
| Reviewed by Simon Hausmann |
| |
| https://bugs.webkit.org/show_bug.cgi?id=24490 |
| |
| Implement WTF::ThreadSpecific in the Qt build using |
| QThreadStorage. |
| |
| * wtf/ThreadSpecific.h: |
| |
| 2009-04-01 Greg Bolsinga <bolsinga@apple.com> |
| |
| Reviewed by Mark Rowe. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=24990 |
| Put SECTORDER_FLAGS into xcconfig files. |
| |
| * Configurations/Base.xcconfig: |
| * Configurations/DebugRelease.xcconfig: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| |
| 2009-03-27 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (Build fix). |
| |
| Fix non-AllInOneFile builds. |
| |
| * bytecompiler/BytecodeGenerator.cpp: |
| |
| 2009-03-27 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Improve performance of Function.prototype.call |
| <https://bugs.webkit.org/show_bug.cgi?id=24907> |
| |
| Optimistically assume that expression.call(..) is going to be a call to |
| Function.prototype.call, and handle it specially to attempt to reduce the |
| degree of VM reentrancy. |
| |
| When everything goes right this removes the vm reentry improving .call() |
| by around a factor of 10. |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dump): |
| * bytecode/Opcode.h: |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::emitJumpIfNotFunctionCall): |
| * bytecompiler/BytecodeGenerator.h: |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| * parser/Grammar.y: |
| * parser/Nodes.cpp: |
| (JSC::CallFunctionCallDotNode::emitBytecode): |
| * parser/Nodes.h: |
| (JSC::CallFunctionCallDotNode::): |
| * runtime/FunctionPrototype.cpp: |
| (JSC::FunctionPrototype::addFunctionProperties): |
| * runtime/FunctionPrototype.h: |
| * runtime/JSGlobalObject.cpp: |
| (JSC::JSGlobalObject::reset): |
| (JSC::JSGlobalObject::mark): |
| * runtime/JSGlobalObject.h: |
| |
| 2009-03-27 Laszlo Gombos <laszlo.1.gombos@nokia.com> |
| |
| Reviewed by Darin Adler. |
| |
| Bug 24884: Include strings.h for strcasecmp() |
| https://bugs.webkit.org/show_bug.cgi?id=24884 |
| |
| * runtime/DateMath.cpp: Reversed previous change including strings.h |
| * wtf/StringExtras.h: Include strings.h here is available |
| |
| 2009-03-26 Adam Roben <aroben@apple.com> |
| |
| Copy testapi.js to $WebKitOutputDir on Windows |
| |
| Part of Bug 24856: run-javascriptcore-tests should run testapi on |
| Windows |
| <https://bugs.webkit.org/show_bug.cgi?id=24856> |
| |
| This matches what Mac does, which will help once we enable running |
| testapi from run-javascriptcore-tests on Windows. |
| |
| Reviewed by Steve Falkenburg. |
| |
| * JavaScriptCore.vcproj/testapi/testapi.vcproj: Copy testapi.js next |
| to testapi.exe. |
| |
| 2009-03-25 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Fix exception handling for instanceof in the interpreter. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| |
| 2009-03-25 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Fixed <rdar://problem/6724011> Write to freed memory in JSC::Label::deref |
| when reloading http://helpme.att.net/speedtest/ |
| |
| * bytecompiler/BytecodeGenerator.h: Reversed the declaration order for |
| m_labelScopes and m_labels to reverse their destruction order. |
| m_labelScopes has references to memory within m_labels, so its destructor |
| needs to run first. |
| |
| 2009-03-24 Eli Fidler <eli.fidler@torchmobile.com> |
| |
| Reviewed by George Staikos. |
| |
| Correct warnings which in some environments are treated as errors. |
| |
| * wtf/dtoa.cpp: |
| (WTF::b2d): |
| (WTF::d2b): |
| (WTF::strtod): |
| (WTF::dtoa): |
| |
| 2009-03-24 Kevin Ollivier <kevino@theolliviers.com> |
| |
| Reviewed by Darin Adler. |
| |
| Explicitly define HAVE_LANGINFO_H on Darwin. Fixes the wx build bot jscore |
| test failure. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=24780 |
| |
| * wtf/Platform.h: |
| |
| 2009-03-23 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Fix className() for API defined class |
| |
| * API/JSCallbackObjectFunctions.h: |
| (JSC::::className): |
| * API/tests/testapi.c: |
| (EmptyObject_class): |
| (main): |
| * API/tests/testapi.js: |
| |
| 2009-03-23 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Make testapi assertions run in release builds, so that testapi actually |
| works in a release build. |
| |
| Many of the testapi assertions have side effects that are necessary, and |
| given testapi is a testing program, perf impact of an assertion is not |
| important, so it makes sense to apply the assertions in release builds |
| anyway. |
| |
| * API/tests/testapi.c: |
| (EvilExceptionObject_hasInstance): |
| |
| 2009-03-23 David Kilzer <ddkilzer@apple.com> |
| |
| Provide JavaScript exception information after slow script timeout |
| |
| Reviewed by Oliver Hunt. |
| |
| * runtime/Completion.cpp: |
| (JSC::evaluate): Set the exception object as the Completion |
| object's value for slow script timeouts. This is used in |
| WebCore when reporting the exception. |
| * runtime/ExceptionHelpers.cpp: |
| (JSC::InterruptedExecutionError::toString): Added. Provides a |
| description message for the exception when it is reported. |
| |
| 2009-03-23 Gustavo Noronha Silva <gns@gnome.org> and Thadeu Lima de Souza Cascardo <cascardo@holoscopio.com> |
| |
| Reviewed by Adam Roben. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=24674 |
| Crashes in !PLATFORM(MAC)'s formatLocaleDate, in very specific situations |
| |
| Make sure strftime never returns 2-digits years to avoid ambiguity |
| and a crash. We wrap this new code option in HAVE_LANGINFO_H, |
| since it is apparently not available in all platforms. |
| |
| * runtime/DatePrototype.cpp: |
| (JSC::formatLocaleDate): |
| * wtf/Platform.h: |
| |
| 2009-03-22 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Fix exception handling in API |
| |
| We can't just use the ExecState exception slot for returning exceptions |
| from class introspection functions provided through the API as many JSC |
| functions will explicitly clear the ExecState exception when returning. |
| |
| * API/JSCallbackObjectFunctions.h: |
| (JSC::JSCallbackObject<Base>::getOwnPropertySlot): |
| (JSC::JSCallbackObject<Base>::put): |
| (JSC::JSCallbackObject<Base>::deleteProperty): |
| (JSC::JSCallbackObject<Base>::construct): |
| (JSC::JSCallbackObject<Base>::hasInstance): |
| (JSC::JSCallbackObject<Base>::call): |
| (JSC::JSCallbackObject<Base>::toNumber): |
| (JSC::JSCallbackObject<Base>::toString): |
| (JSC::JSCallbackObject<Base>::staticValueGetter): |
| (JSC::JSCallbackObject<Base>::callbackGetter): |
| * API/tests/testapi.c: |
| (MyObject_hasProperty): |
| (MyObject_getProperty): |
| (MyObject_setProperty): |
| (MyObject_deleteProperty): |
| (MyObject_callAsFunction): |
| (MyObject_callAsConstructor): |
| (MyObject_hasInstance): |
| (EvilExceptionObject_hasInstance): |
| (EvilExceptionObject_convertToType): |
| (EvilExceptionObject_class): |
| (main): |
| * API/tests/testapi.js: |
| (EvilExceptionObject.hasInstance): |
| (EvilExceptionObject.toNumber): |
| (EvilExceptionObject.toStringExplicit): |
| |
| 2009-03-21 Cameron Zwarich <cwzwarich@uwaterloo.ca> |
| |
| Reviewed by Oliver Hunt. |
| |
| Bug 20049: testapi failure: MyObject - 0 should be NaN but instead is 1. |
| <https://bugs.webkit.org/show_bug.cgi?id=20049> |
| <rdar://problem/6079127> |
| |
| In this case, the test is wrong. According to the ECMA spec, subtraction |
| uses ToNumber, not ToPrimitive. Change the test to match the spec. |
| |
| * API/tests/testapi.js: |
| |
| 2009-03-21 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Ensure that JSObjectMakeFunction doesn't produce incorrect line numbers. |
| |
| Also make test api correctly propagate failures. |
| |
| * API/tests/testapi.c: |
| (main): |
| * runtime/FunctionConstructor.cpp: |
| (JSC::constructFunction): |
| |
| 2009-03-21 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Mark Rowe. |
| |
| Improve testapi by making it report failures in a way we can pick up |
| from our test scripts. |
| |
| * API/tests/testapi.c: |
| (assertEqualsAsBoolean): |
| (assertEqualsAsNumber): |
| (assertEqualsAsUTF8String): |
| (assertEqualsAsCharactersPtr): |
| (main): |
| * API/tests/testapi.js: |
| (pass): |
| (fail): |
| (shouldBe): |
| (shouldThrow): |
| |
| 2009-03-20 Norbert Leser <norbert.leser@nokia.com> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=24535 |
| |
| Fixes missing line terminator character (;) after macro call. |
| It is common practice to add the trailing ";" where macros are substituted |
| and not where they are defined with #define. |
| This change is consistent with other macro declarations across webkit, |
| and it also solves compilation failure with symbian compilers. |
| |
| * runtime/UString.cpp: |
| * wtf/Assertions.h: |
| |
| 2009-03-20 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Fixed a JavaScriptCore crash on the Windows buildbot. |
| |
| * bytecompiler/BytecodeGenerator.h: Reduced the AST recursion limit. |
| Apparently, Windows has small stacks. |
| |
| 2009-03-20 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| A little cleanup in the RegisterFile code. |
| |
| Moved large inline functions out of the class declaration, to make it |
| more readable. |
| |
| Switched over to using the roundUpAllocationSize function to avoid |
| duplicate code and subtle bugs. |
| |
| Renamed m_maxCommitted to m_commitEnd, to match m_end. |
| |
| Renamed allocationSize to commitSize because it's the chunk size for |
| committing memory, not allocating memory. |
| |
| SunSpider reports no change. |
| |
| * interpreter/RegisterFile.h: |
| (JSC::RegisterFile::RegisterFile): |
| (JSC::RegisterFile::shrink): |
| (JSC::RegisterFile::grow): |
| * jit/ExecutableAllocator.h: |
| (JSC::roundUpAllocationSize): |
| |
| 2009-03-19 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Fixed <rdar://problem/6033712> -- a little bit of hardening in the Collector. |
| |
| SunSpider reports no change. I also verified in the disassembly that |
| we end up with a single compare to constant. |
| |
| * runtime/Collector.cpp: |
| (JSC::Heap::heapAllocate): |
| |
| 2009-03-19 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Cameron Zwarich and Oliver Hunt. |
| |
| Fixed <rdar://problem/6406045> REGRESSION: Stack overflow on PowerPC on |
| fast/workers/use-machine-stack.html (22531) |
| |
| Dialed down the re-entry allowance to 64 (from 128). |
| |
| On a 512K stack, this leaves about 64K for other code on the stack while |
| JavaScript is running. Not perfect, but it solves our crash on PPC. |
| |
| Different platforms may want to dial this down even more. |
| |
| Also, substantially shrunk BytecodeGenerator. Since we allocate one on |
| the stack in order to throw a stack overflow exception -- well, let's |
| just say the old code had an appreciation for irony. |
| |
| SunSpider reports no change. |
| |
| * bytecompiler/BytecodeGenerator.h: |
| * interpreter/Interpreter.h: |
| (JSC::): |
| |
| 2009-03-19 Cameron Zwarich <cwzwarich@uwaterloo.ca> |
| |
| Reviewed by Oliver Hunt. |
| |
| Bug 24350: REGRESSION: Safari 4 breaks SPAW wysiwyg editor multiple instances |
| <https://bugs.webkit.org/show_bug.cgi?id=24350> |
| <rdar://problem/6674182> |
| |
| The SPAW editor's JavaScript assumes that toString() on a function |
| constructed with the Function constructor produces a function with |
| a newline after the opening brace. |
| |
| * runtime/FunctionConstructor.cpp: |
| (JSC::constructFunction): Add a newline after the opening brace of the |
| function's source code. |
| |
| 2009-03-19 Cameron Zwarich <cwzwarich@uwaterloo.ca> |
| |
| Reviewed by Geoff Garen. |
| |
| Bug 23771: REGRESSION (r36016): JSObjectHasProperty freezes on global class without kJSClassAttributeNoAutomaticPrototype |
| <https://bugs.webkit.org/show_bug.cgi?id=23771> |
| <rdar://problem/6561016> |
| |
| * API/tests/testapi.c: |
| (main): Add a test for this bug. |
| * runtime/JSGlobalObject.cpp: |
| (JSC::JSGlobalObject::resetPrototype): Don't set the prototype of the |
| last object in the prototype chain to the object prototype when the |
| object prototype is already the last object in the prototype chain. |
| |
| 2009-03-19 Timothy Hatcher <timothy@apple.com> |
| |
| <rdar://problem/6687342> -[WebView scheduleInRunLoop:forMode:] has no affect on timers |
| |
| Reviewed by Darin Adler. |
| |
| * wtf/Platform.h: Added HAVE_RUNLOOP_TIMER for PLATFORM(MAC). |
| |
| 2009-03-19 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Fixed <rdar://problem/6279213> Regular expression run-time complexity |
| limit too low for long inputs (21485) |
| |
| I raised PCRE's "matchLimit" (limit on backtracking) by an order of |
| magnitude. This fixes all the reported examples of timing out on legitimate |
| regular expression matches. |
| |
| In my testing on a Core Duo MacBook Pro, the longest you can get stuck |
| trying to match a string is still under 1s, so this seems like a safe change. |
| |
| I can think of a number of better solutions that are more complicated, |
| but this is a good improvement for now. |
| |
| * pcre/pcre_exec.cpp: |
| |
| 2009-03-19 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixed <rdar://problem/6603562> REGRESSION (Safari 4): regular expression |
| pattern size limit lower than Safari 3.2, other browsers, breaks SAP (14873) |
| |
| Bumped the pattern size limit to 1MB, and standardized it between PCRE |
| and WREC. (Empirical testing says that we can easily compile a 1MB regular |
| expression without risking a hang. Other browsers support bigger regular |
| expressions, but also hang.) |
| |
| SunSpider reports no change. |
| |
| I started with a patch posted to Bugzilla by Erik Corry (erikcorry@google.com). |
| |
| * pcre/pcre_internal.h: |
| (put3ByteValue): |
| (get3ByteValue): |
| (put3ByteValueAndAdvance): |
| (putLinkValueAllowZero): |
| (getLinkValueAllowZero): Made PCRE's "LINK_SIZE" (the number of bytes |
| used to record jumps between bytecodes) 3, to accomodate larger potential |
| jumps. Bumped PCRE's "MAX_PATTERN_SIZE" to 1MB. (Technically, at this |
| LINK_SIZE, we can support even larger patterns, but we risk a hang during |
| compilation, and it's not clear that such large patterns are important |
| on the web.) |
| |
| * wrec/WREC.cpp: |
| (JSC::WREC::Generator::compileRegExp): Match PCRE's maximum pattern size, |
| to avoid quirks between platforms. |
| |
| 2009-03-18 Ada Chan <adachan@apple.com> |
| |
| Rolling out r41818 since it broke the windows build. |
| Error: ..\..\runtime\DatePrototype.cpp(30) : fatal error C1083: Cannot open include file: 'langinfo.h': No such file or directory |
| |
| * runtime/DatePrototype.cpp: |
| (JSC::formatLocaleDate): |
| |
| 2009-03-17 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| <rdar://problem/6692138> REGRESSION (Safari 4): Incorrect function return value when using IE "try ... finally" memory leak work-around (24654) |
| <https://bugs.webkit.org/show_bug.cgi?id=24654> |
| |
| If the return value for a function is in a local register we need |
| to copy it before executing any finalisers, otherwise it is possible |
| for the finaliser to clobber the result. |
| |
| * bytecompiler/BytecodeGenerator.h: |
| (JSC::BytecodeGenerator::hasFinaliser): |
| * parser/Nodes.cpp: |
| (JSC::ReturnNode::emitBytecode): |
| |
| 2009-03-17 Kevin Ollivier <kevino@theolliviers.com> |
| |
| Reviewed by Mark Rowe. |
| |
| Move BUILDING_ON_* defines into Platform.h to make them available to other ports. |
| Also tweak the defines so that they work with the default values set by |
| AvailabilityMacros.h. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=24630 |
| |
| * JavaScriptCorePrefix.h: |
| * wtf/Platform.h: |
| |
| 2009-03-15 Simon Fraser <simon.fraser@apple.com> |
| |
| Revert r41718 because it broke DumpRenderTree on Tiger. |
| |
| * JavaScriptCorePrefix.h: |
| * wtf/Platform.h: |
| |
| 2009-03-15 Kevin Ollivier <kevino@theolliviers.com> |
| |
| Non-Apple Mac ports build fix. Move defines for the BUILDING_ON_ macros into |
| Platform.h so that they're defined for all ports building on Mac, and tweak |
| the definitions of those macros based on Mark Rowe's suggestions to accomodate |
| cases where the values may not be <= to the .0 release for that version. |
| |
| * JavaScriptCorePrefix.h: |
| * wtf/Platform.h: |
| |
| 2009-03-13 Mark Rowe <mrowe@apple.com> |
| |
| Rubber-stamped by Dan Bernstein. |
| |
| Take advantage of the ability of recent versions of Xcode to easily switch the active |
| architecture. |
| |
| * Configurations/DebugRelease.xcconfig: |
| |
| 2009-03-13 Mark Rowe <mrowe@apple.com> |
| |
| Reviewed by David Kilzer. |
| |
| Prevent AllInOneFile.cpp and ProfileGenerator.cpp from rebuilding unnecessarily when |
| switching between building in Xcode and via build-webkit. |
| |
| build-webkit passes FEATURE_DEFINES to xcodebuild, resulting in it being present in the |
| Derived Sources build settings. When building in Xcode, this setting isn't present so |
| Xcode reruns the script build phases. This results in a new version of TracingDtrace.h |
| being generated, and the files that include it being rebuilt. |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: Don't regenerate TracingDtrace.h if it is |
| already newer than the input file. |
| |
| 2009-03-13 Norbert Leser <norbert.leser@nokia.com> |
| |
| Reviewed by Darin Adler. |
| |
| Resolved name conflict with globally defined tzname in Symbian. |
| Replaced with different name instead of using namespace qualifier |
| (appeared to be less clumsy). |
| |
| * runtime/DateMath.cpp: |
| |
| 2009-03-12 Mark Rowe <mrowe@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| <rdar://problem/6548446> TCMalloc_SystemRelease should use madvise rather than re-mmaping span of pages |
| |
| * wtf/FastMalloc.cpp: |
| (WTF::mergeDecommittedStates): If either of the spans has been released to the system, release the other |
| span as well so that the flag in the merged span is accurate. |
| * wtf/Platform.h: |
| * wtf/TCSystemAlloc.cpp: Track decommitted spans when using MADV_FREE_REUSABLE / MADV_FREE_REUSE. |
| (TCMalloc_SystemRelease): Use madvise with MADV_FREE_REUSABLE when it is available. |
| (TCMalloc_SystemCommit): Use madvise with MADV_FREE_REUSE when it is available. |
| * wtf/TCSystemAlloc.h: |
| |
| 2009-03-12 Adam Treat <adam.treat@torchmobile.com> |
| |
| Reviewed by NOBODY (Build fix). |
| |
| Include string.h for strlen usage. |
| |
| * wtf/Threading.cpp: |
| |
| 2009-03-12 David Kilzer <ddkilzer@apple.com> |
| |
| Add NO_RETURN attribute to runInteractive() when not using readline |
| |
| Reviewed by Darin Adler. |
| |
| * jsc.cpp: |
| (runInteractive): If the readline library is not used, this method |
| will never return, thus the NO_RETURN attribute is needed to prevent |
| a gcc warning. |
| |
| 2009-03-12 Adam Roben <aroben@apple.com> |
| |
| Adopt setThreadNameInternal on Windows |
| |
| Also changed a Windows-only assertion about thread name length to an |
| all-platform log message. |
| |
| Reviewed by Adam Treat. |
| |
| * wtf/Threading.cpp: |
| (WTF::createThread): Warn if the thread name is longer than 31 |
| characters, as Visual Studio will truncate names longer than that |
| length. |
| |
| * wtf/ThreadingWin.cpp: |
| (WTF::setThreadNameInternal): Renamed from setThreadName and changed |
| to always operate on the current thread. |
| (WTF::initializeThreading): Changed to use setThreadNameInternal. |
| (WTF::createThreadInternal): Removed call to setThreadName. This is |
| now handled by threadEntryPoint and setThreadNameInternal. |
| |
| 2009-03-11 David Kilzer <ddkilzer@apple.com> |
| |
| Clarify comments regarding order of FEATURE_DEFINES |
| |
| Rubber-stamped by Mark Rowe. |
| |
| * Configurations/JavaScriptCore.xcconfig: Added warning about |
| the consequences when FEATURE_DEFINES are not kept in sync. |
| |
| 2009-03-11 Dan Bernstein <mitz@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| - WTF support for fixing <rdar://problem/3919124> Thai text selection |
| in Safari is incorrect |
| |
| * wtf/unicode/icu/UnicodeIcu.h: |
| (WTF::Unicode::hasLineBreakingPropertyComplexContext): Added. Returns |
| whether the character has Unicode line breaking property value SA |
| ("Complex Context"). |
| * wtf/unicode/qt4/UnicodeQt4.h: |
| (WTF::Unicode::hasLineBreakingPropertyComplexContext): Added an |
| implementation that always returns false. |
| |
| 2009-03-11 Darin Adler <darin@apple.com> |
| |
| Reviewed by Mark Rowe. |
| |
| Give threads names on platforms with pthread_setname_np. |
| |
| * wtf/Threading.cpp: |
| (WTF::NewThreadContext::NewThreadContext): Initialize thread name. |
| (WTF::threadEntryPoint): Call setThreadNameInternal. |
| (WTF::createThread): Pass thread name. |
| |
| * wtf/Threading.h: Added new comments, setThreadNameInternal. |
| |
| * wtf/ThreadingGtk.cpp: |
| (WTF::setThreadNameInternal): Added. Empty. |
| * wtf/ThreadingNone.cpp: |
| (WTF::setThreadNameInternal): Added. Empty. |
| * wtf/ThreadingPthreads.cpp: |
| (WTF::setThreadNameInternal): Call pthread_setname_np when available. |
| * wtf/ThreadingQt.cpp: |
| (WTF::setThreadNameInternal): Added. Empty. |
| * wtf/ThreadingWin.cpp: |
| (WTF::setThreadNameInternal): Added. Empty. |
| |
| 2009-03-11 Adam Roben <aroben@apple.com> |
| |
| Change the Windows implementation of ThreadSpecific to use functions |
| instead of extern globals |
| |
| This will make it easier to export ThreadSpecific from WebKit. |
| |
| Reviewed by John Sullivan. |
| |
| * API/JSBase.cpp: |
| (JSEvaluateScript): |
| Touched this file to force ThreadSpecific.h to be copied into |
| $WebKitOutputDir. |
| |
| * wtf/ThreadSpecific.h: Replaced g_tls_key_count with tlsKeyCount() |
| and g_tls_keys with tlsKeys(). |
| |
| (WTF::::ThreadSpecific): |
| (WTF::::~ThreadSpecific): |
| (WTF::::get): |
| (WTF::::set): |
| (WTF::::destroy): |
| Updated to use the new functions. |
| |
| * wtf/ThreadSpecificWin.cpp: |
| (WTF::tlsKeyCount): |
| (WTF::tlsKeys): |
| Added. |
| |
| (WTF::ThreadSpecificThreadExit): Changed to use the new functions. |
| |
| 2009-03-10 Cameron Zwarich <cwzwarich@uwaterloo.ca> |
| |
| Reviewed by Geoff Garen. |
| |
| Bug 24291: REGRESSION (r38635): Single line JavaScript comment prevents HTML button click handler execution |
| <https://bugs.webkit.org/show_bug.cgi?id=24291> |
| <rdar://problem/6663472> |
| |
| Add an extra newline to the end of the body of the program text constructed |
| by the Function constructor for parsing. This allows single line comments to |
| be handled correctly by the parser. |
| |
| * runtime/FunctionConstructor.cpp: |
| (JSC::constructFunction): |
| |
| 2009-03-09 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Bug 24447: REGRESSION (r41508): Google Maps does not complete initialization |
| <rdar://problem/6657774> |
| |
| r41508 actually exposed a pre-existing bug where we were not invalidating the result |
| register cache at jump targets. This causes problems when condition loads occur in an |
| expression -- namely through the ?: and || operators. This patch corrects these issues |
| by marking the target of all forward jumps as being a jump target, and then clears the |
| result register cache when ever it starts generating code for a targeted instruction. |
| |
| I do not believe it is possible to cause this class of failure outside of a single |
| expression, and expressions only provide forward branches, so this should resolve this |
| entire class of bug. That said i've included a test case that gets as close as possible |
| to hitting this bug with a back branch, to hopefully prevent anyone from introducing the |
| problem in future. |
| |
| * assembler/AbstractMacroAssembler.h: |
| (JSC::AbstractMacroAssembler::Label::isUsed): |
| (JSC::AbstractMacroAssembler::Label::used): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::JmpDst::JmpDst): |
| (JSC::X86Assembler::JmpDst::isUsed): |
| (JSC::X86Assembler::JmpDst::used): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| |
| 2009-03-09 David Levin <levin@chromium.org> |
| |
| Reviewed by Darin Adler. |
| |
| Bug 23175: String and UString should be able to share a UChar* buffer. |
| <https://bugs.webkit.org/show_bug.cgi?id=23175> |
| |
| Add CrossThreadRefCounted. |
| |
| * wtf/CrossThreadRefCounted.h: Added. |
| (WTF::CrossThreadRefCounted::create): |
| (WTF::CrossThreadRefCounted::isShared): |
| (WTF::CrossThreadRefCounted::dataAccessMustBeThreadSafe): |
| (WTF::CrossThreadRefCounted::mayBePassedToAnotherThread): |
| (WTF::CrossThreadRefCounted::CrossThreadRefCounted): |
| (WTF::CrossThreadRefCounted::~CrossThreadRefCounted): |
| (WTF::CrossThreadRefCounted::ref): |
| (WTF::CrossThreadRefCounted::deref): |
| (WTF::CrossThreadRefCounted::release): |
| (WTF::CrossThreadRefCounted::copy): |
| (WTF::CrossThreadRefCounted::threadSafeDeref): |
| * wtf/RefCounted.h: |
| * wtf/Threading.h: |
| (WTF::ThreadSafeSharedBase::ThreadSafeSharedBase): |
| (WTF::ThreadSafeSharedBase::derefBase): |
| (WTF::ThreadSafeShared::ThreadSafeShared): |
| (WTF::ThreadSafeShared::deref): |
| |
| 2009-03-09 Laszlo Gombos <laszlo.1.gombos@nokia.com> |
| |
| Reviewed by George Staikos. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=24353 |
| Allow to overrule default build options for Qt build. |
| |
| * JavaScriptCore.pri: Allow to overrule ENABLE_JIT |
| |
| 2009-03-08 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (build fix). |
| |
| Build fix. |
| |
| * runtime/ArrayPrototype.cpp: |
| (JSC::arrayProtoFuncConcat): |
| |
| 2009-03-01 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Bug 24268: RuntimeArray is not a fully implemented JSArray |
| <https://bugs.webkit.org/show_bug.cgi?id=24268> |
| |
| Don't cast a type to JSArray, just because it reportsArray as a supertype |
| in the JS type system. Doesn't appear feasible to create a testcase |
| unfortunately as setting up the failure conditions requires internal access |
| to JSC not present in DRT. |
| |
| * runtime/ArrayPrototype.cpp: |
| (JSC::arrayProtoFuncConcat): |
| |
| 2009-03-06 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| When preforming an op_mov, preserve any existing register mapping. |
| |
| ~0.5% progression on v8 tests x86-64. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| |
| 2009-03-05 Simone Fiorentino <simone.fiorentino@consulenti.fastweb.it> |
| |
| Bug 24382: request to add SH4 platform |
| |
| <https://bugs.webkit.org/show_bug.cgi?id=24382> |
| |
| Reviewed by David Kilzer. |
| |
| * wtf/Platform.h: Added support for SH4 platform. |
| |
| 2009-03-05 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Writes of constant values to SF registers should be made with direct memory |
| writes where possible, rather than moving the value via a hardware register. |
| |
| ~3% win on SunSpider tests on x86, ~1.5% win on v8 tests on x86-64. |
| |
| * assembler/MacroAssemblerX86_64.h: |
| (JSC::MacroAssemblerX86_64::storePtr): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::movq_i32m): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| |
| 2009-03-05 Mark Rowe <mrowe@apple.com> |
| |
| Fix the build. |
| |
| Sprinkle "static" around NumberConstructor.cpp in order to please the compiler. |
| |
| * runtime/NumberConstructor.cpp: |
| (JSC::numberConstructorNaNValue): |
| (JSC::numberConstructorNegInfinity): |
| (JSC::numberConstructorPosInfinity): |
| (JSC::numberConstructorMaxValue): |
| (JSC::numberConstructorMinValue): |
| |
| 2009-03-04 Mark Rowe <mrowe@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| <rdar://problem/6354858> FastMallocZone's enumeration code reports fragmented administration space |
| |
| The handling of MALLOC_ADMIN_REGION_RANGE_TYPE in FastMalloc's zone was incorrect. It was attempting |
| to record the memory containing and individual span as an administrative region, when all memory |
| allocated via MetaDataAlloc should in fact be recorded. This was causing memory regions allocated |
| via MetaDataAlloc to appear as "VM_ALLOCATE ?" in vmmap output. They are now correctly reported as |
| "MALLOC_OTHER" regions associated with the JavaScriptCore FastMalloc zone. |
| |
| Memory is allocated via MetaDataAlloc from two locations: PageHeapAllocator, and TCMalloc_PageMap{2,3}. |
| These two cases are handled differently. |
| |
| PageHeapAllocator is extended to keep a linked list of memory regions that it has allocated. The |
| first object in an allocated region contains the link to the previously allocated region. To record |
| the administrative regions of a PageHeapAllocator we can simply walk the linked list and record |
| each allocated region we encounter. |
| |
| TCMalloc_PageMaps allocate memory via MetaDataAlloc to store each level of the radix tree. To record |
| the administrative regions of a TCMalloc_PageMap we walk the tree and record the storage used for nodes |
| at each position rather than the nodes themselves. |
| |
| A small performance improvement is achieved by coalescing adjacent memory regions inside the PageMapMemoryUsageRecorder |
| so that fewer calls in to the range recorder are necessary. We further reduce the number of calls to the |
| range recorder by aggregating the in-use ranges of a given memory region into a local buffer before recording |
| them with a single call. A similar approach is also used by AdminRegionRecorder. |
| |
| * wtf/FastMalloc.cpp: |
| (WTF::PageHeapAllocator::Init): |
| (WTF::PageHeapAllocator::New): |
| (WTF::PageHeapAllocator::recordAdministrativeRegions): |
| (WTF::TCMallocStats::FreeObjectFinder::isFreeObject): |
| (WTF::TCMallocStats::PageMapMemoryUsageRecorder::~PageMapMemoryUsageRecorder): |
| (WTF::TCMallocStats::PageMapMemoryUsageRecorder::recordPendingRegions): |
| (WTF::TCMallocStats::PageMapMemoryUsageRecorder::visit): |
| (WTF::TCMallocStats::AdminRegionRecorder::AdminRegionRecorder): |
| (WTF::TCMallocStats::AdminRegionRecorder::recordRegion): |
| (WTF::TCMallocStats::AdminRegionRecorder::visit): |
| (WTF::TCMallocStats::AdminRegionRecorder::recordPendingRegions): |
| (WTF::TCMallocStats::AdminRegionRecorder::~AdminRegionRecorder): |
| (WTF::TCMallocStats::FastMallocZone::enumerate): |
| (WTF::TCMallocStats::FastMallocZone::FastMallocZone): |
| (WTF::TCMallocStats::FastMallocZone::init): |
| * wtf/TCPageMap.h: |
| (TCMalloc_PageMap2::visitValues): |
| (TCMalloc_PageMap2::visitAllocations): |
| (TCMalloc_PageMap3::visitValues): |
| (TCMalloc_PageMap3::visitAllocations): |
| |
| 2009-03-04 Antti Koivisto <antti@apple.com> |
| |
| Reviewed by Dave Hyatt. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=24359 |
| Repaint throttling mechanism |
| |
| Set ENABLE_REPAINT_THROTTLING to 0 by default. |
| |
| * wtf/Platform.h: |
| |
| 2009-03-03 David Kilzer <ddkilzer@apple.com> |
| |
| <rdar://problem/6581203> WebCore and WebKit should install the same set of headers during installhdrs phase as build phase |
| |
| Reviewed by Mark Rowe. |
| |
| * Configurations/Base.xcconfig: Defined REAL_PLATFORM_NAME based |
| on PLATFORM_NAME to work around the missing definition on Tiger. |
| Updated HAVE_DTRACE to use REAL_PLATFORM_NAME. |
| |
| 2009-03-03 Kevin McCullough <kmccullough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| <rdar://problem/6639110> console.profile() doesn't work without a title |
| |
| * profiler/Profiler.cpp: |
| (JSC::Profiler::startProfiling): assert if there is not title to ensure |
| we don't start profiling without one. |
| |
| 2009-03-02 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Mark Rowe. |
| |
| Enable Geolocation (except on Tiger and Leopard). |
| |
| * Configurations/JavaScriptCore.xcconfig: |
| |
| 2009-03-01 David Kilzer <ddkilzer@apple.com> |
| |
| <rdar://problem/6635688> Move HAVE_DTRACE check to Base.xcconfig |
| |
| Reviewed by Mark Rowe. |
| |
| * Configurations/Base.xcconfig: Set HAVE_DTRACE Xcode variable |
| based on PLATFORM_NAME and MAC_OS_X_VERSION_MAJOR. Also define |
| it as a preprocessor macro by modifying |
| GCC_PREPROCESSOR_DEFINITIONS. |
| * JavaScriptCore.xcodeproj/project.pbxproj: Changed "Generate |
| DTrace header" script phase to check for HAVE_DTRACE instead of |
| MACOSX_DEPLOYMENT_TARGET. |
| * wtf/Platform.h: Removed definition of HAVE_DTRACE macro since |
| it's defined in Base.xcconfig now. |
| |
| 2009-03-01 Horia Olaru <olaru@adobe.com> |
| |
| By looking in grammar.y there are only a few types of statement nodes |
| on which the debugger should stop. |
| |
| Removed isBlock and isLoop virtual calls. No need to emit debug hooks in |
| the "statementListEmitCode" method as long as the necessary hooks can be |
| added in each "emitCode". |
| |
| https://bugs.webkit.org/show_bug.cgi?id=21073 |
| |
| Reviewed by Kevin McCullough. |
| |
| * parser/Nodes.cpp: |
| (JSC::ConstStatementNode::emitBytecode): |
| (JSC::statementListEmitCode): |
| (JSC::EmptyStatementNode::emitBytecode): |
| (JSC::ExprStatementNode::emitBytecode): |
| (JSC::VarStatementNode::emitBytecode): |
| (JSC::IfNode::emitBytecode): |
| (JSC::IfElseNode::emitBytecode): |
| (JSC::DoWhileNode::emitBytecode): |
| (JSC::WhileNode::emitBytecode): |
| (JSC::ForNode::emitBytecode): |
| (JSC::ForInNode::emitBytecode): |
| (JSC::ContinueNode::emitBytecode): |
| (JSC::BreakNode::emitBytecode): |
| (JSC::ReturnNode::emitBytecode): |
| (JSC::WithNode::emitBytecode): |
| (JSC::SwitchNode::emitBytecode): |
| (JSC::LabelNode::emitBytecode): |
| (JSC::ThrowNode::emitBytecode): |
| (JSC::TryNode::emitBytecode): |
| * parser/Nodes.h: |
| |
| 2009-02-26 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Fix bug #23614. Switches on double precision values were incorrectly |
| truncating the scrutinee value. E.g.: |
| |
| switch (1.1) { case 1: print("FAIL"); } |
| |
| Was resulting in FAIL. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| * jit/JITStubs.cpp: |
| (JSC::JITStubs::cti_op_switch_imm): |
| |
| 2009-02-26 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Integer Immediate representation need not be canonical in x86 JIT code. |
| On x86-64 we already have loosened the requirement that the int immediate |
| representation in canonical, we should bring x86 into line. |
| |
| This patch is a minor (~0.5%) improvement on sunspider & v8-tests, and |
| should reduce memory footoprint (reduces JIT code size). |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::compileOpStrictEq): |
| (JSC::JIT::privateCompileSlowCases): |
| * jit/JIT.h: |
| (JSC::JIT::emitJumpIfImmediateNumber): |
| (JSC::JIT::emitJumpIfNotImmediateNumber): |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): |
| (JSC::JIT::compileBinaryArithOp): |
| |
| 2009-02-26 Carol Szabo <carol.szabo@nokia.com> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=24099 |
| ARM Compiler Warnings in pcre_exec.cpp |
| |
| * pcre/pcre_exec.cpp: |
| (match): |
| |
| 2009-02-25 Cameron Zwarich <cwzwarich@uwaterloo.ca> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Bug 24086: Regression (r40993): WebKit crashes after logging in to lists.zenbe |
| <https://bugs.webkit.org/show_bug.cgi?id=24086> |
| <rdar://problem/6625111> |
| |
| The numeric sort optimization in r40993 generated bytecode for a function |
| without generating JIT code. This breaks an assumption in some parts of |
| the JIT's function calling logic that the presence of a CodeBlock implies |
| the existence of JIT code. |
| |
| In order to fix this, we simply generate JIT code whenever we check whether |
| a function is a numeric sort function. This only incurs an additional cost |
| in the case when the function is a numeric sort function, in which case it |
| is not expensive to generate JIT code for it. |
| |
| * runtime/ArrayPrototype.cpp: |
| (JSC::isNumericCompareFunction): |
| |
| 2009-02-25 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| Fixed <rdar://problem/6611174> REGRESSION (r36701): Unable to select |
| messages on hotmail (24052) |
| |
| The bug was that for-in enumeration used a cached prototype chain without |
| validating that it was up-to-date. |
| |
| This led me to refactor prototype chain caching so it was easier to work |
| with and harder to get wrong. |
| |
| After a bit of inlining, this patch is performance-neutral on SunSpider |
| and the v8 benchmarks. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::tryCachePutByID): |
| (JSC::Interpreter::tryCacheGetByID): |
| * jit/JITStubs.cpp: |
| (JSC::JITStubs::tryCachePutByID): |
| (JSC::JITStubs::tryCacheGetByID): |
| (JSC::JITStubs::cti_op_get_by_id_proto_list): Use the new refactored goodness. See |
| lines beginning with "-" and smile. |
| |
| * runtime/JSGlobalObject.h: |
| (JSC::Structure::prototypeForLookup): A shout out to const. |
| |
| * runtime/JSPropertyNameIterator.h: |
| (JSC::JSPropertyNameIterator::next): We can use a pointer comparison to |
| see if our cached structure chain is equal to the object's structure chain, |
| since in the case of a cache hit, we share references to the same structure |
| chain. |
| |
| * runtime/Operations.h: |
| (JSC::countPrototypeChainEntriesAndCheckForProxies): Use the new refactored |
| goodness. |
| |
| * runtime/PropertyNameArray.h: |
| (JSC::PropertyNameArray::PropertyNameArray): |
| (JSC::PropertyNameArray::setShouldCache): |
| (JSC::PropertyNameArray::shouldCache): Renamed "cacheable" to "shouldCache" |
| to communicate that the client is specifying a recommendation, not a |
| capability. |
| |
| * runtime/Structure.cpp: |
| (JSC::Structure::Structure): No need to initialize a RefPtr. |
| (JSC::Structure::getEnumerablePropertyNames): Moved some code into helper |
| functions. |
| |
| (JSC::Structure::prototypeChain): New centralized accessor for a prototype |
| chain. Revalidates on every access, since the objects in the prototype |
| chain may have mutated. |
| |
| (JSC::Structure::isValid): Helper function for revalidating a cached |
| prototype chain. |
| |
| (JSC::Structure::getEnumerableNamesFromPropertyTable): |
| (JSC::Structure::getEnumerableNamesFromClassInfoTable): Factored out of |
| getEnumerablePropertyNames. |
| |
| * runtime/Structure.h: |
| |
| * runtime/StructureChain.cpp: |
| (JSC::StructureChain::StructureChain): |
| * runtime/StructureChain.h: |
| (JSC::StructureChain::create): No need for structureChainsAreEqual, since |
| we use pointer equality now. Refactored StructureChain to make a little |
| more sense and eliminate special cases for null prototypes. |
| |
| 2009-02-25 Steve Falkenburg <sfalken@apple.com> |
| |
| Use timeBeginPeriod to enable timing resolution greater than 16ms in command line jsc for Windows. |
| Allows more accurate reporting of benchmark times via command line jsc.exe. Doesn't affect WebKit's use of JavaScriptCore. |
| |
| Reviewed by Adam Roben. |
| |
| * jsc.cpp: |
| (main): |
| |
| 2009-02-24 Geoffrey Garen <ggaren@apple.com> |
| |
| Build fix? |
| |
| * GNUmakefile.am: |
| |
| 2009-02-24 Mark Rowe <mrowe@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| <rdar://problem/6259220> Rename AVAILABLE_AFTER_WEBKIT_VERSION_3_1 (etc.) to match the other macros |
| |
| * API/JSBasePrivate.h: |
| * API/JSContextRef.h: |
| * API/JSObjectRef.h: |
| * API/WebKitAvailability.h: |
| |
| 2009-02-23 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Next step in splitting JIT functionality out of the Interpreter class: |
| Moved vptr storage from Interpreter to JSGlobalData, so it could be shared |
| between Interpreter and JITStubs, and moved the *Trampoline JIT stubs |
| into the JITStubs class. Also added a VPtrSet class to encapsulate vptr |
| hacks during JSGlobalData initialization. |
| |
| SunSpider says 0.4% faster. Meh. |
| |
| * JavaScriptCore.exp: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::Interpreter): |
| (JSC::Interpreter::tryCacheGetByID): |
| (JSC::Interpreter::privateExecute): |
| * interpreter/Interpreter.h: |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| (JSC::JIT::compileCTIMachineTrampolines): |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCall): |
| (JSC::JIT::compileOpCallSlowCase): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| * jit/JITStubs.cpp: |
| (JSC::JITStubs::JITStubs): |
| (JSC::JITStubs::tryCacheGetByID): |
| (JSC::JITStubs::cti_vm_dontLazyLinkCall): |
| (JSC::JITStubs::cti_op_get_by_val): |
| (JSC::JITStubs::cti_op_get_by_val_byte_array): |
| (JSC::JITStubs::cti_op_put_by_val): |
| (JSC::JITStubs::cti_op_put_by_val_array): |
| (JSC::JITStubs::cti_op_put_by_val_byte_array): |
| (JSC::JITStubs::cti_op_is_string): |
| * jit/JITStubs.h: |
| (JSC::JITStubs::ctiArrayLengthTrampoline): |
| (JSC::JITStubs::ctiStringLengthTrampoline): |
| (JSC::JITStubs::ctiVirtualCallPreLink): |
| (JSC::JITStubs::ctiVirtualCallLink): |
| (JSC::JITStubs::ctiVirtualCall): |
| * runtime/ArrayPrototype.cpp: |
| (JSC::arrayProtoFuncPop): |
| (JSC::arrayProtoFuncPush): |
| * runtime/FunctionPrototype.cpp: |
| (JSC::functionProtoFuncApply): |
| * runtime/JSArray.h: |
| (JSC::isJSArray): |
| * runtime/JSByteArray.h: |
| (JSC::asByteArray): |
| (JSC::isJSByteArray): |
| * runtime/JSCell.h: |
| * runtime/JSFunction.h: |
| * runtime/JSGlobalData.cpp: |
| (JSC::VPtrSet::VPtrSet): |
| (JSC::JSGlobalData::JSGlobalData): |
| (JSC::JSGlobalData::create): |
| (JSC::JSGlobalData::sharedInstance): |
| * runtime/JSGlobalData.h: |
| * runtime/JSString.h: |
| (JSC::isJSString): |
| * runtime/Operations.h: |
| (JSC::jsLess): |
| (JSC::jsLessEq): |
| * wrec/WREC.cpp: |
| (JSC::WREC::Generator::compileRegExp): |
| |
| 2009-02-23 Csaba Osztrogonac <oszi@inf.u-szeged.hu> |
| |
| Reviewed by Oliver Hunt. |
| |
| Bug 23787: Allow JIT to generate SSE2 code if using GCC |
| <https://bugs.webkit.org/show_bug.cgi?id=23787> |
| |
| GCC version of the cpuid check. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::isSSE2Present): previous assembly code fixed. |
| |
| 2009-02-23 David Levin <levin@chromium.org> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| Bug 24047: Need to simplify nested if's in WorkerRunLoop::runInMode |
| <https://bugs.webkit.org/show_bug.cgi?id=24047> |
| |
| * wtf/MessageQueue.h: |
| (WTF::MessageQueue::infiniteTime): |
| Allows for one to call waitForMessageFilteredWithTimeout and wait forever. |
| |
| (WTF::MessageQueue::alwaysTruePredicate): |
| (WTF::MessageQueue::waitForMessage): |
| Made waitForMessage call waitForMessageFilteredWithTimeout, so that there is less |
| duplicate code. |
| |
| (WTF::MessageQueue::waitForMessageFilteredWithTimeout): |
| |
| * wtf/ThreadingQt.cpp: |
| (WTF::ThreadCondition::timedWait): |
| * wtf/ThreadingWin.cpp: |
| (WTF::ThreadCondition::timedWait): |
| Made these two implementations consistent with the pthread and gtk implementations. |
| Currently, the time calculations would overflow when passed large values. |
| |
| 2009-02-23 Jeremy Moskovich <jeremy@chromium.org> |
| |
| Reviewed by Adam Roben. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=24096 |
| PLATFORM(MAC)->PLATFORM(CF) since we want to use the CF functions in Chrome on OS X. |
| |
| * wtf/CurrentTime.cpp: |
| |
| 2009-02-22 Geoffrey Garen <ggaren@apple.com> |
| |
| Build fix? |
| |
| * GNUmakefile.am: |
| |
| 2009-02-22 Geoffrey Garen <ggaren@apple.com> |
| |
| Build fix. |
| |
| * GNUmakefile.am: |
| |
| 2009-02-22 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Next step in splitting JIT functionality out of the Interpreter class: |
| Created a JITStubs class and renamed Interpreter::cti_* to JITStubs::cti_*. |
| |
| Also, moved timeout checking into its own class, located in JSGlobalData, |
| so both the Interpreter and the JIT could have access to it. |
| |
| * JavaScriptCore.exp: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.scons: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * JavaScriptCoreSources.bkl: |
| * interpreter/CallFrame.h: |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::Interpreter): |
| (JSC::Interpreter::privateExecute): |
| * interpreter/Interpreter.h: |
| * interpreter/Register.h: |
| * jit/JIT.cpp: |
| (JSC::): |
| (JSC::JIT::emitTimeoutCheck): |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::compileFastArithSlow_op_lshift): |
| (JSC::JIT::compileFastArithSlow_op_rshift): |
| (JSC::JIT::compileFastArithSlow_op_bitand): |
| (JSC::JIT::compileFastArithSlow_op_mod): |
| (JSC::JIT::compileFastArith_op_mod): |
| (JSC::JIT::compileFastArithSlow_op_post_inc): |
| (JSC::JIT::compileFastArithSlow_op_post_dec): |
| (JSC::JIT::compileFastArithSlow_op_pre_inc): |
| (JSC::JIT::compileFastArithSlow_op_pre_dec): |
| (JSC::JIT::compileFastArith_op_add): |
| (JSC::JIT::compileFastArith_op_mul): |
| (JSC::JIT::compileFastArith_op_sub): |
| (JSC::JIT::compileBinaryArithOpSlowCase): |
| (JSC::JIT::compileFastArithSlow_op_add): |
| (JSC::JIT::compileFastArithSlow_op_mul): |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCall): |
| (JSC::JIT::compileOpCallSlowCase): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::compilePutByIdHotPath): |
| (JSC::JIT::compileGetByIdSlowCase): |
| (JSC::JIT::compilePutByIdSlowCase): |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::patchGetByIdSelf): |
| (JSC::JIT::patchPutByIdReplace): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| (JSC::JIT::privateCompileGetByIdSelf): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdChain): |
| (JSC::JIT::privateCompilePutByIdReplace): |
| * jit/JITStubs.cpp: |
| (JSC::JITStubs::tryCachePutByID): |
| (JSC::JITStubs::tryCacheGetByID): |
| (JSC::JITStubs::cti_op_convert_this): |
| (JSC::JITStubs::cti_op_end): |
| (JSC::JITStubs::cti_op_add): |
| (JSC::JITStubs::cti_op_pre_inc): |
| (JSC::JITStubs::cti_timeout_check): |
| (JSC::JITStubs::cti_register_file_check): |
| (JSC::JITStubs::cti_op_loop_if_less): |
| (JSC::JITStubs::cti_op_loop_if_lesseq): |
| (JSC::JITStubs::cti_op_new_object): |
| (JSC::JITStubs::cti_op_put_by_id_generic): |
| (JSC::JITStubs::cti_op_get_by_id_generic): |
| (JSC::JITStubs::cti_op_put_by_id): |
| (JSC::JITStubs::cti_op_put_by_id_second): |
| (JSC::JITStubs::cti_op_put_by_id_fail): |
| (JSC::JITStubs::cti_op_get_by_id): |
| (JSC::JITStubs::cti_op_get_by_id_second): |
| (JSC::JITStubs::cti_op_get_by_id_self_fail): |
| (JSC::JITStubs::cti_op_get_by_id_proto_list): |
| (JSC::JITStubs::cti_op_get_by_id_proto_list_full): |
| (JSC::JITStubs::cti_op_get_by_id_proto_fail): |
| (JSC::JITStubs::cti_op_get_by_id_array_fail): |
| (JSC::JITStubs::cti_op_get_by_id_string_fail): |
| (JSC::JITStubs::cti_op_instanceof): |
| (JSC::JITStubs::cti_op_del_by_id): |
| (JSC::JITStubs::cti_op_mul): |
| (JSC::JITStubs::cti_op_new_func): |
| (JSC::JITStubs::cti_op_call_JSFunction): |
| (JSC::JITStubs::cti_op_call_arityCheck): |
| (JSC::JITStubs::cti_vm_dontLazyLinkCall): |
| (JSC::JITStubs::cti_vm_lazyLinkCall): |
| (JSC::JITStubs::cti_op_push_activation): |
| (JSC::JITStubs::cti_op_call_NotJSFunction): |
| (JSC::JITStubs::cti_op_create_arguments): |
| (JSC::JITStubs::cti_op_create_arguments_no_params): |
| (JSC::JITStubs::cti_op_tear_off_activation): |
| (JSC::JITStubs::cti_op_tear_off_arguments): |
| (JSC::JITStubs::cti_op_profile_will_call): |
| (JSC::JITStubs::cti_op_profile_did_call): |
| (JSC::JITStubs::cti_op_ret_scopeChain): |
| (JSC::JITStubs::cti_op_new_array): |
| (JSC::JITStubs::cti_op_resolve): |
| (JSC::JITStubs::cti_op_construct_JSConstruct): |
| (JSC::JITStubs::cti_op_construct_NotJSConstruct): |
| (JSC::JITStubs::cti_op_get_by_val): |
| (JSC::JITStubs::cti_op_get_by_val_byte_array): |
| (JSC::JITStubs::cti_op_resolve_func): |
| (JSC::JITStubs::cti_op_sub): |
| (JSC::JITStubs::cti_op_put_by_val): |
| (JSC::JITStubs::cti_op_put_by_val_array): |
| (JSC::JITStubs::cti_op_put_by_val_byte_array): |
| (JSC::JITStubs::cti_op_lesseq): |
| (JSC::JITStubs::cti_op_loop_if_true): |
| (JSC::JITStubs::cti_op_negate): |
| (JSC::JITStubs::cti_op_resolve_base): |
| (JSC::JITStubs::cti_op_resolve_skip): |
| (JSC::JITStubs::cti_op_resolve_global): |
| (JSC::JITStubs::cti_op_div): |
| (JSC::JITStubs::cti_op_pre_dec): |
| (JSC::JITStubs::cti_op_jless): |
| (JSC::JITStubs::cti_op_not): |
| (JSC::JITStubs::cti_op_jtrue): |
| (JSC::JITStubs::cti_op_post_inc): |
| (JSC::JITStubs::cti_op_eq): |
| (JSC::JITStubs::cti_op_lshift): |
| (JSC::JITStubs::cti_op_bitand): |
| (JSC::JITStubs::cti_op_rshift): |
| (JSC::JITStubs::cti_op_bitnot): |
| (JSC::JITStubs::cti_op_resolve_with_base): |
| (JSC::JITStubs::cti_op_new_func_exp): |
| (JSC::JITStubs::cti_op_mod): |
| (JSC::JITStubs::cti_op_less): |
| (JSC::JITStubs::cti_op_neq): |
| (JSC::JITStubs::cti_op_post_dec): |
| (JSC::JITStubs::cti_op_urshift): |
| (JSC::JITStubs::cti_op_bitxor): |
| (JSC::JITStubs::cti_op_new_regexp): |
| (JSC::JITStubs::cti_op_bitor): |
| (JSC::JITStubs::cti_op_call_eval): |
| (JSC::JITStubs::cti_op_throw): |
| (JSC::JITStubs::cti_op_get_pnames): |
| (JSC::JITStubs::cti_op_next_pname): |
| (JSC::JITStubs::cti_op_push_scope): |
| (JSC::JITStubs::cti_op_pop_scope): |
| (JSC::JITStubs::cti_op_typeof): |
| (JSC::JITStubs::cti_op_is_undefined): |
| (JSC::JITStubs::cti_op_is_boolean): |
| (JSC::JITStubs::cti_op_is_number): |
| (JSC::JITStubs::cti_op_is_string): |
| (JSC::JITStubs::cti_op_is_object): |
| (JSC::JITStubs::cti_op_is_function): |
| (JSC::JITStubs::cti_op_stricteq): |
| (JSC::JITStubs::cti_op_nstricteq): |
| (JSC::JITStubs::cti_op_to_jsnumber): |
| (JSC::JITStubs::cti_op_in): |
| (JSC::JITStubs::cti_op_push_new_scope): |
| (JSC::JITStubs::cti_op_jmp_scopes): |
| (JSC::JITStubs::cti_op_put_by_index): |
| (JSC::JITStubs::cti_op_switch_imm): |
| (JSC::JITStubs::cti_op_switch_char): |
| (JSC::JITStubs::cti_op_switch_string): |
| (JSC::JITStubs::cti_op_del_by_val): |
| (JSC::JITStubs::cti_op_put_getter): |
| (JSC::JITStubs::cti_op_put_setter): |
| (JSC::JITStubs::cti_op_new_error): |
| (JSC::JITStubs::cti_op_debug): |
| (JSC::JITStubs::cti_vm_throw): |
| * jit/JITStubs.h: |
| (JSC::): |
| * runtime/JSFunction.h: |
| * runtime/JSGlobalData.cpp: |
| (JSC::JSGlobalData::JSGlobalData): |
| * runtime/JSGlobalData.h: |
| * runtime/JSGlobalObject.cpp: |
| * runtime/JSGlobalObject.h: |
| * runtime/TimeoutChecker.cpp: Copied from interpreter/Interpreter.cpp. |
| (JSC::TimeoutChecker::TimeoutChecker): |
| (JSC::TimeoutChecker::reset): |
| (JSC::TimeoutChecker::didTimeOut): |
| * runtime/TimeoutChecker.h: Copied from interpreter/Interpreter.h. |
| (JSC::TimeoutChecker::setTimeoutInterval): |
| (JSC::TimeoutChecker::ticksUntilNextCheck): |
| (JSC::TimeoutChecker::start): |
| (JSC::TimeoutChecker::stop): |
| |
| 2009-02-20 Gustavo Noronha Silva <gns@gnome.org> |
| |
| Unreviewed build fix after r41100. |
| |
| * GNUmakefile.am: |
| |
| 2009-02-20 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Mark Rowe. |
| |
| <rdar://problem/6606660> 2==null returns true in 64bit jit |
| |
| Code for op_eq_null and op_neq_null was incorrectly performing |
| a 32bit compare, which truncated the type tag from an integer |
| immediate, leading to incorrect behaviour. |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::setPtr): |
| * assembler/MacroAssemblerX86_64.h: |
| (JSC::MacroAssemblerX86_64::setPtr): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| |
| 2009-02-19 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| First step in splitting JIT functionality out of the Interpreter class: |
| Created JITStubs.h/.cpp, and moved Interpreter::cti_* into JITStubs.cpp. |
| |
| Functions that the Interpreter and JITStubs share moved to Operations.h/.cpp. |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::resolveBase): |
| (JSC::Interpreter::checkTimeout): |
| (JSC::Interpreter::privateExecute): |
| * interpreter/Interpreter.h: |
| * jit/JITStubs.cpp: Copied from interpreter/Interpreter.cpp. |
| (JSC::Interpreter::cti_op_resolve_base): |
| * jit/JITStubs.h: Copied from interpreter/Interpreter.h. |
| * runtime/Operations.cpp: |
| (JSC::jsAddSlowCase): |
| (JSC::jsTypeStringForValue): |
| (JSC::jsIsObjectType): |
| (JSC::jsIsFunctionType): |
| * runtime/Operations.h: |
| (JSC::jsLess): |
| (JSC::jsLessEq): |
| (JSC::jsAdd): |
| (JSC::cachePrototypeChain): |
| (JSC::countPrototypeChainEntriesAndCheckForProxies): |
| (JSC::resolveBase): |
| |
| 2009-02-19 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Fix for x86-64. Where the JavaScriptCore text segment lies outside |
| a 2gb range of the heap containing JIT generated code, callbacks |
| from JIT code to the stub functions in Interpreter will be incorrectly |
| linked. |
| |
| No performance impact on Sunspider, 1% regression on v8-tests, |
| due to a 3% regression on richards. |
| |
| * assembler/AbstractMacroAssembler.h: |
| (JSC::AbstractMacroAssembler::Call::Call): |
| (JSC::AbstractMacroAssembler::Jump::link): |
| (JSC::AbstractMacroAssembler::Jump::linkTo): |
| (JSC::AbstractMacroAssembler::CodeLocationJump::relink): |
| (JSC::AbstractMacroAssembler::CodeLocationCall::relink): |
| (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): |
| (JSC::AbstractMacroAssembler::PatchBuffer::link): |
| (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive): |
| (JSC::AbstractMacroAssembler::differenceBetween): |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::tailRecursiveCall): |
| (JSC::MacroAssembler::makeTailRecursiveCall): |
| * assembler/MacroAssemblerX86.h: |
| (JSC::MacroAssemblerX86::call): |
| * assembler/MacroAssemblerX86Common.h: |
| * assembler/MacroAssemblerX86_64.h: |
| (JSC::MacroAssemblerX86_64::call): |
| (JSC::MacroAssemblerX86_64::moveWithPatch): |
| (JSC::MacroAssemblerX86_64::branchPtrWithPatch): |
| (JSC::MacroAssemblerX86_64::storePtrWithPatch): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::jmp_r): |
| (JSC::X86Assembler::linkJump): |
| (JSC::X86Assembler::patchJump): |
| (JSC::X86Assembler::patchCall): |
| (JSC::X86Assembler::linkCall): |
| (JSC::X86Assembler::patchAddress): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::tryCTICachePutByID): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): |
| (JSC::JIT::compileBinaryArithOp): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::privateCompileGetByIdSelf): |
| (JSC::JIT::privateCompilePutByIdReplace): |
| |
| 2009-02-18 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Simplified .call and .apply in preparation for optimizing them. Also, |
| a little cleanup. |
| |
| * runtime/FunctionPrototype.cpp: |
| (JSC::functionProtoFuncApply): |
| (JSC::functionProtoFuncCall): No need to do any specific conversion on |
| 'this' -- op_convert_this will do it if necessary. |
| |
| * runtime/JSImmediate.cpp: |
| (JSC::JSImmediate::toThisObject): Slightly relaxed the rules on |
| toThisObject to allow for 'undefined', which can be passed through |
| .call and .apply. |
| |
| 2009-02-19 David Levin <levin@chromium.org> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| Bug 23976: MessageQueue needs a way to wait for a message that satisfies an arbitrary criteria. |
| <https://bugs.webkit.org/show_bug.cgi?id=23976> |
| |
| * wtf/Deque.h: |
| (WTF::Deque<T>::findIf): |
| * wtf/MessageQueue.h: |
| (WTF::MessageQueue<T>::waitForMessageFiltered): |
| |
| 2009-02-18 David Levin <levin@chromium.org> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| Bug 23974: Deque::Remove would be a useful method. |
| <https://bugs.webkit.org/show_bug.cgi?id=23974> |
| |
| Add Deque::remove and DequeIteratorBase<T>::operator=. |
| |
| Why was operator= added? Every concrete iterator (DequeIterator..DequeConstReverseIterator) |
| was calling DequeIteratorBase::assign(), which called Base::operator=(). Base::operator=() |
| was not implemented. This went unnoticed because the iterator copy code has been unused. |
| |
| * wtf/Deque.h: |
| (WTF::Deque<T>::remove): |
| (WTF::DequeIteratorBase<T>::removeFromIteratorsList): |
| (WTF::DequeIteratorBase<T>::operator=): |
| (WTF::DequeIteratorBase<T>::~DequeIteratorBase): |
| |
| 2009-02-18 Gustavo Noronha Silva <gns@gnome.org> |
| |
| Reviewed by Holger Freyther. |
| |
| Fix symbols.filter location, and add other missing files to the |
| autotools build, so that make dist works. |
| |
| * GNUmakefile.am: |
| |
| 2009-02-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixed failure in js1_5/Regress/regress-168347.js, as seen on the Oliver |
| bot. |
| |
| Technically, both behaviors are OK, but we might as well keep this test |
| passing. |
| |
| * runtime/FunctionPrototype.cpp: |
| (JSC::insertSemicolonIfNeeded): No need to add a trailing semicolon |
| after a trailing '}', since '}' ends a block, indicating the end of a |
| statement. |
| |
| 2009-02-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Build fix. |
| |
| * runtime/FunctionPrototype.cpp: |
| |
| 2009-02-17 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Add assertion to guard against oversized pc relative calls. |
| |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::link): |
| |
| 2009-02-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixed <rdar://problem/6595040> REGRESSION: http://www.amnestyusa.org/ |
| fails to load. |
| |
| amnestyusa.org uses the Optimist JavaScript library, which adds event |
| listeners by concatenating string-ified functions. This is only sure to |
| be syntactically valid if the string-ified functions end in semicolons. |
| |
| * parser/Lexer.cpp: |
| (JSC::Lexer::isWhiteSpace): |
| * parser/Lexer.h: |
| (JSC::Lexer::isWhiteSpace): |
| (JSC::Lexer::isLineTerminator): Added some helper functions for examining |
| whitespace. |
| |
| * runtime/FunctionPrototype.cpp: |
| (JSC::appendSemicolonIfNeeded): |
| (JSC::functionProtoFuncToString): When string-ifying a function, insert |
| a semicolon in the last non-whitespace position, if one doesn't already exist. |
| |
| 2009-02-16 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (Build fix). |
| |
| Roll out r41022 as it breaks qt and gtk builds |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::isSSE2Present): |
| |
| 2009-02-16 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Fix for <rdar://problem/6468156> |
| REGRESSION (r36779): Adding link, images, flash in TinyMCE blocks entire page (21382) |
| |
| No performance regression. |
| |
| * runtime/Arguments.cpp: |
| (JSC::Arguments::fillArgList): Add codepath for when the "length" property has been |
| overridden. |
| |
| 2009-02-16 Mark Rowe <mrowe@apple.com> |
| |
| Build fix. |
| |
| * wtf/FastMalloc.cpp: |
| (WTF::TCMallocStats::): |
| (WTF::TCMallocStats::FastMallocZone::FastMallocZone): |
| |
| 2009-02-16 Csaba Osztrogonac <oszi@inf.u-szeged.hu> |
| |
| Reviewed by Oliver Hunt. |
| |
| Bug 23787: Allow JIT to generate SSE2 code if using GCC |
| <https://bugs.webkit.org/show_bug.cgi?id=23787> |
| |
| GCC version of the cpuid check. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::isSSE2Present): GCC assembly code added. |
| 6.6% progression on x86 Linux with JIT and WREC on SunSpider if using SSE2 capable machine. |
| |
| 2009-02-13 Adam Treat <adam.treat@torchmobile.com> |
| |
| Reviewed by George Staikos. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23960 |
| Crash Fix. |
| |
| Don't depend on 'initializeThreading()' to come before a call to 'isMainThread()' |
| as QtWebKit only calls 'initializeThreading()' during QWebPage construction. |
| |
| A client app may well make a call to QWebSettings::iconForUrl() for instance |
| before creating a QWebPage and that call to QWebSettings triggers an |
| ASSERT(isMainThread()) deep within WebCore. |
| |
| * wtf/ThreadingQt.cpp: |
| (WTF::isMainThread): |
| |
| 2009-02-13 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Some data in the instruction stream is potentially uninitialized - fix this. |
| |
| Change the OperandTypes constructor so that uninitialized memory in the int |
| is zeroed, and modify the Instruction constructor taking an Opcode so that |
| if !HAVE(COMPUTED_GOTO) (i.e. when Opcode is an enum, and is potentially only |
| a byte) it zeros the Instruction first before writing the opcode. |
| |
| * bytecode/Instruction.h: |
| (JSC::Instruction::Instruction): |
| * parser/ResultType.h: |
| (JSC::OperandTypes::OperandTypes): |
| |
| 2009-02-13 Geoffrey Garen <ggaren@apple.com> |
| |
| Build fix for non_JIT platforms. |
| |
| * bytecode/CodeBlock.h: |
| (JSC::CodeBlock::setIsNumericCompareFunction): |
| (JSC::CodeBlock::isNumericCompareFunction): |
| |
| 2009-02-13 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Fixed <rdar://problem/6584057> Optimize sort by JS numeric comparison |
| function not to run the comparison function |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::CodeBlock): |
| * bytecode/CodeBlock.h: |
| (JSC::CodeBlock::setIsNumericCompareFunction): |
| (JSC::CodeBlock::isNumericCompareFunction): Added the ability to track |
| whether a CodeBlock performs a sort-like numeric comparison. |
| |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::generate): Set the isNumericCompareFunction bit |
| after compiling. |
| |
| * parser/Nodes.cpp: |
| (JSC::FunctionBodyNode::emitBytecode): Fixed a bug that caused us to |
| codegen an extra return at the end of all functions (eek!), since this |
| made it harder / weirder to detect the numeric comparison pattern in |
| bytecode. |
| |
| * runtime/ArrayPrototype.cpp: |
| (JSC::arrayProtoFuncSort): Use the isNumericCompareFunction bit to do |
| a faster sort if we can. |
| |
| * runtime/FunctionConstructor.cpp: |
| (JSC::extractFunctionBody): |
| (JSC::constructFunction): |
| * runtime/FunctionConstructor.h: Renamed and exported extractFunctionBody for |
| use in initializing lazyNumericCompareFunction. |
| |
| * runtime/JSArray.cpp: |
| (JSC::compareNumbersForQSort): |
| (JSC::compareByStringPairForQSort): |
| (JSC::JSArray::sortNumeric): |
| (JSC::JSArray::sort): |
| * runtime/JSArray.h: Added a fast numeric sort. Renamed ArrayQSortPair |
| to be more specific since we do different kinds of qsort now. |
| |
| * runtime/JSGlobalData.cpp: |
| (JSC::JSGlobalData::JSGlobalData): |
| (JSC::JSGlobalData::numericCompareFunction): |
| (JSC::JSGlobalData::ClientData::~ClientData): |
| * runtime/JSGlobalData.h: Added helper data for computing the |
| isNumericCompareFunction bit. |
| |
| 2009-02-13 Darin Adler <darin@apple.com> |
| |
| * Configurations/JavaScriptCore.xcconfig: Undo accidental commit of this file. |
| |
| 2009-02-12 Darin Adler <darin@apple.com> |
| |
| Reviewed by Oliver Hunt and Alexey Proskuryakov. |
| |
| Speed up a couple string functions. |
| |
| * runtime/StringPrototype.cpp: |
| (JSC::stringProtoFuncIndexOf): Added a fast path for cases where the second |
| argument is either missing or an integer. |
| (JSC::stringProtoFuncBig): Use jsNontrivialString since the string is guaranteed |
| to be 2 or more characters long. |
| (JSC::stringProtoFuncSmall): Ditto. |
| (JSC::stringProtoFuncBlink): Ditto. |
| (JSC::stringProtoFuncBold): Ditto. |
| (JSC::stringProtoFuncItalics): Ditto. |
| (JSC::stringProtoFuncStrike): Ditto. |
| (JSC::stringProtoFuncSub): Ditto. |
| (JSC::stringProtoFuncSup): Ditto. |
| (JSC::stringProtoFuncFontcolor): Ditto. |
| (JSC::stringProtoFuncFontsize): Make the fast path Sam recently added even faster |
| by avoiding all but the minimum memory allocation. |
| (JSC::stringProtoFuncAnchor): Use jsNontrivialString. |
| (JSC::stringProtoFuncLink): Added a fast path. |
| |
| * runtime/UString.cpp: |
| (JSC::UString::find): Added a fast path for single-character search strings. |
| |
| 2009-02-13 David Levin <levin@chromium.org> |
| |
| Reviewed by Darin Adler. |
| |
| Bug 23926: Race condition in callOnMainThreadAndWait |
| <https://bugs.webkit.org/show_bug.cgi?id=23926> |
| |
| * wtf/MainThread.cpp: |
| Removed callOnMainThreadAndWait since it isn't used. |
| |
| 2009-02-13 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Jon Honeycutt. |
| |
| Math.random is really slow on windows. |
| |
| Math.random calls WTF::randomNumber which is implemented as |
| the secure rand_s on windows. Unfortunately rand_s is an order |
| of magnitude slower than arc4random. For this reason I've |
| added "weakRandomNumber" for use by JavaScript's Math Object. |
| In the long term we should look at using our own secure PRNG |
| in place of the system, but this will do for now. |
| |
| 30% win on SunSpider on Windows, resolving most of the remaining |
| disparity vs. Mac. |
| |
| * runtime/MathObject.cpp: |
| (JSC::MathObject::MathObject): |
| (JSC::mathProtoFuncRandom): |
| * wtf/RandomNumber.cpp: |
| (WTF::weakRandomNumber): |
| (WTF::randomNumber): |
| * wtf/RandomNumber.h: |
| * wtf/RandomNumberSeed.h: |
| (WTF::initializeWeakRandomNumberGenerator): |
| |
| 2009-02-12 Mark Rowe <mrowe@apple.com> |
| |
| Fix the build for other platforms. |
| |
| * wtf/RandomNumber.cpp: |
| (WTF::randomNumber): |
| |
| 2009-02-12 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Remove (/reduce) use of hard-wired register names from the JIT. |
| Currently there is no abstraction of registers used in the JIT, |
| which has a number of negative consequences. Hard-wiring x86 |
| register names makes the JIT less portable to other platforms, |
| and prevents us from performing dynamic register allocation to |
| attempt to maintain more temporary values in machine registers. |
| (The latter will be more important on x86-64, where we have more |
| registers to make use of). |
| |
| Also, remove MacroAssembler::mod32. This was not providing a |
| useful abstraction, and was not in keeping with the rest of the |
| MacroAssembler interface, in having specific register requirements. |
| |
| * assembler/MacroAssemblerX86Common.h: |
| * jit/JIT.cpp: |
| (JSC::JIT::compileOpStrictEq): |
| (JSC::JIT::emitSlowScriptCheck): |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::compileFastArith_op_lshift): |
| (JSC::JIT::compileFastArithSlow_op_lshift): |
| (JSC::JIT::compileFastArith_op_rshift): |
| (JSC::JIT::compileFastArithSlow_op_rshift): |
| (JSC::JIT::compileFastArith_op_bitand): |
| (JSC::JIT::compileFastArithSlow_op_bitand): |
| (JSC::JIT::compileFastArith_op_mod): |
| (JSC::JIT::compileFastArithSlow_op_mod): |
| (JSC::JIT::compileFastArith_op_post_inc): |
| (JSC::JIT::compileFastArithSlow_op_post_inc): |
| (JSC::JIT::compileFastArith_op_post_dec): |
| (JSC::JIT::compileFastArithSlow_op_post_dec): |
| (JSC::JIT::compileFastArith_op_pre_inc): |
| (JSC::JIT::compileFastArithSlow_op_pre_inc): |
| (JSC::JIT::compileFastArith_op_pre_dec): |
| (JSC::JIT::compileFastArithSlow_op_pre_dec): |
| (JSC::JIT::compileFastArith_op_add): |
| (JSC::JIT::compileFastArith_op_mul): |
| (JSC::JIT::compileFastArith_op_sub): |
| (JSC::JIT::compileBinaryArithOp): |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallInitializeCallFrame): |
| (JSC::JIT::compileOpCallSetupArgs): |
| (JSC::JIT::compileOpCallEvalSetupArgs): |
| (JSC::JIT::compileOpConstructSetupArgs): |
| (JSC::JIT::compileOpCall): |
| (JSC::JIT::compileOpCallSlowCase): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitGetVirtualRegister): |
| (JSC::JIT::emitPutVirtualRegister): |
| (JSC::JIT::emitNakedCall): |
| (JSC::JIT::restoreArgumentReference): |
| (JSC::JIT::restoreArgumentReferenceForTrampoline): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::compilePutByIdHotPath): |
| (JSC::JIT::compileGetByIdSlowCase): |
| (JSC::JIT::compilePutByIdSlowCase): |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| (JSC::JIT::privateCompileGetByIdSelf): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdSelfList): |
| (JSC::JIT::privateCompileGetByIdProtoList): |
| (JSC::JIT::privateCompileGetByIdChainList): |
| (JSC::JIT::privateCompileGetByIdChain): |
| (JSC::JIT::privateCompilePutByIdReplace): |
| |
| 2009-02-12 Horia Olaru <olaru@adobe.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23400 |
| |
| When throwing an exception within an eval argument string, the dst parameter was |
| modified in the functions below and the return value for eval was altered. Changed |
| the emitNode call in JSC::ThrowNode::emitBytecode to use a temporary register |
| to store its results instead of dst. The JSC::FunctionCallResolveNode::emitBytecode |
| would load the function within the dst registry, also altering the result returned |
| by eval. Replaced it with another temporary. |
| |
| * parser/Nodes.cpp: |
| (JSC::FunctionCallResolveNode::emitBytecode): |
| (JSC::ThrowNode::emitBytecode): |
| |
| 2009-02-12 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Speed up String.prototype.fontsize. |
| |
| * runtime/StringPrototype.cpp: |
| (JSC::stringProtoFuncFontsize): Specialize for defined/commonly used values. |
| |
| 2009-02-12 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Correctness fix. |
| |
| * wtf/RandomNumber.cpp: |
| (WTF::randomNumber): Divide by the maximum representable value, which |
| is different on each platform now, to get values between 0 and 1. |
| |
| 2009-02-12 Geoffrey Garen <ggaren@apple.com> |
| |
| Build fix. |
| |
| * wtf/RandomNumber.cpp: |
| (WTF::randomNumber): |
| |
| 2009-02-12 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixed <rdar://problem/6582048>. |
| |
| * wtf/RandomNumber.cpp: |
| (WTF::randomNumber): Make only one call to the random number generator |
| on platforms where the generator is cryptographically secure. The value |
| of randomness over and above cryptographically secure randomness is not |
| clear, and it caused some performance problems. |
| |
| 2009-02-12 Adam Roben <aroben@apple.com> |
| |
| Fix lots of Perl warnings when building JavaScriptCoreGenerated on |
| Windows |
| |
| Reviewed by John Sullivan. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/build-generated-files.sh: |
| Create the docs/ directory so that we can write bytecode.html into it. |
| This matches what JavaScriptCore.xcodeproj does. |
| |
| 2009-02-12 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Rubber-stamped by Lars. |
| |
| Re-enable the JIT in the Qt build with -fno-stack-protector on Linux. |
| |
| * JavaScriptCore.pri: |
| |
| 2009-02-11 Dmitry Titov <dimich@chromium.org> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23705 |
| Fix the UI freeze caused by Worker generating a flood of messages. |
| Measure time we spend in executing posted work items. If too much time is spent |
| without returning to the run loop, exit and reschedule. |
| |
| * wtf/MainThread.h: |
| Added initializeMainThreadPlatform() to initialize low-level mechanism for posting |
| work items from thread to thread. This removes #ifdefs for WIN and CHROMIUM from platform-independent code. |
| |
| * wtf/MainThread.cpp: |
| (WTF::initializeMainThread): |
| (WTF::dispatchFunctionsFromMainThread): |
| Instead of dispatching all work items in the queue, dispatch them one by one |
| and measure elapsed time. After a threshold, reschedule and quit. |
| |
| (WTF::callOnMainThread): |
| (WTF::callOnMainThreadAndWait): |
| Only schedule dispatch if the queue was empty - to avoid many posted messages in the run loop queue. |
| |
| * wtf/mac/MainThreadMac.mm: |
| (WTF::scheduleDispatchFunctionsOnMainThread): |
| Use static instance of the mainThreadCaller instead of allocating and releasing it each time. |
| (WTF::initializeMainThreadPlatform): |
| * wtf/gtk/MainThreadChromium.cpp: |
| (WTF::initializeMainThreadPlatform): |
| * wtf/gtk/MainThreadGtk.cpp: |
| (WTF::initializeMainThreadPlatform): |
| * wtf/qt/MainThreadQt.cpp: |
| (WTF::initializeMainThreadPlatform): |
| * wtf/win/MainThreadWin.cpp: |
| (WTF::initializeMainThreadPlatform): |
| * wtf/wx/MainThreadWx.cpp: |
| (WTF::initializeMainThreadPlatform): |
| |
| 2009-02-11 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Style cleanup. |
| |
| * assembler/AbstractMacroAssembler.h: |
| (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon): |
| (JSC::AbstractMacroAssembler::CodeLocationCommon::operator bool): |
| (JSC::AbstractMacroAssembler::CodeLocationCommon::reset): |
| (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch): |
| (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler): |
| (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR): |
| (JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination): |
| (JSC::AbstractMacroAssembler::CodeLocationJump::relink): |
| (JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump): |
| (JSC::AbstractMacroAssembler::CodeLocationCall::relink): |
| (JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue): |
| (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall): |
| (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): |
| (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32): |
| (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): |
| (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): |
| (JSC::AbstractMacroAssembler::ProcessorReturnAddress::ProcessorReturnAddress): |
| (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): |
| (JSC::AbstractMacroAssembler::ProcessorReturnAddress::operator void*): |
| (JSC::AbstractMacroAssembler::PatchBuffer::link): |
| (JSC::::CodeLocationCommon::labelAtOffset): |
| (JSC::::CodeLocationCommon::jumpAtOffset): |
| (JSC::::CodeLocationCommon::callAtOffset): |
| (JSC::::CodeLocationCommon::dataLabelPtrAtOffset): |
| (JSC::::CodeLocationCommon::dataLabel32AtOffset): |
| |
| 2009-02-11 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Gavin Barraclough. |
| |
| * assembler/AbstractMacroAssembler.h: Fix comments. |
| |
| 2009-02-11 Alexey Proskuryakov <ap@webkit.org> |
| |
| Trying to fix wx build. |
| |
| * bytecode/JumpTable.h: Include "MacroAssembler.h", not <MacroAssembler.h>. |
| * jscore.bkl: Added assembler directory to search paths. |
| |
| 2009-02-10 Gavin Barraclough <barraclough@apple.com> |
| |
| Build |
| fix. |
| (Narrow |
| changelog |
| for |
| dhyatt). |
| |
| * bytecode/Instruction.h: |
| (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): |
| (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): |
| |
| 2009-02-10 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Reduce use of void* / reinterpret_cast in JIT repatching code, |
| add strong types for Calls and for the various types of pointers |
| we retain into the JIT generated instruction stream. |
| |
| No performance impact. |
| |
| * assembler/AbstractMacroAssembler.h: |
| (JSC::AbstractMacroAssembler::ImmPtr::ImmPtr): |
| (JSC::AbstractMacroAssembler::ImmPtr::asIntptr): |
| (JSC::AbstractMacroAssembler::Imm32::Imm32): |
| (JSC::AbstractMacroAssembler::Label::Label): |
| (JSC::AbstractMacroAssembler::DataLabelPtr::DataLabelPtr): |
| (JSC::AbstractMacroAssembler::Call::Call): |
| (JSC::AbstractMacroAssembler::Call::link): |
| (JSC::AbstractMacroAssembler::Call::linkTo): |
| (JSC::AbstractMacroAssembler::Jump::Jump): |
| (JSC::AbstractMacroAssembler::Jump::linkTo): |
| (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon): |
| (JSC::AbstractMacroAssembler::CodeLocationCommon::operator bool): |
| (JSC::AbstractMacroAssembler::CodeLocationCommon::reset): |
| (JSC::AbstractMacroAssembler::CodeLocationLabel::CodeLocationLabel): |
| (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch): |
| (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler): |
| (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR): |
| (JSC::AbstractMacroAssembler::CodeLocationLabel::getJumpDestination): |
| (JSC::AbstractMacroAssembler::CodeLocationJump::CodeLocationJump): |
| (JSC::AbstractMacroAssembler::CodeLocationJump::relink): |
| (JSC::AbstractMacroAssembler::CodeLocationCall::CodeLocationCall): |
| (JSC::AbstractMacroAssembler::CodeLocationCall::relink): |
| (JSC::AbstractMacroAssembler::CodeLocationCall::calleeReturnAddressValue): |
| (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32): |
| (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): |
| (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): |
| (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): |
| (JSC::AbstractMacroAssembler::ProcessorReturnAddress::ProcessorReturnAddress): |
| (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): |
| (JSC::AbstractMacroAssembler::ProcessorReturnAddress::operator void*): |
| (JSC::AbstractMacroAssembler::PatchBuffer::entry): |
| (JSC::AbstractMacroAssembler::PatchBuffer::trampolineAt): |
| (JSC::AbstractMacroAssembler::PatchBuffer::link): |
| (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive): |
| (JSC::AbstractMacroAssembler::PatchBuffer::patch): |
| (JSC::AbstractMacroAssembler::PatchBuffer::locationOf): |
| (JSC::AbstractMacroAssembler::PatchBuffer::returnAddressOffset): |
| (JSC::AbstractMacroAssembler::differenceBetween): |
| (JSC::::CodeLocationCommon::labelAtOffset): |
| (JSC::::CodeLocationCommon::jumpAtOffset): |
| (JSC::::CodeLocationCommon::callAtOffset): |
| (JSC::::CodeLocationCommon::dataLabelPtrAtOffset): |
| (JSC::::CodeLocationCommon::dataLabel32AtOffset): |
| * assembler/MacroAssemblerX86Common.h: |
| (JSC::MacroAssemblerX86Common::call): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::getCallReturnOffset): |
| * bytecode/CodeBlock.h: |
| (JSC::CallLinkInfo::CallLinkInfo): |
| (JSC::getStructureStubInfoReturnLocation): |
| (JSC::getCallLinkInfoReturnLocation): |
| * bytecode/Instruction.h: |
| (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): |
| (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): |
| * bytecode/JumpTable.h: |
| (JSC::StringJumpTable::ctiForValue): |
| (JSC::SimpleJumpTable::ctiForValue): |
| * bytecode/StructureStubInfo.h: |
| (JSC::StructureStubInfo::StructureStubInfo): |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::emitCatch): |
| (JSC::prepareJumpTableForStringSwitch): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::cti_op_get_by_id_self_fail): |
| (JSC::getPolymorphicAccessStructureListSlot): |
| (JSC::Interpreter::cti_op_throw): |
| (JSC::Interpreter::cti_op_switch_imm): |
| (JSC::Interpreter::cti_op_switch_char): |
| (JSC::Interpreter::cti_op_switch_string): |
| (JSC::Interpreter::cti_vm_throw): |
| * jit/JIT.cpp: |
| (JSC::ctiSetReturnAddress): |
| (JSC::ctiPatchCallByReturnAddress): |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| (JSC::CallRecord::CallRecord): |
| (JSC::JIT::compileGetByIdSelf): |
| (JSC::JIT::compileGetByIdProto): |
| (JSC::JIT::compileGetByIdChain): |
| (JSC::JIT::compilePutByIdReplace): |
| (JSC::JIT::compilePutByIdTransition): |
| (JSC::JIT::compilePatchGetArrayLength): |
| (JSC::JIT::emitCTICall): |
| * jit/JITCall.cpp: |
| (JSC::JIT::unlinkCall): |
| (JSC::JIT::linkCall): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitNakedCall): |
| (JSC::JIT::emitCTICall_internal): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::compileGetByIdSlowCase): |
| (JSC::JIT::compilePutByIdSlowCase): |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::patchGetByIdSelf): |
| (JSC::JIT::patchPutByIdReplace): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| (JSC::JIT::privateCompileGetByIdSelf): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdSelfList): |
| (JSC::JIT::privateCompileGetByIdProtoList): |
| (JSC::JIT::privateCompileGetByIdChainList): |
| (JSC::JIT::privateCompileGetByIdChain): |
| (JSC::JIT::privateCompilePutByIdReplace): |
| |
| 2009-02-10 Adam Roben <aroben@apple.com> |
| |
| Windows build fix after r40813 |
| |
| * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added profiler/ to the include |
| path so that Profiler.h can be found. |
| |
| 2009-02-09 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Provide a class type for a generated block of JIT code. |
| Also changes the return address -> bytecode index map to |
| track the return addess as an unsigned offset into the code |
| instead of a ptrdiff_t in terms of void**s - the latter is |
| equal to the actual offset / sizeof(void*), making it a |
| potentially lossy representation. |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * assembler/AbstractMacroAssembler.h: |
| (JSC::AbstractMacroAssembler::PatchBuffer::returnAddressOffset): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::getCallReturnOffset): |
| * bytecode/CodeBlock.h: |
| (JSC::CallReturnOffsetToBytecodeIndex::CallReturnOffsetToBytecodeIndex): |
| (JSC::getCallReturnOffset): |
| (JSC::CodeBlock::getBytecodeIndex): |
| (JSC::CodeBlock::jitCode): |
| (JSC::CodeBlock::callReturnIndexVector): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::execute): |
| (JSC::Interpreter::cti_vm_dontLazyLinkCall): |
| (JSC::Interpreter::cti_vm_lazyLinkCall): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompile): |
| * jit/JIT.h: |
| (JSC::): |
| * jit/JITCall.cpp: |
| (JSC::JIT::linkCall): |
| * jit/JITCode.h: Added. |
| (JSC::): |
| (JSC::JITCode::JITCode): |
| (JSC::JITCode::operator bool): |
| (JSC::JITCode::addressForCall): |
| (JSC::JITCode::offsetOf): |
| (JSC::JITCode::execute): |
| |
| 2009-02-09 John Grabowski <jrg@chromium.org> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23856 |
| Change the definition of "main thread" for Chromium on OSX. |
| It does not match the DARWIN definition. |
| |
| * wtf/ThreadingPthreads.cpp: |
| (WTF::initializeThreading): |
| (WTF::isMainThread): |
| |
| 2009-02-09 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Minor bugfix, incorrect check meant that subtraction causing integer overflow |
| would be missed on x86-64 JIT. |
| |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::compileBinaryArithOp): |
| |
| 2009-02-09 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| A more sensible register allocation for x86-64. |
| |
| When WREC was ported to x86-64 it stuck with the same register allocation as x86. |
| This requires registers to be reordered on entry into WREC generated code, since |
| argument passing is different on x86-64 and x86 (regparm(3)). This patch switches |
| x86-64 to use a native register allocation, that does not require argument registers |
| to be reordered. |
| |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateEnter): |
| (JSC::WREC::Generator::generateReturnSuccess): |
| (JSC::WREC::Generator::generateReturnFailure): |
| * wrec/WRECGenerator.h: |
| |
| 2009-02-05 Adam Roben <aroben@apple.com> |
| |
| Build fix |
| |
| Rubberstamped by Sam Weinig. |
| |
| * wtf/TypeTraits.h: Include Platform.h, since this header uses macros |
| defined there. |
| |
| 2009-02-05 Dimitri Glazkov <dglazkov@chromium.org> |
| |
| Reviewed by Eric Seidel. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23747 |
| Add Chromium threading-related files. |
| |
| * wtf/MainThread.cpp: Added platform guard to initializeMainThread. |
| * wtf/chromium/ChromiumThreading.h: Added. |
| * wtf/chromium/MainThreadChromium.cpp: Added. |
| (WTF::initializeMainThread): |
| (WTF::scheduleDispatchFunctionsOnMainThread): |
| |
| 2009-02-05 David Levin <levin@chromium.org> |
| |
| Reviewed by Darin Adler. |
| |
| Bug 23713: COMPILE_ASSERTS should be moved out of TypeTraits.h and into .cpp file |
| <https://bugs.webkit.org/show_bug.cgi?id=23713> |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.scons: |
| * JavaScriptCore.vcproj/WTF/WTF.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * JavaScriptCoreSources.bkl: |
| |
| * wtf/HashTraits.h: |
| Remove unnecessary header file that I missed when moving out the type traits form this file. |
| |
| * wtf/TypeTraits.cpp: Added. |
| (WTF::): |
| * wtf/TypeTraits.h: |
| Moved the compile asserts into TypeTraits.cpp file. |
| |
| 2009-02-04 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver 'the nun' Hunt. |
| |
| Add -e switch to jsc to enable evaluation of scripts passed on the command line. |
| |
| * jsc.cpp: |
| (Script::Script): |
| (runWithScripts): |
| (printUsageStatement): |
| (parseArguments): |
| (jscmain): |
| |
| 2009-02-04 Gavin Barraclough <barraclough@apple.com> |
| |
| Rubber stamped by Sam 'Big Mac' Weinig. |
| |
| * assembler/AbstractMacroAssembler.h: Copied from assembler/MacroAssembler.h. |
| * assembler/MacroAssemblerX86.h: Copied from assembler/MacroAssembler.h. |
| * assembler/MacroAssemblerX86Common.h: Copied from assembler/MacroAssembler.h. |
| * assembler/MacroAssemblerX86_64.h: Copied from assembler/MacroAssembler.h. |
| |
| 2009-02-04 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| This patch tidies up the MacroAssembler, cleaning up the code and refactoring out the |
| platform-specific parts. The MacroAssembler gets split up like a beef burger, with the |
| platform-agnostic data types being the lower bun (in the form of the class AbstractMacroAssembler), |
| the plaform-specific code generation forming a big meaty patty of methods like 'add32', |
| 'branch32', etc (MacroAssemblerX86), and finally topped off with the bun-lid of the |
| MacroAssembler class itself, providing covenience methods such as the stack peek & poke, |
| and backwards branch methods, all of which can be described in a platform independent |
| way using methods from the base class. The AbstractMacroAssembler is templated on the |
| type of the assembler class that will be used for code generation, and the three layers |
| are held together with the cocktail stick of inheritance. |
| |
| The above description is a slight simplification since the MacroAssemblerX86 is actually |
| formed from two layers (in effect giving us a kind on bacon double cheeseburger) - with the |
| bulk of methods that are common between x86 & x86-64 implemented in MacroAssemblerX86Common, |
| which forms a base class for MacroAssemblerX86 and MacroAssemblerX86_64 (which add the methods |
| specific to the given platform). |
| |
| I'm landing these changes first without splitting the classes across multiple files, |
| I will follow up with a second patch to split up the file MacroAssembler.h. |
| |
| * assembler/MacroAssembler.h: |
| (JSC::AbstractMacroAssembler::): |
| (JSC::AbstractMacroAssembler::DataLabelPtr::DataLabelPtr): |
| (JSC::AbstractMacroAssembler::DataLabelPtr::patch): |
| (JSC::AbstractMacroAssembler::DataLabel32::DataLabel32): |
| (JSC::AbstractMacroAssembler::DataLabel32::patch): |
| (JSC::AbstractMacroAssembler::Label::Label): |
| (JSC::AbstractMacroAssembler::Jump::Jump): |
| (JSC::AbstractMacroAssembler::Jump::link): |
| (JSC::AbstractMacroAssembler::Jump::linkTo): |
| (JSC::AbstractMacroAssembler::Jump::patch): |
| (JSC::AbstractMacroAssembler::JumpList::link): |
| (JSC::AbstractMacroAssembler::JumpList::linkTo): |
| (JSC::AbstractMacroAssembler::PatchBuffer::link): |
| (JSC::AbstractMacroAssembler::PatchBuffer::addressOf): |
| (JSC::AbstractMacroAssembler::PatchBuffer::setPtr): |
| (JSC::AbstractMacroAssembler::size): |
| (JSC::AbstractMacroAssembler::copyCode): |
| (JSC::AbstractMacroAssembler::label): |
| (JSC::AbstractMacroAssembler::align): |
| (JSC::AbstractMacroAssembler::differenceBetween): |
| (JSC::MacroAssemblerX86Common::xor32): |
| (JSC::MacroAssemblerX86Common::load32WithAddressOffsetPatch): |
| (JSC::MacroAssemblerX86Common::store32WithAddressOffsetPatch): |
| (JSC::MacroAssemblerX86Common::move): |
| (JSC::MacroAssemblerX86Common::swap): |
| (JSC::MacroAssemblerX86Common::signExtend32ToPtr): |
| (JSC::MacroAssemblerX86Common::zeroExtend32ToPtr): |
| (JSC::MacroAssemblerX86Common::branch32): |
| (JSC::MacroAssemblerX86Common::jump): |
| (JSC::MacroAssemblerX86_64::add32): |
| (JSC::MacroAssemblerX86_64::sub32): |
| (JSC::MacroAssemblerX86_64::load32): |
| (JSC::MacroAssemblerX86_64::store32): |
| (JSC::MacroAssemblerX86_64::addPtr): |
| (JSC::MacroAssemblerX86_64::andPtr): |
| (JSC::MacroAssemblerX86_64::orPtr): |
| (JSC::MacroAssemblerX86_64::rshiftPtr): |
| (JSC::MacroAssemblerX86_64::subPtr): |
| (JSC::MacroAssemblerX86_64::xorPtr): |
| (JSC::MacroAssemblerX86_64::loadPtr): |
| (JSC::MacroAssemblerX86_64::loadPtrWithAddressOffsetPatch): |
| (JSC::MacroAssemblerX86_64::storePtr): |
| (JSC::MacroAssemblerX86_64::storePtrWithAddressOffsetPatch): |
| (JSC::MacroAssemblerX86_64::branchPtr): |
| (JSC::MacroAssemblerX86_64::branchTestPtr): |
| (JSC::MacroAssemblerX86_64::branchAddPtr): |
| (JSC::MacroAssemblerX86_64::branchSubPtr): |
| (JSC::MacroAssemblerX86_64::branchPtrWithPatch): |
| (JSC::MacroAssemblerX86_64::storePtrWithPatch): |
| (JSC::MacroAssemblerX86::add32): |
| (JSC::MacroAssemblerX86::sub32): |
| (JSC::MacroAssemblerX86::load32): |
| (JSC::MacroAssemblerX86::store32): |
| (JSC::MacroAssemblerX86::branch32): |
| (JSC::MacroAssemblerX86::branchPtrWithPatch): |
| (JSC::MacroAssemblerX86::storePtrWithPatch): |
| (JSC::MacroAssembler::pop): |
| (JSC::MacroAssembler::peek): |
| (JSC::MacroAssembler::poke): |
| (JSC::MacroAssembler::branchPtr): |
| (JSC::MacroAssembler::branch32): |
| (JSC::MacroAssembler::branch16): |
| (JSC::MacroAssembler::branchTestPtr): |
| (JSC::MacroAssembler::addPtr): |
| (JSC::MacroAssembler::andPtr): |
| (JSC::MacroAssembler::orPtr): |
| (JSC::MacroAssembler::rshiftPtr): |
| (JSC::MacroAssembler::subPtr): |
| (JSC::MacroAssembler::xorPtr): |
| (JSC::MacroAssembler::loadPtr): |
| (JSC::MacroAssembler::loadPtrWithAddressOffsetPatch): |
| (JSC::MacroAssembler::storePtr): |
| (JSC::MacroAssembler::storePtrWithAddressOffsetPatch): |
| (JSC::MacroAssembler::branchAddPtr): |
| (JSC::MacroAssembler::branchSubPtr): |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::compileBinaryArithOp): |
| |
| 2009-02-04 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reviewed by Sam Weinig. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23681 |
| Worker tests crash in debug builds if run --singly |
| |
| The crash happened because worker threads continued running while debug-only static objects |
| were already being destroyed on main thread. |
| |
| * runtime/Structure.cpp: Create static debug-only sets in heap, so that they don't get |
| destroyed. |
| |
| * wtf/ThreadingPthreads.cpp: Changed assertions to conventional form. |
| |
| 2009-02-03 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23715 |
| |
| Simplify MacroAssembler interface, by combining comparison methods. |
| Seprate operations are combined as follows: |
| jz32/jnz32/jzPtr/jnzPtr -> branchTest32/branchTestPtr, |
| j*(Add|Mul|Sub)32/j*(Add|Mul|Sub)Ptr -> branch(Add|Mul|Sub)32/branch(Add|Mul|Sub)Ptr |
| j*32/j*Ptr (all other two op combparisons) -> branch32/brnachPtr |
| set*32 -> set32 |
| |
| Also, represent the Scale of BaseIndex addresses as a plain enum (0,1,2,3), |
| instead of as multiplicands (1,2,4,8). |
| |
| This patch singificantly reduces replication of code, and increases functionality supported |
| by the MacroAssembler. No performance impact. |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::): |
| (JSC::MacroAssembler::branchPtr): |
| (JSC::MacroAssembler::branchPtrWithPatch): |
| (JSC::MacroAssembler::branch32): |
| (JSC::MacroAssembler::branch16): |
| (JSC::MacroAssembler::branchTestPtr): |
| (JSC::MacroAssembler::branchTest32): |
| (JSC::MacroAssembler::branchAddPtr): |
| (JSC::MacroAssembler::branchAdd32): |
| (JSC::MacroAssembler::branchMul32): |
| (JSC::MacroAssembler::branchSubPtr): |
| (JSC::MacroAssembler::branchSub32): |
| (JSC::MacroAssembler::set32): |
| (JSC::MacroAssembler::setTest32): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::): |
| (JSC::X86Assembler::jccRel32): |
| (JSC::X86Assembler::setccOpcode): |
| (JSC::X86Assembler::cmpq_mr): |
| (JSC::X86Assembler::setcc_r): |
| (JSC::X86Assembler::sete_r): |
| (JSC::X86Assembler::setne_r): |
| (JSC::X86Assembler::jne): |
| (JSC::X86Assembler::je): |
| (JSC::X86Assembler::jl): |
| (JSC::X86Assembler::jb): |
| (JSC::X86Assembler::jle): |
| (JSC::X86Assembler::jbe): |
| (JSC::X86Assembler::jge): |
| (JSC::X86Assembler::jg): |
| (JSC::X86Assembler::ja): |
| (JSC::X86Assembler::jae): |
| (JSC::X86Assembler::jo): |
| (JSC::X86Assembler::jp): |
| (JSC::X86Assembler::js): |
| (JSC::X86Assembler::jcc): |
| (JSC::X86Assembler::X86InstructionFormatter::putModRmSib): |
| * jit/JIT.cpp: |
| (JSC::JIT::compileOpStrictEq): |
| (JSC::JIT::emitSlowScriptCheck): |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::compileFastArith_op_lshift): |
| (JSC::JIT::compileFastArith_op_mod): |
| (JSC::JIT::compileFastArith_op_post_inc): |
| (JSC::JIT::compileFastArith_op_post_dec): |
| (JSC::JIT::compileFastArith_op_pre_inc): |
| (JSC::JIT::compileFastArith_op_pre_dec): |
| (JSC::JIT::compileBinaryArithOp): |
| (JSC::JIT::compileFastArith_op_add): |
| (JSC::JIT::compileFastArith_op_mul): |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCall): |
| (JSC::JIT::compileOpCallSlowCase): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::checkStructure): |
| (JSC::JIT::emitJumpIfJSCell): |
| (JSC::JIT::emitJumpIfNotJSCell): |
| (JSC::JIT::emitJumpIfImmediateNumber): |
| (JSC::JIT::emitJumpIfNotImmediateNumber): |
| (JSC::JIT::emitJumpIfImmediateInteger): |
| (JSC::JIT::emitJumpIfNotImmediateInteger): |
| (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::compilePutByIdHotPath): |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdProtoList): |
| (JSC::JIT::privateCompileGetByIdChainList): |
| (JSC::JIT::privateCompileGetByIdChain): |
| * runtime/RegExp.cpp: |
| (JSC::RegExp::match): |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateEnter): |
| (JSC::WREC::Generator::generateIncrementIndex): |
| (JSC::WREC::Generator::generateLoadCharacter): |
| (JSC::WREC::Generator::generateJumpIfNotEndOfInput): |
| (JSC::WREC::Generator::generateBackreferenceQuantifier): |
| (JSC::WREC::Generator::generateNonGreedyQuantifier): |
| (JSC::WREC::Generator::generateGreedyQuantifier): |
| (JSC::WREC::Generator::generatePatternCharacterPair): |
| (JSC::WREC::Generator::generatePatternCharacter): |
| (JSC::WREC::Generator::generateCharacterClassInvertedRange): |
| (JSC::WREC::Generator::generateCharacterClassInverted): |
| (JSC::WREC::Generator::generateAssertionBOL): |
| (JSC::WREC::Generator::generateAssertionEOL): |
| (JSC::WREC::Generator::generateAssertionWordBoundary): |
| (JSC::WREC::Generator::generateBackreference): |
| |
| 2009-02-03 David Hyatt <hyatt@apple.com> |
| |
| Fix a bug in Vector's shrinkCapacity method. It did not properly copy elements into the inline buffer |
| when shrinking down from a size that was greater than the inline capacity. |
| |
| Reviewed by Maciej |
| |
| * wtf/Vector.h: |
| (WTF::VectorBuffer::VectorBuffer): |
| (WTF::VectorBuffer::allocateBuffer): |
| |
| 2009-02-03 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Reviewed by Tor Arne Vestbø. |
| |
| Added accessor for JSByteArray storage. |
| |
| * runtime/JSByteArray.h: |
| (JSC::JSByteArray::storage): |
| |
| 2009-02-03 Dmitry Titov <dimich@chromium.org> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23560 |
| Implement SharedTimer on WorkerRunLoop |
| |
| * JavaScriptCore.exp: |
| Forgot to expose ThreadCondition::timedWait() in one of previous patches. |
| |
| 2009-02-02 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| <https://bugs.webkit.org/show_bug.cgi?id=21414> REGRESSION: Regular Expressions and character classes, shorthands and ranges |
| <rdar://problem/6543487> |
| |
| In certain circumstances when WREC::Generator::generateCharacterClassInvertedRange invokes |
| itself recursively, it will incorrectly emit (and thus consume) the next single character |
| match in the current character class. As WREC uses a binary search this out of sequence |
| codegen could result in a character match being missed and so cause the regex to produce |
| incorrect results. |
| |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateCharacterClassInvertedRange): |
| |
| 2009-02-02 Darin Adler <darin@apple.com> |
| |
| Reviewed by Dave Hyatt. |
| |
| Bug 23676: Speed up uses of reserveCapacity on new vectors by adding a new reserveInitialCapacity |
| https://bugs.webkit.org/show_bug.cgi?id=23676 |
| |
| * API/JSObjectRef.cpp: |
| (JSObjectCopyPropertyNames): Use reserveInitialCapacity. |
| * parser/Lexer.cpp: |
| (JSC::Lexer::Lexer): Ditto. |
| (JSC::Lexer::clear): Ditto. |
| |
| * wtf/Vector.h: Added reserveInitialCapacity, a more efficient version of |
| reserveCapacity for use when the vector is brand new (still size 0 with no |
| capacity other than the inline capacity). |
| |
| 2009-01-30 Mark Rowe <mrowe@apple.com> |
| |
| Rubber-stamped by Oliver Hunt. |
| |
| <rdar://problem/6391501> Enable the JIT on Mac OS X x86_64 as it passes all tests. |
| |
| * wtf/Platform.h: |
| |
| 2009-01-30 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Mark Rowe and Sam Weinig. |
| |
| Finally fix load() to propagate exceptions correctly. |
| |
| * jsc.cpp: |
| (functionLoad): |
| |
| 2009-01-30 David Levin <levin@chromium.org> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23618 |
| Templated worker tasks should be more error proof to use. |
| Fix Chromium build. |
| |
| * wtf/TypeTraits.h: |
| (WTF::IsConvertibleToInteger::IsConvertibleToDouble): |
| Avoid "possible loss of data" warning when using Microsoft's C++ compiler |
| by avoiding an implicit conversion of int types to doubles. |
| |
| 2009-01-30 Laszlo Gombos <laszlo.1.gombos@nokia.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| Bug 23580: GNU mode RVCT compilation support |
| <https://bugs.webkit.org/show_bug.cgi?id=23580> |
| |
| * pcre/pcre_exec.cpp: Use COMPILER(GCC) instead of __GNUC__. |
| * wtf/FastMalloc.cpp: Ditto. |
| (WTF::TCMallocStats::): |
| * wtf/Platform.h: Don't define COMPILER(GCC) with RVCT --gnu. |
| |
| 2009-01-30 David Levin <levin@chromium.org> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| Bug 23618: Templated worker tasks should be more error proof to use |
| <https://bugs.webkit.org/show_bug.cgi?id=23618> |
| |
| Add the type traits needed for the generic worker tasks |
| and compile asserts for them. |
| |
| Add a summary header to the TypeTraits.h file to explain what is in there. |
| |
| Add a note to explain IsPod's deficiencies. |
| |
| * wtf/TypeTraits.h: |
| |
| 2009-01-30 David Levin <levin@chromium.org> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| Bug 23616: Various "template helpers" should be consolidated from isolated files in JavaScriptCore. |
| <https://bugs.webkit.org/show_bug.cgi?id=23616> |
| |
| * wtf/TypeTraits.h: Moved RemovePointer, IsPod, IsInteger to this file. |
| |
| * wtf/OwnPtr.h: Use RemovePointer from TypeTraits.h. |
| * wtf/RetainPtr.h: Ditto. |
| |
| * wtf/HashTraits.h: Use IsInteger from TypeTraits.h. |
| |
| * wtf/VectorTraits.h: Use IsPod from TypeTraits.h. |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.vcproj/WTF/WTF.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| Added TypeTraits.h. |
| |
| 2009-01-29 Stephanie Lewis <slewis@apple.com> |
| |
| RS by Oliver Hunt. |
| |
| Update the order files. |
| |
| * JavaScriptCore.order: |
| |
| 2009-01-29 Cameron Zwarich <cwzwarich@uwaterloo.ca> |
| |
| Reviewed by Oliver Hunt. |
| |
| Bug 23551: Crash on page load with profiler enabled and running |
| <https://bugs.webkit.org/show_bug.cgi?id=23551> |
| <rdar://problem/6529521> |
| |
| Interpreter::execute(FunctionBodyNode*, ...) calls Profiler::didExecute() |
| with a stale CallFrame. If some part of the scope chain has already been |
| freed, Profiler::didExecute() will crash when attempting to get the lexical |
| global object. The fix is to make the didExecute() call use the caller's |
| CallFrame, not the one made for the function call. In this case, the |
| willExecute() call should also be changed to match. |
| |
| Since this occurs in the actual inspector JS, it is difficult to reduce. |
| I couldn't make a layout test. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::execute): |
| |
| 2009-01-28 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Fix for <rdar://problem/6525537> |
| Hang occurs when closing Installer window (iTunes, Aperture) |
| |
| * JavaScriptCore.exp: Export JSGlobalData::sharedInstance. |
| |
| 2009-01-28 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoff Garen. |
| |
| Initial patch by Mark Rowe. |
| |
| <rdar://problem/6519356> |
| REGRESSION (r36006): "out of memory" alert running dromaeo on Windows |
| |
| Report the cost of the ArrayStorage vector more accurately/often. |
| |
| * runtime/JSArray.cpp: |
| (JSC::JSArray::JSArray): Report the extra cost even for a filled array |
| because JSString using the single character optimization and immediates |
| wont increase the cost themselves. |
| (JSC::JSArray::putSlowCase): Update the cost when increasing the size of |
| the array. |
| (JSC::JSArray::increaseVectorLength): Ditto. |
| |
| 2009-01-28 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoff Garen. |
| |
| Fix for <rdar://problem/6129678> |
| REGRESSION (Safari 3-4): Local variable not accessible from Dashcode console or variables view |
| |
| Iterating the properties of activation objects accessed through the WebKit debugging |
| APIs was broken by forced conversion of JSActivation to the global object. To fix this, |
| we use a proxy activation object that acts more like a normal JSObject. |
| |
| * debugger/DebuggerActivation.cpp: Added. |
| (JSC::DebuggerActivation::DebuggerActivation): |
| (JSC::DebuggerActivation::mark): |
| (JSC::DebuggerActivation::className): |
| (JSC::DebuggerActivation::getOwnPropertySlot): |
| (JSC::DebuggerActivation::put): |
| (JSC::DebuggerActivation::putWithAttributes): |
| (JSC::DebuggerActivation::deleteProperty): |
| (JSC::DebuggerActivation::getPropertyNames): |
| (JSC::DebuggerActivation::getPropertyAttributes): |
| (JSC::DebuggerActivation::defineGetter): |
| (JSC::DebuggerActivation::defineSetter): |
| (JSC::DebuggerActivation::lookupGetter): |
| (JSC::DebuggerActivation::lookupSetter): |
| * debugger/DebuggerActivation.h: Added. |
| Proxy JSActivation object for Debugging. |
| |
| * runtime/JSActivation.h: |
| (JSC::JSActivation::isActivationObject): Added. |
| * runtime/JSObject.h: |
| (JSC::JSObject::isActivationObject): Added. |
| |
| 2009-01-28 David Kilzer <ddkilzer@apple.com> |
| |
| Bug 23490: Remove initialRefCount argument from RefCounted class |
| |
| <https://bugs.webkit.org/show_bug.cgi?id=23490> |
| |
| Reviewed by Darin Adler. |
| |
| RefCountedBase now always starts with a ref count of 1, so there |
| is no need to pass the initialRefCount into the class anymore. |
| |
| * wtf/ByteArray.h: |
| (WTF::ByteArray::ByteArray): Removed call to RefCounted(1). |
| * wtf/RefCounted.h: |
| (WTF::RefCountedBase::RefCountedBase): Changed to start with a |
| ref count of 1. |
| (WTF::RefCounted::RefCounted): Removed initialRefCount argument |
| and removed call to RefCounted(1). |
| |
| 2009-01-26 Adele Peterson <adele@apple.com> |
| |
| Build fix. |
| |
| * debugger/Debugger.cpp: |
| |
| 2009-01-26 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Fixes for eq null & neq null, on 64-bit JIT. |
| https://bugs.webkit.org/show_bug.cgi?id=23559 |
| |
| This patch degrades 64-bit JIT performance on some benchmarks, |
| due to the whole not-being-incorrect thing. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| |
| 2009-01-26 Cameron Zwarich <cwzwarich@uwaterloo.ca> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Bug 23552: Dashcode evaluator no longer works after making ExecStates actual call frames |
| <https://bugs.webkit.org/show_bug.cgi?id=23552> |
| <rdar://problem/6398839> |
| |
| * JavaScriptCore.exp: |
| * debugger/Debugger.cpp: |
| (JSC::evaluateInGlobalCallFrame): Added so that WebScriptCallFrame can |
| evaluate JS starting from a global call frame. |
| * debugger/Debugger.h: |
| |
| 2009-01-25 Mark Rowe <mrowe@apple.com> |
| |
| Rubber-stamped by Dan Bernstein. |
| |
| Improve the consistency of settings in our .xcconfig files. |
| |
| * Configurations/Base.xcconfig: Enable GCC_OBJC_CALL_CXX_CDTORS to match other projects. |
| |
| 2009-01-25 Darin Adler <darin@apple.com> |
| |
| Reviewed by Mark Rowe. |
| |
| Bug 23352: Turn on more compiler warnings in the Mac build |
| https://bugs.webkit.org/show_bug.cgi?id=23352 |
| |
| Turn on the following warnings: |
| |
| -Wcast-qual |
| -Wextra-tokens |
| -Wformat=2 |
| -Winit-self |
| -Wmissing-noreturn |
| -Wpacked |
| -Wrendundant-decls |
| |
| * Configurations/Base.xcconfig: Added the new warnings. Switched to -Wextra instead of |
| -W for clarity since we don't have to support the older versions of gcc that require the |
| old -W syntax. Since we now use -Wformat=2, removed -Wformat-security. Also removed |
| -Wno-format-y2k since we can have that one on now. |
| |
| 2009-01-25 Judit Jasz <jasy@inf.u-szeged.hu> |
| |
| Reviewed by Darin Adler. |
| |
| Compilation problem fixing |
| http://bugs.webkit.org/show_bug.cgi?id=23497 |
| |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCall): Use JSValuePtr::encode. |
| |
| 2009-01-25 Darin Adler <darin@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Bug 23352: Turn on more compiler warnings in the Mac build |
| https://bugs.webkit.org/show_bug.cgi?id=23352 |
| |
| Fourth patch: Deal with the last few stray warnings. |
| |
| * parser/Parser.cpp: Only declare jscyyparse if it's not already declared. |
| This makes both separate compilation and all-in-one compilation work with the |
| -Wredundant-decls warning. |
| |
| 2009-01-25 Darin Adler <darin@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Bug 23352: Turn on more compiler warnings in the Mac build |
| https://bugs.webkit.org/show_bug.cgi?id=23352 |
| |
| Third patch: Use the noreturn attribute on functions that don't |
| return to prepare for the use of the -Wmissing-noreturn warning. |
| |
| * jit/JITCall.cpp: |
| (JSC::unreachable): Added NO_RETURN. |
| * jsc.cpp: |
| (functionQuit): Ditto. |
| (printUsageStatement): Ditto. |
| * wtf/AlwaysInline.h: Added definition of NO_RETURN. |
| |
| 2009-01-24 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| Force inlining of Lexer::matchPunctuator |
| |
| 2.2% win when parsing jQuery, Mootools, Prototype, etc |
| |
| * parser/Lexer.h: |
| |
| 2009-01-23 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Fix for <rdar://problem/6126212> |
| Ensure that callbacks out from the JSC interface are only allowed |
| to return in reverse-chronological order to that in which they were |
| made. If we allow earlier callbacks to return first, then this may |
| result in setions of the RegisterFile in use by another thread |
| being trampled. |
| |
| See uber-comment in JSLock.h for details. |
| |
| * runtime/JSLock.cpp: |
| (JSC::JSLock::DropAllLocks::DropAllLocks): |
| (JSC::JSLock::DropAllLocks::~DropAllLocks): |
| |
| 2009-01-23 Darin Adler <darin@apple.com> |
| |
| Try to fix WX build. |
| |
| * runtime/JSGlobalObjectFunctions.h: Include <wtf/unicode/Unicode.h> |
| for the definition of UChar. |
| |
| 2009-01-23 Anders Carlsson <andersca@apple.com> |
| |
| * Configurations/Base.xcconfig: |
| GCC 4.0 build fix. |
| |
| * runtime/JSNumberCell.h: |
| 64-bit build fix. |
| |
| 2009-01-23 Anders Carlsson <andersca@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Turn on -Wmissing-prototypes and fix the warnings. |
| |
| * API/JSClassRef.cpp: |
| (clearReferenceToPrototype): |
| * Configurations/Base.xcconfig: |
| * runtime/Collector.cpp: |
| (JSC::getPlatformThreadRegisters): |
| * runtime/ExceptionHelpers.cpp: |
| (JSC::createError): |
| * runtime/JSGlobalObjectFunctions.h: |
| * runtime/JSNumberCell.h: |
| * runtime/UString.cpp: |
| (JSC::initializeStaticBaseString): |
| (JSC::createRep): |
| * wtf/FastMalloc.cpp: |
| * wtf/Threading.cpp: |
| |
| 2009-01-22 Mark Rowe <mrowe@apple.com> |
| |
| Rubber-stamped by Anders Carlsson. |
| |
| Disable GCC_WARN_ABOUT_MISSING_PROTOTYPES temporarily. |
| |
| Current versions of Xcode only respect it for C and Objective-C files, |
| and our code doesn't currently compile if it is applied to C++ and |
| Objective-C++ files. |
| |
| * Configurations/Base.xcconfig: |
| |
| 2009-01-22 Steve Falkenburg <sfalken@apple.com> |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23489 |
| |
| Return currentTime() in correct units for the two early return cases. |
| |
| Reviewed by Mark Rowe. |
| |
| * wtf/CurrentTime.cpp: |
| (WTF::currentTime): |
| |
| 2009-01-22 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Mark Rowe. |
| |
| Fix for <rdar://problem/6439247> |
| FastMalloc allocating an extra 4MB of meta-data on 64-bit |
| |
| Rely on the fact that on all known x86-64 platforms only use 48 bits of |
| address space to shrink the initial size of the PageMap from ~4MB to 120K. |
| For 64-bit we still use a 3-level radix tree, but now each level is only 12 |
| bits wide. |
| |
| No performance change. |
| |
| * wtf/FastMalloc.cpp: |
| (WTF::MapSelector): Add specialization for 64 bit that takes into account the |
| 16 bits of unused address space on x86-64. |
| |
| 2009-01-22 Beth Dakin <bdakin@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fix for https://bugs.webkit.org/show_bug.cgi?id=23461 LayoutTests/ |
| fast/js/numeric-conversion.html is broken, and corresponding |
| <rdar://problem/6514842> |
| |
| The basic problem here is that parseInt(Infinity) should be NaN, |
| but we were returning 0. NaN matches Safari 3.2.1 and Firefox. |
| |
| * runtime/JSGlobalObjectFunctions.cpp: |
| (JSC::globalFuncParseInt): |
| |
| 2009-01-22 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| <rdar://problem/6516853> (r39682-r39736) JSFunFuzz: crash on "(function(){({ x2: x }), })()" |
| <https://bugs.webkit.org/show_bug.cgi?id=23479> |
| |
| Automatic semicolon insertion was resulting in this being accepted in the initial |
| nodeless parsing, but subsequent reparsing for code generation would fail, leading |
| to a crash. The solution is to ensure that reparsing a function performs parsing |
| in the same state as the initial parse. We do this by modifying the saved source |
| ranges to include rather than exclude the opening and closing braces. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): add an assertion for successful recompile |
| * parser/Lexer.h: |
| (JSC::Lexer::sourceCode): include rather than exclude braces. |
| * parser/Nodes.h: |
| (JSC::FunctionBodyNode::toSourceString): No need to append braces anymore. |
| |
| 2009-01-22 Dmitry Titov <dimich@chromium.org> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23373 |
| |
| Implement ThreadCondition::timedWait(). |
| Since we borrow the code for condition variables from other sources, |
| I did the same for timedWait(). See comments in ThreadingWin.cpp for |
| rationale and more info. |
| |
| * wtf/CONTRIBUTORS.pthreads-win32: |
| Added. A list of Pthreads-win32 contributors mentioned in their license. The license itself |
| is included into wtf/ThreadingWin32.cpp. |
| |
| * wtf/Threading.h: |
| * wtf/ThreadingWin.cpp: |
| Additional info and Pthreads-win32 license at the beginning. |
| (WTF::PlatformCondition::timedWait): new method, derived from Pthreads-win32. |
| (WTF::PlatformCondition::signal): same |
| (WTF::ThreadCondition::ThreadCondition): |
| (WTF::ThreadCondition::~ThreadCondition): |
| (WTF::ThreadCondition::wait): this now calls PlatformCondition::timedWait. |
| (WTF::ThreadCondition::timedWait): same |
| (WTF::ThreadCondition::signal): this now calls PlatformCondition::signal. |
| (WTF::ThreadCondition::broadcast): same |
| |
| 2009-01-21 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Fix for https://bugs.webkit.org/show_bug.cgi?id=23469. |
| |
| We need to check all numbers in integer switches, not just those |
| represented as integer JSImmediates. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::cti_op_switch_imm): |
| |
| 2009-01-21 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Fix for https://bugs.webkit.org/show_bug.cgi?id=23468. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| |
| 2009-01-21 Alexey Proskuryakov <ap@webkit.org> |
| |
| Suggested by Oliver Hunt. Reviewed by Oliver Hunt. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23456 |
| Function argument names leak |
| |
| * parser/Nodes.cpp: (JSC::FunctionBodyNode::~FunctionBodyNode): Destruct parameter names. |
| |
| 2009-01-20 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (Build fix). |
| |
| Windows build fix |
| |
| * JavaScriptCore.vcproj/WTF/WTF.vcproj: |
| |
| 2009-01-20 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Mark Rowe. |
| |
| Structure property table deleted offset maps are being leaked. |
| Probably shouldn't be doing that. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23442 |
| |
| * runtime/Structure.cpp: |
| (JSC::Structure::~Structure): |
| |
| 2009-01-20 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (build fix). |
| |
| Attempt to fix gtk build |
| |
| * GNUmakefile.am: |
| |
| 2009-01-20 Darin Adler <darin@apple.com> |
| |
| * runtime/StringPrototype.cpp: |
| (JSC::substituteBackreferences): Add back the initialization to fix the build. |
| |
| 2009-01-20 Darin Adler <darin@apple.com> |
| |
| Reviewed by Mark Rowe. |
| |
| Bug 23352: Turn on more compiler warnings in the Mac build |
| https://bugs.webkit.org/show_bug.cgi?id=23352 |
| |
| First patch: Fix some simple cases of various warnings. |
| |
| * pcre/pcre_compile.cpp: |
| (jsRegExpCompile): Use const_cast to change const-ness. |
| |
| * runtime/StringPrototype.cpp: |
| (JSC::substituteBackreferences): Remove unneeded initialization and |
| use UChar instead of unsigned short for UTF-16 values. |
| |
| * wtf/dtoa.cpp: |
| (WTF::strtod): Use const_cast to change const-ness. |
| |
| 2009-01-20 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (build fix). |
| |
| Whoops, remove runtime/ByteArray references from .pri and .scons builds, update .bkl |
| |
| * JavaScriptCore.pri: |
| * JavaScriptCore.scons: |
| * JavaScriptCoreSources.bkl: |
| |
| 2009-01-20 Oliver Hunt <oliver@apple.com> |
| |
| RS=Dan Bernstein. |
| |
| Move runtime/ByteArray to wtf/ByteArray |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.exp: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.scons: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.vcproj/WTF/WTF.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * runtime/JSByteArray.cpp: |
| * runtime/JSByteArray.h: |
| * wtf/ByteArray.cpp: Renamed from JavaScriptCore/runtime/ByteArray.cpp. |
| (WTF::ByteArray::create): |
| * wtf/ByteArray.h: Renamed from JavaScriptCore/runtime/ByteArray.h. |
| (WTF::ByteArray::length): |
| (WTF::ByteArray::set): |
| (WTF::ByteArray::get): |
| (WTF::ByteArray::data): |
| (WTF::ByteArray::deref): |
| (WTF::ByteArray::ByteArray): |
| |
| 2009-01-19 Sam Weinig <sam@webkit.org> |
| |
| Rubber-stamped by Gavin Barraclough. |
| |
| Remove temporary operator-> from JSValuePtr. |
| |
| * API/JSCallbackFunction.cpp: |
| (JSC::JSCallbackFunction::call): |
| * API/JSCallbackObjectFunctions.h: |
| (JSC::::call): |
| (JSC::::toNumber): |
| (JSC::::toString): |
| * API/JSObjectRef.cpp: |
| (JSObjectSetPrototype): |
| * API/JSValueRef.cpp: |
| (JSValueGetType): |
| (JSValueIsUndefined): |
| (JSValueIsNull): |
| (JSValueIsBoolean): |
| (JSValueIsNumber): |
| (JSValueIsString): |
| (JSValueIsObject): |
| (JSValueIsObjectOfClass): |
| (JSValueToBoolean): |
| (JSValueToNumber): |
| (JSValueToStringCopy): |
| (JSValueToObject): |
| * bytecode/CodeBlock.cpp: |
| (JSC::valueToSourceString): |
| (JSC::CodeBlock::mark): |
| * bytecode/CodeBlock.h: |
| (JSC::CodeBlock::isKnownNotImmediate): |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::emitEqualityOp): |
| (JSC::keyForImmediateSwitch): |
| * interpreter/Interpreter.cpp: |
| (JSC::jsLess): |
| (JSC::jsLessEq): |
| (JSC::jsAddSlowCase): |
| (JSC::jsAdd): |
| (JSC::jsTypeStringForValue): |
| (JSC::jsIsObjectType): |
| (JSC::jsIsFunctionType): |
| (JSC::isNotObject): |
| (JSC::Interpreter::callEval): |
| (JSC::Interpreter::throwException): |
| (JSC::cachePrototypeChain): |
| (JSC::Interpreter::tryCachePutByID): |
| (JSC::countPrototypeChainEntriesAndCheckForProxies): |
| (JSC::Interpreter::tryCacheGetByID): |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::tryCTICachePutByID): |
| (JSC::Interpreter::tryCTICacheGetByID): |
| (JSC::Interpreter::cti_op_convert_this): |
| (JSC::Interpreter::cti_op_add): |
| (JSC::Interpreter::cti_op_pre_inc): |
| (JSC::Interpreter::cti_op_put_by_id_generic): |
| (JSC::Interpreter::cti_op_get_by_id_generic): |
| (JSC::Interpreter::cti_op_put_by_id): |
| (JSC::Interpreter::cti_op_put_by_id_second): |
| (JSC::Interpreter::cti_op_put_by_id_fail): |
| (JSC::Interpreter::cti_op_get_by_id): |
| (JSC::Interpreter::cti_op_get_by_id_second): |
| (JSC::Interpreter::cti_op_get_by_id_self_fail): |
| (JSC::Interpreter::cti_op_get_by_id_proto_list): |
| (JSC::Interpreter::cti_op_get_by_id_proto_list_full): |
| (JSC::Interpreter::cti_op_get_by_id_proto_fail): |
| (JSC::Interpreter::cti_op_get_by_id_array_fail): |
| (JSC::Interpreter::cti_op_get_by_id_string_fail): |
| (JSC::Interpreter::cti_op_instanceof): |
| (JSC::Interpreter::cti_op_del_by_id): |
| (JSC::Interpreter::cti_op_mul): |
| (JSC::Interpreter::cti_op_call_JSFunction): |
| (JSC::Interpreter::cti_op_call_NotJSFunction): |
| (JSC::Interpreter::cti_op_construct_JSConstruct): |
| (JSC::Interpreter::cti_op_construct_NotJSConstruct): |
| (JSC::Interpreter::cti_op_get_by_val): |
| (JSC::Interpreter::cti_op_get_by_val_byte_array): |
| (JSC::Interpreter::cti_op_sub): |
| (JSC::Interpreter::cti_op_put_by_val): |
| (JSC::Interpreter::cti_op_put_by_val_array): |
| (JSC::Interpreter::cti_op_put_by_val_byte_array): |
| (JSC::Interpreter::cti_op_loop_if_true): |
| (JSC::Interpreter::cti_op_negate): |
| (JSC::Interpreter::cti_op_div): |
| (JSC::Interpreter::cti_op_pre_dec): |
| (JSC::Interpreter::cti_op_not): |
| (JSC::Interpreter::cti_op_jtrue): |
| (JSC::Interpreter::cti_op_post_inc): |
| (JSC::Interpreter::cti_op_lshift): |
| (JSC::Interpreter::cti_op_bitand): |
| (JSC::Interpreter::cti_op_rshift): |
| (JSC::Interpreter::cti_op_bitnot): |
| (JSC::Interpreter::cti_op_mod): |
| (JSC::Interpreter::cti_op_post_dec): |
| (JSC::Interpreter::cti_op_urshift): |
| (JSC::Interpreter::cti_op_bitxor): |
| (JSC::Interpreter::cti_op_bitor): |
| (JSC::Interpreter::cti_op_push_scope): |
| (JSC::Interpreter::cti_op_is_undefined): |
| (JSC::Interpreter::cti_op_is_boolean): |
| (JSC::Interpreter::cti_op_is_number): |
| (JSC::Interpreter::cti_op_to_jsnumber): |
| (JSC::Interpreter::cti_op_in): |
| (JSC::Interpreter::cti_op_put_by_index): |
| (JSC::Interpreter::cti_op_switch_imm): |
| (JSC::Interpreter::cti_op_switch_char): |
| (JSC::Interpreter::cti_op_switch_string): |
| (JSC::Interpreter::cti_op_del_by_val): |
| (JSC::Interpreter::cti_op_put_getter): |
| (JSC::Interpreter::cti_op_put_setter): |
| (JSC::Interpreter::cti_op_new_error): |
| * interpreter/Interpreter.h: |
| (JSC::Interpreter::isJSArray): |
| (JSC::Interpreter::isJSString): |
| (JSC::Interpreter::isJSByteArray): |
| * interpreter/Register.h: |
| (JSC::Register::marked): |
| (JSC::Register::mark): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::getConstantOperandImmediateInt): |
| (JSC::JIT::isOperandConstantImmediateInt): |
| * jsc.cpp: |
| (functionPrint): |
| (functionDebug): |
| (functionRun): |
| (functionLoad): |
| (runWithScripts): |
| (runInteractive): |
| * parser/Nodes.cpp: |
| (JSC::processClauseList): |
| * profiler/ProfileGenerator.cpp: |
| (JSC::ProfileGenerator::addParentForConsoleStart): |
| * profiler/Profiler.cpp: |
| (JSC::Profiler::createCallIdentifier): |
| * runtime/ArrayConstructor.cpp: |
| (JSC::constructArrayWithSizeQuirk): |
| * runtime/ArrayPrototype.cpp: |
| (JSC::arrayProtoFuncToString): |
| (JSC::arrayProtoFuncToLocaleString): |
| (JSC::arrayProtoFuncJoin): |
| (JSC::arrayProtoFuncConcat): |
| (JSC::arrayProtoFuncPop): |
| (JSC::arrayProtoFuncPush): |
| (JSC::arrayProtoFuncReverse): |
| (JSC::arrayProtoFuncShift): |
| (JSC::arrayProtoFuncSlice): |
| (JSC::arrayProtoFuncSort): |
| (JSC::arrayProtoFuncSplice): |
| (JSC::arrayProtoFuncUnShift): |
| (JSC::arrayProtoFuncFilter): |
| (JSC::arrayProtoFuncMap): |
| (JSC::arrayProtoFuncEvery): |
| (JSC::arrayProtoFuncForEach): |
| (JSC::arrayProtoFuncSome): |
| (JSC::arrayProtoFuncIndexOf): |
| (JSC::arrayProtoFuncLastIndexOf): |
| * runtime/BooleanConstructor.cpp: |
| (JSC::constructBoolean): |
| (JSC::callBooleanConstructor): |
| * runtime/BooleanPrototype.cpp: |
| (JSC::booleanProtoFuncToString): |
| (JSC::booleanProtoFuncValueOf): |
| * runtime/Collector.cpp: |
| (JSC::Heap::protect): |
| (JSC::Heap::unprotect): |
| (JSC::Heap::heap): |
| (JSC::Heap::collect): |
| (JSC::typeName): |
| * runtime/Completion.cpp: |
| (JSC::evaluate): |
| * runtime/DateConstructor.cpp: |
| (JSC::constructDate): |
| (JSC::dateParse): |
| (JSC::dateUTC): |
| * runtime/DateInstance.h: |
| (JSC::DateInstance::internalNumber): |
| * runtime/DatePrototype.cpp: |
| (JSC::formatLocaleDate): |
| (JSC::fillStructuresUsingTimeArgs): |
| (JSC::fillStructuresUsingDateArgs): |
| (JSC::dateProtoFuncToString): |
| (JSC::dateProtoFuncToUTCString): |
| (JSC::dateProtoFuncToDateString): |
| (JSC::dateProtoFuncToTimeString): |
| (JSC::dateProtoFuncToLocaleString): |
| (JSC::dateProtoFuncToLocaleDateString): |
| (JSC::dateProtoFuncToLocaleTimeString): |
| (JSC::dateProtoFuncGetTime): |
| (JSC::dateProtoFuncGetFullYear): |
| (JSC::dateProtoFuncGetUTCFullYear): |
| (JSC::dateProtoFuncToGMTString): |
| (JSC::dateProtoFuncGetMonth): |
| (JSC::dateProtoFuncGetUTCMonth): |
| (JSC::dateProtoFuncGetDate): |
| (JSC::dateProtoFuncGetUTCDate): |
| (JSC::dateProtoFuncGetDay): |
| (JSC::dateProtoFuncGetUTCDay): |
| (JSC::dateProtoFuncGetHours): |
| (JSC::dateProtoFuncGetUTCHours): |
| (JSC::dateProtoFuncGetMinutes): |
| (JSC::dateProtoFuncGetUTCMinutes): |
| (JSC::dateProtoFuncGetSeconds): |
| (JSC::dateProtoFuncGetUTCSeconds): |
| (JSC::dateProtoFuncGetMilliSeconds): |
| (JSC::dateProtoFuncGetUTCMilliseconds): |
| (JSC::dateProtoFuncGetTimezoneOffset): |
| (JSC::dateProtoFuncSetTime): |
| (JSC::setNewValueFromTimeArgs): |
| (JSC::setNewValueFromDateArgs): |
| (JSC::dateProtoFuncSetYear): |
| (JSC::dateProtoFuncGetYear): |
| * runtime/ErrorConstructor.cpp: |
| (JSC::constructError): |
| * runtime/ErrorPrototype.cpp: |
| (JSC::errorProtoFuncToString): |
| * runtime/ExceptionHelpers.cpp: |
| (JSC::createError): |
| (JSC::createErrorMessage): |
| * runtime/FunctionConstructor.cpp: |
| (JSC::constructFunction): |
| * runtime/FunctionPrototype.cpp: |
| (JSC::functionProtoFuncToString): |
| (JSC::functionProtoFuncApply): |
| (JSC::functionProtoFuncCall): |
| * runtime/GetterSetter.cpp: |
| (JSC::GetterSetter::toObject): |
| * runtime/JSActivation.cpp: |
| (JSC::JSActivation::getOwnPropertySlot): |
| * runtime/JSArray.cpp: |
| (JSC::JSArray::put): |
| (JSC::JSArray::mark): |
| (JSC::JSArray::sort): |
| (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): |
| (JSC::JSArray::compactForSorting): |
| * runtime/JSByteArray.h: |
| (JSC::JSByteArray::setIndex): |
| * runtime/JSCell.h: |
| (JSC::asCell): |
| * runtime/JSFunction.cpp: |
| (JSC::JSFunction::call): |
| (JSC::JSFunction::construct): |
| * runtime/JSGlobalObject.cpp: |
| (JSC::markIfNeeded): |
| (JSC::lastInPrototypeChain): |
| * runtime/JSGlobalObjectFunctions.cpp: |
| (JSC::encode): |
| (JSC::decode): |
| (JSC::globalFuncEval): |
| (JSC::globalFuncParseInt): |
| (JSC::globalFuncParseFloat): |
| (JSC::globalFuncIsNaN): |
| (JSC::globalFuncIsFinite): |
| (JSC::globalFuncEscape): |
| (JSC::globalFuncUnescape): |
| (JSC::globalFuncJSCPrint): |
| * runtime/JSImmediate.cpp: |
| (JSC::JSImmediate::toThisObject): |
| (JSC::JSImmediate::toObject): |
| (JSC::JSImmediate::prototype): |
| (JSC::JSImmediate::toString): |
| * runtime/JSImmediate.h: |
| * runtime/JSObject.cpp: |
| (JSC::JSObject::mark): |
| (JSC::JSObject::put): |
| (JSC::callDefaultValueFunction): |
| (JSC::JSObject::getPrimitiveNumber): |
| (JSC::JSObject::defineGetter): |
| (JSC::JSObject::defineSetter): |
| (JSC::JSObject::lookupGetter): |
| (JSC::JSObject::lookupSetter): |
| (JSC::JSObject::hasInstance): |
| (JSC::JSObject::toNumber): |
| (JSC::JSObject::toString): |
| * runtime/JSObject.h: |
| (JSC::JSObject::JSObject): |
| (JSC::JSObject::inlineGetOwnPropertySlot): |
| (JSC::JSObject::getOwnPropertySlotForWrite): |
| (JSC::JSObject::getPropertySlot): |
| (JSC::JSValuePtr::get): |
| * runtime/JSPropertyNameIterator.h: |
| (JSC::JSPropertyNameIterator::create): |
| * runtime/JSString.cpp: |
| (JSC::JSString::getOwnPropertySlot): |
| * runtime/JSValue.h: |
| * runtime/JSWrapperObject.cpp: |
| (JSC::JSWrapperObject::mark): |
| * runtime/JSWrapperObject.h: |
| (JSC::JSWrapperObject::setInternalValue): |
| * runtime/MathObject.cpp: |
| (JSC::mathProtoFuncAbs): |
| (JSC::mathProtoFuncACos): |
| (JSC::mathProtoFuncASin): |
| (JSC::mathProtoFuncATan): |
| (JSC::mathProtoFuncATan2): |
| (JSC::mathProtoFuncCeil): |
| (JSC::mathProtoFuncCos): |
| (JSC::mathProtoFuncExp): |
| (JSC::mathProtoFuncFloor): |
| (JSC::mathProtoFuncLog): |
| (JSC::mathProtoFuncMax): |
| (JSC::mathProtoFuncMin): |
| (JSC::mathProtoFuncPow): |
| (JSC::mathProtoFuncRound): |
| (JSC::mathProtoFuncSin): |
| (JSC::mathProtoFuncSqrt): |
| (JSC::mathProtoFuncTan): |
| * runtime/NativeErrorConstructor.cpp: |
| (JSC::NativeErrorConstructor::NativeErrorConstructor): |
| (JSC::NativeErrorConstructor::construct): |
| * runtime/NumberConstructor.cpp: |
| (JSC::constructWithNumberConstructor): |
| (JSC::callNumberConstructor): |
| * runtime/NumberPrototype.cpp: |
| (JSC::numberProtoFuncToString): |
| (JSC::numberProtoFuncToLocaleString): |
| (JSC::numberProtoFuncValueOf): |
| (JSC::numberProtoFuncToFixed): |
| (JSC::numberProtoFuncToExponential): |
| (JSC::numberProtoFuncToPrecision): |
| * runtime/ObjectConstructor.cpp: |
| (JSC::constructObject): |
| * runtime/ObjectPrototype.cpp: |
| (JSC::objectProtoFuncValueOf): |
| (JSC::objectProtoFuncHasOwnProperty): |
| (JSC::objectProtoFuncIsPrototypeOf): |
| (JSC::objectProtoFuncDefineGetter): |
| (JSC::objectProtoFuncDefineSetter): |
| (JSC::objectProtoFuncLookupGetter): |
| (JSC::objectProtoFuncLookupSetter): |
| (JSC::objectProtoFuncPropertyIsEnumerable): |
| (JSC::objectProtoFuncToLocaleString): |
| (JSC::objectProtoFuncToString): |
| * runtime/Operations.h: |
| (JSC::JSValuePtr::equalSlowCaseInline): |
| (JSC::JSValuePtr::strictEqual): |
| (JSC::JSValuePtr::strictEqualSlowCaseInline): |
| * runtime/Protect.h: |
| (JSC::gcProtect): |
| (JSC::gcUnprotect): |
| * runtime/RegExpConstructor.cpp: |
| (JSC::setRegExpConstructorInput): |
| (JSC::setRegExpConstructorMultiline): |
| (JSC::constructRegExp): |
| * runtime/RegExpObject.cpp: |
| (JSC::setRegExpObjectLastIndex): |
| (JSC::RegExpObject::match): |
| * runtime/RegExpPrototype.cpp: |
| (JSC::regExpProtoFuncTest): |
| (JSC::regExpProtoFuncExec): |
| (JSC::regExpProtoFuncCompile): |
| (JSC::regExpProtoFuncToString): |
| * runtime/StringConstructor.cpp: |
| (JSC::stringFromCharCodeSlowCase): |
| (JSC::stringFromCharCode): |
| (JSC::constructWithStringConstructor): |
| (JSC::callStringConstructor): |
| * runtime/StringPrototype.cpp: |
| (JSC::stringProtoFuncReplace): |
| (JSC::stringProtoFuncToString): |
| (JSC::stringProtoFuncCharAt): |
| (JSC::stringProtoFuncCharCodeAt): |
| (JSC::stringProtoFuncConcat): |
| (JSC::stringProtoFuncIndexOf): |
| (JSC::stringProtoFuncLastIndexOf): |
| (JSC::stringProtoFuncMatch): |
| (JSC::stringProtoFuncSearch): |
| (JSC::stringProtoFuncSlice): |
| (JSC::stringProtoFuncSplit): |
| (JSC::stringProtoFuncSubstr): |
| (JSC::stringProtoFuncSubstring): |
| (JSC::stringProtoFuncToLowerCase): |
| (JSC::stringProtoFuncToUpperCase): |
| (JSC::stringProtoFuncLocaleCompare): |
| (JSC::stringProtoFuncBig): |
| (JSC::stringProtoFuncSmall): |
| (JSC::stringProtoFuncBlink): |
| (JSC::stringProtoFuncBold): |
| (JSC::stringProtoFuncFixed): |
| (JSC::stringProtoFuncItalics): |
| (JSC::stringProtoFuncStrike): |
| (JSC::stringProtoFuncSub): |
| (JSC::stringProtoFuncSup): |
| (JSC::stringProtoFuncFontcolor): |
| (JSC::stringProtoFuncFontsize): |
| (JSC::stringProtoFuncAnchor): |
| (JSC::stringProtoFuncLink): |
| * runtime/Structure.cpp: |
| (JSC::Structure::Structure): |
| (JSC::Structure::getEnumerablePropertyNames): |
| (JSC::Structure::createCachedPrototypeChain): |
| * runtime/Structure.h: |
| (JSC::Structure::mark): |
| * runtime/StructureChain.cpp: |
| (JSC::StructureChain::StructureChain): |
| |
| 2009-01-19 Darin Adler <darin@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Bug 23409: REGRESSION: RegExp 'replace()' function improperly processes '$$' |
| <https://bugs.webkit.org/show_bug.cgi?id=23409> |
| <rdar://problem/6505723> |
| |
| Test: fast/js/string-replace-3.html |
| |
| * runtime/StringPrototype.cpp: |
| (JSC::substituteBackreferences): Remove code that adds an extra $ -- not sure |
| how this ever worked. |
| |
| 2009-01-16 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| On x86-64 jit, cache JSImmedate::TagMask & JSImmedate::TagTypeNumber in |
| registers, save reloading them every time they're used. |
| |
| Draws x86-64 jit performance close to that of i386 jit. |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::subPtr): |
| (JSC::MacroAssembler::jnzPtr): |
| (JSC::MacroAssembler::jzPtr): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::compileBinaryArithOpSlowCase): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitJumpIfJSCell): |
| (JSC::JIT::emitJumpIfNotJSCell): |
| (JSC::JIT::emitJumpIfImmediateNumber): |
| (JSC::JIT::emitJumpIfNotImmediateNumber): |
| (JSC::JIT::emitJumpIfImmediateInteger): |
| (JSC::JIT::emitJumpIfNotImmediateInteger): |
| (JSC::JIT::emitFastArithIntToImmNoCheck): |
| |
| 2009-01-16 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Add support to x86-64 JIT for inline double precision arithmetic ops. |
| +5/6% on x86-64, JIT enabled, sunspider. |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::addPtr): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::movq_rr): |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::compileFastArith_op_pre_inc): |
| (JSC::JIT::compileBinaryArithOp): |
| (JSC::JIT::compileBinaryArithOpSlowCase): |
| (JSC::JIT::compileFastArith_op_add): |
| (JSC::JIT::compileFastArithSlow_op_add): |
| (JSC::JIT::compileFastArith_op_mul): |
| (JSC::JIT::compileFastArithSlow_op_mul): |
| (JSC::JIT::compileFastArith_op_sub): |
| (JSC::JIT::compileFastArithSlow_op_sub): |
| * parser/ResultType.h: |
| (JSC::ResultType::isReusable): |
| (JSC::ResultType::isInt32): |
| (JSC::ResultType::definitelyIsNumber): |
| (JSC::ResultType::mightBeNumber): |
| (JSC::ResultType::isNotNumber): |
| (JSC::ResultType::unknownType): |
| |
| 2009-01-16 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Fixes for SamplingTool. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23390 |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::storePtr): |
| * bytecode/SamplingTool.cpp: |
| (JSC::SamplingTool::run): |
| (JSC::SamplingTool::dump): |
| * bytecode/SamplingTool.h: |
| (JSC::SamplingTool::encodeSample): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompile): |
| * jit/JIT.h: |
| (JSC::JIT::samplingToolTrackCodeBlock): |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCall): |
| (JSC::JIT::compileOpCallSlowCase): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitCTICall_internal): |
| |
| 2009-01-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Fixed <rdar://problem/6452301> REGRESSION: Latest WebKit nightlies |
| turn "c" into "" when stripping \\c_ character |
| |
| * wrec/WRECParser.cpp: |
| (JSC::WREC::Parser::consumeEscape): Mimic a Firefox quirk when parsing |
| control escapes inside character classes. |
| |
| 2009-01-16 Adam Roben <aroben@apple.com> |
| |
| Windows build fix |
| |
| * wrec/WRECParser.cpp: |
| (JSC::WREC::Parser::parseParentheses): Removed unreachable code. |
| |
| 2009-01-15 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Fixed <rdar://problem/6471394> REGRESSION (r39164): Discarding quantifier |
| on assertion gives incorrect result (23075) |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23075 |
| |
| * pcre/pcre_compile.cpp: |
| (compileBranch): Throw away an assertion if it's followed by a quantifier |
| with a 0 minimum, to match SpiderMonkey, v8, and the ECMA spec. |
| |
| * wrec/WRECParser.cpp: |
| (JSC::WREC::Parser::parseParentheses): Fall back on PCRE for the rare |
| case of an assertion with a quantifier with a 0 minimum, since we |
| don't handle quantified subexpressions yet, and in this special case, |
| we can't just throw away the quantifier. |
| |
| 2009-01-15 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Add support in ResultType to track that the results of bitops |
| are always of type int32_t. |
| |
| * parser/Nodes.cpp: |
| (JSC::ReadModifyResolveNode::emitBytecode): |
| (JSC::ReadModifyDotNode::emitBytecode): |
| (JSC::ReadModifyBracketNode::emitBytecode): |
| * parser/Nodes.h: |
| (JSC::ExpressionNode::): |
| (JSC::BooleanNode::): |
| (JSC::NumberNode::): |
| (JSC::StringNode::): |
| (JSC::PrePostResolveNode::): |
| (JSC::TypeOfResolveNode::): |
| (JSC::TypeOfValueNode::): |
| (JSC::UnaryPlusNode::): |
| (JSC::NegateNode::): |
| (JSC::BitwiseNotNode::): |
| (JSC::LogicalNotNode::): |
| (JSC::MultNode::): |
| (JSC::DivNode::): |
| (JSC::ModNode::): |
| (JSC::SubNode::): |
| (JSC::LeftShiftNode::): |
| (JSC::RightShiftNode::): |
| (JSC::UnsignedRightShiftNode::): |
| (JSC::LessNode::): |
| (JSC::GreaterNode::): |
| (JSC::LessEqNode::): |
| (JSC::GreaterEqNode::): |
| (JSC::InstanceOfNode::): |
| (JSC::EqualNode::): |
| (JSC::NotEqualNode::): |
| (JSC::StrictEqualNode::): |
| (JSC::NotStrictEqualNode::): |
| (JSC::BitAndNode::): |
| (JSC::BitOrNode::): |
| (JSC::BitXOrNode::): |
| (JSC::LogicalOpNode::): |
| * parser/ResultType.h: |
| (JSC::ResultType::isInt32): |
| (JSC::ResultType::isNotNumber): |
| (JSC::ResultType::booleanType): |
| (JSC::ResultType::numberType): |
| (JSC::ResultType::numberTypeCanReuse): |
| (JSC::ResultType::numberTypeCanReuseIsInt32): |
| (JSC::ResultType::stringOrNumberTypeCanReuse): |
| (JSC::ResultType::stringType): |
| (JSC::ResultType::unknownType): |
| (JSC::ResultType::forAdd): |
| (JSC::ResultType::forBitOp): |
| (JSC::OperandTypes::OperandTypes): |
| |
| 2009-01-15 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Add support for integer addition, subtraction and multiplication |
| in JIT code on x86-64. |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::mul32): |
| (JSC::MacroAssembler::sub32): |
| (JSC::MacroAssembler::joMul32): |
| (JSC::MacroAssembler::joSub32): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::compileFastArith_op_add): |
| (JSC::JIT::compileFastArithSlow_op_add): |
| (JSC::JIT::compileFastArith_op_mul): |
| (JSC::JIT::compileFastArithSlow_op_mul): |
| (JSC::JIT::compileFastArith_op_sub): |
| (JSC::JIT::compileFastArithSlow_op_sub): |
| |
| 2009-01-15 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| On x86-64 allow JSImmediate to encode 64-bit double precision values. |
| This patch only affects builds that set USE(ALTERNATE_JSIMMEDIATE). |
| Updates the implementation of JSValuePtr:: and JSImmediate:: methods |
| that operate on neumeric values to be be aware of the new representation. |
| When this representation is in use, the class JSNumberCell is redundant |
| and is compiled out. |
| |
| The format of the new immediate representation is documented in JSImmediate.h. |
| |
| * JavaScriptCore.exp: |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::subPtr): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::): |
| (JSC::X86Assembler::subq_rr): |
| (JSC::X86Assembler::movq_rr): |
| (JSC::X86Assembler::ucomisd_rr): |
| (JSC::X86Assembler::X86InstructionFormatter::twoByteOp64): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::cti_op_stricteq): |
| (JSC::Interpreter::cti_op_nstricteq): |
| * jit/JIT.cpp: |
| (JSC::JIT::compileOpStrictEq): |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::compileFastArith_op_lshift): |
| (JSC::JIT::compileFastArith_op_rshift): |
| (JSC::JIT::compileFastArith_op_bitand): |
| (JSC::JIT::compileFastArith_op_mod): |
| (JSC::JIT::compileFastArith_op_add): |
| (JSC::JIT::compileFastArith_op_mul): |
| (JSC::JIT::compileFastArith_op_post_inc): |
| (JSC::JIT::compileFastArith_op_post_dec): |
| (JSC::JIT::compileFastArith_op_pre_inc): |
| (JSC::JIT::compileFastArith_op_pre_dec): |
| (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): |
| (JSC::JIT::compileBinaryArithOp): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitJumpIfBothJSCells): |
| (JSC::JIT::emitJumpIfEitherNumber): |
| (JSC::JIT::emitJumpIfNotEitherNumber): |
| (JSC::JIT::emitJumpIfImmediateIntegerNumber): |
| (JSC::JIT::emitJumpIfNotImmediateIntegerNumber): |
| (JSC::JIT::emitJumpIfNotImmediateIntegerNumbers): |
| (JSC::JIT::emitJumpSlowCaseIfNotImmediateIntegerNumber): |
| (JSC::JIT::emitJumpSlowCaseIfNotImmediateIntegerNumbers): |
| (JSC::JIT::emitFastArithDeTagImmediate): |
| (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): |
| (JSC::JIT::emitFastArithReTagImmediate): |
| (JSC::JIT::emitFastArithIntToImmNoCheck): |
| * runtime/JSCell.h: |
| * runtime/JSGlobalData.cpp: |
| (JSC::JSGlobalData::JSGlobalData): |
| * runtime/JSImmediate.cpp: |
| (JSC::JSImmediate::toThisObject): |
| (JSC::JSImmediate::toObject): |
| (JSC::JSImmediate::toString): |
| * runtime/JSImmediate.h: |
| (JSC::wtf_reinterpret_cast): |
| (JSC::JSImmediate::isNumber): |
| (JSC::JSImmediate::isIntegerNumber): |
| (JSC::JSImmediate::isDoubleNumber): |
| (JSC::JSImmediate::isPositiveIntegerNumber): |
| (JSC::JSImmediate::areBothImmediateIntegerNumbers): |
| (JSC::JSImmediate::makeInt): |
| (JSC::JSImmediate::makeDouble): |
| (JSC::JSImmediate::doubleValue): |
| (JSC::doubleToBoolean): |
| (JSC::JSImmediate::toBoolean): |
| (JSC::JSImmediate::getTruncatedUInt32): |
| (JSC::JSImmediate::makeOutOfIntegerRange): |
| (JSC::JSImmediate::from): |
| (JSC::JSImmediate::getTruncatedInt32): |
| (JSC::JSImmediate::toDouble): |
| (JSC::JSImmediate::getUInt32): |
| (JSC::JSValuePtr::isInt32Fast): |
| (JSC::JSValuePtr::isUInt32Fast): |
| (JSC::JSValuePtr::areBothInt32Fast): |
| (JSC::JSFastMath::canDoFastBitwiseOperations): |
| (JSC::JSFastMath::xorImmediateNumbers): |
| (JSC::JSFastMath::canDoFastRshift): |
| (JSC::JSFastMath::canDoFastUrshift): |
| (JSC::JSFastMath::rightShiftImmediateNumbers): |
| (JSC::JSFastMath::canDoFastAdditiveOperations): |
| (JSC::JSFastMath::addImmediateNumbers): |
| (JSC::JSFastMath::subImmediateNumbers): |
| * runtime/JSNumberCell.cpp: |
| (JSC::jsNumberCell): |
| * runtime/JSNumberCell.h: |
| (JSC::createNumberStructure): |
| (JSC::isNumberCell): |
| (JSC::asNumberCell): |
| (JSC::jsNumber): |
| (JSC::JSValuePtr::isDoubleNumber): |
| (JSC::JSValuePtr::getDoubleNumber): |
| (JSC::JSValuePtr::isNumber): |
| (JSC::JSValuePtr::uncheckedGetNumber): |
| (JSC::jsNaN): |
| (JSC::JSValuePtr::getNumber): |
| (JSC::JSValuePtr::numberToInt32): |
| (JSC::JSValuePtr::numberToUInt32): |
| * runtime/JSValue.h: |
| * runtime/NumberConstructor.cpp: |
| (JSC::numberConstructorNegInfinity): |
| (JSC::numberConstructorPosInfinity): |
| (JSC::numberConstructorMaxValue): |
| (JSC::numberConstructorMinValue): |
| * runtime/NumberObject.cpp: |
| (JSC::constructNumber): |
| * runtime/NumberObject.h: |
| * runtime/Operations.h: |
| (JSC::JSValuePtr::equal): |
| (JSC::JSValuePtr::equalSlowCaseInline): |
| (JSC::JSValuePtr::strictEqual): |
| (JSC::JSValuePtr::strictEqualSlowCaseInline): |
| * wtf/Platform.h: |
| |
| 2009-01-15 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| <rdar://problem/6045018> |
| REGRESSION (r34838): JavaScript objects appear to be leaked after loading google.com |
| |
| Subtract the number of JSStrings cached in SmallStrings when calculating the |
| number of live JSObjects. |
| |
| * runtime/Collector.cpp: |
| (JSC::Heap::objectCount): |
| * runtime/SmallStrings.cpp: |
| (JSC::SmallStrings::count): |
| * runtime/SmallStrings.h: |
| |
| 2009-01-15 Sam Weinig <sam@webkit.org> |
| |
| Fix Qt build. |
| |
| * runtime/Collector.cpp: |
| |
| 2009-01-15 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Fix crash seen running fast/canvas. |
| |
| Make sure to mark the ScopeNode and CodeBlock being created |
| in the re-parse for exception information. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): |
| * parser/Nodes.h: |
| (JSC::ScopeNode::mark): |
| * runtime/Collector.cpp: |
| (JSC::Heap::collect): |
| * runtime/JSGlobalData.cpp: |
| (JSC::JSGlobalData::JSGlobalData): |
| * runtime/JSGlobalData.h: |
| |
| 2009-01-15 Craig Schlenter <craig.schlenter@gmail.com> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23347 |
| Compilation of JavaScriptCore/wtf/ThreadingPthreads.cpp fails on Linux |
| |
| * wtf/ThreadingPthreads.cpp: included limits.h as INT_MAX is defined there. |
| |
| 2009-01-15 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Bug 23225: REGRESSION: Assertion failure in reparseInPlace() (m_sourceElements) at sfgate.com |
| <https://bugs.webkit.org/show_bug.cgi?id=23225> <rdar://problem/6487432> |
| |
| Character position for open and closing brace was incorrectly referencing m_position to |
| record their position in a source document, however this is unsafe as BOMs may lead to |
| m_position being an arbitrary position from the real position of the current character. |
| |
| * parser/Lexer.cpp: |
| (JSC::Lexer::matchPunctuator): |
| |
| 2009-01-14 David Kilzer <ddkilzer@apple.com> |
| |
| Bug 23153: JSC build always touches JavaScriptCore/docs/bytecode.html |
| |
| <https://bugs.webkit.org/show_bug.cgi?id=23153> |
| |
| Reviewed by Darin Adler. |
| |
| Instead of building bytecode.html into ${SRCROOT}/docs/bytecode.html, build it |
| into ${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore/docs/bytecode.html. |
| |
| Also fixes make-bytecode-docs.pl to actually generate documentation. |
| |
| * DerivedSources.make: Changed bytecode.html to be built into local docs |
| directory in ${BUILT_PRODUCTS_DIR}/DerivedSources/JavaScriptCore. |
| * JavaScriptCore.xcodeproj/project.pbxproj: Added "/docs" to the end of the |
| "mkdir -p" command so that the docs subdirectory is automatically created. |
| * docs/make-bytecode-docs.pl: Changed BEGIN_OPCODE to DEFINE_OPCODE so that |
| documentation is actually generated. |
| |
| 2009-01-14 Adam Treat <adam.treat@torchmobile.com> |
| |
| Build fix for Qt from Dmitry Titov. |
| |
| * wtf/ThreadingQt.cpp: |
| (WTF::ThreadCondition::timedWait): |
| |
| 2009-01-14 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Bug 22903: REGRESSION (r36267): visiting this site reliably crashes WebKit nightly |
| |
| EvalCodeBlock's do not reference the functions that are declared inside the eval |
| code, this means that simply marking the EvalCodeBlock through the global object |
| is insufficient to mark the declared functions. This patch corrects this by |
| explicitly marking the CodeBlocks of all the functions declared in the cached |
| EvalNode. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::mark): |
| * bytecode/CodeBlock.h: |
| (JSC::CodeBlock::hasFunctions): |
| * bytecode/EvalCodeCache.h: |
| (JSC::EvalCodeCache::mark): |
| * parser/Nodes.cpp: |
| (JSC::ScopeNodeData::mark): |
| (JSC::EvalNode::mark): |
| * parser/Nodes.h: |
| |
| 2009-01-14 Dmitry Titov <dimich@chromium.org> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23312 |
| Implement MessageQueue::waitForMessageTimed() |
| Also fixed ThreadCondition::timedWait() to take absolute time, as discussed on webkit-dev. |
| Win32 version of timedWait still has to be implemented. |
| |
| * wtf/MessageQueue.h: |
| (WTF::MessageQueueWaitResult: new enum for the result of MessageQueue::waitForMessageTimed. |
| (WTF::MessageQueue::waitForMessage): |
| (WTF::MessageQueue::waitForMessageTimed): New method. |
| * wtf/Threading.h: |
| * wtf/ThreadingGtk.cpp: |
| (WTF::ThreadCondition::timedWait): changed to use absolute time instead of interval. |
| * wtf/ThreadingNone.cpp: |
| (WTF::ThreadCondition::timedWait): ditto. |
| * wtf/ThreadingPthreads.cpp: |
| (WTF::ThreadCondition::timedWait): ditto. |
| * wtf/ThreadingQt.cpp: |
| (WTF::ThreadCondition::timedWait): ditto. |
| * wtf/ThreadingWin.cpp: |
| (WTF::ThreadCondition::timedWait): ditto. The actual Win32 code is still to be implemented. |
| |
| 2009-01-14 Dean McNamee <deanm@chromium.org> |
| |
| Reviewed by Darin Adler and Oliver hunt. |
| |
| Correctly match allocation functions by implementing a custom deref(). |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23315 |
| |
| * runtime/ByteArray.h: |
| (JSC::ByteArray::deref): |
| (JSC::ByteArray::ByteArray): |
| |
| 2009-01-14 Dan Bernstein <mitz@apple.com> |
| |
| Reviewed by John Sullivan. |
| |
| - update copyright |
| |
| * Info.plist: |
| |
| 2009-01-13 Beth Dakin <bdakin@apple.com> |
| |
| Reviewed by Darin Adler and Oliver Hunt. |
| |
| <rdar://problem/6489314> REGRESSION: Business widget's front side |
| fails to render correctly when flipping widget |
| |
| The problem here is that parseInt was parsing NaN as 0. This patch |
| corrects that by parsing NaN as NaN. This matches our old behavior |
| and Firefox. |
| |
| * runtime/JSGlobalObjectFunctions.cpp: |
| (JSC::globalFuncParseInt): |
| |
| 2009-01-13 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Fix for: https://bugs.webkit.org/show_bug.cgi?id=23292 |
| |
| Implementation of two argument canDoFastAdditiveOperations does not correlate well with reality. |
| |
| * runtime/JSImmediate.h: |
| (JSC::JSFastMath::canDoFastAdditiveOperations): |
| |
| 2009-01-13 Zalan Bujtas <zbujtas@gmail.com> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23290 |
| Fix JSImmediate::isImmediate(src) to !src->isCell() |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| |
| 2009-01-13 Dmitry Titov <dimich@chromium.org> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23281 |
| Fix the Chromium Win build. |
| Need to use PLATFORM(WIN_OS) instead of PLATFORM(WIN). |
| Moved GTK and WX up in #if sequence because they could come with WIN_OS too, |
| while they have their own implementation even on Windows. |
| |
| * wtf/CurrentTime.cpp: |
| (WTF::currentTime): |
| |
| 2009-01-12 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Make the JSImmediate interface private. |
| |
| All manipulation of JS values should be through the JSValuePtr class, not by using JSImmediate |
| directly. The key missing methods on JSValuePtr are: |
| |
| * isCell() - check for values that are JSCell*s, and as such where asCell() may be used. |
| * isInt32Fast() getInt32Fast() - fast check/access for integer immediates. |
| * isUInt32Fast() getUInt32Fast() - ditto for unsigned integer immediates. |
| |
| The JIT is allowed full access to JSImmediate, since it needs to be able to directly |
| manipulate JSValuePtrs. The Interpreter is provided access to perform operations directly |
| on JSValuePtrs through the new JSFastMath interface. |
| |
| No performance impact. |
| |
| * API/JSCallbackObjectFunctions.h: |
| (JSC::::toNumber): |
| * API/JSValueRef.cpp: |
| (JSValueIsEqual): |
| (JSValueIsStrictEqual): |
| * JavaScriptCore.exp: |
| * bytecode/CodeBlock.h: |
| (JSC::CodeBlock::isKnownNotImmediate): |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::keyForImmediateSwitch): |
| * bytecompiler/BytecodeGenerator.h: |
| (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): |
| (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): |
| * interpreter/Interpreter.cpp: |
| (JSC::jsLess): |
| (JSC::jsLessEq): |
| (JSC::jsAdd): |
| (JSC::jsIsObjectType): |
| (JSC::cachePrototypeChain): |
| (JSC::Interpreter::tryCachePutByID): |
| (JSC::Interpreter::tryCacheGetByID): |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::tryCTICachePutByID): |
| (JSC::Interpreter::tryCTICacheGetByID): |
| (JSC::Interpreter::cti_op_add): |
| (JSC::Interpreter::cti_op_get_by_id_self_fail): |
| (JSC::Interpreter::cti_op_get_by_id_proto_list): |
| (JSC::Interpreter::cti_op_instanceof): |
| (JSC::Interpreter::cti_op_mul): |
| (JSC::Interpreter::cti_op_get_by_val): |
| (JSC::Interpreter::cti_op_get_by_val_byte_array): |
| (JSC::Interpreter::cti_op_sub): |
| (JSC::Interpreter::cti_op_put_by_val): |
| (JSC::Interpreter::cti_op_put_by_val_array): |
| (JSC::Interpreter::cti_op_put_by_val_byte_array): |
| (JSC::Interpreter::cti_op_negate): |
| (JSC::Interpreter::cti_op_div): |
| (JSC::Interpreter::cti_op_eq): |
| (JSC::Interpreter::cti_op_lshift): |
| (JSC::Interpreter::cti_op_bitand): |
| (JSC::Interpreter::cti_op_rshift): |
| (JSC::Interpreter::cti_op_bitnot): |
| (JSC::Interpreter::cti_op_neq): |
| (JSC::Interpreter::cti_op_urshift): |
| (JSC::Interpreter::cti_op_call_eval): |
| (JSC::Interpreter::cti_op_throw): |
| (JSC::Interpreter::cti_op_is_undefined): |
| (JSC::Interpreter::cti_op_stricteq): |
| (JSC::Interpreter::cti_op_nstricteq): |
| (JSC::Interpreter::cti_op_switch_imm): |
| (JSC::Interpreter::cti_vm_throw): |
| * interpreter/Interpreter.h: |
| (JSC::Interpreter::isJSArray): |
| (JSC::Interpreter::isJSString): |
| (JSC::Interpreter::isJSByteArray): |
| * jit/JIT.cpp: |
| (JSC::JIT::compileOpStrictEq): |
| (JSC::JIT::privateCompileMainPass): |
| * jit/JIT.h: |
| (JSC::JIT::isStrictEqCaseHandledInJITCode): |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::compileFastArith_op_rshift): |
| (JSC::JIT::compileFastArith_op_bitand): |
| (JSC::JIT::compileFastArith_op_mod): |
| * jit/JITCall.cpp: |
| (JSC::JIT::unlinkCall): |
| (JSC::JIT::compileOpCall): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::getConstantOperandImmediateInt): |
| (JSC::JIT::isOperandConstantImmediateInt): |
| * parser/Nodes.cpp: |
| (JSC::processClauseList): |
| * runtime/ArrayPrototype.cpp: |
| (JSC::arrayProtoFuncIndexOf): |
| (JSC::arrayProtoFuncLastIndexOf): |
| * runtime/BooleanPrototype.cpp: |
| (JSC::booleanProtoFuncValueOf): |
| * runtime/Collector.cpp: |
| (JSC::Heap::protect): |
| (JSC::Heap::unprotect): |
| (JSC::Heap::heap): |
| * runtime/JSByteArray.cpp: |
| (JSC::JSByteArray::getOwnPropertySlot): |
| * runtime/JSByteArray.h: |
| (JSC::JSByteArray::getIndex): |
| * runtime/JSCell.cpp: |
| * runtime/JSCell.h: |
| (JSC::JSValuePtr::isNumberCell): |
| (JSC::JSValuePtr::asCell): |
| (JSC::JSValuePtr::isNumber): |
| * runtime/JSGlobalObjectFunctions.cpp: |
| (JSC::globalFuncParseInt): |
| * runtime/JSImmediate.h: |
| (JSC::js0): |
| (JSC::jsImpossibleValue): |
| (JSC::JSValuePtr::toInt32): |
| (JSC::JSValuePtr::toUInt32): |
| (JSC::JSValuePtr::isCell): |
| (JSC::JSValuePtr::isInt32Fast): |
| (JSC::JSValuePtr::getInt32Fast): |
| (JSC::JSValuePtr::isUInt32Fast): |
| (JSC::JSValuePtr::getUInt32Fast): |
| (JSC::JSValuePtr::makeInt32Fast): |
| (JSC::JSValuePtr::areBothInt32Fast): |
| (JSC::JSFastMath::canDoFastBitwiseOperations): |
| (JSC::JSFastMath::equal): |
| (JSC::JSFastMath::notEqual): |
| (JSC::JSFastMath::andImmediateNumbers): |
| (JSC::JSFastMath::xorImmediateNumbers): |
| (JSC::JSFastMath::orImmediateNumbers): |
| (JSC::JSFastMath::canDoFastRshift): |
| (JSC::JSFastMath::canDoFastUrshift): |
| (JSC::JSFastMath::rightShiftImmediateNumbers): |
| (JSC::JSFastMath::canDoFastAdditiveOperations): |
| (JSC::JSFastMath::addImmediateNumbers): |
| (JSC::JSFastMath::subImmediateNumbers): |
| (JSC::JSFastMath::incImmediateNumber): |
| (JSC::JSFastMath::decImmediateNumber): |
| * runtime/JSNumberCell.h: |
| (JSC::JSValuePtr::asNumberCell): |
| (JSC::jsNumber): |
| (JSC::JSValuePtr::uncheckedGetNumber): |
| (JSC::JSNumberCell::toInt32): |
| (JSC::JSNumberCell::toUInt32): |
| (JSC::JSValuePtr::toJSNumber): |
| (JSC::JSValuePtr::getNumber): |
| (JSC::JSValuePtr::numberToInt32): |
| (JSC::JSValuePtr::numberToUInt32): |
| * runtime/JSObject.h: |
| (JSC::JSValuePtr::isObject): |
| (JSC::JSValuePtr::get): |
| (JSC::JSValuePtr::put): |
| * runtime/JSValue.cpp: |
| (JSC::JSValuePtr::toInteger): |
| (JSC::JSValuePtr::toIntegerPreserveNaN): |
| * runtime/JSValue.h: |
| * runtime/Operations.cpp: |
| (JSC::JSValuePtr::equalSlowCase): |
| (JSC::JSValuePtr::strictEqualSlowCase): |
| * runtime/Operations.h: |
| (JSC::JSValuePtr::equal): |
| (JSC::JSValuePtr::equalSlowCaseInline): |
| (JSC::JSValuePtr::strictEqual): |
| (JSC::JSValuePtr::strictEqualSlowCaseInline): |
| * runtime/Protect.h: |
| (JSC::gcProtect): |
| (JSC::gcUnprotect): |
| * runtime/StringPrototype.cpp: |
| (JSC::stringProtoFuncCharAt): |
| (JSC::stringProtoFuncCharCodeAt): |
| * runtime/Structure.cpp: |
| (JSC::Structure::createCachedPrototypeChain): |
| |
| 2009-01-12 Kevin Ollivier <kevino@theolliviers.com> |
| |
| Since date time functions have moved here, now the wx port JSC |
| needs to depend on wx. |
| |
| * jscore.bkl: |
| |
| 2009-01-11 David Levin <levin@chromium.org> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23245 |
| |
| Add initializeThreading to key places in JS API to ensure that |
| UString is properly initialized. |
| |
| * API/JSContextRef.cpp: |
| (JSContextGroupCreate): |
| (JSGlobalContextCreate): |
| * API/JSObjectRef.cpp: |
| (JSClassCreate): |
| * API/JSStringRef.cpp: |
| (JSStringCreateWithCharacters): |
| (JSStringCreateWithUTF8CString): |
| * API/JSStringRefCF.cpp: |
| (JSStringCreateWithCFString): |
| |
| 2009-01-11 David Levin <levin@chromium.org> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23175 |
| |
| Separate out BaseString information from UString::Rep and make all baseString access go through |
| a member function, so that it may be used for something else (in the future) in the BaseString |
| case. |
| |
| * runtime/SmallStrings.cpp: |
| (JSC::SmallStringsStorage::rep): |
| (JSC::SmallStringsStorage::SmallStringsStorage): |
| (JSC::SmallStrings::SmallStrings): |
| (JSC::SmallStrings::mark): |
| Adjust to account for the changes in UString and put the UString in place in |
| SmallStringsStorage to aid in locality of reference among the UChar[] and UString::Rep's. |
| |
| * runtime/SmallStrings.h: |
| * runtime/UString.cpp: |
| (JSC::initializeStaticBaseString): |
| (JSC::initializeUString): |
| (JSC::UString::Rep::create): |
| (JSC::UString::Rep::destroy): |
| (JSC::UString::Rep::checkConsistency): |
| (JSC::expandCapacity): |
| (JSC::UString::expandPreCapacity): |
| (JSC::concatenate): |
| (JSC::UString::append): |
| (JSC::UString::operator=): |
| * runtime/UString.h: |
| (JSC::UString::Rep::baseIsSelf): |
| (JSC::UString::Rep::setBaseString): |
| (JSC::UString::Rep::baseString): |
| (JSC::UString::Rep::): |
| (JSC::UString::Rep::null): |
| (JSC::UString::Rep::empty): |
| (JSC::UString::Rep::data): |
| (JSC::UString::cost): |
| Separate out the items out used by base strings from those used in Rep's that only |
| point to base strings. (This potentially saves 24 bytes per Rep.) |
| |
| 2009-01-11 Darin Adler <darin@apple.com> |
| |
| Reviewed by Dan Bernstein. |
| |
| Bug 23239: improve handling of unused arguments in JavaScriptCore |
| https://bugs.webkit.org/show_bug.cgi?id=23239 |
| |
| * runtime/DatePrototype.cpp: Moved LocaleDateTimeFormat enum outside #if |
| so we can use this on all platforms. Changed valueOf to share the same |
| function with getTime, since the contents of the two are identical. Removed |
| a FIXME since the idea isn't really specific enough or helpful enough to |
| need to sit here in the source code. |
| (JSC::formatLocaleDate): Changed the Mac version of this function to take |
| the same arguments as the non-Mac version so the caller doesn't have to |
| special-case the two platforms. Also made the formatString array be const; |
| before the characters were, but the array was a modifiable global variable. |
| (JSC::dateProtoFuncToLocaleString): Changed to call the new unified |
| version of formatLocaleDate and remove the ifdef. |
| (JSC::dateProtoFuncToLocaleDateString): Ditto. |
| (JSC::dateProtoFuncToLocaleTimeString): Ditto. |
| |
| * runtime/JSNotAnObject.cpp: |
| (JSC::JSNotAnObject::toObject): Use the new ASSERT_UNUSED instead of the |
| old UNUSED_PARAM. |
| |
| * runtime/RegExp.cpp: |
| (JSC::RegExp::RegExp): Changed to only use UNUSED_PARAM when the parameter |
| is actually unused. |
| |
| * wtf/TCSystemAlloc.cpp: |
| (TCMalloc_SystemRelease): Changed to only use UNUSED_PARAM when the parameter |
| is actually unused. |
| (TCMalloc_SystemCommit): Changed to omit the argument names instead of using |
| UNUSED_PARAM. |
| |
| 2009-01-11 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (Build fix). |
| |
| Fix the build (whoops) |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::cti_op_get_by_val): |
| |
| 2009-01-11 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Darin Adler and Anders Carlsson |
| |
| Bug 23128: get/put_by_val need to respecialise in the face of ByteArray |
| |
| Restructure the code slightly, and add comments per Darin's suggestions |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::cti_op_get_by_val): |
| (JSC::Interpreter::cti_op_get_by_val_byte_array): |
| (JSC::Interpreter::cti_op_put_by_val): |
| (JSC::Interpreter::cti_op_put_by_val_byte_array): |
| |
| 2009-01-11 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Anders Carlsson. |
| |
| Whoops, I accidentally removed an exception check from fast the |
| fast path for string indexing when i originally landed the |
| byte array logic. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::cti_op_get_by_val): |
| |
| 2009-01-11 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Anders Carlsson. |
| |
| Bug 23128: get/put_by_val need to respecialise in the face of ByteArray |
| <https://bugs.webkit.org/show_bug.cgi?id=23128> |
| |
| Fairly simple patch, add specialised versions of cti_op_get/put_by_val |
| that assume ByteArray, thus avoiding a few branches in the case of bytearray |
| manipulation. |
| |
| No effect on SunSpider. 15% win on the original testcase. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::cti_op_get_by_val): |
| (JSC::Interpreter::cti_op_get_by_val_byte_array): |
| (JSC::Interpreter::cti_op_put_by_val): |
| (JSC::Interpreter::cti_op_put_by_val_byte_array): |
| * interpreter/Interpreter.h: |
| |
| 2009-01-11 Alexey Proskuryakov <ap@webkit.org> |
| |
| Try to fix Windows build. |
| |
| * wtf/CurrentTime.cpp: Added a definition of msPerSecond (previously, this code was in |
| DateMath.cpp, with constant definition in DateTime.h) |
| |
| 2009-01-11 Alexey Proskuryakov <ap@webkit.org> |
| |
| Try to fix Windows build. |
| |
| * wtf/CurrentTime.cpp: Include <sys/types.h> and <sys/timeb.h>, as MSDN says to. |
| |
| 2009-01-11 Dmitry Titov <dimich@chromium.org> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23207 |
| Moved currentTime() to from WebCore to WTF. |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.exp: added export for WTF::currentTime() |
| * JavaScriptCore.pri: |
| * JavaScriptCore.scons: |
| * JavaScriptCore.vcproj/WTF/WTF.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * JavaScriptCoreSources.bkl: |
| * runtime/DateMath.cpp: |
| (JSC::getCurrentUTCTimeWithMicroseconds): This function had another implementation of currentTime(), essentially. Now uses WTF version. |
| * wtf/CurrentTime.cpp: Added. |
| (WTF::currentTime): |
| (WTF::highResUpTime): |
| (WTF::lowResUTCTime): |
| (WTF::qpcAvailable): |
| * wtf/CurrentTime.h: Added. |
| |
| 2009-01-09 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Stage two of converting JSValue from a pointer to a class type. |
| Remove the class JSValue. The functionallity has been transitioned |
| into the wrapper class type JSValuePtr. |
| |
| The last stage will be to rename JSValuePtr to JSValue, remove the |
| overloaded -> operator, and switch operations on JSValuePtrs from |
| using '->' to use '.' instead. |
| |
| * API/APICast.h: |
| * JavaScriptCore.exp: |
| * runtime/JSCell.h: |
| (JSC::asCell): |
| (JSC::JSValuePtr::asCell): |
| (JSC::JSValuePtr::isNumber): |
| (JSC::JSValuePtr::isString): |
| (JSC::JSValuePtr::isGetterSetter): |
| (JSC::JSValuePtr::isObject): |
| (JSC::JSValuePtr::getNumber): |
| (JSC::JSValuePtr::getString): |
| (JSC::JSValuePtr::getObject): |
| (JSC::JSValuePtr::getCallData): |
| (JSC::JSValuePtr::getConstructData): |
| (JSC::JSValuePtr::getUInt32): |
| (JSC::JSValuePtr::getTruncatedInt32): |
| (JSC::JSValuePtr::getTruncatedUInt32): |
| (JSC::JSValuePtr::mark): |
| (JSC::JSValuePtr::marked): |
| (JSC::JSValuePtr::toPrimitive): |
| (JSC::JSValuePtr::getPrimitiveNumber): |
| (JSC::JSValuePtr::toBoolean): |
| (JSC::JSValuePtr::toNumber): |
| (JSC::JSValuePtr::toString): |
| (JSC::JSValuePtr::toObject): |
| (JSC::JSValuePtr::toThisObject): |
| (JSC::JSValuePtr::needsThisConversion): |
| (JSC::JSValuePtr::toThisString): |
| (JSC::JSValuePtr::getJSNumber): |
| * runtime/JSImmediate.h: |
| (JSC::JSValuePtr::isUndefined): |
| (JSC::JSValuePtr::isNull): |
| (JSC::JSValuePtr::isUndefinedOrNull): |
| (JSC::JSValuePtr::isBoolean): |
| (JSC::JSValuePtr::getBoolean): |
| (JSC::JSValuePtr::toInt32): |
| (JSC::JSValuePtr::toUInt32): |
| * runtime/JSNumberCell.h: |
| (JSC::JSValuePtr::uncheckedGetNumber): |
| (JSC::JSValuePtr::toJSNumber): |
| * runtime/JSObject.h: |
| (JSC::JSValuePtr::isObject): |
| (JSC::JSValuePtr::get): |
| (JSC::JSValuePtr::put): |
| * runtime/JSString.h: |
| (JSC::JSValuePtr::toThisJSString): |
| * runtime/JSValue.cpp: |
| (JSC::JSValuePtr::toInteger): |
| (JSC::JSValuePtr::toIntegerPreserveNaN): |
| (JSC::JSValuePtr::toInt32SlowCase): |
| (JSC::JSValuePtr::toUInt32SlowCase): |
| * runtime/JSValue.h: |
| (JSC::JSValuePtr::makeImmediate): |
| (JSC::JSValuePtr::immediateValue): |
| (JSC::JSValuePtr::JSValuePtr): |
| (JSC::JSValuePtr::operator->): |
| (JSC::JSValuePtr::operator bool): |
| (JSC::JSValuePtr::operator==): |
| (JSC::JSValuePtr::operator!=): |
| (JSC::JSValuePtr::encode): |
| (JSC::JSValuePtr::decode): |
| (JSC::JSValuePtr::toFloat): |
| (JSC::JSValuePtr::asValue): |
| (JSC::operator==): |
| (JSC::operator!=): |
| |
| 2009-01-09 David Levin <levin@chromium.org> |
| |
| Reviewed by Oliver Hunt. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23175 |
| |
| Adjustment to previous patch. Remove call to initilizeThreading from JSGlobalCreate |
| and fix jsc.cpp instead. |
| |
| * jsc.cpp: |
| (main): |
| (jscmain): |
| * runtime/JSGlobalData.cpp: |
| (JSC::JSGlobalData::create): |
| |
| 2009-01-09 Sam Weinig <sam@webkit.org> |
| |
| Roll r39720 back in with a working interpreted mode. |
| |
| 2009-01-09 David Levin <levin@chromium.org> |
| |
| Reviewed by Oliver Hunt. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23175 |
| |
| Added a template to make the pointer and flags combination |
| in UString more readable and less error prone. |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.exp: |
| * JavaScriptCore.vcproj/WTF/WTF.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| Added PtrAndFlags.h (and sorted the xcode project file). |
| |
| * runtime/Identifier.cpp: |
| (JSC::Identifier::add): |
| (JSC::Identifier::addSlowCase): |
| * runtime/InitializeThreading.cpp: |
| (JSC::initializeThreadingOnce): |
| Made the init threading initialize the UString globals. Before |
| these were initilized using {} but that became harder due to the |
| addition of this tempalte class. |
| |
| * runtime/JSGlobalData.cpp: |
| (JSC::JSGlobalData::create): |
| * runtime/PropertyNameArray.cpp: |
| (JSC::PropertyNameArray::add): |
| * runtime/UString.cpp: |
| (JSC::initializeStaticBaseString): |
| (JSC::initializeUString): |
| (JSC::UString::Rep::create): |
| (JSC::UString::Rep::createFromUTF8): |
| (JSC::createRep): |
| (JSC::UString::UString): |
| (JSC::concatenate): |
| (JSC::UString::operator=): |
| (JSC::UString::makeNull): |
| (JSC::UString::nullRep): |
| * runtime/UString.h: |
| (JSC::UString::Rep::identifierTable): |
| (JSC::UString::Rep::setIdentifierTable): |
| (JSC::UString::Rep::isStatic): |
| (JSC::UString::Rep::setStatic): |
| (JSC::UString::Rep::): |
| (JSC::UString::Rep::null): |
| (JSC::UString::Rep::empty): |
| (JSC::UString::isNull): |
| (JSC::UString::null): |
| (JSC::UString::UString): |
| |
| * wtf/PtrAndFlags.h: Added. |
| (WTF::PtrAndFlags::PtrAndFlags): |
| (WTF::PtrAndFlags::isFlagSet): |
| (WTF::PtrAndFlags::setFlag): |
| (WTF::PtrAndFlags::clearFlag): |
| (WTF::PtrAndFlags::get): |
| (WTF::PtrAndFlags::set): |
| A simple way to layer together a pointer and 2 flags. It relies on the pointer being 4 byte aligned, |
| which should happen for all allocators (due to aligning pointers, int's, etc. on 4 byte boundaries). |
| |
| 2009-01-08 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by -O-l-i-v-e-r- -H-u-n-t- Sam Weinig (sorry, Sam!). |
| |
| Encode immediates in the low word of JSValuePtrs, on x86-64. |
| |
| On 32-bit platforms a JSValuePtr may represent a 31-bit signed integer. |
| On 64-bit platforms, if USE(ALTERNATE_JSIMMEDIATE) is defined, a full |
| 32-bit integer may be stored in an immediate. |
| |
| Presently USE(ALTERNATE_JSIMMEDIATE) uses the same encoding as the default |
| immediate format - the value is left shifted by one, so a one bit tag can |
| be added to indicate the value is an immediate. However this means that |
| values must be commonly be detagged (by right shifting by one) before |
| arithmetic operations can be performed on immediates. This patch modifies |
| the formattting so the the high bits of the immediate mark values as being |
| integer. |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::not32): |
| (JSC::MacroAssembler::orPtr): |
| (JSC::MacroAssembler::zeroExtend32ToPtr): |
| (JSC::MacroAssembler::jaePtr): |
| (JSC::MacroAssembler::jbPtr): |
| (JSC::MacroAssembler::jnzPtr): |
| (JSC::MacroAssembler::jzPtr): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::): |
| (JSC::X86Assembler::notl_r): |
| (JSC::X86Assembler::testq_i32r): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::compileFastArith_op_lshift): |
| (JSC::JIT::compileFastArith_op_rshift): |
| (JSC::JIT::compileFastArith_op_bitand): |
| (JSC::JIT::compileFastArithSlow_op_bitand): |
| (JSC::JIT::compileFastArith_op_mod): |
| (JSC::JIT::compileFastArithSlow_op_mod): |
| (JSC::JIT::compileFastArith_op_add): |
| (JSC::JIT::compileFastArith_op_mul): |
| (JSC::JIT::compileFastArith_op_post_inc): |
| (JSC::JIT::compileFastArith_op_post_dec): |
| (JSC::JIT::compileFastArith_op_pre_inc): |
| (JSC::JIT::compileFastArith_op_pre_dec): |
| (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): |
| (JSC::JIT::compileBinaryArithOp): |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallSlowCase): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitJumpIfJSCell): |
| (JSC::JIT::emitJumpIfNotJSCell): |
| (JSC::JIT::emitJumpIfImmNum): |
| (JSC::JIT::emitJumpSlowCaseIfNotImmNum): |
| (JSC::JIT::emitJumpSlowCaseIfNotImmNums): |
| (JSC::JIT::emitFastArithDeTagImmediate): |
| (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): |
| (JSC::JIT::emitFastArithReTagImmediate): |
| (JSC::JIT::emitFastArithImmToInt): |
| (JSC::JIT::emitFastArithIntToImmNoCheck): |
| (JSC::JIT::emitTagAsBoolImmediate): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::resizePropertyStorage): |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| (JSC::JIT::privateCompileGetByIdSelf): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdChain): |
| (JSC::JIT::privateCompilePutByIdReplace): |
| * runtime/JSImmediate.h: |
| (JSC::JSImmediate::isNumber): |
| (JSC::JSImmediate::isPositiveNumber): |
| (JSC::JSImmediate::areBothImmediateNumbers): |
| (JSC::JSImmediate::xorImmediateNumbers): |
| (JSC::JSImmediate::rightShiftImmediateNumbers): |
| (JSC::JSImmediate::canDoFastAdditiveOperations): |
| (JSC::JSImmediate::addImmediateNumbers): |
| (JSC::JSImmediate::subImmediateNumbers): |
| (JSC::JSImmediate::makeInt): |
| (JSC::JSImmediate::toBoolean): |
| * wtf/Platform.h: |
| |
| 2009-01-08 Sam Weinig <sam@webkit.org> |
| |
| Revert r39720. It broke Interpreted mode. |
| |
| 2009-01-08 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Oliver Hunt. |
| |
| Fix for https://bugs.webkit.org/show_bug.cgi?id=23197 |
| Delay creating the PCVector until an exception is thrown |
| Part of <rdar://problem/6469060> |
| Don't store exception information for a CodeBlock until first exception is thrown |
| |
| - Change the process for re-parsing/re-generating bytecode for exception information |
| to use data from the original CodeBlock (offsets of GlobalResolve instructions) to |
| aid in creating an identical instruction stream on re-parse, instead of padding |
| interchangeable opcodes, which would result in different JITed code. |
| - Fix bug where the wrong ScopeChainNode was used when re-parsing/regenerating from |
| within some odd modified scope chains. |
| - Lazily create the pcVector by re-JITing the regenerated CodeBlock and stealing the |
| the pcVector from it. |
| |
| Saves ~2MB on Membuster head. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dump): |
| (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): |
| (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset): |
| (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset): |
| * bytecode/CodeBlock.h: |
| (JSC::JITCodeRef::JITCodeRef): |
| (JSC::GlobalResolveInfo::GlobalResolveInfo): |
| (JSC::CodeBlock::getBytecodeIndex): |
| (JSC::CodeBlock::addGlobalResolveInstruction): |
| (JSC::CodeBlock::addGlobalResolveInfo): |
| (JSC::CodeBlock::addFunctionRegisterInfo): |
| (JSC::CodeBlock::hasExceptionInfo): |
| (JSC::CodeBlock::pcVector): |
| (JSC::EvalCodeBlock::EvalCodeBlock): |
| (JSC::EvalCodeBlock::baseScopeDepth): |
| * bytecode/Opcode.h: |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::BytecodeGenerator): |
| (JSC::BytecodeGenerator::emitResolve): |
| (JSC::BytecodeGenerator::emitGetScopedVar): |
| * bytecompiler/BytecodeGenerator.h: |
| (JSC::BytecodeGenerator::setRegeneratingForExceptionInfo): |
| * interpreter/Interpreter.cpp: |
| (JSC::bytecodeOffsetForPC): |
| (JSC::Interpreter::unwindCallFrame): |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::retrieveLastCaller): |
| (JSC::Interpreter::cti_op_instanceof): |
| (JSC::Interpreter::cti_op_call_NotJSFunction): |
| (JSC::Interpreter::cti_op_resolve): |
| (JSC::Interpreter::cti_op_construct_NotJSConstruct): |
| (JSC::Interpreter::cti_op_resolve_func): |
| (JSC::Interpreter::cti_op_resolve_skip): |
| (JSC::Interpreter::cti_op_resolve_global): |
| (JSC::Interpreter::cti_op_resolve_with_base): |
| (JSC::Interpreter::cti_op_throw): |
| (JSC::Interpreter::cti_op_in): |
| (JSC::Interpreter::cti_vm_throw): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompile): |
| * parser/Nodes.cpp: |
| (JSC::EvalNode::generateBytecode): |
| (JSC::EvalNode::bytecodeForExceptionInfoReparse): |
| (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse): |
| * parser/Nodes.h: |
| |
| 2009-01-08 Jian Li <jianli@chromium.org> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| Add Win32 implementation of ThreadSpecific. |
| https://bugs.webkit.org/show_bug.cgi?id=22614 |
| |
| * JavaScriptCore.vcproj/WTF/WTF.vcproj: |
| * wtf/ThreadSpecific.h: |
| (WTF::ThreadSpecific::ThreadSpecific): |
| (WTF::ThreadSpecific::~ThreadSpecific): |
| (WTF::ThreadSpecific::get): |
| (WTF::ThreadSpecific::set): |
| (WTF::ThreadSpecific::destroy): |
| * wtf/ThreadSpecificWin.cpp: Added. |
| (WTF::ThreadSpecificThreadExit): |
| * wtf/ThreadingWin.cpp: |
| (WTF::wtfThreadEntryPoint): |
| |
| 2009-01-08 Justin McPherson <justin.mcpherson@nokia.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| Fix compilation with Qt on NetBSD. |
| |
| * runtime/Collector.cpp: |
| (JSC::currentThreadStackBase): Use PLATFORM(NETBSD) to enter the |
| code path to retrieve the stack base using pthread_attr_get_np. |
| The PTHREAD_NP_H define is not used because the header file does |
| not exist on NetBSD, but the function is declared nevertheless. |
| * wtf/Platform.h: Introduce WTF_PLATFORM_NETBSD. |
| |
| 2009-01-07 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| <rdar://problem/6469060> Don't store exception information for a CodeBlock until first exception is thrown |
| |
| Don't initially store exception information (lineNumber/expressionRange/getByIdExcecptionInfo) |
| in CodeBlocks blocks. Instead, re-parse for the data on demand and cache it then. |
| |
| One important change that was needed to make this work was to pad op_get_global_var with nops to |
| be the same length as op_resolve_global, since one could be replaced for the other on re-parsing, |
| and we want to keep the offsets bytecode offsets the same. |
| |
| 1.3MB improvement on Membuster head. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dump): Update op_get_global_var to account for the padding. |
| (JSC::CodeBlock::dumpStatistics): Add more statistic dumping. |
| (JSC::CodeBlock::CodeBlock): Initialize m_exceptionInfo. |
| (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): Re-parses the CodeBlocks |
| associated SourceCode and steals the ExceptionInfo from it. |
| (JSC::CodeBlock::lineNumberForBytecodeOffset): Creates the exception info on demand. |
| (JSC::CodeBlock::expressionRangeForBytecodeOffset): Ditto. |
| (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): Ditto. |
| * bytecode/CodeBlock.h: |
| (JSC::CodeBlock::numberOfExceptionHandlers): Updated to account for m_exceptionInfo indirection. |
| (JSC::CodeBlock::addExceptionHandler): Ditto. |
| (JSC::CodeBlock::exceptionHandler): Ditto. |
| (JSC::CodeBlock::clearExceptionInfo): Ditto. |
| (JSC::CodeBlock::addExpressionInfo): Ditto. |
| (JSC::CodeBlock::addGetByIdExceptionInfo): Ditto. |
| (JSC::CodeBlock::numberOfLineInfos): Ditto. |
| (JSC::CodeBlock::addLineInfo): Ditto. |
| (JSC::CodeBlock::lastLineInfo): Ditto. |
| |
| * bytecode/Opcode.h: Change length of op_get_global_var to match op_resolve_global. |
| |
| * bytecode/SamplingTool.cpp: |
| (JSC::SamplingTool::dump): Add comment indicating why it is okay not to pass a CallFrame. |
| |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::generate): Clear the exception info after generation for Function and Eval |
| Code when not in regenerate for exception info mode. |
| (JSC::BytecodeGenerator::BytecodeGenerator): Initialize m_regeneratingForExceptionInfo to false. |
| (JSC::BytecodeGenerator::emitGetScopedVar): Pad op_get_global_var with 2 nops. |
| * bytecompiler/BytecodeGenerator.h: |
| (JSC::BytecodeGenerator::setRegeneratingForExcpeptionInfo): Added. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::throwException): Pass the CallFrame to exception info accessors. |
| (JSC::Interpreter::privateExecute): Ditto. |
| (JSC::Interpreter::retrieveLastCaller): Ditto. |
| (JSC::Interpreter::cti_op_new_error): Ditto. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): Pass the current bytecode offset instead of hard coding the |
| line number, the stub will do the accessing if it gets called. |
| |
| * parser/Nodes.cpp: |
| (JSC::ProgramNode::emitBytecode): Moved. |
| (JSC::ProgramNode::generateBytecode): Moved. |
| (JSC::EvalNode::create): Moved. |
| (JSC::EvalNode::bytecodeForExceptionInfoReparse): Added. |
| (JSC::FunctionBodyNode::generateBytecode): Rename reparse to reparseInPlace. |
| (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse): Addded. |
| |
| * parser/Nodes.h: |
| (JSC::ScopeNode::features): Added getter. |
| * parser/Parser.cpp: |
| (JSC::Parser::reparseInPlace): Renamed from reparse. |
| * parser/Parser.h: |
| (JSC::Parser::reparse): Added. Re-parses the passed in Node into |
| a new Node. |
| * runtime/ExceptionHelpers.cpp: |
| (JSC::createUndefinedVariableError): Pass along CallFrame. |
| (JSC::createInvalidParamError): Ditto. |
| (JSC::createNotAConstructorError): Ditto. |
| (JSC::createNotAFunctionError): Ditto. |
| (JSC::createNotAnObjectError): Ditto. |
| |
| 2009-01-06 Gavin Barraclough <baraclough@apple.com> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| Replace accidentally removed references in BytecodeGenerator, deleting these |
| will be hindering the sharing of constant numbers and strings. |
| |
| The code to add a new constant (either number or string) to their respective |
| map works by attempting to add a null entry, then checking the result of the |
| add for null. The first time, this should return the null (or noValue). |
| The code checks for null (to see if this is the initial add), and then allocates |
| a new number / string object. This code relies on the result returned from |
| the add to the map being stored as a reference, such that the allocated object |
| will be stored in the map, and will be resused if the same constant is encountered |
| again. By failing to use a reference we will be leaking GC object for each |
| additional entry added to the map. As GC objects they should be clollected, |
| be we should no be allocatin them in the first place. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23158 |
| |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::emitLoad): |
| |
| 2009-01-06 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| <rdar://problem/6040850> JavaScript register file should use VirtualAlloc on Windows |
| |
| Fairly simple, just reserve 4Mb of address space for the |
| register file, and then commit one section at a time. We |
| don't release committed memory as we drop back, but then |
| mac doesn't either so this probably not too much of a |
| problem. |
| |
| * interpreter/RegisterFile.cpp: |
| (JSC::RegisterFile::~RegisterFile): |
| * interpreter/RegisterFile.h: |
| (JSC::RegisterFile::RegisterFile): |
| (JSC::RegisterFile::grow): |
| |
| 2009-01-06 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23142 |
| ThreadGlobalData leaks seen on buildbot |
| |
| * wtf/ThreadSpecific.h: (WTF::ThreadSpecific::destroy): Temporarily reset the thread |
| specific value to make getter work on Mac OS X. |
| |
| * wtf/Platform.h: Touch this file again to make sure all Windows builds use the most recent |
| version of ThreadSpecific.h. |
| |
| 2009-01-05 Gavin Barraclough <baraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Replace all uses of JSValue* with a new smart pointer type, JSValuePtr. |
| |
| A JavaScript value may be a heap object or boxed primitive, represented by a |
| pointer, or may be an unboxed immediate value, such as an integer. Since a |
| value may dynamically need to contain either a pointer value or an immediate, |
| we encode immediates as pointer values (since all valid JSCell pointers are |
| allocated at alligned addesses, unaligned addresses are available to encode |
| immediates). As such all JavaScript values are represented using a JSValue*. |
| |
| This implementation is encumbered by a number of constraints. It ties the |
| JSValue representation to the size of pointer on the platform, which, for |
| example, means that we currently can represent different ranges of integers |
| as immediates on x86 and x86-64. It also prevents us from overloading the |
| to-boolean conversion used to test for noValue() - effectively forcing us |
| to represent noValue() as 0. This would potentially be problematic were we |
| to wish to encode integer values differently (e.g. were we to use the v8 |
| encoding, where pointers are tagged with 1 and integers with 0, then the |
| immediate integer 0 would conflict with noValue()). |
| |
| This patch replaces all usage of JSValue* with a new class, JSValuePtr, |
| which encapsulates the pointer. JSValuePtr maintains the same interface as |
| JSValue*, overloading operator-> and operator bool such that previous |
| operations in the code on variables of type JSValue* are still supported. |
| |
| In order to provide a ProtectPtr<> type with support for the new value |
| representation (without using the internal JSValue type directly), a new |
| ProtectJSValuePtr type has been added, equivalent to the previous type |
| ProtectPtr<JSValue>. |
| |
| This patch is likely the first in a sequence of three changes. With the |
| value now encapsulated it will likely make sense to migrate the functionality |
| from JSValue into JSValuePtr, such that the internal pointer representation |
| need not be exposed. Through migrating the functionality to the wrapper |
| class the existing JSValue should be rendered redundant, and the class is |
| likely to be removed (the JSValuePtr now wrapping a pointer to a JSCell). |
| At this stage it will likely make sense to rename JSValuePtr to JSValue. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23114 |
| |
| * API/APICast.h: |
| (toJS): |
| (toRef): |
| * API/JSBase.cpp: |
| (JSEvaluateScript): |
| * API/JSCallbackConstructor.h: |
| (JSC::JSCallbackConstructor::createStructure): |
| * API/JSCallbackFunction.cpp: |
| (JSC::JSCallbackFunction::call): |
| * API/JSCallbackFunction.h: |
| (JSC::JSCallbackFunction::createStructure): |
| * API/JSCallbackObject.h: |
| (JSC::JSCallbackObject::createStructure): |
| * API/JSCallbackObjectFunctions.h: |
| (JSC::::asCallbackObject): |
| (JSC::::put): |
| (JSC::::hasInstance): |
| (JSC::::call): |
| (JSC::::staticValueGetter): |
| (JSC::::staticFunctionGetter): |
| (JSC::::callbackGetter): |
| * API/JSContextRef.cpp: |
| * API/JSObjectRef.cpp: |
| (JSObjectMakeConstructor): |
| (JSObjectSetPrototype): |
| (JSObjectGetProperty): |
| (JSObjectSetProperty): |
| (JSObjectGetPropertyAtIndex): |
| (JSObjectSetPropertyAtIndex): |
| * API/JSValueRef.cpp: |
| (JSValueGetType): |
| (JSValueIsUndefined): |
| (JSValueIsNull): |
| (JSValueIsBoolean): |
| (JSValueIsNumber): |
| (JSValueIsString): |
| (JSValueIsObject): |
| (JSValueIsObjectOfClass): |
| (JSValueIsEqual): |
| (JSValueIsStrictEqual): |
| (JSValueIsInstanceOfConstructor): |
| (JSValueToBoolean): |
| (JSValueToNumber): |
| (JSValueToStringCopy): |
| (JSValueToObject): |
| (JSValueProtect): |
| (JSValueUnprotect): |
| * JavaScriptCore.exp: |
| * bytecode/CodeBlock.cpp: |
| (JSC::valueToSourceString): |
| (JSC::constantName): |
| (JSC::CodeBlock::dump): |
| * bytecode/CodeBlock.h: |
| (JSC::CodeBlock::getConstant): |
| (JSC::CodeBlock::addUnexpectedConstant): |
| (JSC::CodeBlock::unexpectedConstant): |
| * bytecode/EvalCodeCache.h: |
| (JSC::EvalCodeCache::get): |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::BytecodeGenerator): |
| (JSC::BytecodeGenerator::addConstant): |
| (JSC::BytecodeGenerator::addUnexpectedConstant): |
| (JSC::BytecodeGenerator::emitLoad): |
| (JSC::BytecodeGenerator::emitLoadJSV): |
| (JSC::BytecodeGenerator::emitGetScopedVar): |
| (JSC::BytecodeGenerator::emitPutScopedVar): |
| (JSC::BytecodeGenerator::emitNewError): |
| (JSC::keyForImmediateSwitch): |
| * bytecompiler/BytecodeGenerator.h: |
| (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): |
| (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): |
| * debugger/DebuggerCallFrame.cpp: |
| (JSC::DebuggerCallFrame::evaluate): |
| * debugger/DebuggerCallFrame.h: |
| (JSC::DebuggerCallFrame::DebuggerCallFrame): |
| (JSC::DebuggerCallFrame::exception): |
| * interpreter/CallFrame.cpp: |
| (JSC::CallFrame::thisValue): |
| * interpreter/CallFrame.h: |
| (JSC::ExecState::setException): |
| (JSC::ExecState::exception): |
| (JSC::ExecState::exceptionSlot): |
| (JSC::ExecState::hadException): |
| * interpreter/Interpreter.cpp: |
| (JSC::fastIsNumber): |
| (JSC::fastToInt32): |
| (JSC::fastToUInt32): |
| (JSC::jsLess): |
| (JSC::jsLessEq): |
| (JSC::jsAddSlowCase): |
| (JSC::jsAdd): |
| (JSC::jsTypeStringForValue): |
| (JSC::jsIsObjectType): |
| (JSC::jsIsFunctionType): |
| (JSC::Interpreter::resolve): |
| (JSC::Interpreter::resolveSkip): |
| (JSC::Interpreter::resolveGlobal): |
| (JSC::inlineResolveBase): |
| (JSC::Interpreter::resolveBase): |
| (JSC::Interpreter::resolveBaseAndProperty): |
| (JSC::Interpreter::resolveBaseAndFunc): |
| (JSC::isNotObject): |
| (JSC::Interpreter::callEval): |
| (JSC::Interpreter::unwindCallFrame): |
| (JSC::Interpreter::throwException): |
| (JSC::Interpreter::execute): |
| (JSC::Interpreter::checkTimeout): |
| (JSC::Interpreter::createExceptionScope): |
| (JSC::cachePrototypeChain): |
| (JSC::Interpreter::tryCachePutByID): |
| (JSC::countPrototypeChainEntriesAndCheckForProxies): |
| (JSC::Interpreter::tryCacheGetByID): |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::retrieveArguments): |
| (JSC::Interpreter::retrieveCaller): |
| (JSC::Interpreter::retrieveLastCaller): |
| (JSC::Interpreter::tryCTICachePutByID): |
| (JSC::Interpreter::tryCTICacheGetByID): |
| (JSC::returnToThrowTrampoline): |
| (JSC::Interpreter::cti_op_convert_this): |
| (JSC::Interpreter::cti_op_add): |
| (JSC::Interpreter::cti_op_pre_inc): |
| (JSC::Interpreter::cti_op_loop_if_less): |
| (JSC::Interpreter::cti_op_loop_if_lesseq): |
| (JSC::Interpreter::cti_op_get_by_id_generic): |
| (JSC::Interpreter::cti_op_get_by_id): |
| (JSC::Interpreter::cti_op_get_by_id_second): |
| (JSC::Interpreter::cti_op_get_by_id_self_fail): |
| (JSC::Interpreter::cti_op_get_by_id_proto_list): |
| (JSC::Interpreter::cti_op_get_by_id_proto_list_full): |
| (JSC::Interpreter::cti_op_get_by_id_proto_fail): |
| (JSC::Interpreter::cti_op_get_by_id_array_fail): |
| (JSC::Interpreter::cti_op_get_by_id_string_fail): |
| (JSC::Interpreter::cti_op_instanceof): |
| (JSC::Interpreter::cti_op_del_by_id): |
| (JSC::Interpreter::cti_op_mul): |
| (JSC::Interpreter::cti_op_call_NotJSFunction): |
| (JSC::Interpreter::cti_op_resolve): |
| (JSC::Interpreter::cti_op_construct_NotJSConstruct): |
| (JSC::Interpreter::cti_op_get_by_val): |
| (JSC::Interpreter::cti_op_resolve_func): |
| (JSC::Interpreter::cti_op_sub): |
| (JSC::Interpreter::cti_op_put_by_val): |
| (JSC::Interpreter::cti_op_put_by_val_array): |
| (JSC::Interpreter::cti_op_lesseq): |
| (JSC::Interpreter::cti_op_loop_if_true): |
| (JSC::Interpreter::cti_op_negate): |
| (JSC::Interpreter::cti_op_resolve_base): |
| (JSC::Interpreter::cti_op_resolve_skip): |
| (JSC::Interpreter::cti_op_resolve_global): |
| (JSC::Interpreter::cti_op_div): |
| (JSC::Interpreter::cti_op_pre_dec): |
| (JSC::Interpreter::cti_op_jless): |
| (JSC::Interpreter::cti_op_not): |
| (JSC::Interpreter::cti_op_jtrue): |
| (JSC::Interpreter::cti_op_post_inc): |
| (JSC::Interpreter::cti_op_eq): |
| (JSC::Interpreter::cti_op_lshift): |
| (JSC::Interpreter::cti_op_bitand): |
| (JSC::Interpreter::cti_op_rshift): |
| (JSC::Interpreter::cti_op_bitnot): |
| (JSC::Interpreter::cti_op_resolve_with_base): |
| (JSC::Interpreter::cti_op_mod): |
| (JSC::Interpreter::cti_op_less): |
| (JSC::Interpreter::cti_op_neq): |
| (JSC::Interpreter::cti_op_post_dec): |
| (JSC::Interpreter::cti_op_urshift): |
| (JSC::Interpreter::cti_op_bitxor): |
| (JSC::Interpreter::cti_op_bitor): |
| (JSC::Interpreter::cti_op_call_eval): |
| (JSC::Interpreter::cti_op_throw): |
| (JSC::Interpreter::cti_op_next_pname): |
| (JSC::Interpreter::cti_op_typeof): |
| (JSC::Interpreter::cti_op_is_undefined): |
| (JSC::Interpreter::cti_op_is_boolean): |
| (JSC::Interpreter::cti_op_is_number): |
| (JSC::Interpreter::cti_op_is_string): |
| (JSC::Interpreter::cti_op_is_object): |
| (JSC::Interpreter::cti_op_is_function): |
| (JSC::Interpreter::cti_op_stricteq): |
| (JSC::Interpreter::cti_op_nstricteq): |
| (JSC::Interpreter::cti_op_to_jsnumber): |
| (JSC::Interpreter::cti_op_in): |
| (JSC::Interpreter::cti_op_switch_imm): |
| (JSC::Interpreter::cti_op_switch_char): |
| (JSC::Interpreter::cti_op_switch_string): |
| (JSC::Interpreter::cti_op_del_by_val): |
| (JSC::Interpreter::cti_op_new_error): |
| (JSC::Interpreter::cti_vm_throw): |
| * interpreter/Interpreter.h: |
| (JSC::Interpreter::isJSArray): |
| (JSC::Interpreter::isJSString): |
| * interpreter/Register.h: |
| (JSC::Register::): |
| (JSC::Register::Register): |
| (JSC::Register::jsValue): |
| (JSC::Register::getJSValue): |
| * jit/JIT.cpp: |
| (JSC::): |
| (JSC::JIT::compileOpStrictEq): |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| * jit/JIT.h: |
| (JSC::): |
| (JSC::JIT::execute): |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::compileFastArith_op_rshift): |
| (JSC::JIT::compileFastArithSlow_op_rshift): |
| * jit/JITCall.cpp: |
| (JSC::JIT::unlinkCall): |
| (JSC::JIT::compileOpCallInitializeCallFrame): |
| (JSC::JIT::compileOpCall): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitGetVirtualRegister): |
| (JSC::JIT::getConstantOperand): |
| (JSC::JIT::isOperandConstant31BitImmediateInt): |
| (JSC::JIT::emitPutJITStubArgFromVirtualRegister): |
| (JSC::JIT::emitInitRegister): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::resizePropertyStorage): |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::patchGetByIdSelf): |
| (JSC::JIT::patchPutByIdReplace): |
| (JSC::JIT::privateCompileGetByIdSelf): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdSelfList): |
| (JSC::JIT::privateCompileGetByIdProtoList): |
| (JSC::JIT::privateCompileGetByIdChainList): |
| (JSC::JIT::privateCompileGetByIdChain): |
| (JSC::JIT::privateCompilePutByIdReplace): |
| * jsc.cpp: |
| (functionPrint): |
| (functionDebug): |
| (functionGC): |
| (functionVersion): |
| (functionRun): |
| (functionLoad): |
| (functionReadline): |
| (functionQuit): |
| * parser/Nodes.cpp: |
| (JSC::NullNode::emitBytecode): |
| (JSC::ArrayNode::emitBytecode): |
| (JSC::FunctionCallValueNode::emitBytecode): |
| (JSC::FunctionCallResolveNode::emitBytecode): |
| (JSC::VoidNode::emitBytecode): |
| (JSC::ConstDeclNode::emitCodeSingle): |
| (JSC::ReturnNode::emitBytecode): |
| (JSC::processClauseList): |
| (JSC::EvalNode::emitBytecode): |
| (JSC::FunctionBodyNode::emitBytecode): |
| (JSC::ProgramNode::emitBytecode): |
| * profiler/ProfileGenerator.cpp: |
| (JSC::ProfileGenerator::addParentForConsoleStart): |
| * profiler/Profiler.cpp: |
| (JSC::Profiler::willExecute): |
| (JSC::Profiler::didExecute): |
| (JSC::Profiler::createCallIdentifier): |
| * profiler/Profiler.h: |
| * runtime/ArgList.cpp: |
| (JSC::ArgList::slowAppend): |
| * runtime/ArgList.h: |
| (JSC::ArgList::at): |
| (JSC::ArgList::append): |
| * runtime/Arguments.cpp: |
| (JSC::Arguments::put): |
| * runtime/Arguments.h: |
| (JSC::Arguments::createStructure): |
| (JSC::asArguments): |
| * runtime/ArrayConstructor.cpp: |
| (JSC::callArrayConstructor): |
| * runtime/ArrayPrototype.cpp: |
| (JSC::getProperty): |
| (JSC::putProperty): |
| (JSC::arrayProtoFuncToString): |
| (JSC::arrayProtoFuncToLocaleString): |
| (JSC::arrayProtoFuncJoin): |
| (JSC::arrayProtoFuncConcat): |
| (JSC::arrayProtoFuncPop): |
| (JSC::arrayProtoFuncPush): |
| (JSC::arrayProtoFuncReverse): |
| (JSC::arrayProtoFuncShift): |
| (JSC::arrayProtoFuncSlice): |
| (JSC::arrayProtoFuncSort): |
| (JSC::arrayProtoFuncSplice): |
| (JSC::arrayProtoFuncUnShift): |
| (JSC::arrayProtoFuncFilter): |
| (JSC::arrayProtoFuncMap): |
| (JSC::arrayProtoFuncEvery): |
| (JSC::arrayProtoFuncForEach): |
| (JSC::arrayProtoFuncSome): |
| (JSC::arrayProtoFuncIndexOf): |
| (JSC::arrayProtoFuncLastIndexOf): |
| * runtime/BooleanConstructor.cpp: |
| (JSC::callBooleanConstructor): |
| (JSC::constructBooleanFromImmediateBoolean): |
| * runtime/BooleanConstructor.h: |
| * runtime/BooleanObject.h: |
| (JSC::asBooleanObject): |
| * runtime/BooleanPrototype.cpp: |
| (JSC::booleanProtoFuncToString): |
| (JSC::booleanProtoFuncValueOf): |
| * runtime/CallData.cpp: |
| (JSC::call): |
| * runtime/CallData.h: |
| * runtime/Collector.cpp: |
| (JSC::Heap::protect): |
| (JSC::Heap::unprotect): |
| (JSC::Heap::heap): |
| (JSC::Heap::collect): |
| * runtime/Collector.h: |
| * runtime/Completion.cpp: |
| (JSC::evaluate): |
| * runtime/Completion.h: |
| (JSC::Completion::Completion): |
| (JSC::Completion::value): |
| (JSC::Completion::setValue): |
| (JSC::Completion::isValueCompletion): |
| * runtime/ConstructData.cpp: |
| (JSC::construct): |
| * runtime/ConstructData.h: |
| * runtime/DateConstructor.cpp: |
| (JSC::constructDate): |
| (JSC::callDate): |
| (JSC::dateParse): |
| (JSC::dateNow): |
| (JSC::dateUTC): |
| * runtime/DateInstance.h: |
| (JSC::asDateInstance): |
| * runtime/DatePrototype.cpp: |
| (JSC::dateProtoFuncToString): |
| (JSC::dateProtoFuncToUTCString): |
| (JSC::dateProtoFuncToDateString): |
| (JSC::dateProtoFuncToTimeString): |
| (JSC::dateProtoFuncToLocaleString): |
| (JSC::dateProtoFuncToLocaleDateString): |
| (JSC::dateProtoFuncToLocaleTimeString): |
| (JSC::dateProtoFuncValueOf): |
| (JSC::dateProtoFuncGetTime): |
| (JSC::dateProtoFuncGetFullYear): |
| (JSC::dateProtoFuncGetUTCFullYear): |
| (JSC::dateProtoFuncToGMTString): |
| (JSC::dateProtoFuncGetMonth): |
| (JSC::dateProtoFuncGetUTCMonth): |
| (JSC::dateProtoFuncGetDate): |
| (JSC::dateProtoFuncGetUTCDate): |
| (JSC::dateProtoFuncGetDay): |
| (JSC::dateProtoFuncGetUTCDay): |
| (JSC::dateProtoFuncGetHours): |
| (JSC::dateProtoFuncGetUTCHours): |
| (JSC::dateProtoFuncGetMinutes): |
| (JSC::dateProtoFuncGetUTCMinutes): |
| (JSC::dateProtoFuncGetSeconds): |
| (JSC::dateProtoFuncGetUTCSeconds): |
| (JSC::dateProtoFuncGetMilliSeconds): |
| (JSC::dateProtoFuncGetUTCMilliseconds): |
| (JSC::dateProtoFuncGetTimezoneOffset): |
| (JSC::dateProtoFuncSetTime): |
| (JSC::setNewValueFromTimeArgs): |
| (JSC::setNewValueFromDateArgs): |
| (JSC::dateProtoFuncSetMilliSeconds): |
| (JSC::dateProtoFuncSetUTCMilliseconds): |
| (JSC::dateProtoFuncSetSeconds): |
| (JSC::dateProtoFuncSetUTCSeconds): |
| (JSC::dateProtoFuncSetMinutes): |
| (JSC::dateProtoFuncSetUTCMinutes): |
| (JSC::dateProtoFuncSetHours): |
| (JSC::dateProtoFuncSetUTCHours): |
| (JSC::dateProtoFuncSetDate): |
| (JSC::dateProtoFuncSetUTCDate): |
| (JSC::dateProtoFuncSetMonth): |
| (JSC::dateProtoFuncSetUTCMonth): |
| (JSC::dateProtoFuncSetFullYear): |
| (JSC::dateProtoFuncSetUTCFullYear): |
| (JSC::dateProtoFuncSetYear): |
| (JSC::dateProtoFuncGetYear): |
| * runtime/DatePrototype.h: |
| (JSC::DatePrototype::createStructure): |
| * runtime/ErrorConstructor.cpp: |
| (JSC::callErrorConstructor): |
| * runtime/ErrorPrototype.cpp: |
| (JSC::errorProtoFuncToString): |
| * runtime/ExceptionHelpers.cpp: |
| (JSC::createInterruptedExecutionException): |
| (JSC::createError): |
| (JSC::createStackOverflowError): |
| (JSC::createUndefinedVariableError): |
| (JSC::createErrorMessage): |
| (JSC::createInvalidParamError): |
| (JSC::createNotAConstructorError): |
| (JSC::createNotAFunctionError): |
| * runtime/ExceptionHelpers.h: |
| * runtime/FunctionConstructor.cpp: |
| (JSC::callFunctionConstructor): |
| * runtime/FunctionPrototype.cpp: |
| (JSC::callFunctionPrototype): |
| (JSC::functionProtoFuncToString): |
| (JSC::functionProtoFuncApply): |
| (JSC::functionProtoFuncCall): |
| * runtime/FunctionPrototype.h: |
| (JSC::FunctionPrototype::createStructure): |
| * runtime/GetterSetter.cpp: |
| (JSC::GetterSetter::toPrimitive): |
| (JSC::GetterSetter::getPrimitiveNumber): |
| * runtime/GetterSetter.h: |
| (JSC::asGetterSetter): |
| * runtime/InitializeThreading.cpp: |
| * runtime/InternalFunction.h: |
| (JSC::InternalFunction::createStructure): |
| (JSC::asInternalFunction): |
| * runtime/JSActivation.cpp: |
| (JSC::JSActivation::getOwnPropertySlot): |
| (JSC::JSActivation::put): |
| (JSC::JSActivation::putWithAttributes): |
| (JSC::JSActivation::argumentsGetter): |
| * runtime/JSActivation.h: |
| (JSC::JSActivation::createStructure): |
| (JSC::asActivation): |
| * runtime/JSArray.cpp: |
| (JSC::storageSize): |
| (JSC::JSArray::JSArray): |
| (JSC::JSArray::getOwnPropertySlot): |
| (JSC::JSArray::put): |
| (JSC::JSArray::putSlowCase): |
| (JSC::JSArray::deleteProperty): |
| (JSC::JSArray::getPropertyNames): |
| (JSC::JSArray::setLength): |
| (JSC::JSArray::pop): |
| (JSC::JSArray::push): |
| (JSC::JSArray::mark): |
| (JSC::JSArray::sort): |
| (JSC::JSArray::compactForSorting): |
| (JSC::JSArray::checkConsistency): |
| (JSC::constructArray): |
| * runtime/JSArray.h: |
| (JSC::JSArray::getIndex): |
| (JSC::JSArray::setIndex): |
| (JSC::JSArray::createStructure): |
| (JSC::asArray): |
| * runtime/JSCell.cpp: |
| (JSC::JSCell::put): |
| (JSC::JSCell::getJSNumber): |
| * runtime/JSCell.h: |
| (JSC::asCell): |
| (JSC::JSValue::asCell): |
| (JSC::JSValue::toPrimitive): |
| (JSC::JSValue::getPrimitiveNumber): |
| (JSC::JSValue::getJSNumber): |
| * runtime/JSFunction.cpp: |
| (JSC::JSFunction::call): |
| (JSC::JSFunction::argumentsGetter): |
| (JSC::JSFunction::callerGetter): |
| (JSC::JSFunction::lengthGetter): |
| (JSC::JSFunction::getOwnPropertySlot): |
| (JSC::JSFunction::put): |
| (JSC::JSFunction::construct): |
| * runtime/JSFunction.h: |
| (JSC::JSFunction::createStructure): |
| (JSC::asFunction): |
| * runtime/JSGlobalData.h: |
| * runtime/JSGlobalObject.cpp: |
| (JSC::markIfNeeded): |
| (JSC::JSGlobalObject::put): |
| (JSC::JSGlobalObject::putWithAttributes): |
| (JSC::JSGlobalObject::reset): |
| (JSC::JSGlobalObject::resetPrototype): |
| * runtime/JSGlobalObject.h: |
| (JSC::JSGlobalObject::createStructure): |
| (JSC::JSGlobalObject::GlobalPropertyInfo::GlobalPropertyInfo): |
| (JSC::asGlobalObject): |
| (JSC::Structure::prototypeForLookup): |
| * runtime/JSGlobalObjectFunctions.cpp: |
| (JSC::encode): |
| (JSC::decode): |
| (JSC::globalFuncEval): |
| (JSC::globalFuncParseInt): |
| (JSC::globalFuncParseFloat): |
| (JSC::globalFuncIsNaN): |
| (JSC::globalFuncIsFinite): |
| (JSC::globalFuncDecodeURI): |
| (JSC::globalFuncDecodeURIComponent): |
| (JSC::globalFuncEncodeURI): |
| (JSC::globalFuncEncodeURIComponent): |
| (JSC::globalFuncEscape): |
| (JSC::globalFuncUnescape): |
| (JSC::globalFuncJSCPrint): |
| * runtime/JSGlobalObjectFunctions.h: |
| * runtime/JSImmediate.cpp: |
| (JSC::JSImmediate::toThisObject): |
| (JSC::JSImmediate::toObject): |
| (JSC::JSImmediate::prototype): |
| (JSC::JSImmediate::toString): |
| * runtime/JSImmediate.h: |
| (JSC::JSImmediate::isImmediate): |
| (JSC::JSImmediate::isNumber): |
| (JSC::JSImmediate::isPositiveNumber): |
| (JSC::JSImmediate::isBoolean): |
| (JSC::JSImmediate::isUndefinedOrNull): |
| (JSC::JSImmediate::isNegative): |
| (JSC::JSImmediate::isEitherImmediate): |
| (JSC::JSImmediate::isAnyImmediate): |
| (JSC::JSImmediate::areBothImmediate): |
| (JSC::JSImmediate::areBothImmediateNumbers): |
| (JSC::JSImmediate::andImmediateNumbers): |
| (JSC::JSImmediate::xorImmediateNumbers): |
| (JSC::JSImmediate::orImmediateNumbers): |
| (JSC::JSImmediate::rightShiftImmediateNumbers): |
| (JSC::JSImmediate::canDoFastAdditiveOperations): |
| (JSC::JSImmediate::addImmediateNumbers): |
| (JSC::JSImmediate::subImmediateNumbers): |
| (JSC::JSImmediate::incImmediateNumber): |
| (JSC::JSImmediate::decImmediateNumber): |
| (JSC::JSImmediate::makeValue): |
| (JSC::JSImmediate::makeInt): |
| (JSC::JSImmediate::makeBool): |
| (JSC::JSImmediate::makeUndefined): |
| (JSC::JSImmediate::makeNull): |
| (JSC::JSImmediate::intValue): |
| (JSC::JSImmediate::uintValue): |
| (JSC::JSImmediate::boolValue): |
| (JSC::JSImmediate::rawValue): |
| (JSC::JSImmediate::trueImmediate): |
| (JSC::JSImmediate::falseImmediate): |
| (JSC::JSImmediate::undefinedImmediate): |
| (JSC::JSImmediate::nullImmediate): |
| (JSC::JSImmediate::zeroImmediate): |
| (JSC::JSImmediate::oneImmediate): |
| (JSC::JSImmediate::impossibleValue): |
| (JSC::JSImmediate::toBoolean): |
| (JSC::JSImmediate::getTruncatedUInt32): |
| (JSC::JSImmediate::from): |
| (JSC::JSImmediate::getTruncatedInt32): |
| (JSC::JSImmediate::toDouble): |
| (JSC::JSImmediate::getUInt32): |
| (JSC::jsNull): |
| (JSC::jsBoolean): |
| (JSC::jsUndefined): |
| (JSC::JSValue::isUndefined): |
| (JSC::JSValue::isNull): |
| (JSC::JSValue::isUndefinedOrNull): |
| (JSC::JSValue::isBoolean): |
| (JSC::JSValue::getBoolean): |
| (JSC::JSValue::toInt32): |
| (JSC::JSValue::toUInt32): |
| (JSC::toInt32): |
| (JSC::toUInt32): |
| * runtime/JSNotAnObject.cpp: |
| (JSC::JSNotAnObject::toPrimitive): |
| (JSC::JSNotAnObject::getPrimitiveNumber): |
| (JSC::JSNotAnObject::put): |
| * runtime/JSNotAnObject.h: |
| (JSC::JSNotAnObject::createStructure): |
| * runtime/JSNumberCell.cpp: |
| (JSC::JSNumberCell::toPrimitive): |
| (JSC::JSNumberCell::getPrimitiveNumber): |
| (JSC::JSNumberCell::getJSNumber): |
| (JSC::jsNumberCell): |
| (JSC::jsNaN): |
| * runtime/JSNumberCell.h: |
| (JSC::JSNumberCell::createStructure): |
| (JSC::asNumberCell): |
| (JSC::jsNumber): |
| (JSC::JSValue::toJSNumber): |
| * runtime/JSObject.cpp: |
| (JSC::JSObject::mark): |
| (JSC::JSObject::put): |
| (JSC::JSObject::putWithAttributes): |
| (JSC::callDefaultValueFunction): |
| (JSC::JSObject::getPrimitiveNumber): |
| (JSC::JSObject::defaultValue): |
| (JSC::JSObject::defineGetter): |
| (JSC::JSObject::defineSetter): |
| (JSC::JSObject::lookupGetter): |
| (JSC::JSObject::lookupSetter): |
| (JSC::JSObject::hasInstance): |
| (JSC::JSObject::toNumber): |
| (JSC::JSObject::toString): |
| (JSC::JSObject::fillGetterPropertySlot): |
| * runtime/JSObject.h: |
| (JSC::JSObject::getDirect): |
| (JSC::JSObject::getDirectLocation): |
| (JSC::JSObject::offsetForLocation): |
| (JSC::JSObject::locationForOffset): |
| (JSC::JSObject::getDirectOffset): |
| (JSC::JSObject::putDirectOffset): |
| (JSC::JSObject::createStructure): |
| (JSC::asObject): |
| (JSC::JSObject::prototype): |
| (JSC::JSObject::setPrototype): |
| (JSC::JSObject::inlineGetOwnPropertySlot): |
| (JSC::JSObject::getOwnPropertySlotForWrite): |
| (JSC::JSObject::getPropertySlot): |
| (JSC::JSObject::get): |
| (JSC::JSObject::putDirect): |
| (JSC::JSObject::putDirectWithoutTransition): |
| (JSC::JSObject::toPrimitive): |
| (JSC::JSValue::get): |
| (JSC::JSValue::put): |
| (JSC::JSObject::allocatePropertyStorageInline): |
| * runtime/JSPropertyNameIterator.cpp: |
| (JSC::JSPropertyNameIterator::toPrimitive): |
| (JSC::JSPropertyNameIterator::getPrimitiveNumber): |
| * runtime/JSPropertyNameIterator.h: |
| (JSC::JSPropertyNameIterator::create): |
| (JSC::JSPropertyNameIterator::next): |
| * runtime/JSStaticScopeObject.cpp: |
| (JSC::JSStaticScopeObject::put): |
| (JSC::JSStaticScopeObject::putWithAttributes): |
| * runtime/JSStaticScopeObject.h: |
| (JSC::JSStaticScopeObject::JSStaticScopeObject): |
| (JSC::JSStaticScopeObject::createStructure): |
| * runtime/JSString.cpp: |
| (JSC::JSString::toPrimitive): |
| (JSC::JSString::getPrimitiveNumber): |
| (JSC::JSString::getOwnPropertySlot): |
| * runtime/JSString.h: |
| (JSC::JSString::createStructure): |
| (JSC::asString): |
| * runtime/JSValue.h: |
| (JSC::JSValuePtr::makeImmediate): |
| (JSC::JSValuePtr::immediateValue): |
| (JSC::JSValuePtr::JSValuePtr): |
| (JSC::JSValuePtr::operator->): |
| (JSC::JSValuePtr::hasValue): |
| (JSC::JSValuePtr::operator==): |
| (JSC::JSValuePtr::operator!=): |
| (JSC::JSValuePtr::encode): |
| (JSC::JSValuePtr::decode): |
| (JSC::JSValue::asValue): |
| (JSC::noValue): |
| (JSC::operator==): |
| (JSC::operator!=): |
| * runtime/JSVariableObject.h: |
| (JSC::JSVariableObject::symbolTablePut): |
| (JSC::JSVariableObject::symbolTablePutWithAttributes): |
| * runtime/JSWrapperObject.cpp: |
| (JSC::JSWrapperObject::mark): |
| * runtime/JSWrapperObject.h: |
| (JSC::JSWrapperObject::internalValue): |
| (JSC::JSWrapperObject::setInternalValue): |
| * runtime/Lookup.cpp: |
| (JSC::setUpStaticFunctionSlot): |
| * runtime/Lookup.h: |
| (JSC::lookupPut): |
| * runtime/MathObject.cpp: |
| (JSC::mathProtoFuncAbs): |
| (JSC::mathProtoFuncACos): |
| (JSC::mathProtoFuncASin): |
| (JSC::mathProtoFuncATan): |
| (JSC::mathProtoFuncATan2): |
| (JSC::mathProtoFuncCeil): |
| (JSC::mathProtoFuncCos): |
| (JSC::mathProtoFuncExp): |
| (JSC::mathProtoFuncFloor): |
| (JSC::mathProtoFuncLog): |
| (JSC::mathProtoFuncMax): |
| (JSC::mathProtoFuncMin): |
| (JSC::mathProtoFuncPow): |
| (JSC::mathProtoFuncRandom): |
| (JSC::mathProtoFuncRound): |
| (JSC::mathProtoFuncSin): |
| (JSC::mathProtoFuncSqrt): |
| (JSC::mathProtoFuncTan): |
| * runtime/MathObject.h: |
| (JSC::MathObject::createStructure): |
| * runtime/NativeErrorConstructor.cpp: |
| (JSC::callNativeErrorConstructor): |
| * runtime/NumberConstructor.cpp: |
| (JSC::numberConstructorNaNValue): |
| (JSC::numberConstructorNegInfinity): |
| (JSC::numberConstructorPosInfinity): |
| (JSC::numberConstructorMaxValue): |
| (JSC::numberConstructorMinValue): |
| (JSC::callNumberConstructor): |
| * runtime/NumberConstructor.h: |
| (JSC::NumberConstructor::createStructure): |
| * runtime/NumberObject.cpp: |
| (JSC::NumberObject::getJSNumber): |
| (JSC::constructNumberFromImmediateNumber): |
| * runtime/NumberObject.h: |
| * runtime/NumberPrototype.cpp: |
| (JSC::numberProtoFuncToString): |
| (JSC::numberProtoFuncToLocaleString): |
| (JSC::numberProtoFuncValueOf): |
| (JSC::numberProtoFuncToFixed): |
| (JSC::numberProtoFuncToExponential): |
| (JSC::numberProtoFuncToPrecision): |
| * runtime/ObjectConstructor.cpp: |
| (JSC::constructObject): |
| (JSC::callObjectConstructor): |
| * runtime/ObjectPrototype.cpp: |
| (JSC::objectProtoFuncValueOf): |
| (JSC::objectProtoFuncHasOwnProperty): |
| (JSC::objectProtoFuncIsPrototypeOf): |
| (JSC::objectProtoFuncDefineGetter): |
| (JSC::objectProtoFuncDefineSetter): |
| (JSC::objectProtoFuncLookupGetter): |
| (JSC::objectProtoFuncLookupSetter): |
| (JSC::objectProtoFuncPropertyIsEnumerable): |
| (JSC::objectProtoFuncToLocaleString): |
| (JSC::objectProtoFuncToString): |
| * runtime/ObjectPrototype.h: |
| * runtime/Operations.cpp: |
| (JSC::equal): |
| (JSC::equalSlowCase): |
| (JSC::strictEqual): |
| (JSC::strictEqualSlowCase): |
| (JSC::throwOutOfMemoryError): |
| * runtime/Operations.h: |
| (JSC::equalSlowCaseInline): |
| (JSC::strictEqualSlowCaseInline): |
| * runtime/PropertySlot.cpp: |
| (JSC::PropertySlot::functionGetter): |
| * runtime/PropertySlot.h: |
| (JSC::PropertySlot::PropertySlot): |
| (JSC::PropertySlot::getValue): |
| (JSC::PropertySlot::putValue): |
| (JSC::PropertySlot::setValueSlot): |
| (JSC::PropertySlot::setValue): |
| (JSC::PropertySlot::setCustom): |
| (JSC::PropertySlot::setCustomIndex): |
| (JSC::PropertySlot::slotBase): |
| (JSC::PropertySlot::setBase): |
| (JSC::PropertySlot::): |
| * runtime/Protect.h: |
| (JSC::gcProtect): |
| (JSC::gcUnprotect): |
| (JSC::ProtectedPtr::ProtectedPtr): |
| (JSC::ProtectedPtr::operator JSValuePtr): |
| (JSC::ProtectedJSValuePtr::ProtectedJSValuePtr): |
| (JSC::ProtectedJSValuePtr::get): |
| (JSC::ProtectedJSValuePtr::operator JSValuePtr): |
| (JSC::ProtectedJSValuePtr::operator->): |
| (JSC::::ProtectedPtr): |
| (JSC::::~ProtectedPtr): |
| (JSC::::operator): |
| (JSC::ProtectedJSValuePtr::~ProtectedJSValuePtr): |
| (JSC::ProtectedJSValuePtr::operator=): |
| (JSC::operator==): |
| (JSC::operator!=): |
| * runtime/RegExpConstructor.cpp: |
| (JSC::RegExpConstructor::getBackref): |
| (JSC::RegExpConstructor::getLastParen): |
| (JSC::RegExpConstructor::getLeftContext): |
| (JSC::RegExpConstructor::getRightContext): |
| (JSC::regExpConstructorDollar1): |
| (JSC::regExpConstructorDollar2): |
| (JSC::regExpConstructorDollar3): |
| (JSC::regExpConstructorDollar4): |
| (JSC::regExpConstructorDollar5): |
| (JSC::regExpConstructorDollar6): |
| (JSC::regExpConstructorDollar7): |
| (JSC::regExpConstructorDollar8): |
| (JSC::regExpConstructorDollar9): |
| (JSC::regExpConstructorInput): |
| (JSC::regExpConstructorMultiline): |
| (JSC::regExpConstructorLastMatch): |
| (JSC::regExpConstructorLastParen): |
| (JSC::regExpConstructorLeftContext): |
| (JSC::regExpConstructorRightContext): |
| (JSC::RegExpConstructor::put): |
| (JSC::setRegExpConstructorInput): |
| (JSC::setRegExpConstructorMultiline): |
| (JSC::constructRegExp): |
| (JSC::callRegExpConstructor): |
| * runtime/RegExpConstructor.h: |
| (JSC::RegExpConstructor::createStructure): |
| (JSC::asRegExpConstructor): |
| * runtime/RegExpMatchesArray.h: |
| (JSC::RegExpMatchesArray::put): |
| * runtime/RegExpObject.cpp: |
| (JSC::regExpObjectGlobal): |
| (JSC::regExpObjectIgnoreCase): |
| (JSC::regExpObjectMultiline): |
| (JSC::regExpObjectSource): |
| (JSC::regExpObjectLastIndex): |
| (JSC::RegExpObject::put): |
| (JSC::setRegExpObjectLastIndex): |
| (JSC::RegExpObject::test): |
| (JSC::RegExpObject::exec): |
| (JSC::callRegExpObject): |
| * runtime/RegExpObject.h: |
| (JSC::RegExpObject::createStructure): |
| (JSC::asRegExpObject): |
| * runtime/RegExpPrototype.cpp: |
| (JSC::regExpProtoFuncTest): |
| (JSC::regExpProtoFuncExec): |
| (JSC::regExpProtoFuncCompile): |
| (JSC::regExpProtoFuncToString): |
| * runtime/StringConstructor.cpp: |
| (JSC::stringFromCharCodeSlowCase): |
| (JSC::stringFromCharCode): |
| (JSC::callStringConstructor): |
| * runtime/StringObject.cpp: |
| (JSC::StringObject::put): |
| * runtime/StringObject.h: |
| (JSC::StringObject::createStructure): |
| (JSC::asStringObject): |
| * runtime/StringObjectThatMasqueradesAsUndefined.h: |
| (JSC::StringObjectThatMasqueradesAsUndefined::createStructure): |
| * runtime/StringPrototype.cpp: |
| (JSC::stringProtoFuncReplace): |
| (JSC::stringProtoFuncToString): |
| (JSC::stringProtoFuncCharAt): |
| (JSC::stringProtoFuncCharCodeAt): |
| (JSC::stringProtoFuncConcat): |
| (JSC::stringProtoFuncIndexOf): |
| (JSC::stringProtoFuncLastIndexOf): |
| (JSC::stringProtoFuncMatch): |
| (JSC::stringProtoFuncSearch): |
| (JSC::stringProtoFuncSlice): |
| (JSC::stringProtoFuncSplit): |
| (JSC::stringProtoFuncSubstr): |
| (JSC::stringProtoFuncSubstring): |
| (JSC::stringProtoFuncToLowerCase): |
| (JSC::stringProtoFuncToUpperCase): |
| (JSC::stringProtoFuncLocaleCompare): |
| (JSC::stringProtoFuncBig): |
| (JSC::stringProtoFuncSmall): |
| (JSC::stringProtoFuncBlink): |
| (JSC::stringProtoFuncBold): |
| (JSC::stringProtoFuncFixed): |
| (JSC::stringProtoFuncItalics): |
| (JSC::stringProtoFuncStrike): |
| (JSC::stringProtoFuncSub): |
| (JSC::stringProtoFuncSup): |
| (JSC::stringProtoFuncFontcolor): |
| (JSC::stringProtoFuncFontsize): |
| (JSC::stringProtoFuncAnchor): |
| (JSC::stringProtoFuncLink): |
| * runtime/Structure.cpp: |
| (JSC::Structure::Structure): |
| (JSC::Structure::changePrototypeTransition): |
| (JSC::Structure::createCachedPrototypeChain): |
| * runtime/Structure.h: |
| (JSC::Structure::create): |
| (JSC::Structure::setPrototypeWithoutTransition): |
| (JSC::Structure::storedPrototype): |
| |
| 2009-01-06 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| <https://bugs.webkit.org/show_bug.cgi?id=23085> [jsfunfuzz] Over released ScopeChainNode |
| <rdar://problem/6474110> |
| |
| So this delightful bug was caused by our unwind code using a ScopeChain to perform |
| the unwind. The ScopeChain would ref the initial top of the scope chain, then deref |
| the resultant top of scope chain, which is incorrect. |
| |
| This patch removes the dependency on ScopeChain for the unwind, and i've filed |
| <https://bugs.webkit.org/show_bug.cgi?id=23144> to look into the unintuitive |
| ScopeChain behaviour. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::throwException): |
| |
| 2009-01-06 Adam Roben <aroben@apple.com> |
| |
| Hopeful Windows crash-on-launch fix |
| |
| * wtf/Platform.h: Force a world rebuild by touching this file. |
| |
| 2009-01-06 Holger Hans Peter Freyther <zecke@selfish.org> |
| |
| Reviewed by NOBODY (Build fix). |
| |
| * GNUmakefile.am:Add ByteArray.cpp too |
| |
| 2009-01-06 Holger Hans Peter Freyther <zecke@selfish.org> |
| |
| Reviewed by NOBODY (Speculative build fix). |
| |
| AllInOneFile.cpp does not include the JSByteArray.cpp include it... |
| |
| * GNUmakefile.am: |
| |
| 2009-01-05 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (Build fix). |
| |
| Fix Wx build |
| |
| * JavaScriptCoreSources.bkl: |
| |
| 2009-01-05 Oliver Hunt <oliver@apple.com> |
| |
| Windows build fixes |
| |
| Rubber-stamped by Alice Liu. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::Interpreter): |
| * runtime/ByteArray.cpp: |
| (JSC::ByteArray::create): |
| * runtime/ByteArray.h: |
| |
| 2009-01-05 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| CanvasPixelArray performance is too slow |
| <https://bugs.webkit.org/show_bug.cgi?id=23123> |
| |
| The fix to this is to devirtualise get and put in a manner similar to |
| JSString and JSArray. To do this I've added a ByteArray implementation |
| and JSByteArray wrapper to JSC. We can then do vptr comparisons to |
| devirtualise the calls. |
| |
| This devirtualisation improves performance by 1.5-2x in my somewhat ad |
| hoc tests. |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.exp: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.scons: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::Interpreter): |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::cti_op_get_by_val): |
| (JSC::Interpreter::cti_op_put_by_val): |
| * interpreter/Interpreter.h: |
| (JSC::Interpreter::isJSByteArray): |
| * runtime/ByteArray.cpp: Added. |
| (JSC::ByteArray::create): |
| * runtime/ByteArray.h: Added. |
| (JSC::ByteArray::length): |
| (JSC::ByteArray::set): |
| (JSC::ByteArray::get): |
| (JSC::ByteArray::data): |
| (JSC::ByteArray::ByteArray): |
| * runtime/JSByteArray.cpp: Added. |
| (JSC::): |
| (JSC::JSByteArray::JSByteArray): |
| (JSC::JSByteArray::createStructure): |
| (JSC::JSByteArray::getOwnPropertySlot): |
| (JSC::JSByteArray::put): |
| (JSC::JSByteArray::getPropertyNames): |
| * runtime/JSByteArray.h: Added. |
| (JSC::JSByteArray::canAccessIndex): |
| (JSC::JSByteArray::getIndex): |
| (JSC::JSByteArray::setIndex): |
| (JSC::JSByteArray::classInfo): |
| (JSC::JSByteArray::length): |
| (JSC::JSByteArray::): |
| (JSC::JSByteArray::JSByteArray): |
| (JSC::asByteArray): |
| |
| 2009-01-05 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23073 |
| <rdar://problem/6471129> Workers crash on Windows Release builds |
| |
| * wtf/ThreadSpecific.h: |
| (WTF::ThreadSpecific::destroy): Changed to clear the pointer only after data object |
| destruction is finished - otherwise, WebCore::ThreadGlobalData destructor was re-creating |
| the object in order to access atomic string table. |
| (WTF::ThreadSpecific::operator T*): Symmetrically, set up the per-thread pointer before |
| data constructor is called. |
| |
| * wtf/ThreadingWin.cpp: (WTF::wtfThreadEntryPoint): Remove a Windows-only hack to finalize |
| a thread - pthreadVC2 is a DLL, so it gets thread detached messages, and cleans up thread |
| specific data automatically. Besides, this code wasn't even compiled in for some time now. |
| |
| 2009-01-05 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=23115 |
| Create a version of ASSERT for use with otherwise unused variables |
| |
| * wtf/Assertions.h: Added ASSERT_UNUSED. |
| |
| * jit/ExecutableAllocatorPosix.cpp: |
| (JSC::ExecutablePool::systemRelease): |
| * runtime/Collector.cpp: |
| (JSC::Heap::destroy): |
| (JSC::Heap::heapAllocate): |
| * runtime/JSNotAnObject.cpp: |
| (JSC::JSNotAnObject::toPrimitive): |
| (JSC::JSNotAnObject::getPrimitiveNumber): |
| (JSC::JSNotAnObject::toBoolean): |
| (JSC::JSNotAnObject::toNumber): |
| (JSC::JSNotAnObject::toString): |
| (JSC::JSNotAnObject::getOwnPropertySlot): |
| (JSC::JSNotAnObject::put): |
| (JSC::JSNotAnObject::deleteProperty): |
| (JSC::JSNotAnObject::getPropertyNames): |
| * wtf/TCSystemAlloc.cpp: |
| (TCMalloc_SystemRelease): |
| Use it in some places that used other idioms for this purpose. |
| |
| 2009-01-04 Alice Liu <alice.liu@apple.com> |
| |
| <rdar://problem/6341776> Merge m_transitionCount and m_offset in Structure. |
| |
| Reviewed by Darin Adler. |
| |
| * runtime/Structure.cpp: |
| (JSC::Structure::Structure): Remove m_transitionCount |
| (JSC::Structure::addPropertyTransitionToExistingStructure): No need to wait until after the assignment to offset to assert if it's notFound; move it up. |
| (JSC::Structure::addPropertyTransition): Use method for transitionCount instead of m_transitionCount. Remove line that maintains the m_transitionCount. |
| (JSC::Structure::changePrototypeTransition): Remove line that maintains the m_transitionCount. |
| (JSC::Structure::getterSetterTransition): Remove line that maintains the m_transitionCount. |
| * runtime/Structure.h: |
| Changed s_maxTransitionLength and m_offset from size_t to signed char. m_offset will never become greater than 64 |
| because the structure transitions to a dictionary at that time. |
| (JSC::Structure::transitionCount): method to replace the data member |
| |
| 2009-01-04 Darin Adler <darin@apple.com> |
| |
| Reviewed by David Kilzer. |
| |
| Bug 15114: Provide compile-time assertions for sizeof(UChar), sizeof(DeprecatedChar), etc. |
| https://bugs.webkit.org/show_bug.cgi?id=15114 |
| |
| * wtf/unicode/Unicode.h: Assert size of UChar. There is no DeprecatedChar any more. |
| |
| 2009-01-03 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Oliver Hunt. |
| |
| Change the pcVector from storing native code pointers to storing offsets |
| from the base pointer. This will allow us to generate the pcVector on demand |
| for exceptions. |
| |
| * bytecode/CodeBlock.h: |
| (JSC::PC::PC): |
| (JSC::getNativePCOffset): |
| (JSC::CodeBlock::getBytecodeIndex): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompile): |
| |
| 2009-01-02 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (Build fix). |
| |
| * runtime/ScopeChain.cpp: |
| |
| 2009-01-02 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| [jsfunfuzz] unwind logic for exceptions in eval fails to account for dynamic scope external to the eval |
| https://bugs.webkit.org/show_bug.cgi?id=23078 |
| |
| This bug was caused by eval codeblocks being generated without accounting |
| for the depth of the scope chain they inherited. This meant that exception |
| handlers would understate their expected scope chain depth, which in turn |
| led to incorrectly removing nodes from the scope chain. |
| |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::BytecodeGenerator): |
| (JSC::BytecodeGenerator::emitCatch): |
| * bytecompiler/BytecodeGenerator.h: |
| * interpreter/Interpreter.cpp: |
| (JSC::depth): |
| * runtime/ScopeChain.cpp: |
| (JSC::ScopeChain::localDepth): |
| * runtime/ScopeChain.h: |
| (JSC::ScopeChainNode::deref): |
| (JSC::ScopeChainNode::ref): |
| |
| 2009-01-02 David Smith <catfish.man@gmail.com> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22699 |
| Enable NodeList caching for getElementsByTagName |
| |
| * wtf/HashFunctions.h: Moved the definition of PHI here and renamed to stringHashingStartValue |
| |
| 2009-01-02 David Kilzer <ddkilzer@apple.com> |
| |
| Attempt to fix Qt Linux build after r39553 |
| |
| * wtf/RandomNumberSeed.h: Include <sys/time.h> for gettimeofday(). |
| Include <sys/types.h> and <unistd.h> for getpid(). |
| |
| 2009-01-02 David Kilzer <ddkilzer@apple.com> |
| |
| Bug 23081: These files are no longer part of the KDE libraries |
| |
| <https://bugs.webkit.org/show_bug.cgi?id=23081> |
| |
| Reviewed by Darin Adler. |
| |
| Removed "This file is part of the KDE libraries" comment from |
| source files. Added or updated Apple copyrights as well. |
| |
| * parser/Lexer.h: |
| * wtf/HashCountedSet.h: |
| * wtf/RetainPtr.h: |
| * wtf/VectorTraits.h: |
| |
| 2009-01-02 David Kilzer <ddkilzer@apple.com> |
| |
| Bug 23080: Remove last vestiges of KJS references |
| |
| <https://bugs.webkit.org/show_bug.cgi?id=23080> |
| |
| Reviewed by Darin Adler. |
| |
| Also updated Apple copyright statements. |
| |
| * DerivedSources.make: Changed bison "kjsyy" prefix to "jscyy". |
| * GNUmakefile.am: Ditto. |
| * JavaScriptCore.pri: Ditto. Also changed KJSBISON to JSCBISON |
| and kjsbison to jscbison. |
| |
| * JavaScriptCoreSources.bkl: Changed JSCORE_KJS_SOURCES to |
| JSCORE_JSC_SOURCES. |
| * jscore.bkl: Ditto. |
| |
| * create_hash_table: Updated copyright and removed old comment. |
| |
| * parser/Grammar.y: Changed "kjsyy" prefix to "jscyy" prefix. |
| * parser/Lexer.cpp: Ditto. Also changed KJS_DEBUG_LEX to |
| JSC_DEBUG_LEX. |
| (jscyylex): |
| (JSC::Lexer::lex): |
| * parser/Parser.cpp: Ditto. |
| (JSC::Parser::parse): |
| |
| * pcre/dftables: Changed "kjs_pcre_" prefix to "jsc_pcre_". |
| * pcre/pcre_compile.cpp: Ditto. |
| (getOthercaseRange): |
| (encodeUTF8): |
| (compileBranch): |
| (calculateCompiledPatternLength): |
| * pcre/pcre_exec.cpp: Ditto. |
| (matchRef): |
| (getUTF8CharAndIncrementLength): |
| (match): |
| * pcre/pcre_internal.h: Ditto. |
| (toLowerCase): |
| (flipCase): |
| (classBitmapForChar): |
| (charTypeForChar): |
| * pcre/pcre_tables.cpp: Ditto. |
| * pcre/pcre_ucp_searchfuncs.cpp: Ditto. |
| (jsc_pcre_ucp_othercase): |
| * pcre/pcre_xclass.cpp: Ditto. |
| (getUTF8CharAndAdvancePointer): |
| (jsc_pcre_xclass): |
| |
| * runtime/Collector.h: Updated header guards using the |
| clean-header-guards script. |
| * runtime/CollectorHeapIterator.h: Added missing header guard. |
| * runtime/Identifier.h: Updated header guards. |
| * runtime/JSFunction.h: Fixed end-of-namespace comment. |
| |
| * runtime/JSGlobalObject.cpp: |
| (JSC::JSGlobalObject::reset): Renamed "kjsprint" debug function |
| to "jscprint". Changed implementation method from |
| globalFuncKJSPrint() to globalFuncJSCPrint(). |
| * runtime/JSGlobalObjectFunctions.cpp: |
| (JSC::globalFuncJSCPrint): Renamed from globalFuncKJSPrint(). |
| * runtime/JSGlobalObjectFunctions.h: Ditto. |
| |
| * runtime/JSImmediate.h: Updated header guards. |
| * runtime/JSLock.h: Ditto. |
| * runtime/JSType.h: Ditto. |
| * runtime/JSWrapperObject.h: Ditto. |
| * runtime/Lookup.h: Ditto. |
| * runtime/Operations.h: Ditto. |
| * runtime/Protect.h: Ditto. |
| * runtime/RegExp.h: Ditto. |
| * runtime/UString.h: Ditto. |
| |
| * tests/mozilla/js1_5/Array/regress-157652.js: Changed "KJS" |
| reference in comment to "JSC". |
| |
| * wrec/CharacterClassConstructor.cpp: Change "kjs_pcre_" function |
| prefixes to "jsc_pcre_". |
| (JSC::WREC::CharacterClassConstructor::put): |
| (JSC::WREC::CharacterClassConstructor::flush): |
| |
| * wtf/unicode/Unicode.h: Change "KJS_" header guard to "WTF_". |
| * wtf/unicode/icu/UnicodeIcu.h: Ditto. |
| * wtf/unicode/qt4/UnicodeQt4.h: Ditto. |
| |
| 2009-01-02 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| Make randomNumber generate 2^53 values instead of 2^32 (or 2^31 for rand() platforms) |
| |
| * wtf/RandomNumber.cpp: |
| (WTF::randomNumber): |
| |
| 2009-01-02 David Kilzer <ddkilzer@apple.com> |
| |
| Remove declaration for JSC::Identifier::initializeIdentifierThreading() |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| * runtime/Identifier.h: |
| (JSC::Identifier::initializeIdentifierThreading): Removed |
| declaration since the implementation was removed in r34412. |
| |
| 2009-01-01 Darin Adler <darin@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| String.replace does not support $& replacement metacharacter when search term is not a RegExp |
| <https://bugs.webkit.org/show_bug.cgi?id=21431> |
| <rdar://problem/6274993> |
| |
| Test: fast/js/string-replace-3.html |
| |
| * runtime/StringPrototype.cpp: |
| (JSC::substituteBackreferences): Added a null check here so we won't try to handle $$-$9 |
| backreferences when the search term is a string, not a RegExp. Added a check for 0 so we |
| won't try to handle $0 or $00 as a backreference. |
| (JSC::stringProtoFuncReplace): Added a call to substituteBackreferences. |
| |
| 2009-01-01 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Allow 32-bit integers to be stored in JSImmediates, on x64-bit. |
| Presently the top 32-bits of a 64-bit JSImmediate serve as a sign extension of a 31-bit |
| int stored in the low word (shifted left by one, to make room for a tag). In the new |
| format, the top 31-bits serve as a sign extension of a 32-bit int, still shifted left by |
| one. |
| |
| The new behavior is enabled using a flag in Platform.h, 'WTF_USE_ALTERNATE_JSIMMEDIATE'. |
| When this is set the constants defining the range of ints allowed to be stored as |
| JSImmediate values is extended. The code in JSImmediate.h can safely operate on either |
| format. This patch updates the JIT so that it can also operate with the new format. |
| |
| ~2% progression on x86-64, with & without the JIT, on sunspider & v8 tests. |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::addPtr): |
| (JSC::MacroAssembler::orPtr): |
| (JSC::MacroAssembler::or32): |
| (JSC::MacroAssembler::rshiftPtr): |
| (JSC::MacroAssembler::rshift32): |
| (JSC::MacroAssembler::subPtr): |
| (JSC::MacroAssembler::xorPtr): |
| (JSC::MacroAssembler::xor32): |
| (JSC::MacroAssembler::move): |
| (JSC::MacroAssembler::compareImm64ForBranch): |
| (JSC::MacroAssembler::compareImm64ForBranchEquality): |
| (JSC::MacroAssembler::jePtr): |
| (JSC::MacroAssembler::jgePtr): |
| (JSC::MacroAssembler::jlPtr): |
| (JSC::MacroAssembler::jlePtr): |
| (JSC::MacroAssembler::jnePtr): |
| (JSC::MacroAssembler::jnzSubPtr): |
| (JSC::MacroAssembler::joAddPtr): |
| (JSC::MacroAssembler::jzSubPtr): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::addq_rr): |
| (JSC::X86Assembler::orq_ir): |
| (JSC::X86Assembler::subq_ir): |
| (JSC::X86Assembler::xorq_rr): |
| (JSC::X86Assembler::sarq_CLr): |
| (JSC::X86Assembler::sarq_i8r): |
| (JSC::X86Assembler::cmpq_ir): |
| * jit/JIT.cpp: |
| (JSC::JIT::compileOpStrictEq): |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::compileFastArith_op_lshift): |
| (JSC::JIT::compileFastArithSlow_op_lshift): |
| (JSC::JIT::compileFastArith_op_rshift): |
| (JSC::JIT::compileFastArithSlow_op_rshift): |
| (JSC::JIT::compileFastArith_op_bitand): |
| (JSC::JIT::compileFastArithSlow_op_bitand): |
| (JSC::JIT::compileFastArith_op_mod): |
| (JSC::JIT::compileFastArithSlow_op_mod): |
| (JSC::JIT::compileFastArith_op_add): |
| (JSC::JIT::compileFastArithSlow_op_add): |
| (JSC::JIT::compileFastArith_op_mul): |
| (JSC::JIT::compileFastArithSlow_op_mul): |
| (JSC::JIT::compileFastArith_op_post_inc): |
| (JSC::JIT::compileFastArithSlow_op_post_inc): |
| (JSC::JIT::compileFastArith_op_post_dec): |
| (JSC::JIT::compileFastArithSlow_op_post_dec): |
| (JSC::JIT::compileFastArith_op_pre_inc): |
| (JSC::JIT::compileFastArithSlow_op_pre_inc): |
| (JSC::JIT::compileFastArith_op_pre_dec): |
| (JSC::JIT::compileFastArithSlow_op_pre_dec): |
| (JSC::JIT::compileBinaryArithOp): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::getConstantOperand): |
| (JSC::JIT::getConstantOperandImmediateInt): |
| (JSC::JIT::isOperandConstantImmediateInt): |
| (JSC::JIT::isOperandConstant31BitImmediateInt): |
| (JSC::JIT::emitFastArithDeTagImmediate): |
| (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): |
| (JSC::JIT::emitFastArithReTagImmediate): |
| (JSC::JIT::emitFastArithImmToInt): |
| (JSC::JIT::emitFastArithIntToImmNoCheck): |
| * runtime/JSImmediate.h: |
| (JSC::JSImmediate::isPositiveNumber): |
| (JSC::JSImmediate::isNegative): |
| (JSC::JSImmediate::rightShiftImmediateNumbers): |
| (JSC::JSImmediate::canDoFastAdditiveOperations): |
| (JSC::JSImmediate::makeValue): |
| (JSC::JSImmediate::makeInt): |
| (JSC::JSImmediate::makeBool): |
| (JSC::JSImmediate::intValue): |
| (JSC::JSImmediate::rawValue): |
| (JSC::JSImmediate::toBoolean): |
| (JSC::JSImmediate::from): |
| * wtf/Platform.h: |
| |
| 2008-12-31 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| [jsfunfuzz] Assertion + incorrect behaviour with dynamically created local variable in a catch block |
| <https://bugs.webkit.org/show_bug.cgi?id=23063> |
| |
| Eval inside a catch block attempts to use the catch block's static scope in |
| an unsafe way by attempting to add new properties to the scope. This patch |
| fixes this issue simply by preventing the catch block from using a static |
| scope if it contains an eval. |
| |
| * parser/Grammar.y: |
| * parser/Nodes.cpp: |
| (JSC::TryNode::emitBytecode): |
| * parser/Nodes.h: |
| (JSC::TryNode::): |
| |
| 2008-12-31 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| [jsfunfuzz] Computed exception offset wrong when first instruction is attempt to resolve deleted eval |
| <https://bugs.webkit.org/show_bug.cgi?id=23062> |
| |
| This was caused by the expression information for the initial resolve of |
| eval not being emitted. If this resolve was the first instruction that |
| could throw an exception the information search would fail leading to an |
| assertion failure. If it was not the first throwable opcode the wrong |
| expression information would used. |
| |
| Fix is simply to emit the expression info. |
| |
| * parser/Nodes.cpp: |
| (JSC::EvalFunctionCallNode::emitBytecode): |
| |
| 2008-12-31 Cameron Zwarich <cwzwarich@uwaterloo.ca> |
| |
| Reviewed by Oliver Hunt. |
| |
| Bug 23054: Caching of global lookups occurs even when the global object has become a dictionary |
| <https://bugs.webkit.org/show_bug.cgi?id=23054> |
| <rdar://problem/6469905> |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::resolveGlobal): Do not cache lookup if the global |
| object has transitioned to a dictionary. |
| (JSC::Interpreter::cti_op_resolve_global): Do not cache lookup if the |
| global object has transitioned to a dictionary. |
| |
| 2008-12-30 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| <https://bugs.webkit.org/show_bug.cgi?id=23049> [jsfunfuzz] With blocks do not correctly protect their scope object |
| <rdar://problem/6469742> Crash in JSC::TypeInfo::hasStandardGetOwnPropertySlot() running jsfunfuzz |
| |
| The problem that caused this was that with nodes were not correctly protecting |
| the final object that was placed in the scope chain. We correct this by forcing |
| the use of a temporary register (which stops us relying on a local register |
| protecting the scope) and changing the behaviour of op_push_scope so that it |
| will store the final scope object. |
| |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::emitPushScope): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::cti_op_push_scope): |
| * interpreter/Interpreter.h: |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| * parser/Nodes.cpp: |
| (JSC::WithNode::emitBytecode): |
| |
| 2008-12-30 Cameron Zwarich <cwzwarich@uwaterloo.ca> |
| |
| Reviewed by Sam Weinig. |
| |
| Bug 23037: Parsing and reparsing disagree on automatic semicolon insertion |
| <https://bugs.webkit.org/show_bug.cgi?id=23037> |
| <rdar://problem/6467124> |
| |
| Parsing and reparsing disagree about automatic semicolon insertion, so that a |
| function like |
| |
| function() { a = 1, } |
| |
| is parsed as being syntactically valid but gets a syntax error upon reparsing. |
| This leads to an assertion failure in Parser::reparse(). It is not that big of |
| an issue in practice, because in a Release build such a function will return |
| 'undefined' when called. |
| |
| In this case, we are not following the spec and it should be a syntax error. |
| However, unless there is a newline separating the ',' and the '}', WebKit would |
| not treat it as a syntax error in the past either. It would be a bit of work to |
| make the automatic semicolon insertion match the spec exactly, so this patch |
| changes it to match our past behaviour. |
| |
| The problem is that even during reparsing, the Lexer adds a semicolon at the |
| end of the input, which confuses allowAutomaticSemicolon(), because it is |
| expecting either a '}', the end of input, or a terminator like a newline. |
| |
| * parser/Lexer.cpp: |
| (JSC::Lexer::Lexer): Initialize m_isReparsing to false. |
| (JSC::Lexer::lex): Do not perform automatic semicolon insertion in the Lexer if |
| we are in the middle of reparsing. |
| (JSC::Lexer::clear): Set m_isReparsing to false. |
| * parser/Lexer.h: |
| (JSC::Lexer::setIsReparsing): Added. |
| * parser/Parser.cpp: |
| (JSC::Parser::reparse): Call Lexer::setIsReparsing() to notify the Lexer of |
| reparsing. |
| |
| 2008-12-29 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (Build fix). |
| |
| Yet another attempt to fix Tiger. |
| |
| * wtf/RandomNumber.cpp: |
| (WTF::randomNumber): |
| |
| 2008-12-29 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (Build fix). |
| |
| Tiger build fix (correct this time) |
| |
| * wtf/RandomNumber.cpp: |
| |
| 2008-12-29 Cameron Zwarich <cwzwarich@uwaterloo.ca> |
| |
| Rubber-stamped by Alexey Proskuryakov. |
| |
| Revert r39509, because kjsyydebug is used in the generated code if YYDEBUG is 1. |
| |
| * parser/Grammar.y: |
| |
| 2008-12-29 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (Build fix). |
| |
| Tiger build fix. |
| |
| * wtf/RandomNumber.cpp: |
| |
| 2008-12-29 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Mark Rowe. |
| |
| <rdar://problem/6358108> Insecure randomness in Math.random() leads to user tracking |
| |
| Switch to arc4random on PLATFORM(DARWIN), this is ~1.5x slower than random(), but the |
| it is still so fast that there is no fathomable way it could be a bottleneck for anything. |
| |
| randomNumber is called in two places |
| * During form submission where it is called once per form |
| * Math.random in JSC. For this difference to show up you have to be looping on |
| a cached local copy of random, for a large (>10000) calls. |
| |
| No change in SunSpider. |
| |
| * wtf/RandomNumber.cpp: |
| (WTF::randomNumber): |
| * wtf/RandomNumberSeed.h: |
| (WTF::initializeRandomNumberGenerator): |
| |
| 2008-12-29 Cameron Zwarich <cwzwarich@uwaterloo.ca> |
| |
| Rubber-stamped by Sam Weinig. |
| |
| Remove unused kjsyydebug #define. |
| |
| * parser/Grammar.y: |
| |
| 2008-12-29 Cameron Zwarich <cwzwarich@uwaterloo.ca> |
| |
| Reviewed by Oliver Hunt and Sam Weinig. |
| |
| Bug 23029: REGRESSION (r39337): jsfunfuzz generates identical test files |
| <https://bugs.webkit.org/show_bug.cgi?id=23029> |
| <rdar://problem/6469185> |
| |
| The unification of random number generation in r39337 resulted in random() |
| being initialized on Darwin, but rand() actually being used. Fix this by |
| making randomNumber() use random() instead of rand() on Darwin. |
| |
| * wtf/RandomNumber.cpp: |
| (WTF::randomNumber): |
| |
| 2008-12-29 Sam Weinig <sam@webkit.org> |
| |
| Fix buildbots. |
| |
| * runtime/Structure.cpp: |
| |
| 2008-12-29 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Oliver Hunt. |
| |
| Patch for https://bugs.webkit.org/show_bug.cgi?id=23026 |
| Move the deleted offsets vector into the PropertyMap |
| |
| Saves 3 words per Structure. |
| |
| * runtime/PropertyMapHashTable.h: |
| * runtime/Structure.cpp: |
| (JSC::Structure::addPropertyTransition): |
| (JSC::Structure::changePrototypeTransition): |
| (JSC::Structure::getterSetterTransition): |
| (JSC::Structure::toDictionaryTransition): |
| (JSC::Structure::fromDictionaryTransition): |
| (JSC::Structure::copyPropertyTable): |
| (JSC::Structure::put): |
| (JSC::Structure::remove): |
| (JSC::Structure::rehashPropertyMapHashTable): |
| * runtime/Structure.h: |
| (JSC::Structure::propertyStorageSize): |
| |
| 2008-12-29 Cameron Zwarich <cwzwarich@uwaterloo.ca> |
| |
| Reviewed by Oliver Hunt. |
| |
| Change code using m_body.get() as a boolean to take advantage of the |
| implicit conversion of RefPtr to boolean. |
| |
| * runtime/JSFunction.cpp: |
| (JSC::JSFunction::~JSFunction): |
| |
| 2008-12-28 Cameron Zwarich <cwzwarich@uwaterloo.ca> |
| |
| Reviewed by Oliver Hunt. |
| |
| Bug 22840: REGRESSION (r38349): Gmail doesn't load with profiling enabled |
| <https://bugs.webkit.org/show_bug.cgi?id=22840> |
| <rdar://problem/6468077> |
| |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::emitNewArray): Add an assertion that the range |
| of registers passed to op_new_array is sequential. |
| (JSC::BytecodeGenerator::emitCall): Correct the relocation of registers |
| when emitting profiler hooks so that registers aren't leaked. Also, add |
| an assertion that the 'this' register is always ref'd (because it is), |
| remove the needless protection of the 'this' register when relocating, |
| and add an assertion that the range of registers passed to op_call for |
| function call arguments is sequential. |
| (JSC::BytecodeGenerator::emitConstruct): Correct the relocation of |
| registers when emitting profiler hooks so that registers aren't leaked. |
| Also, add an assertion that the range of registers passed to op_construct |
| for function call arguments is sequential. |
| |
| 2008-12-26 Mark Rowe <mrowe@apple.com> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| <rdar://problem/6467376> Race condition in WTF::currentThread can lead to a thread using two different identifiers during its lifetime |
| |
| If a newly-created thread calls WTF::currentThread() before WTF::createThread calls establishIdentifierForPthreadHandle |
| then more than one identifier will be used for the same thread. We can avoid this by adding some extra synchronization |
| during thread creation that delays the execution of the thread function until the thread identifier has been set up, and |
| an assertion to catch this problem should it reappear in the future. |
| |
| * wtf/Threading.cpp: Added. |
| (WTF::NewThreadContext::NewThreadContext): |
| (WTF::threadEntryPoint): |
| (WTF::createThread): Add cross-platform createThread function that delays the execution of the thread function until |
| after the thread identifier has been set up. |
| * wtf/Threading.h: |
| * wtf/ThreadingGtk.cpp: |
| (WTF::establishIdentifierForThread): |
| (WTF::createThreadInternal): |
| * wtf/ThreadingNone.cpp: |
| (WTF::createThreadInternal): |
| * wtf/ThreadingPthreads.cpp: |
| (WTF::establishIdentifierForPthreadHandle): |
| (WTF::createThreadInternal): |
| * wtf/ThreadingQt.cpp: |
| (WTF::identifierByQthreadHandle): |
| (WTF::establishIdentifierForThread): |
| (WTF::createThreadInternal): |
| * wtf/ThreadingWin.cpp: |
| (WTF::storeThreadHandleByIdentifier): |
| (WTF::createThreadInternal): |
| |
| Add Threading.cpp to the build. |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.scons: |
| * JavaScriptCore.vcproj/WTF/WTF.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * JavaScriptCoreSources.bkl: |
| |
| 2008-12-26 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| Remove unused method. |
| |
| * runtime/Structure.h: Remove mutableTypeInfo. |
| |
| 2008-12-22 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Fix rounding / bounds / signed comparison bug in ExecutableAllocator. |
| |
| ExecutableAllocator::alloc assumed that m_freePtr would be aligned. This was |
| not always true, since the first allocation from an additional pool would not |
| be rounded up. Subsequent allocations would be unaligned, and too much memory |
| could be erroneously allocated from the pool, when the size requested was |
| available, but the size rounded up to word granularity was not available in the |
| pool. This may result in the value of m_freePtr being greater than m_end. |
| |
| Under these circumstances, the unsigned check for space will always pass, |
| resulting in pointers to memory outside of the arena being returned, and |
| ultimately segfaulty goodness when attempting to memcpy the hot freshly jitted |
| code from the AssemblerBuffer. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22974 |
| ... and probably many, many more. |
| |
| * jit/ExecutableAllocator.h: |
| (JSC::ExecutablePool::alloc): |
| (JSC::ExecutablePool::roundUpAllocationSize): |
| (JSC::ExecutablePool::ExecutablePool): |
| (JSC::ExecutablePool::poolAllocate): |
| |
| 2008-12-22 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Rename all uses of the term "repatch" to "patch". |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::DataLabelPtr::patch): |
| (JSC::MacroAssembler::DataLabel32::patch): |
| (JSC::MacroAssembler::Jump::patch): |
| (JSC::MacroAssembler::PatchBuffer::PatchBuffer): |
| (JSC::MacroAssembler::PatchBuffer::setPtr): |
| (JSC::MacroAssembler::loadPtrWithAddressOffsetPatch): |
| (JSC::MacroAssembler::storePtrWithAddressOffsetPatch): |
| (JSC::MacroAssembler::storePtrWithPatch): |
| (JSC::MacroAssembler::jnePtrWithPatch): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::patchAddress): |
| (JSC::X86Assembler::patchImmediate): |
| (JSC::X86Assembler::patchPointer): |
| (JSC::X86Assembler::patchBranchOffset): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::tryCTICachePutByID): |
| (JSC::Interpreter::tryCTICacheGetByID): |
| (JSC::Interpreter::cti_op_put_by_id): |
| (JSC::Interpreter::cti_op_get_by_id): |
| (JSC::Interpreter::cti_op_get_by_id_self_fail): |
| (JSC::Interpreter::cti_op_get_by_id_proto_list): |
| (JSC::Interpreter::cti_vm_dontLazyLinkCall): |
| * jit/JIT.cpp: |
| (JSC::ctiPatchCallByReturnAddress): |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| * jit/JITCall.cpp: |
| (JSC::JIT::unlinkCall): |
| (JSC::JIT::linkCall): |
| (JSC::JIT::compileOpCall): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::compilePutByIdHotPath): |
| (JSC::JIT::compileGetByIdSlowCase): |
| (JSC::JIT::compilePutByIdSlowCase): |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::patchGetByIdSelf): |
| (JSC::JIT::patchPutByIdReplace): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| (JSC::JIT::privateCompileGetByIdSelf): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdSelfList): |
| (JSC::JIT::privateCompileGetByIdProtoList): |
| (JSC::JIT::privateCompileGetByIdChainList): |
| (JSC::JIT::privateCompileGetByIdChain): |
| (JSC::JIT::privateCompilePutByIdReplace): |
| |
| 2008-12-22 Adam Roben <aroben@apple.com> |
| |
| Build fix after r39428 |
| |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallSlowCase): Added a missing MacroAssembler:: |
| |
| 2008-12-22 Nikolas Zimmermann <nikolas.zimmermann@torchmobile.com> |
| |
| Rubber-stamped by George Staikos. |
| |
| Unify all TorchMobile copyright lines. Consolidate in a single line, as requested by Mark Rowe, some time ago. |
| |
| * wtf/RandomNumber.cpp: |
| * wtf/RandomNumber.h: |
| * wtf/RandomNumberSeed.h: |
| |
| 2008-12-21 Nikolas Zimmermann <nikolas.zimmermann@torchmobile.com> |
| |
| Rubber-stamped by George Staikos. |
| |
| Fix copyright of the new RandomNumber* files. |
| |
| * wtf/RandomNumber.cpp: |
| * wtf/RandomNumber.h: |
| * wtf/RandomNumberSeed.h: |
| |
| 2008-12-21 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt & Cameron Zwarich. |
| |
| Add support for call and property access repatching on x86-64. |
| |
| No change in performance on current configurations (2x impovement on v8-tests with JIT enabled on x86-64). |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::DataLabelPtr::repatch): |
| (JSC::MacroAssembler::DataLabelPtr::operator X86Assembler::JmpDst): |
| (JSC::MacroAssembler::DataLabel32::repatch): |
| (JSC::MacroAssembler::RepatchBuffer::addressOf): |
| (JSC::MacroAssembler::add32): |
| (JSC::MacroAssembler::sub32): |
| (JSC::MacroAssembler::loadPtrWithAddressOffsetRepatch): |
| (JSC::MacroAssembler::storePtrWithAddressOffsetRepatch): |
| (JSC::MacroAssembler::jePtr): |
| (JSC::MacroAssembler::jnePtr): |
| (JSC::MacroAssembler::jnePtrWithRepatch): |
| (JSC::MacroAssembler::differenceBetween): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::addl_im): |
| (JSC::X86Assembler::subl_im): |
| (JSC::X86Assembler::cmpl_rm): |
| (JSC::X86Assembler::movq_rm_disp32): |
| (JSC::X86Assembler::movq_mr_disp32): |
| (JSC::X86Assembler::repatchPointer): |
| (JSC::X86Assembler::X86InstructionFormatter::oneByteOp64_disp32): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| * jit/JITCall.cpp: |
| (JSC::JIT::unlinkCall): |
| (JSC::JIT::linkCall): |
| (JSC::JIT::compileOpCall): |
| (JSC::JIT::compileOpCallSlowCase): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::restoreArgumentReferenceForTrampoline): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::compileGetByIdSlowCase): |
| (JSC::JIT::compilePutByIdHotPath): |
| (JSC::JIT::compilePutByIdSlowCase): |
| (JSC::resizePropertyStorage): |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdProtoList): |
| (JSC::JIT::privateCompileGetByIdChainList): |
| (JSC::JIT::privateCompileGetByIdChain): |
| * wtf/Platform.h: |
| |
| 2008-12-20 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Port optimized property access generation to the MacroAssembler. |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::AbsoluteAddress::AbsoluteAddress): |
| (JSC::MacroAssembler::DataLabelPtr::repatch): |
| (JSC::MacroAssembler::DataLabel32::DataLabel32): |
| (JSC::MacroAssembler::DataLabel32::repatch): |
| (JSC::MacroAssembler::Label::operator X86Assembler::JmpDst): |
| (JSC::MacroAssembler::Jump::repatch): |
| (JSC::MacroAssembler::JumpList::empty): |
| (JSC::MacroAssembler::RepatchBuffer::link): |
| (JSC::MacroAssembler::add32): |
| (JSC::MacroAssembler::and32): |
| (JSC::MacroAssembler::sub32): |
| (JSC::MacroAssembler::loadPtrWithAddressRepatch): |
| (JSC::MacroAssembler::storePtrWithAddressRepatch): |
| (JSC::MacroAssembler::push): |
| (JSC::MacroAssembler::ja32): |
| (JSC::MacroAssembler::jePtr): |
| (JSC::MacroAssembler::jnePtr): |
| (JSC::MacroAssembler::jnePtrWithRepatch): |
| (JSC::MacroAssembler::align): |
| (JSC::MacroAssembler::differenceBetween): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::movl_rm_disp32): |
| (JSC::X86Assembler::movl_mr_disp32): |
| (JSC::X86Assembler::X86InstructionFormatter::oneByteOp_disp32): |
| (JSC::X86Assembler::X86InstructionFormatter::memoryModRM): |
| * jit/JIT.cpp: |
| (JSC::ctiRepatchCallByReturnAddress): |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::compileGetByIdSlowCase): |
| (JSC::JIT::compilePutByIdHotPath): |
| (JSC::JIT::compilePutByIdSlowCase): |
| (JSC::resizePropertyStorage): |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::patchGetByIdSelf): |
| (JSC::JIT::patchPutByIdReplace): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| (JSC::JIT::privateCompileGetByIdSelf): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdSelfList): |
| (JSC::JIT::privateCompileGetByIdProtoList): |
| (JSC::JIT::privateCompileGetByIdChainList): |
| (JSC::JIT::privateCompileGetByIdChain): |
| (JSC::JIT::privateCompilePutByIdReplace): |
| * wtf/RefCounted.h: |
| (WTF::RefCountedBase::addressOfCount): |
| |
| 2008-12-19 Gustavo Noronha Silva <gns@gnome.org> |
| |
| Reviewed by Holger Freyther. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22686 |
| |
| Added file which was missing to the javascriptcore_sources |
| variable, so that it shows up in the tarball created by `make |
| dist'. |
| |
| * GNUmakefile.am: |
| |
| 2008-12-19 Holger Hans Peter Freyther <zecke@selfish.org> |
| |
| Reviewed by Antti Koivisto. |
| |
| Build fix when building JS API tests with a c89 c compiler |
| |
| Do not use C++ style comments and convert them to C comments. |
| |
| * wtf/Platform.h: |
| |
| 2008-12-18 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Same as last revision, adding cases for pre & post inc & dec. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22928 |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| |
| 2008-12-18 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixes for the JIT's handling of JSImmediate values on x86-64. |
| On 64-bit systems, the code in JSImmediate.h relies on the upper |
| bits of a JSImmediate being a sign extension of the low 32-bits. |
| This was not being enforced by the JIT, since a number of inline |
| operations were being performed on 32-bit values in registers, and |
| when a 32-bit result is written to a register on x86-64 the value |
| is zero-extended to 64-bits. |
| |
| This fix honors previous behavoir. A better fix in the long run |
| (when the JIT is enabled by default) may be to change JSImmediate.h |
| so it no longer relies on the upper bits of the pointer,... though |
| if we're going to change JSImmediate.h for 64-bit, we probably may |
| as well change the format so that the full range of 32-bit ints can |
| be stored, rather than just 31-bits. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22925 |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::addPtr): |
| (JSC::MacroAssembler::andPtr): |
| (JSC::MacroAssembler::orPtr): |
| (JSC::MacroAssembler::or32): |
| (JSC::MacroAssembler::xor32): |
| (JSC::MacroAssembler::xorPtr): |
| (JSC::MacroAssembler::signExtend32ToPtr): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::): |
| (JSC::X86Assembler::andq_rr): |
| (JSC::X86Assembler::andq_ir): |
| (JSC::X86Assembler::orq_rr): |
| (JSC::X86Assembler::xorq_ir): |
| (JSC::X86Assembler::movsxd_rr): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitFastArithReTagImmediate): |
| (JSC::JIT::emitFastArithPotentiallyReTagImmediate): |
| (JSC::JIT::emitFastArithImmToInt): |
| |
| 2008-12-18 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Just a tidy up - rename & refactor some the #defines configuring the JIT. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::cti_op_convert_this): |
| (JSC::Interpreter::cti_op_end): |
| (JSC::Interpreter::cti_op_add): |
| (JSC::Interpreter::cti_op_pre_inc): |
| (JSC::Interpreter::cti_timeout_check): |
| (JSC::Interpreter::cti_register_file_check): |
| (JSC::Interpreter::cti_op_loop_if_less): |
| (JSC::Interpreter::cti_op_loop_if_lesseq): |
| (JSC::Interpreter::cti_op_new_object): |
| (JSC::Interpreter::cti_op_put_by_id_generic): |
| (JSC::Interpreter::cti_op_get_by_id_generic): |
| (JSC::Interpreter::cti_op_put_by_id): |
| (JSC::Interpreter::cti_op_put_by_id_second): |
| (JSC::Interpreter::cti_op_put_by_id_fail): |
| (JSC::Interpreter::cti_op_get_by_id): |
| (JSC::Interpreter::cti_op_get_by_id_second): |
| (JSC::Interpreter::cti_op_get_by_id_self_fail): |
| (JSC::Interpreter::cti_op_get_by_id_proto_list): |
| (JSC::Interpreter::cti_op_get_by_id_proto_list_full): |
| (JSC::Interpreter::cti_op_get_by_id_proto_fail): |
| (JSC::Interpreter::cti_op_get_by_id_array_fail): |
| (JSC::Interpreter::cti_op_get_by_id_string_fail): |
| (JSC::Interpreter::cti_op_instanceof): |
| (JSC::Interpreter::cti_op_del_by_id): |
| (JSC::Interpreter::cti_op_mul): |
| (JSC::Interpreter::cti_op_new_func): |
| (JSC::Interpreter::cti_op_call_JSFunction): |
| (JSC::Interpreter::cti_op_call_arityCheck): |
| (JSC::Interpreter::cti_vm_dontLazyLinkCall): |
| (JSC::Interpreter::cti_vm_lazyLinkCall): |
| (JSC::Interpreter::cti_op_push_activation): |
| (JSC::Interpreter::cti_op_call_NotJSFunction): |
| (JSC::Interpreter::cti_op_create_arguments): |
| (JSC::Interpreter::cti_op_create_arguments_no_params): |
| (JSC::Interpreter::cti_op_tear_off_activation): |
| (JSC::Interpreter::cti_op_tear_off_arguments): |
| (JSC::Interpreter::cti_op_profile_will_call): |
| (JSC::Interpreter::cti_op_profile_did_call): |
| (JSC::Interpreter::cti_op_ret_scopeChain): |
| (JSC::Interpreter::cti_op_new_array): |
| (JSC::Interpreter::cti_op_resolve): |
| (JSC::Interpreter::cti_op_construct_JSConstruct): |
| (JSC::Interpreter::cti_op_construct_NotJSConstruct): |
| (JSC::Interpreter::cti_op_get_by_val): |
| (JSC::Interpreter::cti_op_resolve_func): |
| (JSC::Interpreter::cti_op_sub): |
| (JSC::Interpreter::cti_op_put_by_val): |
| (JSC::Interpreter::cti_op_put_by_val_array): |
| (JSC::Interpreter::cti_op_lesseq): |
| (JSC::Interpreter::cti_op_loop_if_true): |
| (JSC::Interpreter::cti_op_negate): |
| (JSC::Interpreter::cti_op_resolve_base): |
| (JSC::Interpreter::cti_op_resolve_skip): |
| (JSC::Interpreter::cti_op_resolve_global): |
| (JSC::Interpreter::cti_op_div): |
| (JSC::Interpreter::cti_op_pre_dec): |
| (JSC::Interpreter::cti_op_jless): |
| (JSC::Interpreter::cti_op_not): |
| (JSC::Interpreter::cti_op_jtrue): |
| (JSC::Interpreter::cti_op_post_inc): |
| (JSC::Interpreter::cti_op_eq): |
| (JSC::Interpreter::cti_op_lshift): |
| (JSC::Interpreter::cti_op_bitand): |
| (JSC::Interpreter::cti_op_rshift): |
| (JSC::Interpreter::cti_op_bitnot): |
| (JSC::Interpreter::cti_op_resolve_with_base): |
| (JSC::Interpreter::cti_op_new_func_exp): |
| (JSC::Interpreter::cti_op_mod): |
| (JSC::Interpreter::cti_op_less): |
| (JSC::Interpreter::cti_op_neq): |
| (JSC::Interpreter::cti_op_post_dec): |
| (JSC::Interpreter::cti_op_urshift): |
| (JSC::Interpreter::cti_op_bitxor): |
| (JSC::Interpreter::cti_op_new_regexp): |
| (JSC::Interpreter::cti_op_bitor): |
| (JSC::Interpreter::cti_op_call_eval): |
| (JSC::Interpreter::cti_op_throw): |
| (JSC::Interpreter::cti_op_get_pnames): |
| (JSC::Interpreter::cti_op_next_pname): |
| (JSC::Interpreter::cti_op_push_scope): |
| (JSC::Interpreter::cti_op_pop_scope): |
| (JSC::Interpreter::cti_op_typeof): |
| (JSC::Interpreter::cti_op_is_undefined): |
| (JSC::Interpreter::cti_op_is_boolean): |
| (JSC::Interpreter::cti_op_is_number): |
| (JSC::Interpreter::cti_op_is_string): |
| (JSC::Interpreter::cti_op_is_object): |
| (JSC::Interpreter::cti_op_is_function): |
| (JSC::Interpreter::cti_op_stricteq): |
| (JSC::Interpreter::cti_op_nstricteq): |
| (JSC::Interpreter::cti_op_to_jsnumber): |
| (JSC::Interpreter::cti_op_in): |
| (JSC::Interpreter::cti_op_push_new_scope): |
| (JSC::Interpreter::cti_op_jmp_scopes): |
| (JSC::Interpreter::cti_op_put_by_index): |
| (JSC::Interpreter::cti_op_switch_imm): |
| (JSC::Interpreter::cti_op_switch_char): |
| (JSC::Interpreter::cti_op_switch_string): |
| (JSC::Interpreter::cti_op_del_by_val): |
| (JSC::Interpreter::cti_op_put_getter): |
| (JSC::Interpreter::cti_op_put_setter): |
| (JSC::Interpreter::cti_op_new_error): |
| (JSC::Interpreter::cti_op_debug): |
| (JSC::Interpreter::cti_vm_throw): |
| * interpreter/Interpreter.h: |
| * jit/JIT.cpp: |
| (JSC::): |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompile): |
| * jit/JIT.h: |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::restoreArgumentReference): |
| (JSC::JIT::restoreArgumentReferenceForTrampoline): |
| * wtf/Platform.h: |
| |
| 2008-12-18 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Bug 21855: REGRESSION (r37323): Gmail complains about popup blocking when opening a link |
| <https://bugs.webkit.org/show_bug.cgi?id=21855> |
| <rdar://problem/6278244> |
| |
| Move DynamicGlobalObjectScope to JSGlobalObject.h so that it can be used |
| from WebCore. |
| |
| * interpreter/Interpreter.cpp: |
| * runtime/JSGlobalObject.h: |
| (JSC::DynamicGlobalObjectScope::DynamicGlobalObjectScope): |
| (JSC::DynamicGlobalObjectScope::~DynamicGlobalObjectScope): |
| |
| 2008-12-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Fixed https://bugs.webkit.org/show_bug.cgi?id=22393 |
| Segfault when caching property accesses to primitive cells. |
| |
| Changed some asObject casts to asCell casts in cases where a primitive |
| value may be a cell and not an object. |
| |
| Re-enabled property caching for primitives in cases where it had been |
| disabled because of this bug. |
| |
| Updated a comment to better explain something Darin thought needed |
| explaining in an old patch review. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::countPrototypeChainEntriesAndCheckForProxies): |
| (JSC::Interpreter::tryCacheGetByID): |
| (JSC::Interpreter::tryCTICacheGetByID): |
| (JSC::Interpreter::cti_op_get_by_id_self_fail): |
| (JSC::Interpreter::cti_op_get_by_id_proto_list): |
| |
| 2008-12-17 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Fixes for Sunspider failures with the JIT enabled on x86-64. |
| |
| * assembler/MacroAssembler.h: |
| Switch the order of the RegisterID & Address form of je32, to keep it consistent with jne32. |
| * jit/JIT.cpp: |
| * jit/JIT.h: |
| * jit/JITInlineMethods.h: |
| Port the m_ctiVirtualCall tramopline generation to use the MacroAssembler interface. |
| * jit/JITCall.cpp: |
| Fix bug in the non-optimizing code path, vptr check should have been to the memory address pointer |
| to by the register, not to the register itself. |
| * wrec/WRECGenerator.cpp: |
| See assembler/MacroAssembler.h, above. |
| |
| 2008-12-17 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| print("Hello, 64-bit jitted world!"); |
| Get hello-world working through the JIT, on x86-64. |
| |
| * assembler/X86Assembler.h: |
| Fix encoding of opcode + RegisterID format instructions for 64-bit. |
| * interpreter/Interpreter.cpp: |
| * interpreter/Interpreter.h: |
| Make VoidPtrPair actually be a pair of void*s. |
| (Possibly should make this change for 32-bit Mac platforms, too - but won't change 32-bit behaviour in this patch). |
| * jit/JIT.cpp: |
| * jit/JIT.h: |
| Provide names for the timeoutCheckRegister & callFrameRegister on x86-64, |
| force x86-64 ctiTrampoline arguments onto the stack, |
| implement the asm trampolines for x86-64, |
| implement the restoreArgumentReference methods for x86-64 calling conventions. |
| * jit/JITCall.cpp: |
| * jit/JITInlineMethods.h: |
| * wtf/Platform.h: |
| Add switch settings to ENABLE(JIT), on PLATFORM(X86_64) (currently still disabled). |
| |
| 2008-12-17 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Add more CodeBlock statistics. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dumpStatistics): |
| |
| 2008-12-17 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Darin Adler. |
| |
| Fix for https://bugs.webkit.org/show_bug.cgi?id=22897 |
| <rdar://problem/6428342> |
| Look into feasibility of discarding bytecode after native codegen |
| |
| Clear the bytecode Instruction vector at the end JIT generation. |
| |
| Saves 4.8 MB on Membuster head. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dump): Add logging for the case that someone tries |
| to dump the instructions of a CodeBlock that has had its bytecode |
| vector cleared. |
| (JSC::CodeBlock::CodeBlock): Initialize the instructionCount |
| (JSC::CodeBlock::handlerForBytecodeOffset): Use instructionCount instead |
| of the size of the instruction vector in the assertion. |
| (JSC::CodeBlock::lineNumberForBytecodeOffset): Ditto. |
| (JSC::CodeBlock::expressionRangeForBytecodeOffset): Ditto. |
| (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): Ditto. |
| (JSC::CodeBlock::functionRegisterForBytecodeOffset): Ditto. |
| * bytecode/CodeBlock.h: |
| (JSC::CodeBlock::setInstructionCount): Store the instruction vector size |
| in debug builds for assertions. |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::generate): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompile): Clear the bytecode vector unless we |
| have compiled with Opcode sampling where we will continue to require it |
| |
| 2008-12-17 Cary Clark <caryclark@google.com> |
| |
| Reviewed by Darin Adler. |
| Landed by Adam Barth. |
| |
| Add ENABLE_TEXT_CARET to permit the ANDROID platform |
| to invalidate and draw the caret in a separate thread. |
| |
| * wtf/Platform.h: |
| Default ENABLE_TEXT_CARET to 1. |
| |
| 2008-12-17 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reviewed by Darin Adler. |
| |
| Don't use unique context group in JSGlobalContextCreate() on Tiger or Leopard, take two. |
| |
| * API/JSContextRef.cpp: The previous patch that claimed to do this was making Tiger and |
| Leopard always use unique context group instead. |
| |
| 2008-12-16 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Fix for https://bugs.webkit.org/show_bug.cgi?id=22838 |
| Remove dependency on the bytecode Instruction buffer in Interpreter::throwException |
| Part of <rdar://problem/6428342> |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::functionRegisterForBytecodeOffset): Added. Function to get |
| a function Register index in a callFrame for a bytecode offset. |
| (JSC::CodeBlock::shrinkToFit): Shrink m_getByIdExceptionInfo and m_functionRegisterInfos. |
| * bytecode/CodeBlock.h: |
| (JSC::FunctionRegisterInfo::FunctionRegisterInfo): Added. |
| (JSC::CodeBlock::addFunctionRegisterInfo): |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::emitCall): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::throwException): Use functionRegisterForBytecodeOffset in JIT |
| mode. |
| |
| 2008-12-16 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Gavin Barraclough. |
| |
| Fix for https://bugs.webkit.org/show_bug.cgi?id=22837 |
| Remove dependency on the bytecode Instruction buffer in Interpreter::cti_op_call_NotJSFunction |
| Part of <rdar://problem/6428342> |
| |
| * interpreter/CallFrame.h: Added comment regarding returnPC storing a void*. |
| * interpreter/Interpreter.cpp: |
| (JSC::bytecodeOffsetForPC): We no longer have any cases of the PC |
| being in the instruction stream for JIT, so we can remove the check. |
| (JSC::Interpreter::cti_op_call_NotJSFunction): Use the CTI_RETURN_ADDRESS |
| as the call frame returnPC as it is only necessary for looking up when |
| throwing an exception. |
| * interpreter/RegisterFile.h: |
| (JSC::RegisterFile::): Added comment regarding returnPC storing a void*. |
| * jit/JIT.h: Remove ARG_instr4. |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallSetupArgs): Don't pass the instruction pointer. |
| |
| 2008-12-16 Darin Adler <darin@apple.com> |
| |
| Reviewed and landed by Cameron Zwarich. |
| |
| Preparatory work for fixing |
| |
| Bug 22887: Make UString::Rep use RefCounted rather than implementing its own ref counting |
| <https://bugs.webkit.org/show_bug.cgi?id=22887> |
| |
| Change the various string translators used by Identifier:add() so that |
| they never zero the ref count of a newly created UString::Rep. |
| |
| * runtime/Identifier.cpp: |
| (JSC::CStringTranslator::translate): |
| (JSC::Identifier::add): |
| (JSC::UCharBufferTranslator::translate): |
| |
| 2008-12-16 Gavin Barraclough <barraclough@apple.com> |
| |
| Build fix for 'doze. |
| |
| * assembler/AssemblerBuffer.h: |
| |
| 2008-12-16 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Make the JIT compile on x86-64. |
| This largely involves populting the missing calls in MacroAssembler.h. |
| In addition some reinterpret_casts need removing from the JIT, and the |
| repatching property access code will need to be fully compiled out for |
| now. The changes in interpret.cpp are to reorder the functions so that |
| the _generic forms come before all other property access methods, and |
| then to place all property access methods other than the generic forms |
| under control of the ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS macro. |
| |
| No performance impact. |
| |
| * assembler/AssemblerBuffer.h: |
| (JSC::AssemblerBuffer::putInt64Unchecked): |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::loadPtr): |
| (JSC::MacroAssembler::load32): |
| (JSC::MacroAssembler::storePtr): |
| (JSC::MacroAssembler::storePtrWithRepatch): |
| (JSC::MacroAssembler::store32): |
| (JSC::MacroAssembler::poke): |
| (JSC::MacroAssembler::move): |
| (JSC::MacroAssembler::testImm64): |
| (JSC::MacroAssembler::jePtr): |
| (JSC::MacroAssembler::jnePtr): |
| (JSC::MacroAssembler::jnzPtr): |
| (JSC::MacroAssembler::jzPtr): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::): |
| (JSC::X86Assembler::cmpq_rr): |
| (JSC::X86Assembler::cmpq_rm): |
| (JSC::X86Assembler::cmpq_im): |
| (JSC::X86Assembler::testq_i32m): |
| (JSC::X86Assembler::movl_mEAX): |
| (JSC::X86Assembler::movl_i32r): |
| (JSC::X86Assembler::movl_EAXm): |
| (JSC::X86Assembler::movq_rm): |
| (JSC::X86Assembler::movq_mEAX): |
| (JSC::X86Assembler::movq_mr): |
| (JSC::X86Assembler::movq_i64r): |
| (JSC::X86Assembler::movl_mr): |
| (JSC::X86Assembler::X86InstructionFormatter::oneByteOp64): |
| (JSC::X86Assembler::X86InstructionFormatter::immediate64): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::cti_op_put_by_id_generic): |
| (JSC::Interpreter::cti_op_get_by_id_generic): |
| (JSC::Interpreter::cti_op_put_by_id): |
| (JSC::Interpreter::cti_op_put_by_id_second): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallSetupArgs): |
| (JSC::JIT::compileOpCall): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::compilePutByIdHotPath): |
| * runtime/JSImmediate.h: |
| (JSC::JSImmediate::makeInt): |
| |
| 2008-12-16 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Bug 22869: REGRESSION (r38407): http://news.cnet.com/8301-13579_3-9953533-37.html crashes |
| <https://bugs.webkit.org/show_bug.cgi?id=22869> |
| <rdar://problem/6402499> |
| |
| Before r38407, Structure::m_nameInPrevious was ref'd due to it being |
| stored in a PropertyMap. However, PropertyMaps are created lazily after |
| r38407, so Structure::m_nameInPrevious is not necessarily ref'd while |
| it is being used. Making it a RefPtr instead of a raw pointer fixes |
| the problem. |
| |
| Unfortunately, the crash in the bug is rather intermittent, and it is |
| impossible to add an assertion in UString::Ref::ref() to catch this bug |
| because some users of UString::Rep deliberately zero out the reference |
| count. Therefore, there is no layout test accompanying this bug fix. |
| |
| * runtime/Structure.cpp: |
| (JSC::Structure::~Structure): Use get(). |
| (JSC::Structure::materializePropertyMap): Use get(). |
| (JSC::Structure::addPropertyTransitionToExistingStructure): Use get(). |
| (JSC::Structure::addPropertyTransition): Use get(). |
| * runtime/Structure.h: Make Structure::m_nameInPrevious a RefPtr instead |
| of a raw pointer. |
| |
| 2008-12-16 Nikolas Zimmermann <nikolas.zimmermann@torchmobile.com> |
| |
| Not reviewed. Attempt to fix win build. No 'using namespace WTF' in this file, needs manual WTF:: prefix. |
| Not sure why the build works as is here. |
| |
| * runtime/MathObject.cpp: |
| (JSC::mathProtoFuncRandom): |
| |
| 2008-12-16 Nikolas Zimmermann <nikolas.zimmermann@torchmobile.com> |
| |
| Reviewed by Darin Adler. |
| |
| Fixes: https://bugs.webkit.org/show_bug.cgi?id=22876 |
| |
| Unify random number generation in JavaScriptCore & WebCore, by introducing |
| wtf/RandomNumber.h and moving wtf_random/wtf_random_init out of MathExtras.h. |
| |
| wtf_random_init() has been renamed to initializeRandomNumberGenerator() and |
| lives in it's own private header: wtf/RandomNumberSeed.h, only intended to |
| be used from within JavaScriptCore. |
| |
| wtf_random() has been renamed to randomNumber() and lives in a public header |
| wtf/RandomNumber.h, usable from within JavaScriptCore & WebCore. It encapsulates |
| the code taking care of initializing the random number generator (only when |
| building without ENABLE(JSC_MULTIPLE_THREADS), otherwhise initializeThreading() |
| already took care of that). |
| |
| Functional change on darwin: Use random() instead of rand(), as it got a larger |
| period (more randomness). HTMLFormElement already contains this implementation |
| and I just moved it in randomNumber(), as special case for PLATFORM(DARWIN). |
| |
| * GNUmakefile.am: Add RandomNumber.(cpp/h) / RandomNumberSeed.h. |
| * JavaScriptCore.exp: Ditto. |
| * JavaScriptCore.pri: Ditto. |
| * JavaScriptCore.scons: Ditto. |
| * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto. |
| * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. |
| * JavaScriptCoreSources.bkl: Ditto. |
| * runtime/MathObject.cpp: Use new WTF::randomNumber() functionality. |
| (JSC::mathProtoFuncRandom): |
| * wtf/MathExtras.h: Move wtf_random / wtf_random_init to new files. |
| * wtf/RandomNumber.cpp: Added. |
| (WTF::randomNumber): |
| * wtf/RandomNumber.h: Added. |
| * wtf/RandomNumberSeed.h: Added. Internal usage within JSC only. |
| (WTF::initializeRandomNumberGenerator): |
| * wtf/ThreadingGtk.cpp: Rename wtf_random_init() to initializeRandomNumberGenerator(). |
| (WTF::initializeThreading): |
| * wtf/ThreadingPthreads.cpp: Ditto. |
| (WTF::initializeThreading): |
| * wtf/ThreadingQt.cpp: Ditto. |
| (WTF::initializeThreading): |
| * wtf/ThreadingWin.cpp: Ditto. |
| (WTF::initializeThreading): |
| |
| 2008-12-16 Yael Aharon <yael.aharon@nokia.com> |
| |
| Reviewed by Tor Arne Vestbø. |
| |
| Qt/Win build fix |
| |
| * JavaScriptCore.pri: |
| |
| 2008-12-15 Mark Rowe <mrowe@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Fix the build with GCC 4.0. |
| |
| * Configurations/JavaScriptCore.xcconfig: GCC 4.0 appears to have a bug when compiling with -funwind-tables on, |
| so don't use it with that compiler version. |
| |
| 2008-12-15 Mark Rowe <mrowe@apple.com> |
| |
| Rubber-stamped by Cameron Zwarich. |
| |
| <rdar://problem/6289933> Change WebKit-related projects to build with GCC 4.2 on Leopard. |
| |
| * Configurations/Base.xcconfig: |
| * Configurations/DebugRelease.xcconfig: |
| |
| 2008-12-15 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reviewed by Darin Adler. |
| |
| Don't use unique context group in JSGlobalContextCreate() on Tiger or Leopard. |
| |
| * API/JSContextRef.cpp: (JSGlobalContextCreate): |
| |
| 2008-12-15 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reviewed by Darin Adler. |
| |
| <rdar://problem/6445089> Mach ports leak from worker threads |
| |
| * interpreter/Interpreter.cpp: (JSC::getCPUTime): |
| Deallocate the thread self port. |
| |
| 2008-12-15 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Mark Rowe. |
| |
| Construct stack frames in JIT code, so that backtracing can still work. |
| <rdar://problem/6447870> JIT should play nice with attempts to take stack traces |
| |
| * jit/JIT.cpp: |
| (JSC::): |
| (JSC::JIT::privateCompileMainPass): |
| |
| 2008-12-15 Mark Rowe <mrowe@apple.com> |
| |
| Reviewed by Gavin Barraclough. |
| |
| <rdar://problem/6402262> JavaScriptCore needs exception handling tables in order to get stack traces without frame pointers |
| |
| * Configurations/JavaScriptCore.xcconfig: |
| |
| 2008-12-15 Gavin Barraclough <barraclough@apple.com> |
| |
| Rubber stamped by Mark Rowe. |
| |
| Revert r39226 / Bug 22818: Unify JIT callback argument access OS X / Windows |
| This causes Acid3 failures – reverting for now & will revisit later. |
| https://bugs.webkit.org/show_bug.cgi?id=22873 |
| |
| * interpreter/Interpreter.h: |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::restoreArgumentReference): |
| (JSC::JIT::restoreArgumentReferenceForTrampoline): |
| (JSC::JIT::emitCTICall_internal): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::privateCompilePutByIdTransition): |
| * wtf/Platform.h: |
| |
| 2008-12-15 Darin Adler <darin@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| - fix <rdar://problem/6427048> crash due to infinite recursion after setting window.__proto__ = window |
| |
| Replaced toGlobalObject with the more generally useful unwrappedObject and used it to |
| fix the cycle detection code in put(__proto__). |
| |
| * JavaScriptCore.exp: Updated. |
| |
| * runtime/JSGlobalObject.cpp: Removed toGlobalObject. We now use unwrappedObject instead. |
| * runtime/JSGlobalObject.h: |
| (JSC::JSGlobalObject::isGlobalObject): Ditto. |
| |
| * runtime/JSGlobalObjectFunctions.cpp: |
| (JSC::globalFuncEval): Use unwrappedObject and isGlobalObject here rather than toGlobalObject. |
| |
| * runtime/JSObject.cpp: |
| (JSC::JSObject::put): Rewrote prototype cycle checking loop. Use unwrappedObject in the loop now. |
| (JSC::JSObject::unwrappedObject): Replaced toGlobalObject with this new function. |
| * runtime/JSObject.h: More of the same. |
| |
| 2008-12-15 Steve Falkenburg <sfalken@apple.com> |
| |
| Windows build fix. |
| |
| Visual Studio requires visibility of forward declarations to match class declaration. |
| |
| * assembler/X86Assembler.h: |
| |
| 2008-12-15 Gustavo Noronha Silva <kov@kov.eti.br> |
| |
| Reviewed by Mark Rowe. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22686 |
| |
| GTK+ build fix. |
| |
| * GNUmakefile.am: |
| |
| 2008-12-15 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Add support to X86Assembler emitting instructions that access all 16 registers on x86-64. |
| Add a new formating class, that is reponsible for both emitting the opcode bytes and the |
| ModRm bytes of an instruction in a single call; this can insert the REX byte as necessary |
| before the opcode, but has access to the register numbers to build the REX. |
| |
| * assembler/AssemblerBuffer.h: |
| (JSC::AssemblerBuffer::isAligned): |
| (JSC::AssemblerBuffer::data): |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::addPtr): |
| (JSC::MacroAssembler::add32): |
| (JSC::MacroAssembler::and32): |
| (JSC::MacroAssembler::or32): |
| (JSC::MacroAssembler::sub32): |
| (JSC::MacroAssembler::xor32): |
| (JSC::MacroAssembler::loadPtr): |
| (JSC::MacroAssembler::load32): |
| (JSC::MacroAssembler::load16): |
| (JSC::MacroAssembler::storePtr): |
| (JSC::MacroAssembler::storePtrWithRepatch): |
| (JSC::MacroAssembler::store32): |
| (JSC::MacroAssembler::pop): |
| (JSC::MacroAssembler::push): |
| (JSC::MacroAssembler::compareImm32ForBranch): |
| (JSC::MacroAssembler::compareImm32ForBranchEquality): |
| (JSC::MacroAssembler::testImm32): |
| (JSC::MacroAssembler::jae32): |
| (JSC::MacroAssembler::jb32): |
| (JSC::MacroAssembler::je16): |
| (JSC::MacroAssembler::jg32): |
| (JSC::MacroAssembler::jnePtr): |
| (JSC::MacroAssembler::jne32): |
| (JSC::MacroAssembler::jump): |
| * assembler/X86Assembler.h: |
| (JSC::X86::): |
| (JSC::X86Assembler::): |
| (JSC::X86Assembler::size): |
| (JSC::X86Assembler::push_r): |
| (JSC::X86Assembler::pop_r): |
| (JSC::X86Assembler::push_i32): |
| (JSC::X86Assembler::push_m): |
| (JSC::X86Assembler::pop_m): |
| (JSC::X86Assembler::addl_rr): |
| (JSC::X86Assembler::addl_mr): |
| (JSC::X86Assembler::addl_ir): |
| (JSC::X86Assembler::addq_ir): |
| (JSC::X86Assembler::addl_im): |
| (JSC::X86Assembler::andl_rr): |
| (JSC::X86Assembler::andl_ir): |
| (JSC::X86Assembler::orl_rr): |
| (JSC::X86Assembler::orl_mr): |
| (JSC::X86Assembler::orl_ir): |
| (JSC::X86Assembler::subl_rr): |
| (JSC::X86Assembler::subl_mr): |
| (JSC::X86Assembler::subl_ir): |
| (JSC::X86Assembler::subl_im): |
| (JSC::X86Assembler::xorl_rr): |
| (JSC::X86Assembler::xorl_ir): |
| (JSC::X86Assembler::sarl_i8r): |
| (JSC::X86Assembler::sarl_CLr): |
| (JSC::X86Assembler::shll_i8r): |
| (JSC::X86Assembler::shll_CLr): |
| (JSC::X86Assembler::imull_rr): |
| (JSC::X86Assembler::imull_i32r): |
| (JSC::X86Assembler::idivl_r): |
| (JSC::X86Assembler::cmpl_rr): |
| (JSC::X86Assembler::cmpl_rm): |
| (JSC::X86Assembler::cmpl_mr): |
| (JSC::X86Assembler::cmpl_ir): |
| (JSC::X86Assembler::cmpl_ir_force32): |
| (JSC::X86Assembler::cmpl_im): |
| (JSC::X86Assembler::cmpl_im_force32): |
| (JSC::X86Assembler::cmpw_rm): |
| (JSC::X86Assembler::testl_rr): |
| (JSC::X86Assembler::testl_i32r): |
| (JSC::X86Assembler::testl_i32m): |
| (JSC::X86Assembler::testq_rr): |
| (JSC::X86Assembler::testq_i32r): |
| (JSC::X86Assembler::testb_i8r): |
| (JSC::X86Assembler::sete_r): |
| (JSC::X86Assembler::setz_r): |
| (JSC::X86Assembler::setne_r): |
| (JSC::X86Assembler::setnz_r): |
| (JSC::X86Assembler::cdq): |
| (JSC::X86Assembler::xchgl_rr): |
| (JSC::X86Assembler::movl_rr): |
| (JSC::X86Assembler::movl_rm): |
| (JSC::X86Assembler::movl_mr): |
| (JSC::X86Assembler::movl_i32r): |
| (JSC::X86Assembler::movl_i32m): |
| (JSC::X86Assembler::movq_rr): |
| (JSC::X86Assembler::movq_rm): |
| (JSC::X86Assembler::movq_mr): |
| (JSC::X86Assembler::movzwl_mr): |
| (JSC::X86Assembler::movzbl_rr): |
| (JSC::X86Assembler::leal_mr): |
| (JSC::X86Assembler::call): |
| (JSC::X86Assembler::jmp): |
| (JSC::X86Assembler::jmp_r): |
| (JSC::X86Assembler::jmp_m): |
| (JSC::X86Assembler::jne): |
| (JSC::X86Assembler::jnz): |
| (JSC::X86Assembler::je): |
| (JSC::X86Assembler::jl): |
| (JSC::X86Assembler::jb): |
| (JSC::X86Assembler::jle): |
| (JSC::X86Assembler::jbe): |
| (JSC::X86Assembler::jge): |
| (JSC::X86Assembler::jg): |
| (JSC::X86Assembler::ja): |
| (JSC::X86Assembler::jae): |
| (JSC::X86Assembler::jo): |
| (JSC::X86Assembler::jp): |
| (JSC::X86Assembler::js): |
| (JSC::X86Assembler::addsd_rr): |
| (JSC::X86Assembler::addsd_mr): |
| (JSC::X86Assembler::cvtsi2sd_rr): |
| (JSC::X86Assembler::cvttsd2si_rr): |
| (JSC::X86Assembler::movd_rr): |
| (JSC::X86Assembler::movsd_rm): |
| (JSC::X86Assembler::movsd_mr): |
| (JSC::X86Assembler::mulsd_rr): |
| (JSC::X86Assembler::mulsd_mr): |
| (JSC::X86Assembler::pextrw_irr): |
| (JSC::X86Assembler::subsd_rr): |
| (JSC::X86Assembler::subsd_mr): |
| (JSC::X86Assembler::ucomis_rr): |
| (JSC::X86Assembler::int3): |
| (JSC::X86Assembler::ret): |
| (JSC::X86Assembler::predictNotTaken): |
| (JSC::X86Assembler::label): |
| (JSC::X86Assembler::align): |
| (JSC::X86Assembler::link): |
| (JSC::X86Assembler::executableCopy): |
| (JSC::X86Assembler::X86InstructionFormater::prefix): |
| (JSC::X86Assembler::X86InstructionFormater::oneByteOp): |
| (JSC::X86Assembler::X86InstructionFormater::twoByteOp): |
| (JSC::X86Assembler::X86InstructionFormater::oneByteOp64): |
| (JSC::X86Assembler::X86InstructionFormater::oneByteOp8): |
| (JSC::X86Assembler::X86InstructionFormater::twoByteOp8): |
| (JSC::X86Assembler::X86InstructionFormater::instructionImmediate8): |
| (JSC::X86Assembler::X86InstructionFormater::instructionImmediate32): |
| (JSC::X86Assembler::X86InstructionFormater::instructionRel32): |
| (JSC::X86Assembler::X86InstructionFormater::size): |
| (JSC::X86Assembler::X86InstructionFormater::isAligned): |
| (JSC::X86Assembler::X86InstructionFormater::data): |
| (JSC::X86Assembler::X86InstructionFormater::executableCopy): |
| (JSC::X86Assembler::X86InstructionFormater::registerModRM): |
| (JSC::X86Assembler::X86InstructionFormater::memoryModRM): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): |
| (JSC::JIT::compileBinaryArithOp): |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCall): |
| (JSC::JIT::compileOpCallSlowCase): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::compilePutByIdHotPath): |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdProtoList): |
| (JSC::JIT::privateCompileGetByIdChainList): |
| (JSC::JIT::privateCompileGetByIdChain): |
| |
| 2008-12-15 Darin Adler <darin@apple.com> |
| |
| * interpreter/RegisterFile.h: Tweak include formatting. |
| |
| 2008-12-15 Holger Hans Peter Freyther <zecke@selfish.org> |
| |
| Build fix for Gtk+. |
| |
| * interpreter/RegisterFile.h: Include stdio.h for fprintf |
| |
| 2008-12-15 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reviewed by Oliver Hunt. |
| |
| <rdar://problem/6444455> Worker Thread crash running multiple workers for a moderate amount of time |
| |
| * interpreter/RegisterFile.h: (JSC::RegisterFile::RegisterFile): |
| Improve error handling: if mmap fails, crash immediately, and print out the reason. |
| |
| 2008-12-13 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Re-enable WREC on 64-bit. |
| Implements one of the MacroAssembler::jnzPtr methods, previously only implemented for 32-bit x86. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22849 |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::testImm64): |
| (JSC::MacroAssembler::jnzPtr): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::testq_i32r): |
| (JSC::X86Assembler::testq_rr): |
| * wtf/Platform.h: |
| |
| 2008-12-13 Gavin Barraclough <barraclough@apple.com> |
| |
| Fix PPC builds. |
| |
| * assembler/MacroAssembler.h: |
| |
| 2008-12-13 Gavin Barraclough <barraclough@apple.com> |
| |
| Build fix only, no review. |
| |
| * bytecode/CodeBlock.h: |
| |
| 2008-12-13 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Port the remainder of the JIT, bar calling convention related code, and code |
| implementing optimizations which can be disabled, to use the MacroAssembler. |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::DataLabelPtr::DataLabelPtr): |
| (JSC::MacroAssembler::RepatchBuffer::RepatchBuffer): |
| (JSC::MacroAssembler::RepatchBuffer::link): |
| (JSC::MacroAssembler::RepatchBuffer::addressOf): |
| (JSC::MacroAssembler::RepatchBuffer::setPtr): |
| (JSC::MacroAssembler::addPtr): |
| (JSC::MacroAssembler::lshift32): |
| (JSC::MacroAssembler::mod32): |
| (JSC::MacroAssembler::rshift32): |
| (JSC::MacroAssembler::storePtrWithRepatch): |
| (JSC::MacroAssembler::jnzPtr): |
| (JSC::MacroAssembler::jzPtr): |
| (JSC::MacroAssembler::jump): |
| (JSC::MacroAssembler::label): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::): |
| (JSC::X86Assembler::xchgl_rr): |
| (JSC::X86Assembler::jmp_m): |
| (JSC::X86Assembler::repatchAddress): |
| (JSC::X86Assembler::getRelocatedAddress): |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::CodeBlock): |
| * bytecode/CodeBlock.h: |
| (JSC::JITCodeRef::JITCodeRef): |
| (JSC::CodeBlock::setJITCode): |
| (JSC::CodeBlock::jitCode): |
| (JSC::CodeBlock::executablePool): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileLinkPass): |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| (JSC::CallRecord::CallRecord): |
| (JSC::JumpTable::JumpTable): |
| (JSC::JIT::emitCTICall): |
| (JSC::JIT::JSRInfo::JSRInfo): |
| * jit/JITArithmetic.cpp: |
| * jit/JITCall.cpp: |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitNakedCall): |
| (JSC::JIT::emitCTICall_internal): |
| (JSC::JIT::checkStructure): |
| (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): |
| (JSC::JIT::addSlowCase): |
| (JSC::JIT::addJump): |
| (JSC::JIT::emitJumpSlowToHot): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::privateCompileGetByIdChainList): |
| (JSC::JIT::privateCompileGetByIdChain): |
| |
| 2008-12-12 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fix the failures of the following layout tests, which regressed in |
| r39255: |
| |
| fast/dom/StyleSheet/ownerNode-lifetime-2.html |
| fast/xsl/transform-xhr-doc.xhtml |
| |
| The binary search in CodeBlock::getByIdExceptionInfoForBytecodeOffset() |
| doesn't guarantee that it actually finds a match, so add an explicit check |
| for this. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): |
| |
| 2008-12-12 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Replace emitPutCallArg methods with emitPutJITStubArg methods. Primarily to make the argument numbering |
| more sensible (1-based incrementing by 1, rather than 0-based incrementing by 4). The CTI name also seems |
| to be being deprecated from the code generally. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::compileBinaryArithOp): |
| (JSC::JIT::compileBinaryArithOpSlowCase): |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallSetupArgs): |
| (JSC::JIT::compileOpCallEvalSetupArgs): |
| (JSC::JIT::compileOpConstructSetupArgs): |
| (JSC::JIT::compileOpCall): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitPutJITStubArg): |
| (JSC::JIT::emitPutJITStubArgConstant): |
| (JSC::JIT::emitGetJITStubArg): |
| (JSC::JIT::emitPutJITStubArgFromVirtualRegister): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::compilePutByIdHotPath): |
| (JSC::JIT::compileGetByIdSlowCase): |
| (JSC::JIT::compilePutByIdSlowCase): |
| |
| 2008-12-12 Gavin Barraclough <barraclough@apple.com> |
| |
| Fix windows builds. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| (JSC::JIT::privateCompile): |
| |
| 2008-12-12 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Remove loop counter 'i' from the JIT generation passes, replace with a member m_bytecodeIndex. |
| |
| No impact on performance. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::compileOpStrictEq): |
| (JSC::JIT::emitSlowScriptCheck): |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| (JSC::JIT::privateCompile): |
| * jit/JIT.h: |
| (JSC::CallRecord::CallRecord): |
| (JSC::JmpTable::JmpTable): |
| (JSC::JIT::emitCTICall): |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::compileBinaryArithOp): |
| (JSC::JIT::compileBinaryArithOpSlowCase): |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCall): |
| (JSC::JIT::compileOpCallSlowCase): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitGetVirtualRegister): |
| (JSC::JIT::emitGetVirtualRegisters): |
| (JSC::JIT::emitNakedCall): |
| (JSC::JIT::emitCTICall_internal): |
| (JSC::JIT::emitJumpSlowCaseIfJSCell): |
| (JSC::JIT::emitJumpSlowCaseIfNotJSCell): |
| (JSC::JIT::emitJumpSlowCaseIfNotImmNum): |
| (JSC::JIT::emitJumpSlowCaseIfNotImmNums): |
| (JSC::JIT::emitFastArithIntToImmOrSlowCase): |
| (JSC::JIT::addSlowCase): |
| (JSC::JIT::addJump): |
| (JSC::JIT::emitJumpSlowToHot): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::compileGetByIdSlowCase): |
| (JSC::JIT::compilePutByIdHotPath): |
| (JSC::JIT::compilePutByIdSlowCase): |
| |
| 2008-12-12 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Cameron Zwarich. |
| |
| <rdar://problem/6428342> Look into feasibility of discarding bytecode after native codegen |
| |
| Move more JIT functionality to using offsets into the Instruction buffer |
| instead of raw pointers. Two to go! |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::bytecodeOffsetForPC): Rename from vPCForPC. |
| (JSC::Interpreter::resolve): Pass offset to exception helper. |
| (JSC::Interpreter::resolveSkip): Ditto. |
| (JSC::Interpreter::resolveGlobal): Ditto. |
| (JSC::Interpreter::resolveBaseAndProperty): Ditto. |
| (JSC::Interpreter::resolveBaseAndFunc): Ditto. |
| (JSC::isNotObject): Ditto. |
| (JSC::Interpreter::unwindCallFrame): Call bytecodeOffsetForPC. |
| (JSC::Interpreter::throwException): Use offsets instead of vPCs. |
| (JSC::Interpreter::privateExecute): Pass offset to exception helper. |
| (JSC::Interpreter::retrieveLastCaller): Ditto. |
| (JSC::Interpreter::cti_op_instanceof): Ditto. |
| (JSC::Interpreter::cti_op_call_NotJSFunction): Ditto. |
| (JSC::Interpreter::cti_op_resolve): Pass offset to exception helper. |
| (JSC::Interpreter::cti_op_construct_NotJSConstruct): Ditto. |
| (JSC::Interpreter::cti_op_resolve_func): Ditto. |
| (JSC::Interpreter::cti_op_resolve_skip): Ditto. |
| (JSC::Interpreter::cti_op_resolve_global): Ditto. |
| (JSC::Interpreter::cti_op_resolve_with_base): Ditto. |
| (JSC::Interpreter::cti_op_throw): Ditto. |
| (JSC::Interpreter::cti_op_in): Ditto. |
| (JSC::Interpreter::cti_vm_throw): Ditto. |
| * interpreter/Interpreter.h: |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): Don't pass unnecessary vPC to stub. |
| * jit/JIT.h: Remove ARG_instr1 - ARG_instr3 and ARG_instr5 - ARG_instr6. |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallEvalSetupArgs): Don't pass unnecessary vPC to stub.. |
| (JSC::JIT::compileOpConstructSetupArgs): Ditto. |
| |
| * runtime/ExceptionHelpers.cpp: |
| (JSC::createUndefinedVariableError): Take an offset instead of vPC. |
| (JSC::createInvalidParamError): Ditto. |
| (JSC::createNotAConstructorError): Ditto. |
| (JSC::createNotAFunctionError): Ditto. |
| (JSC::createNotAnObjectError): Ditto. |
| * runtime/ExceptionHelpers.h: |
| |
| 2008-12-12 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Bug 22835: Crash during bytecode generation when comparing to null |
| <https://bugs.webkit.org/show_bug.cgi?id=22835> |
| <rdar://problem/6286749> |
| |
| Change the special cases in bytecode generation for comparison to null |
| to use tempDestination(). |
| |
| * parser/Nodes.cpp: |
| (JSC::BinaryOpNode::emitBytecode): |
| (JSC::EqualNode::emitBytecode): |
| |
| 2008-12-12 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Move slow-cases of JIT code generation over to the MacroAssembler interface. |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::Label::Label): |
| (JSC::MacroAssembler::jae32): |
| (JSC::MacroAssembler::jg32): |
| (JSC::MacroAssembler::jzPtr): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileSlowCases): |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::emitGetVariableObjectRegister): |
| (JSC::JIT::emitPutVariableObjectRegister): |
| * jit/JIT.h: |
| (JSC::SlowCaseEntry::SlowCaseEntry): |
| (JSC::JIT::getSlowCase): |
| (JSC::JIT::linkSlowCase): |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::compileBinaryArithOpSlowCase): |
| * jit/JITCall.cpp: |
| (JSC::JIT::compileOpCallInitializeCallFrame): |
| (JSC::JIT::compileOpCall): |
| (JSC::JIT::compileOpCallSlowCase): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitJumpSlowCaseIfNotJSCell): |
| (JSC::JIT::linkSlowCaseIfNotJSCell): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::compilePutByIdHotPath): |
| (JSC::JIT::compileGetByIdSlowCase): |
| (JSC::JIT::compilePutByIdSlowCase): |
| |
| 2008-12-12 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Bug 22828: Do not inspect bytecode instruction stream for op_get_by_id exception information |
| <https://bugs.webkit.org/show_bug.cgi?id=22828> |
| |
| In order to remove the bytecode instruction stream after generating |
| native code, all inspection of bytecode instructions at runtime must |
| be removed. One particular instance of this is the special handling of |
| exceptions thrown by the op_get_by_id emitted directly before an |
| op_construct or an op_instanceof. This patch moves that information to |
| an auxiliary data structure in CodeBlock. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): |
| * bytecode/CodeBlock.h: |
| (JSC::CodeBlock::addGetByIdExceptionInfo): |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::emitConstruct): |
| * bytecompiler/BytecodeGenerator.h: |
| (JSC::BytecodeGenerator::emitGetByIdExceptionInfo): |
| * parser/Nodes.cpp: |
| (JSC::InstanceOfNode::emitBytecode): |
| * runtime/ExceptionHelpers.cpp: |
| (JSC::createNotAnObjectError): |
| |
| 2008-12-12 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Change exception information accessors to take offsets into the bytecode |
| instruction buffer instead of pointers so that they can work even even |
| if the bytecode buffer is purged. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::instructionOffsetForNth): |
| (JSC::CodeBlock::handlerForBytecodeOffset): |
| (JSC::CodeBlock::lineNumberForBytecodeOffset): |
| (JSC::CodeBlock::expressionRangeForBytecodeOffset): |
| * bytecode/CodeBlock.h: |
| * bytecode/SamplingTool.cpp: |
| (JSC::SamplingTool::dump): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::throwException): |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::retrieveLastCaller): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| * runtime/ExceptionHelpers.cpp: |
| (JSC::createUndefinedVariableError): |
| (JSC::createInvalidParamError): |
| (JSC::createNotAConstructorError): |
| (JSC::createNotAFunctionError): |
| (JSC::createNotAnObjectError): |
| |
| 2008-12-12 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Tiny bit of refactoring in quantifier generation. |
| |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateNonGreedyQuantifier): |
| (JSC::WREC::Generator::generateGreedyQuantifier): |
| |
| 2008-12-11 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Remove dependancy on having the Instruction buffer in order to |
| deref Structures used for property access and global resolves. |
| Instead, we put references to the necessary Structures in auxiliary |
| data structures on the CodeBlock. This is not an ideal solution, |
| as we still pay for having the Structures in two places and we |
| would like to eventually just hold on to offsets into the machine |
| code buffer. |
| |
| - Also removes CodeBlock bloat in non-JIT by #ifdefing the JIT |
| only data structures. |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.scons: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * JavaScriptCoreSources.bkl: |
| * bytecode/CodeBlock.cpp: |
| (JSC::isGlobalResolve): |
| (JSC::isPropertyAccess): |
| (JSC::instructionOffsetForNth): |
| (JSC::printGlobalResolveInfo): |
| (JSC::printStructureStubInfo): |
| (JSC::CodeBlock::printStructures): |
| (JSC::CodeBlock::dump): |
| (JSC::CodeBlock::~CodeBlock): |
| (JSC::CodeBlock::shrinkToFit): |
| * bytecode/CodeBlock.h: |
| (JSC::GlobalResolveInfo::GlobalResolveInfo): |
| (JSC::getNativePC): |
| (JSC::CodeBlock::instructions): |
| (JSC::CodeBlock::getStubInfo): |
| (JSC::CodeBlock::getBytecodeIndex): |
| (JSC::CodeBlock::addPropertyAccessInstruction): |
| (JSC::CodeBlock::addGlobalResolveInstruction): |
| (JSC::CodeBlock::numberOfStructureStubInfos): |
| (JSC::CodeBlock::addStructureStubInfo): |
| (JSC::CodeBlock::structureStubInfo): |
| (JSC::CodeBlock::addGlobalResolveInfo): |
| (JSC::CodeBlock::globalResolveInfo): |
| (JSC::CodeBlock::numberOfCallLinkInfos): |
| (JSC::CodeBlock::addCallLinkInfo): |
| (JSC::CodeBlock::callLinkInfo): |
| * bytecode/Instruction.h: |
| (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): |
| (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): |
| * bytecode/Opcode.h: |
| (JSC::): |
| * bytecode/StructureStubInfo.cpp: Copied from bytecode/CodeBlock.cpp. |
| (JSC::StructureStubInfo::deref): |
| * bytecode/StructureStubInfo.h: Copied from bytecode/CodeBlock.h. |
| (JSC::StructureStubInfo::StructureStubInfo): |
| (JSC::StructureStubInfo::initGetByIdSelf): |
| (JSC::StructureStubInfo::initGetByIdProto): |
| (JSC::StructureStubInfo::initGetByIdChain): |
| (JSC::StructureStubInfo::initGetByIdSelfList): |
| (JSC::StructureStubInfo::initGetByIdProtoList): |
| (JSC::StructureStubInfo::initPutByIdTransition): |
| (JSC::StructureStubInfo::initPutByIdReplace): |
| (JSC::StructureStubInfo::): |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::emitResolve): |
| (JSC::BytecodeGenerator::emitGetById): |
| (JSC::BytecodeGenerator::emitPutById): |
| (JSC::BytecodeGenerator::emitCall): |
| (JSC::BytecodeGenerator::emitConstruct): |
| (JSC::BytecodeGenerator::emitCatch): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::tryCTICachePutByID): |
| (JSC::Interpreter::tryCTICacheGetByID): |
| (JSC::Interpreter::cti_op_get_by_id_self_fail): |
| (JSC::getPolymorphicAccessStructureListSlot): |
| (JSC::Interpreter::cti_op_get_by_id_proto_list): |
| (JSC::Interpreter::cti_op_resolve_global): |
| * jit/JIT.cpp: |
| (JSC::JIT::JIT): |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| (JSC::JIT::privateCompile): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::compilePutByIdHotPath): |
| (JSC::JIT::compileGetByIdSlowCase): |
| (JSC::JIT::compilePutByIdSlowCase): |
| (JSC::JIT::privateCompileGetByIdSelfList): |
| (JSC::JIT::privateCompileGetByIdProtoList): |
| (JSC::JIT::privateCompileGetByIdChainList): |
| |
| 2008-12-11 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Remove CTI_ARGUMENTS mode, use va_start implementation on Windows, |
| unifying JIT callback (cti_*) argument access on OS X & Windows |
| |
| No performance impact. |
| |
| * interpreter/Interpreter.h: |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitCTICall): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::privateCompilePutByIdTransition): |
| * wtf/Platform.h: |
| |
| 2008-12-11 Holger Freyther <zecke@selfish.org> |
| |
| Reviewed by Simon Hausmann. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=20953 |
| |
| For Qt it is not pratical to have a FontCache and GlyphPageTreeNode |
| implementation. This is one of the reasons why the Qt port is currently not |
| using WebCore/platform/graphics/Font.cpp. By allowing to not use |
| the simple/fast-path the Qt port will be able to use it. |
| |
| Introduce USE(FONT_FAST_PATH) and define it for every port but the |
| Qt one. |
| |
| * wtf/Platform.h: Enable USE(FONT_FAST_PATH) |
| |
| 2008-12-11 Gabor Loki <loki@inf.u-szeged.hu> |
| |
| Reviewed by Darin Adler and landed by Holger Freyther. |
| |
| <https://bugs.webkit.org/show_bug.cgi?id=22648> |
| Fix threading on Qt-port and Gtk-port for Sampling tool. |
| |
| * wtf/ThreadingGtk.cpp: |
| (WTF::waitForThreadCompletion): |
| * wtf/ThreadingQt.cpp: |
| (WTF::waitForThreadCompletion): |
| |
| 2008-12-10 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Bug 22734: Debugger crashes when stepping into a function call in a return statement |
| <https://bugs.webkit.org/show_bug.cgi?id=22734> |
| <rdar://problem/6426796> |
| |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::BytecodeGenerator): The DebuggerCallFrame uses |
| the 'this' value stored in a callFrame, so op_convert_this should be |
| emitted at the beginning of a function body when generating bytecode |
| with debug hooks. |
| * debugger/DebuggerCallFrame.cpp: |
| (JSC::DebuggerCallFrame::thisObject): The assertion inherent in the call |
| to asObject() here is valid, because any 'this' value should have been |
| converted to a JSObject*. |
| |
| 2008-12-10 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Port more of the JIT to use the MacroAssembler interface. |
| |
| Everything in the main pass, bar a few corner cases (operations with required |
| registers, or calling convention code). Slightly refactors array creation, |
| moving the offset calculation into the callFrame into C code (reducing code |
| planted). |
| |
| Overall this appears to be a 1% win on v8-tests, due to the smaller immediates |
| being planted (in jfalse in particular). |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::cti_op_new_array): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| * jit/JIT.h: |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateEnter): |
| |
| 2008-12-10 Sam Weinig <sam@webkit.org> |
| |
| Fix non-JIT builds. |
| |
| * bytecode/CodeBlock.h: |
| |
| 2008-12-10 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| <rdar://problem/6428332> Remove the CTI return address table from CodeBlock |
| |
| Step 2: |
| |
| Convert the return address table from a HashMap to a sorted Vector. This |
| reduces the size of the data structure by ~4.5MB on Membuster head. |
| |
| SunSpider reports a 0.5% progression. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::sizeInBytes): Generic method to get the cost of a Vector. |
| (JSC::CodeBlock::dumpStatistics): Add dumping of member sizes. |
| * bytecode/CodeBlock.h: |
| (JSC::PC::PC): Struct representing NativePC -> VirtualPC mappings. |
| (JSC::getNativePC): Helper for binary chop. |
| (JSC::CodeBlock::getBytecodeIndex): Used to get the VirtualPC from a |
| NativePC using a binary chop of the pcVector. |
| (JSC::CodeBlock::pcVector): Accessor. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::vPCForPC): Use getBytecodeIndex instead of jitReturnAddressVPCMap().get(). |
| (JSC::Interpreter::cti_op_instanceof): Ditto. |
| (JSC::Interpreter::cti_op_resolve): Ditto. |
| (JSC::Interpreter::cti_op_resolve_func): Ditto. |
| (JSC::Interpreter::cti_op_resolve_skip): Ditto. |
| (JSC::Interpreter::cti_op_resolve_with_base): Ditto. |
| (JSC::Interpreter::cti_op_throw): Ditto. |
| (JSC::Interpreter::cti_op_in): Ditto. |
| (JSC::Interpreter::cti_vm_throw): Ditto. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompile): Reserve exact capacity and fill the pcVector. |
| |
| 2008-12-09 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Added WREC support for an assertion followed by a quantifier. Fixed |
| PCRE to match. |
| |
| * wrec/WRECParser.cpp: |
| (JSC::WREC::Parser::parseParentheses): Throw away the quantifier, since |
| it's meaningless. (Firefox does the same.) |
| |
| * pcre/pcre_compile.cpp: |
| (compileBranch): ditto. |
| |
| 2008-12-09 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| In preparation for compiling WREC without PCRE: |
| |
| Further relaxed WREC's parsing to be more web-compatible. Fixed PCRE to |
| match in cases where it didn't already. |
| |
| Changed JavaScriptCore to report syntax errors detected by WREC, rather |
| than falling back on PCRE any time WREC sees an error. |
| |
| * pcre/pcre_compile.cpp: |
| (checkEscape): Relaxed parsing of \c and \N escapes to be more |
| web-compatible. |
| |
| * runtime/RegExp.cpp: |
| (JSC::RegExp::RegExp): Only fall back on PCRE if WREC has not reported |
| a syntax error. |
| |
| * wrec/WREC.cpp: |
| (JSC::WREC::Generator::compileRegExp): Fixed some error reporting to |
| match PCRE. |
| |
| * wrec/WRECParser.cpp: Added error messages that match PCRE. |
| |
| (JSC::WREC::Parser::consumeGreedyQuantifier): |
| (JSC::WREC::Parser::parseParentheses): |
| (JSC::WREC::Parser::parseCharacterClass): |
| (JSC::WREC::Parser::parseNonCharacterEscape): Updated the above functions to |
| use the new setError API. |
| |
| (JSC::WREC::Parser::consumeEscape): Relaxed parsing of \c \N \u \x \B |
| to be more web-compatible. |
| |
| (JSC::WREC::Parser::parseAlternative): Distinguish between a malformed |
| quantifier and a quantifier with no prefix, like PCRE does. |
| |
| (JSC::WREC::Parser::consumeParenthesesType): Updated to use the new setError API. |
| |
| * wrec/WRECParser.h: |
| (JSC::WREC::Parser::error): |
| (JSC::WREC::Parser::syntaxError): |
| (JSC::WREC::Parser::parsePattern): |
| (JSC::WREC::Parser::reset): |
| (JSC::WREC::Parser::setError): Store error messages instead of error codes, |
| to provide for exception messages. Use a setter for reporting errors, so |
| errors detected early are not overwritten by errors detected later. |
| |
| 2008-12-09 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Use va_args to access cti function arguments. |
| https://bugs.webkit.org/show_bug.cgi?id=22774 |
| |
| This may be a minor regression, but we'll take the hit if so to reduce fragility. |
| |
| * interpreter/Interpreter.cpp: |
| * interpreter/Interpreter.h: |
| |
| 2008-12-09 Sam Weinig <sam@webkit.org> |
| |
| Reviewed twice by Cameron Zwarich. |
| |
| Fix for https://bugs.webkit.org/show_bug.cgi?id=22752 |
| Clear SymbolTable after codegen for Function codeblocks that |
| don't require an activation |
| |
| This is a ~1.5MB improvement on Membuster-head. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dumpStatistics): Add logging of non-empty symbol tables |
| and total size used by symbol tables. |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::generate): Clear the symbol table here. |
| |
| 2008-12-09 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Remove unnecessary extra lookup when throwing an exception. |
| We used to first lookup the target offset using getHandlerForVPC |
| and then we would lookup the native code stub using |
| nativeExceptionCodeForHandlerVPC. Instead, we can just pass around |
| the HandlerInfo. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::handlerForVPC): Return the HandlerInfo. |
| * bytecode/CodeBlock.h: Remove nativeExceptionCodeForHandlerVPC. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::throwException): Return a HandlerInfo instead of |
| and Instruction offset. |
| (JSC::Interpreter::privateExecute): Get the offset from HandlerInfo. |
| (JSC::Interpreter::cti_op_throw): Get the native code from the HandleInfo. |
| (JSC::Interpreter::cti_vm_throw): Ditto. |
| * interpreter/Interpreter.h: |
| |
| 2008-12-09 Eric Seidel <eric@webkit.org> |
| |
| Build fix only, no review. |
| |
| Speculative fix for the Chromium-Windows bot. |
| Add JavaScriptCore/os-win32 to the include path (for stdint.h) |
| Strangely it builds fine on my local windows box (or at least doesn't hit this error) |
| |
| * JavaScriptCore.scons: |
| |
| 2008-12-09 Eric Seidel <eric@webkit.org> |
| |
| No review, build fix only. |
| |
| Add ExecutableAllocator files missing from Scons build. |
| |
| * JavaScriptCore.scons: |
| |
| 2008-12-09 Dimitri Glazkov <dglazkov@chromium.org> |
| |
| Reviewed by Timothy Hatcher. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22631 |
| Allow ScriptCallFrame query names of functions in the call stack. |
| |
| * JavaScriptCore.exp: added InternalFunction::name and |
| UString operator==() as exported symbol |
| |
| 2008-12-08 Judit Jasz <jasy@inf.u-szeged.hu> |
| |
| Reviewed and tweaked by Cameron Zwarich. |
| |
| Bug 22352: Annotate opcodes with their length |
| <https://bugs.webkit.org/show_bug.cgi?id=22352> |
| |
| * bytecode/Opcode.cpp: |
| * bytecode/Opcode.h: |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| |
| 2008-12-08 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Implemented more of the relaxed and somewhat weird rules for deciding |
| how to interpret a non-pattern-character. |
| |
| * wrec/Escapes.h: |
| (JSC::WREC::Escape::): |
| (JSC::WREC::Escape::Escape): Eliminated Escape::None because it was |
| unused. If you see an '\\', it's either a valid escape or an error. |
| |
| * wrec/Quantifier.h: |
| (JSC::WREC::Quantifier::Quantifier): |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateNonGreedyQuantifier): |
| (JSC::WREC::Generator::generateGreedyQuantifier): Renamed "noMaxSpecified" |
| to "Infinity", since that's what it means. |
| |
| * wrec/WRECParser.cpp: |
| (JSC::WREC::Parser::consumeGreedyQuantifier): Re-wrote {n,m} parsing rules |
| because they were too strict before. Added support for backtracking |
| in the case where the {n,m} fails to parse as a quantifier, and yet is |
| not a syntax error. |
| |
| (JSC::WREC::Parser::parseCharacterClass): |
| (JSC::WREC::Parser::parseNonCharacterEscape): Eliminated Escape::None, |
| as above. |
| |
| (JSC::WREC::Parser::consumeEscape): Don't treat ASCII and _ escapes |
| as syntax errors. See fast/regex/non-pattern-characters.html. |
| |
| * wrec/WRECParser.h: |
| (JSC::WREC::Parser::SavedState::SavedState): |
| (JSC::WREC::Parser::SavedState::restore): Added a state backtracker, |
| since parsing {n,m} forms requires backtracking if the form turns out |
| not to be a quantifier. |
| |
| 2008-12-08 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Refactored WREC parsing so that only one piece of code needs to know |
| the relaxed and somewhat weird rules for deciding how to interpret a |
| non-pattern-character, in preparation for implementing those rules. |
| |
| Also, implemented the relaxed and somewhat weird rules for '}' and ']'. |
| |
| * wrec/WREC.cpp: Reduced the regular expression size limit. Now that |
| WREC handles ']' properly, it compiles fast/js/regexp-charclass-crash.html, |
| which makes it hang at the old limit. (The old limit was based on the |
| misimpression that the same value in PCRE limited the regular expression |
| pattern size; in reality, it limited the expected compiled regular |
| expression size. WREC doesn't have a way to calculate an expected |
| compiled regular expression size, but this should be good enough.) |
| |
| * wrec/WRECParser.cpp: |
| (JSC::WREC::parsePatternCharacterSequence): Nixed this function because |
| it contained a second copy of the logic for handling non-pattern-characters, |
| which is about to get a lot more complicated. |
| |
| (JSC::WREC::PatternCharacterSequence::PatternCharacterSequence): |
| (JSC::WREC::PatternCharacterSequence::size): |
| (JSC::WREC::PatternCharacterSequence::append): |
| (JSC::WREC::PatternCharacterSequence::flush): Helper object for generating |
| an optimized sequence of pattern characters. |
| |
| (JSC::WREC::Parser::parseNonCharacterEscape): Renamed to reflect the fact |
| that the main parseAlternative loop handles character escapes. |
| |
| (JSC::WREC::Parser::parseAlternative): Moved pattern character sequence |
| logic from parsePatternCharacterSequence to here, using |
| PatternCharacterSequence to help with the details. |
| |
| * wrec/WRECParser.h: Updated for renames. |
| |
| 2008-12-08 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reviewed by Geoff Garen. |
| |
| <rdar://problem/6166088> Give JSGlobalContextCreate a behavior that is concurrency aware, |
| and un-deprecate it |
| |
| * API/JSContextRef.cpp: (JSGlobalContextCreate): |
| * API/JSContextRef.h: |
| Use a unique context group for the context, unless the application was linked against old |
| JavaScriptCore. |
| |
| 2008-12-08 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Fix for <rdar://problem/6428332> Remove the CTI return address table from CodeBlock |
| |
| Step 1: |
| |
| Remove use of jitReturnAddressVPCMap when looking for vPC to store Structures |
| in for cached lookup. Instead, use the offset in the StructureStubInfo that is |
| already required. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dumpStatistics): Fix extraneous semicolon. |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::tryCTICachePutByID): |
| (JSC::Interpreter::tryCTICacheGetByID): |
| (JSC::Interpreter::cti_op_get_by_id_self_fail): |
| (JSC::Interpreter::cti_op_get_by_id_proto_list): |
| * jit/JIT.h: |
| (JSC::JIT::compileGetByIdSelf): |
| (JSC::JIT::compileGetByIdProto): |
| (JSC::JIT::compileGetByIdChain): |
| (JSC::JIT::compilePutByIdReplace): |
| (JSC::JIT::compilePutByIdTransition): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::patchGetByIdSelf): |
| (JSC::JIT::patchPutByIdReplace): |
| (JSC::JIT::privateCompilePatchGetArrayLength): Remove extra call to getStubInfo. |
| (JSC::JIT::privateCompileGetByIdSelf): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdChain): |
| (JSC::JIT::privateCompilePutByIdReplace): |
| |
| 2008-12-08 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Port the op_j?n?eq_null JIT code generation to use the MacroAssembler, |
| and clean up slightly at the same time. The 'j' forms currently compare, |
| then set a register, then compare again, then branch. Branch directly on |
| the result of the first compare. |
| |
| Around a 1% progression on deltablue, crypto & early boyer, for about 1/2% |
| overall on v8-tests. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::compileGetByIdSlowCase): |
| |
| 2008-12-08 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Expand MacroAssembler to support more operations, required by the JIT. |
| |
| Generally adds more operations and permutations of operands to the existing |
| interface. Rename 'jset' to 'jnz' and 'jnset' to 'jz', which seem clearer, |
| and require that immediate pointer operands (though not pointer addresses to |
| load and store instructions) are wrapped in a ImmPtr() type, akin to Imm32(). |
| |
| No performance impact. |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::): |
| (JSC::MacroAssembler::ImmPtr::ImmPtr): |
| (JSC::MacroAssembler::add32): |
| (JSC::MacroAssembler::and32): |
| (JSC::MacroAssembler::or32): |
| (JSC::MacroAssembler::sub32): |
| (JSC::MacroAssembler::xor32): |
| (JSC::MacroAssembler::loadPtr): |
| (JSC::MacroAssembler::load32): |
| (JSC::MacroAssembler::storePtr): |
| (JSC::MacroAssembler::store32): |
| (JSC::MacroAssembler::poke): |
| (JSC::MacroAssembler::move): |
| (JSC::MacroAssembler::testImm32): |
| (JSC::MacroAssembler::jae32): |
| (JSC::MacroAssembler::jb32): |
| (JSC::MacroAssembler::jePtr): |
| (JSC::MacroAssembler::je32): |
| (JSC::MacroAssembler::jnePtr): |
| (JSC::MacroAssembler::jne32): |
| (JSC::MacroAssembler::jnzPtr): |
| (JSC::MacroAssembler::jnz32): |
| (JSC::MacroAssembler::jzPtr): |
| (JSC::MacroAssembler::jz32): |
| (JSC::MacroAssembler::joSub32): |
| (JSC::MacroAssembler::jump): |
| (JSC::MacroAssembler::sete32): |
| (JSC::MacroAssembler::setne32): |
| (JSC::MacroAssembler::setnz32): |
| (JSC::MacroAssembler::setz32): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::addl_mr): |
| (JSC::X86Assembler::andl_i8r): |
| (JSC::X86Assembler::cmpl_rm): |
| (JSC::X86Assembler::cmpl_mr): |
| (JSC::X86Assembler::cmpl_i8m): |
| (JSC::X86Assembler::subl_mr): |
| (JSC::X86Assembler::testl_i32m): |
| (JSC::X86Assembler::xorl_i32r): |
| (JSC::X86Assembler::movl_rm): |
| (JSC::X86Assembler::modRm_opmsib): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitGetVirtualRegister): |
| (JSC::JIT::emitPutCTIArgConstant): |
| (JSC::JIT::emitPutCTIParam): |
| (JSC::JIT::emitPutImmediateToCallFrameHeader): |
| (JSC::JIT::emitInitRegister): |
| (JSC::JIT::checkStructure): |
| (JSC::JIT::emitJumpIfJSCell): |
| (JSC::JIT::emitJumpIfNotJSCell): |
| (JSC::JIT::emitJumpSlowCaseIfNotImmNum): |
| |
| 2008-12-08 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixed a bug where WREC would allow a quantifier whose minimum was |
| greater than its maximum. |
| |
| * wrec/Quantifier.h: |
| (JSC::WREC::Quantifier::Quantifier): ASSERT that the quantifier is not |
| backwards. |
| |
| * wrec/WRECParser.cpp: |
| (JSC::WREC::Parser::consumeGreedyQuantifier): Verify that the minimum |
| is not greater than the maximum. |
| |
| 2008-12-08 Eric Seidel <eric@webkit.org> |
| |
| Build fix only, no review. |
| |
| * JavaScriptCore.scons: add bytecode/JumpTable.cpp |
| |
| 2008-12-08 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Patch for https://bugs.webkit.org/show_bug.cgi?id=22716 |
| <rdar://problem/6428315> |
| Add RareData structure to CodeBlock for infrequently used auxiliary data |
| members. |
| |
| Reduces memory on Membuster-head by ~.5MB |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dump): |
| (JSC::CodeBlock::dumpStatistics): |
| (JSC::CodeBlock::mark): |
| (JSC::CodeBlock::getHandlerForVPC): |
| (JSC::CodeBlock::nativeExceptionCodeForHandlerVPC): |
| (JSC::CodeBlock::shrinkToFit): |
| * bytecode/CodeBlock.h: |
| (JSC::CodeBlock::numberOfExceptionHandlers): |
| (JSC::CodeBlock::addExceptionHandler): |
| (JSC::CodeBlock::exceptionHandler): |
| (JSC::CodeBlock::addFunction): |
| (JSC::CodeBlock::function): |
| (JSC::CodeBlock::addUnexpectedConstant): |
| (JSC::CodeBlock::unexpectedConstant): |
| (JSC::CodeBlock::addRegExp): |
| (JSC::CodeBlock::regexp): |
| (JSC::CodeBlock::numberOfImmediateSwitchJumpTables): |
| (JSC::CodeBlock::addImmediateSwitchJumpTable): |
| (JSC::CodeBlock::immediateSwitchJumpTable): |
| (JSC::CodeBlock::numberOfCharacterSwitchJumpTables): |
| (JSC::CodeBlock::addCharacterSwitchJumpTable): |
| (JSC::CodeBlock::characterSwitchJumpTable): |
| (JSC::CodeBlock::numberOfStringSwitchJumpTables): |
| (JSC::CodeBlock::addStringSwitchJumpTable): |
| (JSC::CodeBlock::stringSwitchJumpTable): |
| (JSC::CodeBlock::evalCodeCache): |
| (JSC::CodeBlock::createRareDataIfNecessary): |
| |
| 2008-11-26 Peter Kasting <pkasting@google.com> |
| |
| Reviewed by Anders Carlsson. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=16814 |
| Allow ports to disable ActiveX->NPAPI conversion for Media Player. |
| Improve handling of miscellaneous ActiveX objects. |
| |
| * wtf/Platform.h: Add another ENABLE(...). |
| |
| 2008-12-08 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Mark Rowe. |
| |
| Add dumping of CodeBlock member structure usage. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dumpStatistics): |
| * bytecode/EvalCodeCache.h: |
| (JSC::EvalCodeCache::isEmpty): |
| |
| 2008-12-08 David Kilzer <ddkilzer@apple.com> |
| |
| Bug 22555: Sort "children" sections in Xcode project files |
| |
| <https://bugs.webkit.org/show_bug.cgi?id=22555> |
| |
| Reviewed by Eric Seidel. |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: Sorted. |
| |
| 2008-12-08 Tony Chang <tony@chromium.org> |
| |
| Reviewed by Eric Seidel. |
| |
| Enable Pan scrolling only when building on PLATFORM(WIN_OS) |
| Previously platforms like Apple Windows WebKit, Cairo Windows WebKit, |
| Wx and Chromium were enabling it explicitly, now we just turn it on |
| for all WIN_OS, later platforms can turn it off as needed on Windows |
| (or turn it on under Linux, etc.) |
| https://bugs.webkit.org/show_bug.cgi?id=22698 |
| |
| * wtf/Platform.h: |
| |
| 2008-12-08 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Add basic memory statistics dumping for CodeBlock. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dumpStatistics): |
| (JSC::CodeBlock::CodeBlock): |
| (JSC::CodeBlock::~CodeBlock): |
| * bytecode/CodeBlock.h: |
| |
| 2008-12-08 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Fix the Linux build with newer gcc/glibc. |
| |
| * jit/ExecutableAllocatorPosix.cpp: Include unistd.h for |
| getpagesize(), according to |
| http://opengroup.org/onlinepubs/007908775/xsh/getpagesize.html |
| |
| 2008-12-08 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Fix the build with Qt on Windows. |
| |
| * JavaScriptCore.pri: Compile ExecutableAllocatorWin.cpp on Windows. |
| |
| 2008-12-07 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (Buildfix). |
| |
| Fix non-WREC builds |
| |
| * runtime/RegExp.cpp: |
| (JSC::RegExp::RegExp): |
| |
| 2008-12-07 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (Build fix). |
| |
| Put ENABLE(ASSEMBLER) guards around use of ExecutableAllocator in global data |
| |
| Correct Qt and Gtk project files |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * runtime/JSGlobalData.h: |
| |
| 2008-12-07 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by NOBODY (Build fix). |
| |
| Add new files to other projects. |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.pro: |
| |
| 2008-12-07 Oliver Hunt <oliver@apple.com> |
| |
| Rubber stamped by Mark Rowe. |
| |
| Rename ExecutableAllocatorMMAP to the more sensible ExecutableAllocatorPosix |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * jit/ExecutableAllocator.h: |
| * jit/ExecutableAllocatorPosix.cpp: Renamed from JavaScriptCore/jit/ExecutableAllocatorMMAP.cpp. |
| (JSC::ExecutableAllocator::intializePageSize): |
| (JSC::ExecutablePool::systemAlloc): |
| (JSC::ExecutablePool::systemRelease): |
| |
| 2008-12-07 Oliver Hunt <oliver@apple.com> |
| |
| Reviewed by Cameron Zwarich and Sam Weinig |
| |
| <rdar://problem/6309878> Need more granular control over allocation of executable memory (21783) |
| <https://bugs.webkit.org/show_bug.cgi?id=21783> |
| |
| Add a new allocator for use by the JIT that provides executable pages, so |
| we can get rid of the current hack that makes the entire heap executable. |
| |
| 1-2% progression on SunSpider-v8, 1% on SunSpider. Reduces memory usage as well! |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.vcproj/jsc/jsc.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * assembler/AssemblerBuffer.h: |
| (JSC::AssemblerBuffer::size): |
| (JSC::AssemblerBuffer::executableCopy): |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::size): |
| (JSC::MacroAssembler::copyCode): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::size): |
| (JSC::X86Assembler::executableCopy): |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::~CodeBlock): |
| * bytecode/CodeBlock.h: |
| (JSC::CodeBlock::executablePool): |
| (JSC::CodeBlock::setExecutablePool): |
| * bytecode/Instruction.h: |
| (JSC::PolymorphicAccessStructureList::derefStructures): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::~Interpreter): |
| * interpreter/Interpreter.h: |
| * jit/ExecutableAllocator.cpp: Added. |
| * jit/ExecutableAllocator.h: Added. |
| (JSC::ExecutablePool::create): |
| (JSC::ExecutablePool::alloc): |
| (JSC::ExecutablePool::~ExecutablePool): |
| (JSC::ExecutablePool::available): |
| (JSC::ExecutablePool::ExecutablePool): |
| (JSC::ExecutablePool::poolAllocate): |
| (JSC::ExecutableAllocator::ExecutableAllocator): |
| (JSC::ExecutableAllocator::poolForSize): |
| (JSC::ExecutablePool::sizeForAllocation): |
| * jit/ExecutableAllocatorMMAP.cpp: Added. |
| (JSC::ExecutableAllocator::intializePageSize): |
| (JSC::ExecutablePool::systemAlloc): |
| (JSC::ExecutablePool::systemRelease): |
| * jit/ExecutableAllocatorWin.cpp: Added. |
| (JSC::ExecutableAllocator::intializePageSize): |
| (JSC::ExecutablePool::systemAlloc): |
| (JSC::ExecutablePool::systemRelease): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| (JSC::JIT::compileCTIMachineTrampolines): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| (JSC::JIT::privateCompileGetByIdSelf): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdSelfList): |
| (JSC::JIT::privateCompileGetByIdProtoList): |
| (JSC::JIT::privateCompileGetByIdChainList): |
| (JSC::JIT::privateCompileGetByIdChain): |
| (JSC::JIT::privateCompilePutByIdReplace): |
| * parser/Nodes.cpp: |
| (JSC::RegExpNode::emitBytecode): |
| * runtime/JSGlobalData.h: |
| (JSC::JSGlobalData::poolForSize): |
| * runtime/RegExp.cpp: |
| (JSC::RegExp::RegExp): |
| (JSC::RegExp::create): |
| (JSC::RegExp::~RegExp): |
| * runtime/RegExp.h: |
| * runtime/RegExpConstructor.cpp: |
| (JSC::constructRegExp): |
| * runtime/RegExpPrototype.cpp: |
| (JSC::regExpProtoFuncCompile): |
| * runtime/StringPrototype.cpp: |
| (JSC::stringProtoFuncMatch): |
| (JSC::stringProtoFuncSearch): |
| * wrec/WREC.cpp: |
| (JSC::WREC::Generator::compileRegExp): |
| * wrec/WRECGenerator.h: |
| * wtf/FastMalloc.cpp: |
| * wtf/FastMalloc.h: |
| * wtf/TCSystemAlloc.cpp: |
| (TryMmap): |
| (TryVirtualAlloc): |
| (TryDevMem): |
| (TCMalloc_SystemRelease): |
| |
| 2008-12-06 Sam Weinig <sam@webkit.org> |
| |
| Fix the Gtk build. |
| |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::compilePutByIdHotPath): |
| |
| 2008-12-06 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Cameron Zwarich, |
| |
| Move CodeBlock constructor into the .cpp file. |
| |
| Sunspider reports a .7% progression, but I can only assume this |
| is noise. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::CodeBlock): |
| * bytecode/CodeBlock.h: |
| |
| 2008-12-06 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Split JumpTable code into its own file. |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * JavaScriptCoreSources.bkl: |
| * bytecode/CodeBlock.cpp: |
| * bytecode/CodeBlock.h: |
| * bytecode/JumpTable.cpp: Copied from bytecode/CodeBlock.cpp. |
| * bytecode/JumpTable.h: Copied from bytecode/CodeBlock.h. |
| |
| 2008-12-05 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Fix for https://bugs.webkit.org/show_bug.cgi?id=22715 |
| Encapsulate more CodeBlock members in preparation |
| of moving some of them to a rare data structure. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::locationForOffset): |
| (JSC::printConditionalJump): |
| (JSC::printGetByIdOp): |
| (JSC::printPutByIdOp): |
| (JSC::CodeBlock::printStructure): |
| (JSC::CodeBlock::printStructures): |
| (JSC::CodeBlock::dump): |
| (JSC::CodeBlock::~CodeBlock): |
| (JSC::CodeBlock::unlinkCallers): |
| (JSC::CodeBlock::derefStructures): |
| (JSC::CodeBlock::refStructures): |
| (JSC::CodeBlock::mark): |
| (JSC::CodeBlock::getHandlerForVPC): |
| (JSC::CodeBlock::nativeExceptionCodeForHandlerVPC): |
| (JSC::CodeBlock::lineNumberForVPC): |
| (JSC::CodeBlock::expressionRangeForVPC): |
| (JSC::CodeBlock::shrinkToFit): |
| * bytecode/CodeBlock.h: |
| (JSC::CodeBlock::CodeBlock): |
| (JSC::CodeBlock::addCaller): |
| (JSC::CodeBlock::removeCaller): |
| (JSC::CodeBlock::isKnownNotImmediate): |
| (JSC::CodeBlock::isConstantRegisterIndex): |
| (JSC::CodeBlock::getConstant): |
| (JSC::CodeBlock::isTemporaryRegisterIndex): |
| (JSC::CodeBlock::getStubInfo): |
| (JSC::CodeBlock::getCallLinkInfo): |
| (JSC::CodeBlock::instructions): |
| (JSC::CodeBlock::setJITCode): |
| (JSC::CodeBlock::jitCode): |
| (JSC::CodeBlock::ownerNode): |
| (JSC::CodeBlock::setGlobalData): |
| (JSC::CodeBlock::setThisRegister): |
| (JSC::CodeBlock::thisRegister): |
| (JSC::CodeBlock::setNeedsFullScopeChain): |
| (JSC::CodeBlock::needsFullScopeChain): |
| (JSC::CodeBlock::setUsesEval): |
| (JSC::CodeBlock::usesEval): |
| (JSC::CodeBlock::setUsesArguments): |
| (JSC::CodeBlock::usesArguments): |
| (JSC::CodeBlock::codeType): |
| (JSC::CodeBlock::source): |
| (JSC::CodeBlock::sourceOffset): |
| (JSC::CodeBlock::addGlobalResolveInstruction): |
| (JSC::CodeBlock::numberOfPropertyAccessInstructions): |
| (JSC::CodeBlock::addPropertyAccessInstruction): |
| (JSC::CodeBlock::propertyAccessInstruction): |
| (JSC::CodeBlock::numberOfCallLinkInfos): |
| (JSC::CodeBlock::addCallLinkInfo): |
| (JSC::CodeBlock::callLinkInfo): |
| (JSC::CodeBlock::numberOfJumpTargets): |
| (JSC::CodeBlock::addJumpTarget): |
| (JSC::CodeBlock::jumpTarget): |
| (JSC::CodeBlock::lastJumpTarget): |
| (JSC::CodeBlock::numberOfExceptionHandlers): |
| (JSC::CodeBlock::addExceptionHandler): |
| (JSC::CodeBlock::exceptionHandler): |
| (JSC::CodeBlock::addExpressionInfo): |
| (JSC::CodeBlock::numberOfLineInfos): |
| (JSC::CodeBlock::addLineInfo): |
| (JSC::CodeBlock::lastLineInfo): |
| (JSC::CodeBlock::jitReturnAddressVPCMap): |
| (JSC::CodeBlock::numberOfIdentifiers): |
| (JSC::CodeBlock::addIdentifier): |
| (JSC::CodeBlock::identifier): |
| (JSC::CodeBlock::numberOfConstantRegisters): |
| (JSC::CodeBlock::addConstantRegister): |
| (JSC::CodeBlock::constantRegister): |
| (JSC::CodeBlock::addFunction): |
| (JSC::CodeBlock::function): |
| (JSC::CodeBlock::addFunctionExpression): |
| (JSC::CodeBlock::functionExpression): |
| (JSC::CodeBlock::addUnexpectedConstant): |
| (JSC::CodeBlock::unexpectedConstant): |
| (JSC::CodeBlock::addRegExp): |
| (JSC::CodeBlock::regexp): |
| (JSC::CodeBlock::symbolTable): |
| (JSC::CodeBlock::evalCodeCache): |
| New inline setters/getters. |
| |
| (JSC::ProgramCodeBlock::ProgramCodeBlock): |
| (JSC::ProgramCodeBlock::~ProgramCodeBlock): |
| (JSC::ProgramCodeBlock::clearGlobalObject): |
| * bytecode/SamplingTool.cpp: |
| (JSC::ScopeSampleRecord::sample): |
| (JSC::SamplingTool::dump): |
| * bytecompiler/BytecodeGenerator.cpp: |
| * bytecompiler/BytecodeGenerator.h: |
| * bytecompiler/Label.h: |
| * interpreter/CallFrame.cpp: |
| * interpreter/Interpreter.cpp: |
| * jit/JIT.cpp: |
| * jit/JITCall.cpp: |
| * jit/JITInlineMethods.h: |
| * jit/JITPropertyAccess.cpp: |
| * parser/Nodes.cpp: |
| * runtime/Arguments.h: |
| * runtime/ExceptionHelpers.cpp: |
| * runtime/JSActivation.cpp: |
| * runtime/JSActivation.h: |
| * runtime/JSGlobalObject.cpp: |
| Change direct access to use new getter/setters. |
| |
| 2008-12-05 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Prevent GCC4.2 from hanging when trying to compile Interpreter.cpp. |
| Added "-fno-var-tracking" compiler flag. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22704 |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| |
| 2008-12-05 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Ordering of branch operands in MacroAssembler in unnecessarily inconsistent. |
| |
| je, jg etc take an immediate operand as the second argument, but for the |
| equality branches (je, jne) the immediate operand was the first argument. This |
| was unnecessarily inconsistent. Change je, jne methods to take the immediate |
| as the second argument. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22703 |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::je32): |
| (JSC::MacroAssembler::jne32): |
| * jit/JIT.cpp: |
| (JSC::JIT::compileOpStrictEq): |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateEnter): |
| (JSC::WREC::Generator::generateNonGreedyQuantifier): |
| (JSC::WREC::Generator::generateGreedyQuantifier): |
| (JSC::WREC::Generator::generatePatternCharacterPair): |
| (JSC::WREC::Generator::generatePatternCharacter): |
| (JSC::WREC::Generator::generateCharacterClassInvertedRange): |
| (JSC::WREC::Generator::generateCharacterClassInverted): |
| (JSC::WREC::Generator::generateAssertionBOL): |
| (JSC::WREC::Generator::generateAssertionWordBoundary): |
| |
| 2008-12-05 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Second tranche of porting JIT.cpp to MacroAssembler interface. |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::mul32): |
| (JSC::MacroAssembler::jl32): |
| (JSC::MacroAssembler::jnzSub32): |
| (JSC::MacroAssembler::joAdd32): |
| (JSC::MacroAssembler::joMul32): |
| (JSC::MacroAssembler::jzSub32): |
| * jit/JIT.cpp: |
| (JSC::JIT::emitSlowScriptCheck): |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitJumpIfNotJSCell): |
| (JSC::JIT::emitJumpSlowCaseIfNotJSCell): |
| |
| 2008-12-05 David Kilzer <ddkilzer@apple.com> |
| |
| Bug 22609: Provide a build-time choice when generating hash tables for properties of built-in DOM objects |
| |
| <https://bugs.webkit.org/show_bug.cgi?id=22609> |
| <rdar://problem/6331749> |
| |
| Reviewed by Darin Adler. |
| |
| Initial patch by Yosen Lin. Adapted for ToT WebKit by David Kilzer. |
| |
| Added back the code that generates a "compact" hash (instead of a |
| perfect hash) as a build-time option using the |
| ENABLE(PERFECT_HASH_SIZE) macro as defined in Lookup.h. |
| |
| * create_hash_table: Rename variables to differentiate perfect hash |
| values from compact hash values. Added back code to compute compact |
| hash tables. Generate both hash table sizes and emit |
| conditionalized code based on ENABLE(PERFECT_HASH_SIZE). |
| * runtime/Lookup.cpp: |
| (JSC::HashTable::createTable): Added version of createTable() for |
| use with compact hash tables. |
| (JSC::HashTable::deleteTable): Updated to work with compact hash |
| tables. |
| * runtime/Lookup.h: Defined ENABLE(PERFECT_HASH_SIZE) macro here. |
| (JSC::HashEntry::initialize): Set m_next to zero when using compact |
| hash tables. |
| (JSC::HashEntry::setNext): Added for compact hash tables. |
| (JSC::HashEntry::next): Added for compact hash tables. |
| (JSC::HashTable::entry): Added version of entry() for use with |
| compact hash tables. |
| * runtime/Structure.cpp: |
| (JSC::Structure::getEnumerablePropertyNames): Updated to work with |
| compact hash tables. |
| |
| 2008-12-05 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Remove redundant calls to JIT::emitSlowScriptCheck. |
| This is checked in the hot path, so is not needed on the slow path - and the code |
| was being planted before the start of the slow case, so was completely unreachable! |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileSlowCases): |
| |
| 2008-12-05 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Move JIT::compileOpStrictEq to MacroAssembler interface. |
| |
| The rewrite also looks like a small (<1%) performance progression. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22697 |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::compileOpStrictEq): |
| (JSC::JIT::privateCompileSlowCases): |
| * jit/JIT.h: |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitJumpIfJSCell): |
| (JSC::JIT::emitJumpSlowCaseIfJSCell): |
| |
| 2008-12-05 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Remove m_assembler from MacroAssembler::Jump. |
| Keeping a pointer allowed for some syntactic sugar - "link()" looks nicer |
| than "link(this)". But maintaining this doubles the size of Jump, which |
| is even more unfortunate for the JIT, since there are many large structures |
| holding JmpSrcs. Probably best to remove it. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22693 |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::Jump::Jump): |
| (JSC::MacroAssembler::Jump::link): |
| (JSC::MacroAssembler::Jump::linkTo): |
| (JSC::MacroAssembler::JumpList::link): |
| (JSC::MacroAssembler::JumpList::linkTo): |
| (JSC::MacroAssembler::jae32): |
| (JSC::MacroAssembler::je32): |
| (JSC::MacroAssembler::je16): |
| (JSC::MacroAssembler::jg32): |
| (JSC::MacroAssembler::jge32): |
| (JSC::MacroAssembler::jl32): |
| (JSC::MacroAssembler::jle32): |
| (JSC::MacroAssembler::jnePtr): |
| (JSC::MacroAssembler::jne32): |
| (JSC::MacroAssembler::jnset32): |
| (JSC::MacroAssembler::jset32): |
| (JSC::MacroAssembler::jump): |
| (JSC::MacroAssembler::jzSub32): |
| (JSC::MacroAssembler::joAdd32): |
| (JSC::MacroAssembler::call): |
| * wrec/WREC.cpp: |
| (JSC::WREC::Generator::compileRegExp): |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateEnter): |
| (JSC::WREC::Generator::generateBackreferenceQuantifier): |
| (JSC::WREC::Generator::generateNonGreedyQuantifier): |
| (JSC::WREC::Generator::generateGreedyQuantifier): |
| (JSC::WREC::Generator::generatePatternCharacter): |
| (JSC::WREC::Generator::generateCharacterClassInvertedRange): |
| (JSC::WREC::Generator::generateCharacterClassInverted): |
| (JSC::WREC::Generator::generateCharacterClass): |
| (JSC::WREC::Generator::generateParenthesesAssertion): |
| (JSC::WREC::Generator::generateParenthesesInvertedAssertion): |
| (JSC::WREC::Generator::generateParenthesesNonGreedy): |
| (JSC::WREC::Generator::generateParenthesesResetTrampoline): |
| (JSC::WREC::Generator::generateAssertionBOL): |
| (JSC::WREC::Generator::generateAssertionEOL): |
| (JSC::WREC::Generator::generateAssertionWordBoundary): |
| (JSC::WREC::Generator::generateBackreference): |
| (JSC::WREC::Generator::terminateAlternative): |
| (JSC::WREC::Generator::terminateDisjunction): |
| * wrec/WRECParser.h: |
| |
| 2008-12-05 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Simplify JIT generated checks for timeout code, by moving more work into the C function. |
| https://bugs.webkit.org/show_bug.cgi?id=22688 |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::cti_timeout_check): |
| * interpreter/Interpreter.h: |
| * jit/JIT.cpp: |
| (JSC::JIT::emitSlowScriptCheck): |
| |
| 2008-12-05 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Encapsulate access to jump tables in the CodeBlock in preparation |
| of moving them to a rare data structure. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dump): |
| (JSC::CodeBlock::shrinkToFit): |
| * bytecode/CodeBlock.h: |
| (JSC::CodeBlock::numberOfImmediateSwitchJumpTables): |
| (JSC::CodeBlock::addImmediateSwitchJumpTable): |
| (JSC::CodeBlock::immediateSwitchJumpTable): |
| (JSC::CodeBlock::numberOfCharacterSwitchJumpTables): |
| (JSC::CodeBlock::addCharacterSwitchJumpTable): |
| (JSC::CodeBlock::characterSwitchJumpTable): |
| (JSC::CodeBlock::numberOfStringSwitchJumpTables): |
| (JSC::CodeBlock::addStringSwitchJumpTable): |
| (JSC::CodeBlock::stringSwitchJumpTable): |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::generate): |
| (JSC::BytecodeGenerator::endSwitch): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::cti_op_switch_imm): |
| (JSC::Interpreter::cti_op_switch_char): |
| (JSC::Interpreter::cti_op_switch_string): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| |
| 2008-12-05 Adam Roben <aroben@apple.com> |
| |
| Windows build fix after r39020 |
| |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::restoreArgumentReference): |
| (JSC::JIT::restoreArgumentReferenceForTrampoline): |
| Add some apparently-missing __. |
| |
| 2008-12-04 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22673 |
| |
| Added support for the assertion (?=) and inverted assertion (?!) atoms |
| in WREC. |
| |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateParenthesesAssertion): |
| (JSC::WREC::Generator::generateParenthesesInvertedAssertion): Split the |
| old (unused) generateParentheses into these two functions, with more |
| limited capabilities. |
| |
| * wrec/WRECGenerator.h: |
| (JSC::WREC::Generator::): Moved an enum to the top of the class definition, |
| to match the WebKit style, and removed a defunct comment. |
| |
| * wrec/WRECParser.cpp: |
| (JSC::WREC::Parser::parseParentheses): |
| (JSC::WREC::Parser::consumeParenthesesType): |
| * wrec/WRECParser.h: |
| (JSC::WREC::Parser::): Added support for parsing (?=) and (?!). |
| |
| 2008-12-05 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Rubber-stamped by Tor Arne Vestbø. |
| |
| Disable the JIT for the Qt build alltogether again, after observing |
| more miscompilations in a wider range of newer gcc versions. |
| |
| * JavaScriptCore.pri: |
| |
| 2008-12-05 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Reviewed by Tor Arne Vestbø. |
| |
| Disable the JIT for the Qt build on Linux unless gcc is >= 4.2, |
| due to miscompilations. |
| |
| * JavaScriptCore.pri: |
| |
| 2008-12-04 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Start porting the JIT to use the MacroAssembler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22671 |
| No change in performance. |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::Jump::operator X86Assembler::JmpSrc): |
| (JSC::MacroAssembler::add32): |
| (JSC::MacroAssembler::and32): |
| (JSC::MacroAssembler::lshift32): |
| (JSC::MacroAssembler::rshift32): |
| (JSC::MacroAssembler::storePtr): |
| (JSC::MacroAssembler::store32): |
| (JSC::MacroAssembler::poke): |
| (JSC::MacroAssembler::move): |
| (JSC::MacroAssembler::compareImm32ForBranchEquality): |
| (JSC::MacroAssembler::jnePtr): |
| (JSC::MacroAssembler::jnset32): |
| (JSC::MacroAssembler::jset32): |
| (JSC::MacroAssembler::jzeroSub32): |
| (JSC::MacroAssembler::joverAdd32): |
| (JSC::MacroAssembler::call): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::shll_i8r): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: |
| (JSC::JIT::compileBinaryArithOp): |
| * jit/JITInlineMethods.h: |
| (JSC::JIT::emitGetVirtualRegister): |
| (JSC::JIT::emitPutCTIArg): |
| (JSC::JIT::emitPutCTIArgConstant): |
| (JSC::JIT::emitGetCTIArg): |
| (JSC::JIT::emitPutCTIArgFromVirtualRegister): |
| (JSC::JIT::emitPutCTIParam): |
| (JSC::JIT::emitGetCTIParam): |
| (JSC::JIT::emitPutToCallFrameHeader): |
| (JSC::JIT::emitPutImmediateToCallFrameHeader): |
| (JSC::JIT::emitGetFromCallFrameHeader): |
| (JSC::JIT::emitPutVirtualRegister): |
| (JSC::JIT::emitInitRegister): |
| (JSC::JIT::emitNakedCall): |
| (JSC::JIT::restoreArgumentReference): |
| (JSC::JIT::restoreArgumentReferenceForTrampoline): |
| (JSC::JIT::emitCTICall): |
| (JSC::JIT::checkStructure): |
| (JSC::JIT::emitJumpSlowCaseIfNotJSCell): |
| (JSC::JIT::emitJumpSlowCaseIfNotImmNum): |
| (JSC::JIT::emitJumpSlowCaseIfNotImmNums): |
| (JSC::JIT::emitFastArithDeTagImmediate): |
| (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): |
| (JSC::JIT::emitFastArithReTagImmediate): |
| (JSC::JIT::emitFastArithPotentiallyReTagImmediate): |
| (JSC::JIT::emitFastArithImmToInt): |
| (JSC::JIT::emitFastArithIntToImmOrSlowCase): |
| (JSC::JIT::emitFastArithIntToImmNoCheck): |
| (JSC::JIT::emitTagAsBoolImmediate): |
| * jit/JITPropertyAccess.cpp: |
| (JSC::JIT::privateCompilePutByIdTransition): |
| |
| 2008-12-04 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Some refactoring for generateGreedyQuantifier. |
| |
| SunSpider reports no change (possibly a 0.3% speedup). |
| |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateGreedyQuantifier): Clarified label |
| meanings and unified some logic to simplify things. |
| |
| * wrec/WRECParser.h: |
| (JSC::WREC::Parser::parseAlternative): Added a version of parseAlternative |
| that can jump to a Label, instead of a JumpList, upon failure. (Eventually, |
| when we have a true Label class, this will be redundant.) This makes |
| things easier for generateGreedyQuantifier, because it can avoid |
| explicitly linking things. |
| |
| 2008-12-04 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Reviewed by Holger Freyther. |
| |
| Fix crashes in the Qt build on Linux/i386 with non-executable memory |
| by enabling TCSystemAlloc and the PROT_EXEC flag for mmap. |
| |
| * JavaScriptCore.pri: Enable the use of TCSystemAlloc if the JIT is |
| enabled. |
| * wtf/TCSystemAlloc.cpp: Extend the PROT_EXEC permissions to |
| PLATFORM(QT). |
| |
| 2008-12-04 Simon Hausmann <simon.hausmann@nokia.com> |
| |
| Reviewed by Tor Arne Vestbø. |
| |
| Enable ENABLE_JIT_OPTIMIZE_CALL, ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS |
| and ENABLE_JIT_OPTIMIZE_ARITHMETIC, as suggested by Niko. |
| |
| * JavaScriptCore.pri: |
| |
| 2008-12-04 Kent Hansen <khansen@trolltech.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| Enable the JSC jit for the Qt build by default for release builds on |
| linux-g++ and win32-msvc. |
| |
| * JavaScriptCore.pri: |
| |
| 2008-12-04 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Allow JIT to function without property access repatching and arithmetic optimizations. |
| Controlled by ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS and ENABLE_JIT_OPTIMIZE_ARITHMETIC switches. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22643 |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| * jit/JIT.h: |
| * jit/JITArithmetic.cpp: Copied from jit/JIT.cpp. |
| (JSC::JIT::compileBinaryArithOp): |
| (JSC::JIT::compileBinaryArithOpSlowCase): |
| * jit/JITPropertyAccess.cpp: Copied from jit/JIT.cpp. |
| (JSC::JIT::compileGetByIdHotPath): |
| (JSC::JIT::compileGetByIdSlowCase): |
| (JSC::JIT::compilePutByIdHotPath): |
| (JSC::JIT::compilePutByIdSlowCase): |
| (JSC::resizePropertyStorage): |
| (JSC::transitionWillNeedStorageRealloc): |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::patchGetByIdSelf): |
| (JSC::JIT::patchPutByIdReplace): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| * wtf/Platform.h: |
| |
| 2008-12-03 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Optimized sequences of characters in regular expressions by comparing |
| two characters at a time. |
| |
| 1-2% speedup on SunSpider, 19-25% speedup on regexp-dna. |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::load32): |
| (JSC::MacroAssembler::jge32): Filled out a few more macro methods. |
| |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::movl_mr): Added a verion of movl_mr that operates |
| without an offset, to allow the macro assembler to optmize for that case. |
| |
| * wrec/WREC.cpp: |
| (JSC::WREC::Generator::compileRegExp): Test the saved value of index |
| instead of the index register when checking for "end of input." The |
| index register doesn't increment by 1 in an orderly fashion, so testing |
| it for == "end of input" is not valid. |
| |
| Also, jump all the way to "return failure" upon reaching "end of input," |
| instead of executing the next alternative. This is more logical, and |
| it's a slight optimization in the case of an expression with many alternatives. |
| |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateIncrementIndex): Added support for |
| jumping to a failure label in the case where the index has reached "end |
| of input." |
| |
| (JSC::WREC::Generator::generatePatternCharacterSequence): |
| (JSC::WREC::Generator::generatePatternCharacterPair): This is the |
| optmization. It's basically like generatePatternCharacter, but it runs two |
| characters at a time. |
| |
| (JSC::WREC::Generator::generatePatternCharacter): Changed to use isASCII, |
| since it's clearer than comparing to a magic hex value. |
| |
| * wrec/WRECGenerator.h: |
| |
| 2008-12-03 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Allow JIT to operate without the call-repatching optimization. |
| Controlled by ENABLE(JIT_OPTIMIZE_CALL), defaults on, disabling |
| this leads to significant performance regression. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22639 |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileSlowCases): |
| * jit/JIT.h: |
| * jit/JITCall.cpp: Copied from jit/JIT.cpp. |
| (JSC::JIT::compileOpCallInitializeCallFrame): |
| (JSC::JIT::compileOpCallSetupArgs): |
| (JSC::JIT::compileOpCallEvalSetupArgs): |
| (JSC::JIT::compileOpConstructSetupArgs): |
| (JSC::JIT::compileOpCall): |
| (JSC::JIT::compileOpCallSlowCase): |
| (JSC::unreachable): |
| * jit/JITInlineMethods.h: Copied from jit/JIT.cpp. |
| (JSC::JIT::checkStructure): |
| (JSC::JIT::emitFastArithPotentiallyReTagImmediate): |
| (JSC::JIT::emitTagAsBoolImmediate): |
| * wtf/Platform.h: |
| |
| 2008-12-03 Eric Seidel <eric@webkit.org> |
| |
| Rubber-stamped by David Hyatt. |
| |
| Make HAVE_ACCESSIBILITY only define if !defined |
| |
| * wtf/Platform.h: |
| |
| 2008-12-03 Sam Weinig <sam@webkit.org> |
| |
| Fix build. |
| |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::orl_i32r): |
| |
| 2008-12-03 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Remove shared AssemblerBuffer 1MB buffer and instead give AssemblerBuffer |
| an 256 byte inline capacity. |
| |
| 1% progression on Sunspider. |
| |
| * assembler/AssemblerBuffer.h: |
| (JSC::AssemblerBuffer::AssemblerBuffer): |
| (JSC::AssemblerBuffer::~AssemblerBuffer): |
| (JSC::AssemblerBuffer::grow): |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::MacroAssembler): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::X86Assembler): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::Interpreter): |
| * interpreter/Interpreter.h: |
| * jit/JIT.cpp: |
| (JSC::JIT::JIT): |
| * parser/Nodes.cpp: |
| (JSC::RegExpNode::emitBytecode): |
| * runtime/RegExp.cpp: |
| (JSC::RegExp::RegExp): |
| (JSC::RegExp::create): |
| * runtime/RegExp.h: |
| * runtime/RegExpConstructor.cpp: |
| (JSC::constructRegExp): |
| * runtime/RegExpPrototype.cpp: |
| (JSC::regExpProtoFuncCompile): |
| * runtime/StringPrototype.cpp: |
| (JSC::stringProtoFuncMatch): |
| (JSC::stringProtoFuncSearch): |
| * wrec/WREC.cpp: |
| (JSC::WREC::Generator::compileRegExp): |
| * wrec/WRECGenerator.h: |
| (JSC::WREC::Generator::Generator): |
| * wrec/WRECParser.h: |
| (JSC::WREC::Parser::Parser): |
| |
| 2008-12-03 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Oliver Hunt, with help from Gavin Barraclough. |
| |
| orl_i32r was actually coded as an 8bit OR. So, I renamed orl_i32r to |
| orl_i8r, changed all orl_i32r clients to use orl_i8r, and then added |
| a new orl_i32r that actually does a 32bit OR. |
| |
| (32bit OR is currently unused, but a patch I'm working on uses it.) |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::or32): Updated to choose between 8bit and 32bit OR. |
| |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::orl_i8r): The old orl_i32r. |
| (JSC::X86Assembler::orl_i32r): The new orl_i32r. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::emitFastArithPotentiallyReTagImmediate): |
| (JSC::JIT::emitTagAsBoolImmediate): Use orl_i8r, since we're ORing 8bit |
| values. |
| |
| 2008-12-03 Dean Jackson <dino@apple.com> |
| |
| Reviewed by Dan Bernstein. |
| |
| Helper functions for turn -> degrees. |
| https://bugs.webkit.org/show_bug.cgi?id=22497 |
| |
| * wtf/MathExtras.h: |
| (turn2deg): |
| (deg2turn): |
| |
| 2008-12-02 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Bug 22504: Crashes during code generation occur due to refing of ignoredResult() |
| <https://bugs.webkit.org/show_bug.cgi?id=22504> |
| |
| Since ignoredResult() was implemented by casting 1 to a RegisterID*, any |
| attempt to ref ignoredResult() results in a crash. This will occur in |
| code generation of a function body where a node emits another node with |
| the dst that was passed to it, and then refs the returned RegisterID*. |
| |
| To fix this problem, make ignoredResult() a member function of |
| BytecodeGenerator that simply returns a pointe to a fixed RegisterID |
| member of BytecodeGenerator. |
| |
| * bytecompiler/BytecodeGenerator.h: |
| (JSC::BytecodeGenerator::ignoredResult): |
| * bytecompiler/RegisterID.h: |
| * parser/Nodes.cpp: |
| (JSC::NullNode::emitBytecode): |
| (JSC::BooleanNode::emitBytecode): |
| (JSC::NumberNode::emitBytecode): |
| (JSC::StringNode::emitBytecode): |
| (JSC::RegExpNode::emitBytecode): |
| (JSC::ThisNode::emitBytecode): |
| (JSC::ResolveNode::emitBytecode): |
| (JSC::ObjectLiteralNode::emitBytecode): |
| (JSC::PostfixResolveNode::emitBytecode): |
| (JSC::PostfixBracketNode::emitBytecode): |
| (JSC::PostfixDotNode::emitBytecode): |
| (JSC::DeleteValueNode::emitBytecode): |
| (JSC::VoidNode::emitBytecode): |
| (JSC::TypeOfResolveNode::emitBytecode): |
| (JSC::TypeOfValueNode::emitBytecode): |
| (JSC::PrefixResolveNode::emitBytecode): |
| (JSC::AssignResolveNode::emitBytecode): |
| (JSC::CommaNode::emitBytecode): |
| (JSC::ForNode::emitBytecode): |
| (JSC::ForInNode::emitBytecode): |
| (JSC::ReturnNode::emitBytecode): |
| (JSC::ThrowNode::emitBytecode): |
| (JSC::FunctionBodyNode::emitBytecode): |
| (JSC::FuncDeclNode::emitBytecode): |
| |
| 2008-12-02 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Fixed https://bugs.webkit.org/show_bug.cgi?id=22537 |
| REGRESSION (r38745): Assertion failure in jsSubstring() at ge.com |
| |
| The bug was that index would become greater than length, so our |
| "end of input" checks, which all check "index == length", would fail. |
| |
| The solution is to check for end of input before incrementing index, |
| to ensure that index is always <= length. |
| |
| As a side benefit, generateJumpIfEndOfInput can now use je instead of |
| jg, which should be slightly faster. |
| |
| * wrec/WREC.cpp: |
| (JSC::WREC::Generator::compileRegExp): |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateJumpIfEndOfInput): |
| |
| 2008-12-02 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Plant shift right immediate instructions, which are awesome. |
| https://bugs.webkit.org/show_bug.cgi?id=22610 |
| ~5% on the v8-crypto test. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| |
| 2008-12-02 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Cleaned up SegmentedVector by abstracting segment access into helper |
| functions. |
| |
| SunSpider reports no change. |
| |
| * bytecompiler/SegmentedVector.h: |
| (JSC::SegmentedVector::SegmentedVector): |
| (JSC::SegmentedVector::~SegmentedVector): |
| (JSC::SegmentedVector::size): |
| (JSC::SegmentedVector::at): |
| (JSC::SegmentedVector::operator[]): |
| (JSC::SegmentedVector::last): |
| (JSC::SegmentedVector::append): |
| (JSC::SegmentedVector::removeLast): |
| (JSC::SegmentedVector::grow): |
| (JSC::SegmentedVector::clear): |
| (JSC::SegmentedVector::deleteAllSegments): |
| (JSC::SegmentedVector::segmentFor): |
| (JSC::SegmentedVector::subscriptFor): |
| (JSC::SegmentedVector::ensureSegmentsFor): |
| (JSC::SegmentedVector::ensureSegment): |
| |
| 2008-12-02 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Geoffrey Garen. (Patch by Cameron Zwarich <zwarich@apple.com>.) |
| |
| Fixed https://bugs.webkit.org/show_bug.cgi?id=22482 |
| REGRESSION (r37991): Occasionally see "Scene rendered incorrectly" |
| message when running the V8 Raytrace benchmark |
| |
| Rolled out r37991. It didn't properly save xmm0, which is caller-save, |
| before calling helper functions. |
| |
| SunSpider and v8 benchmarks show little change -- possibly a .2% |
| SunSpider regression, possibly a .2% v8 benchmark speedup. |
| |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::): |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dump): |
| * bytecode/Instruction.h: |
| (JSC::Instruction::): |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::emitUnaryOp): |
| * bytecompiler/BytecodeGenerator.h: |
| (JSC::BytecodeGenerator::emitToJSNumber): |
| (JSC::BytecodeGenerator::emitTypeOf): |
| (JSC::BytecodeGenerator::emitGetPropertyNames): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| * interpreter/Interpreter.h: |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| * jit/JIT.h: |
| * parser/Nodes.cpp: |
| (JSC::UnaryOpNode::emitBytecode): |
| (JSC::BinaryOpNode::emitBytecode): |
| (JSC::EqualNode::emitBytecode): |
| * parser/ResultType.h: |
| (JSC::ResultType::isReusable): |
| (JSC::ResultType::mightBeNumber): |
| * runtime/JSNumberCell.h: |
| |
| 2008-12-01 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Remove unused (sampling only, and derivable) argument to JIT::emitCTICall. |
| https://bugs.webkit.org/show_bug.cgi?id=22587 |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::emitCTICall): |
| (JSC::JIT::compileOpCall): |
| (JSC::JIT::emitSlowScriptCheck): |
| (JSC::JIT::compileBinaryArithOpSlowCase): |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| (JSC::JIT::privateCompile): |
| * jit/JIT.h: |
| |
| 2008-12-02 Dimitri Glazkov <dglazkov@chromium.org> |
| |
| Reviewed by Eric Seidel. |
| |
| Fix the inheritance chain for JSFunction. |
| |
| * runtime/JSFunction.cpp: |
| (JSC::JSFunction::info): Add InternalFunction::info as parent class |
| |
| 2008-12-02 Simon Hausmann <hausmann@webkit.org> |
| |
| Reviewed by Tor Arne Vestbø. |
| |
| Fix ability to include JavaScriptCore.pri from other .pro files. |
| |
| * JavaScriptCore.pri: Moved -O3 setting into the .pro files. |
| * JavaScriptCore.pro: |
| * jsc.pro: |
| |
| 2008-12-01 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Cameron Zwarich, with help from Gavin Barraclough. |
| |
| Fixed https://bugs.webkit.org/show_bug.cgi?id=22583. |
| |
| Refactored regular expression parsing to parse sequences of characters |
| as a single unit, in preparation for optimizing sequences of characters. |
| |
| SunSpider reports no change. |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * wrec/Escapes.h: Added. Set of classes for representing an escaped |
| token in a pattern. |
| |
| * wrec/Quantifier.h: |
| (JSC::WREC::Quantifier::Quantifier): Simplified this constructor slightly, |
| to match the new Escape constructor. |
| |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generatePatternCharacterSequence): |
| * wrec/WRECGenerator.h: Added an interface for generating a sequence |
| of pattern characters at a time. It doesn't do anything special yet. |
| |
| * wrec/WRECParser.cpp: |
| (JSC::WREC::Parser::consumeGreedyQuantifier): |
| (JSC::WREC::Parser::consumeQuantifier): Renamed "parse" to "consume" in |
| these functions, to match "consumeEscape." |
| |
| (JSC::WREC::Parser::parsePatternCharacterSequence): New function for |
| iteratively aggregating a sequence of characters in a pattern. |
| |
| (JSC::WREC::Parser::parseCharacterClassQuantifier): |
| (JSC::WREC::Parser::parseBackreferenceQuantifier): Renamed "parse" to |
| "consume" in these functions, to match "consumeEscape." |
| |
| (JSC::WREC::Parser::parseCharacterClass): Refactored to use the common |
| escape processing code in consumeEscape. |
| |
| (JSC::WREC::Parser::parseEscape): Refactored to use the common |
| escape processing code in consumeEscape. |
| |
| (JSC::WREC::Parser::consumeEscape): Factored escaped token processing |
| into a common function, since we were doing this in a few places. |
| |
| (JSC::WREC::Parser::parseTerm): Refactored to use the common |
| escape processing code in consumeEscape. |
| |
| * wrec/WRECParser.h: |
| (JSC::WREC::Parser::consumeOctal): Refactored to use a helper function |
| for reading a digit. |
| |
| 2008-12-01 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Bug 20340: SegmentedVector segment allocations can lead to unsafe use of temporary registers |
| <https://bugs.webkit.org/show_bug.cgi?id=20340> |
| |
| SegmentedVector currently frees segments and reallocates them when used |
| as a stack. This can lead to unsafe use of pointers into freed segments. |
| |
| In order to fix this problem, SegmentedVector will be changed to only |
| grow and never shrink. Also, rename the reserveCapacity() member |
| function to grow() to match the actual usage in BytecodeGenerator, where |
| this function is used to allocate a group of registers at once, rather |
| than merely saving space for them. |
| |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::BytecodeGenerator): Use grow() instead of |
| reserveCapacity(). |
| * bytecompiler/SegmentedVector.h: |
| (JSC::SegmentedVector::SegmentedVector): |
| (JSC::SegmentedVector::last): |
| (JSC::SegmentedVector::append): |
| (JSC::SegmentedVector::removeLast): |
| (JSC::SegmentedVector::grow): Renamed from reserveCapacity(). |
| (JSC::SegmentedVector::clear): |
| |
| 2008-12-01 Mark Rowe <mrowe@apple.com> |
| |
| Rubber-stamped by Anders Carlsson. |
| |
| Disable WREC for x86_64 since memory allocated by the system allocator is not marked executable, |
| which causes 64-bit debug builds to crash. Once we have a dedicated allocator for executable |
| memory we can turn this back on. |
| |
| * wtf/Platform.h: |
| |
| 2008-12-01 Antti Koivisto <antti@apple.com> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| Restore inline buffer after vector is shrunk back below its inline capacity. |
| |
| * wtf/Vector.h: |
| (WTF::): |
| (WTF::VectorBuffer::restoreInlineBufferIfNeeded): |
| (WTF::::shrinkCapacity): |
| |
| 2008-11-30 Antti Koivisto <antti@apple.com> |
| |
| Reviewed by Mark Rowe. |
| |
| Try to return free pages in the current thread cache too. |
| |
| * wtf/FastMalloc.cpp: |
| (WTF::TCMallocStats::releaseFastMallocFreeMemory): |
| |
| 2008-12-01 David Levin <levin@chromium.org> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22567 |
| Make HashTable work as expected with respect to threads. Specifically, it has class-level |
| thread safety and constant methods work on constant objects without synchronization. |
| |
| No observable change in behavior, so no test. This only affects debug builds. |
| |
| * wtf/HashTable.cpp: |
| (WTF::hashTableStatsMutex): |
| (WTF::HashTableStats::~HashTableStats): |
| (WTF::HashTableStats::recordCollisionAtCount): |
| Guarded variable access with a mutex. |
| |
| * wtf/HashTable.h: |
| (WTF::::lookup): |
| (WTF::::lookupForWriting): |
| (WTF::::fullLookupForWriting): |
| (WTF::::add): |
| (WTF::::reinsert): |
| (WTF::::remove): |
| (WTF::::rehash): |
| Changed increments of static variables to use atomicIncrement. |
| |
| (WTF::::invalidateIterators): |
| (WTF::addIterator): |
| (WTF::removeIterator): |
| Guarded mutable access with a mutex. |
| |
| 2008-11-29 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Enable WREC on PLATFORM(X86_64). This change predominantly requires changes to the |
| WREC::Generator::generateEnter method to support the x86-64 ABI, and addition of |
| support for a limited number of quadword operations in the X86Assembler. |
| |
| This patch will cause the JS heap to be allocated with RWX permissions on 64-bit Mac |
| platforms. This is a regression with respect to previous 64-bit behaviour, but is no |
| more permissive than on 32-bit builds. This issue should be addressed at some point. |
| (This is tracked by bug #21783.) |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22554 |
| Greater than 4x speedup on regexp-dna, on x86-64. |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::addPtr): |
| (JSC::MacroAssembler::loadPtr): |
| (JSC::MacroAssembler::storePtr): |
| (JSC::MacroAssembler::pop): |
| (JSC::MacroAssembler::push): |
| (JSC::MacroAssembler::move): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::): |
| (JSC::X86Assembler::movq_rr): |
| (JSC::X86Assembler::addl_i8m): |
| (JSC::X86Assembler::addl_i32r): |
| (JSC::X86Assembler::addq_i8r): |
| (JSC::X86Assembler::addq_i32r): |
| (JSC::X86Assembler::movq_mr): |
| (JSC::X86Assembler::movq_rm): |
| * wrec/WREC.h: |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateEnter): |
| (JSC::WREC::Generator::generateReturnSuccess): |
| (JSC::WREC::Generator::generateReturnFailure): |
| * wtf/Platform.h: |
| * wtf/TCSystemAlloc.cpp: |
| |
| 2008-12-01 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Preliminary work for bug 20340: SegmentedVector segment allocations can lead to unsafe use of temporary registers |
| <https://bugs.webkit.org/show_bug.cgi?id=20340> |
| |
| SegmentedVector currently frees segments and reallocates them when used |
| as a stack. This can lead to unsafe use of pointers into freed segments. |
| |
| In order to fix this problem, SegmentedVector will be changed to only |
| grow and never shrink, with the sole exception of clearing all of its |
| data, a capability that is required by Lexer. This patch changes the |
| public interface to only allow for these capabilities. |
| |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::BytecodeGenerator): Use reserveCapacity() |
| instead of resize() for m_globals and m_parameters. |
| * bytecompiler/SegmentedVector.h: |
| (JSC::SegmentedVector::resize): Removed. |
| (JSC::SegmentedVector::reserveCapacity): Added. |
| (JSC::SegmentedVector::clear): Added. |
| (JSC::SegmentedVector::shrink): Removed. |
| (JSC::SegmentedVector::grow): Removed. |
| * parser/Lexer.cpp: |
| (JSC::Lexer::clear): Use clear() instead of resize(0). |
| |
| 2008-11-30 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Mark Rowe. |
| |
| Renames jumps to m_jumps in JumpList. |
| |
| * assembler/MacroAssembler.h: |
| (JSC::MacroAssembler::JumpList::link): |
| (JSC::MacroAssembler::JumpList::linkTo): |
| (JSC::MacroAssembler::JumpList::append): |
| |
| 2008-11-30 Antti Koivisto <antti@apple.com> |
| |
| Reviewed by Mark Rowe. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22557 |
| |
| Report free size in central and thread caches too. |
| |
| * wtf/FastMalloc.cpp: |
| (WTF::TCMallocStats::fastMallocStatistics): |
| * wtf/FastMalloc.h: |
| |
| 2008-11-29 Antti Koivisto <antti@apple.com> |
| |
| Reviewed by Dan Bernstein. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22557 |
| Add statistics for JavaScript GC heap. |
| |
| * JavaScriptCore.exp: |
| * runtime/Collector.cpp: |
| (JSC::Heap::objectCount): |
| (JSC::addToStatistics): |
| (JSC::Heap::statistics): |
| * runtime/Collector.h: |
| |
| 2008-11-29 Antti Koivisto <antti@apple.com> |
| |
| Fix debug build by adding a stub method. |
| |
| * wtf/FastMalloc.cpp: |
| (WTF::fastMallocStatistics): |
| |
| 2008-11-29 Antti Koivisto <antti@apple.com> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22557 |
| |
| Add function for getting basic statistics from FastMalloc. |
| |
| * JavaScriptCore.exp: |
| * wtf/FastMalloc.cpp: |
| (WTF::DLL_Length): |
| (WTF::TCMalloc_PageHeap::ReturnedBytes): |
| (WTF::TCMallocStats::fastMallocStatistics): |
| * wtf/FastMalloc.h: |
| |
| 2008-11-29 Cameron Zwarich <zwarich@apple.com> |
| |
| Not reviewed. |
| |
| The C++ standard does not automatically grant the friendships of an |
| enclosing class to its nested subclasses, so we should do so explicitly. |
| This fixes the GCC 4.0 build, although both GCC 4.2 and Visual C++ 2005 |
| accept the incorrect code as it is. |
| |
| * assembler/MacroAssembler.h: |
| |
| 2008-11-29 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Add the class MacroAssembler to provide some abstraction of code generation, |
| and change WREC to make use of this class, rather than directly accessing |
| the X86Assembler. |
| |
| This patch also allows WREC to be compiled without the rest of the JIT enabled. |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * assembler/MacroAssembler.h: Added. |
| (JSC::MacroAssembler::): |
| (JSC::MacroAssembler::MacroAssembler): |
| (JSC::MacroAssembler::copyCode): |
| (JSC::MacroAssembler::Address::Address): |
| (JSC::MacroAssembler::ImplicitAddress::ImplicitAddress): |
| (JSC::MacroAssembler::BaseIndex::BaseIndex): |
| (JSC::MacroAssembler::Label::Label): |
| (JSC::MacroAssembler::Jump::Jump): |
| (JSC::MacroAssembler::Jump::link): |
| (JSC::MacroAssembler::Jump::linkTo): |
| (JSC::MacroAssembler::JumpList::link): |
| (JSC::MacroAssembler::JumpList::linkTo): |
| (JSC::MacroAssembler::JumpList::append): |
| (JSC::MacroAssembler::Imm32::Imm32): |
| (JSC::MacroAssembler::add32): |
| (JSC::MacroAssembler::or32): |
| (JSC::MacroAssembler::sub32): |
| (JSC::MacroAssembler::loadPtr): |
| (JSC::MacroAssembler::load32): |
| (JSC::MacroAssembler::load16): |
| (JSC::MacroAssembler::storePtr): |
| (JSC::MacroAssembler::store32): |
| (JSC::MacroAssembler::pop): |
| (JSC::MacroAssembler::push): |
| (JSC::MacroAssembler::peek): |
| (JSC::MacroAssembler::poke): |
| (JSC::MacroAssembler::move): |
| (JSC::MacroAssembler::compareImm32ForBranch): |
| (JSC::MacroAssembler::compareImm32ForBranchEquality): |
| (JSC::MacroAssembler::jae32): |
| (JSC::MacroAssembler::je32): |
| (JSC::MacroAssembler::je16): |
| (JSC::MacroAssembler::jg32): |
| (JSC::MacroAssembler::jge32): |
| (JSC::MacroAssembler::jl32): |
| (JSC::MacroAssembler::jle32): |
| (JSC::MacroAssembler::jne32): |
| (JSC::MacroAssembler::jump): |
| (JSC::MacroAssembler::breakpoint): |
| (JSC::MacroAssembler::ret): |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::cmpw_rm): |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::Interpreter): |
| * interpreter/Interpreter.h: |
| (JSC::Interpreter::assemblerBuffer): |
| * runtime/RegExp.cpp: |
| (JSC::RegExp::RegExp): |
| * wrec/WREC.cpp: |
| (JSC::WREC::Generator::compileRegExp): |
| * wrec/WREC.h: |
| * wrec/WRECFunctors.cpp: |
| (JSC::WREC::GeneratePatternCharacterFunctor::generateAtom): |
| (JSC::WREC::GenerateCharacterClassFunctor::generateAtom): |
| (JSC::WREC::GenerateBackreferenceFunctor::generateAtom): |
| (JSC::WREC::GenerateParenthesesNonGreedyFunctor::generateAtom): |
| * wrec/WRECFunctors.h: |
| (JSC::WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor): |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateEnter): |
| (JSC::WREC::Generator::generateReturnSuccess): |
| (JSC::WREC::Generator::generateSaveIndex): |
| (JSC::WREC::Generator::generateIncrementIndex): |
| (JSC::WREC::Generator::generateLoadCharacter): |
| (JSC::WREC::Generator::generateJumpIfEndOfInput): |
| (JSC::WREC::Generator::generateJumpIfNotEndOfInput): |
| (JSC::WREC::Generator::generateReturnFailure): |
| (JSC::WREC::Generator::generateBacktrack1): |
| (JSC::WREC::Generator::generateBacktrackBackreference): |
| (JSC::WREC::Generator::generateBackreferenceQuantifier): |
| (JSC::WREC::Generator::generateNonGreedyQuantifier): |
| (JSC::WREC::Generator::generateGreedyQuantifier): |
| (JSC::WREC::Generator::generatePatternCharacter): |
| (JSC::WREC::Generator::generateCharacterClassInvertedRange): |
| (JSC::WREC::Generator::generateCharacterClassInverted): |
| (JSC::WREC::Generator::generateCharacterClass): |
| (JSC::WREC::Generator::generateParentheses): |
| (JSC::WREC::Generator::generateParenthesesNonGreedy): |
| (JSC::WREC::Generator::generateParenthesesResetTrampoline): |
| (JSC::WREC::Generator::generateAssertionBOL): |
| (JSC::WREC::Generator::generateAssertionEOL): |
| (JSC::WREC::Generator::generateAssertionWordBoundary): |
| (JSC::WREC::Generator::generateBackreference): |
| (JSC::WREC::Generator::terminateAlternative): |
| (JSC::WREC::Generator::terminateDisjunction): |
| * wrec/WRECGenerator.h: |
| (JSC::WREC::Generator::Generator): |
| * wrec/WRECParser.cpp: |
| (JSC::WREC::Parser::parsePatternCharacterQualifier): |
| (JSC::WREC::Parser::parseCharacterClassQuantifier): |
| (JSC::WREC::Parser::parseBackreferenceQuantifier): |
| (JSC::WREC::Parser::parseParentheses): |
| (JSC::WREC::Parser::parseCharacterClass): |
| (JSC::WREC::Parser::parseOctalEscape): |
| (JSC::WREC::Parser::parseEscape): |
| (JSC::WREC::Parser::parseTerm): |
| (JSC::WREC::Parser::parseDisjunction): |
| * wrec/WRECParser.h: |
| (JSC::WREC::Parser::Parser): |
| (JSC::WREC::Parser::parsePattern): |
| (JSC::WREC::Parser::parseAlternative): |
| * wtf/Platform.h: |
| |
| 2008-11-28 Simon Hausmann <hausmann@webkit.org> |
| |
| Reviewed by Tor Arne Vestbø. |
| |
| Fix compilation on Windows CE |
| |
| Port away from the use of errno after calling strtol(), instead |
| detect conversion errors by checking the result and the stop |
| position. |
| |
| * runtime/DateMath.cpp: |
| (JSC::parseLong): |
| (JSC::parseDate): |
| |
| 2008-11-28 Joerg Bornemann <joerg.bornemann@trolltech.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| Implement lowResUTCTime() on Windows CE using GetSystemTime as _ftime() is not available. |
| |
| * runtime/DateMath.cpp: |
| (JSC::lowResUTCTime): |
| |
| 2008-11-28 Simon Hausmann <hausmann@webkit.org> |
| |
| Rubber-stamped by Tor Arne Vestbø. |
| |
| Removed unnecessary inclusion of errno.h, which also fixes compilation on Windows CE. |
| |
| * runtime/JSGlobalObjectFunctions.cpp: |
| |
| 2008-11-27 Cameron Zwarich <zwarich@apple.com> |
| |
| Not reviewed. |
| |
| r38825 made JSFunction::m_body private, but some inspector code in |
| WebCore sets the field. Add setters for it. |
| |
| * runtime/JSFunction.h: |
| (JSC::JSFunction::setBody): |
| |
| 2008-11-27 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Fix FIXME by adding accessor for JSFunction's m_body property. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::cti_op_call_JSFunction): |
| (JSC::Interpreter::cti_vm_dontLazyLinkCall): |
| (JSC::Interpreter::cti_vm_lazyLinkCall): |
| * profiler/Profiler.cpp: |
| (JSC::createCallIdentifierFromFunctionImp): |
| * runtime/Arguments.h: |
| (JSC::Arguments::getArgumentsData): |
| (JSC::Arguments::Arguments): |
| * runtime/FunctionPrototype.cpp: |
| (JSC::functionProtoFuncToString): |
| * runtime/JSFunction.h: |
| (JSC::JSFunction::JSFunction): |
| (JSC::JSFunction::body): |
| |
| 2008-11-27 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Oliver Hunt. |
| |
| Remove unused member variables from ProgramNode. |
| |
| * parser/Nodes.h: |
| |
| 2008-11-27 Brent Fulgham <bfulgham@gmail.com> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| Enable mouse panning feaure on Windows Cairo build. |
| See http://bugs.webkit.org/show_bug.cgi?id=22525 |
| |
| * wtf/Platform.h: Enable mouse panning feaure on Windows Cairo build. |
| |
| 2008-11-27 Alp Toker <alp@nuanti.com> |
| |
| Change recently introduced C++ comments in Platform.h to C comments to |
| fix the minidom build with traditional C. |
| |
| Build GtkLauncher and minidom with the '-ansi' compiler flag to detect |
| API header breakage at build time. |
| |
| * GNUmakefile.am: |
| * wtf/Platform.h: |
| |
| 2008-11-27 Alp Toker <alp@nuanti.com> |
| |
| Remove C++ comment from JavaScriptCore API headers (introduced r35449). |
| Fixes build for ANSI C applications using the public API. |
| |
| * API/WebKitAvailability.h: |
| |
| 2008-11-26 Eric Seidel <eric@webkit.org> |
| |
| No review, build fix only. |
| |
| Fix the JSC Chromium Mac build by adding JavaScriptCore/icu into the include path |
| |
| * JavaScriptCore.scons: |
| |
| 2008-11-25 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| Remove the unused member function JSFunction::getParameterName(). |
| |
| * runtime/JSFunction.cpp: |
| * runtime/JSFunction.h: |
| |
| 2008-11-24 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Polymorpic caching for get by id chain. Similar to the polymorphic caching already implemented |
| for self and proto accesses (implemented by allowing multiple trampolines to be JIT genertaed, |
| and linked together) - the get by id chain caching is implemented as a genericization of the |
| proto list caching, allowing cached access lists to contain a mix of proto and proto chain |
| accesses (since in JS style inheritance hierarchies you may commonly see a mix of properties |
| being overridden on the direct prototype, or higher up its prototype chain). |
| |
| In order to allow this patch to compile there is a fix to appease gcc 4.2 compiler issues |
| (removing the jumps between fall-through cases in privateExecute). |
| |
| This patch also removes redundant immediate checking from the reptach code, and fixes a related |
| memory leak (failure to deallocate trampolines). |
| |
| ~2% progression on v8 tests (bulk on the win on deltablue) |
| |
| * bytecode/Instruction.h: |
| (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::): |
| (JSC::PolymorphicAccessStructureList::PolymorphicStubInfo::set): |
| (JSC::PolymorphicAccessStructureList::PolymorphicAccessStructureList): |
| (JSC::PolymorphicAccessStructureList::derefStructures): |
| * interpreter/Interpreter.cpp: |
| (JSC::countPrototypeChainEntriesAndCheckForProxies): |
| (JSC::Interpreter::tryCacheGetByID): |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::tryCTICacheGetByID): |
| (JSC::Interpreter::cti_op_get_by_id_self_fail): |
| (JSC::getPolymorphicAccessStructureListSlot): |
| (JSC::Interpreter::cti_op_get_by_id_proto_list): |
| * interpreter/Interpreter.h: |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdSelfList): |
| (JSC::JIT::privateCompileGetByIdProtoList): |
| (JSC::JIT::privateCompileGetByIdChainList): |
| (JSC::JIT::privateCompileGetByIdChain): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| * jit/JIT.h: |
| (JSC::JIT::compileGetByIdChainList): |
| |
| 2008-11-25 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| Move the collect() call in Heap::heapAllocate() that is conditionally |
| compiled under COLLECT_ON_EVERY_ALLOCATION so that it is before we get |
| information about the heap. This was causing assertion failures for me |
| while I was reducing a bug. |
| |
| * runtime/Collector.cpp: |
| (JSC::Heap::heapAllocate): |
| |
| 2008-11-24 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Bug 13790: Function declarations are not treated as statements (used to affect starcraft2.com) |
| <https://bugs.webkit.org/show_bug.cgi?id=13790> |
| |
| Modify the parser to treat function declarations as statements, |
| simplifying the grammar in the process. Technically, according to the |
| grammar in the ECMA spec, function declarations are not statements and |
| can not be used everywhere that statements can, but it is not worth the |
| possibility compatibility issues just to stick to the spec in this case. |
| |
| * parser/Grammar.y: |
| * parser/Nodes.cpp: |
| (JSC::FuncDeclNode::emitBytecode): Avoid returning ignoredResult() |
| as a result, because it causes a crash in DoWhileNode::emitBytecode(). |
| |
| 2008-11-24 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Unroll the regexp matching loop by 1. 10% speedup on simple matching |
| stress test. No change on SunSpider. |
| |
| (I decided not to unroll to arbitrary levels because the returns diminsh |
| quickly.) |
| |
| * wrec/WREC.cpp: |
| (JSC::WREC::compileRegExp): |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateJumpIfEndOfInput): |
| (JSC::WREC::Generator::generateJumpIfNotEndOfInput): |
| * wrec/WRECGenerator.h: |
| * wrec/WRECParser.h: |
| (JSC::WREC::Parser::error): |
| (JSC::WREC::Parser::parsePattern): |
| |
| 2008-11-24 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Removed some unnecessary "Generator::" prefixes. |
| |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateEnter): |
| (JSC::WREC::Generator::generateReturnSuccess): |
| (JSC::WREC::Generator::generateSaveIndex): |
| (JSC::WREC::Generator::generateIncrementIndex): |
| (JSC::WREC::Generator::generateLoopIfNotEndOfInput): |
| (JSC::WREC::Generator::generateReturnFailure): |
| |
| 2008-11-24 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Made a bunch of WREC::Parser functions private, and added an explicit |
| "reset()" function, so a parser can be reused. |
| |
| * wrec/WRECParser.h: |
| (JSC::WREC::Parser::Parser): |
| (JSC::WREC::Parser::generator): |
| (JSC::WREC::Parser::ignoreCase): |
| (JSC::WREC::Parser::multiline): |
| (JSC::WREC::Parser::recordSubpattern): |
| (JSC::WREC::Parser::numSubpatterns): |
| (JSC::WREC::Parser::parsePattern): |
| (JSC::WREC::Parser::parseAlternative): |
| (JSC::WREC::Parser::reset): |
| |
| 2008-11-24 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Implement repatching for get by id chain. |
| Previously the access is performed in a function stub, in the repatch form |
| the trampoline is not called to; instead the hot path is relinked to jump |
| directly to the trampoline, if it fails it will jump to the slow case. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22449 |
| 3% progression on deltablue. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdChain): |
| |
| 2008-11-24 Joerg Bornemann <joerg.bornemann@trolltech.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=20746 |
| |
| Various small compilation fixes to make the Qt port of WebKit |
| compile on Windows CE. |
| |
| * config.h: Don't set _CRT_RAND_S for CE, it's not available. |
| * jsc.cpp: Disabled use of debugger includes for CE. It |
| does not have the debugging functions. |
| * runtime/DateMath.cpp: Use localtime() on Windows CE. |
| * wtf/Assertions.cpp: Compile on Windows CE without debugger. |
| * wtf/Assertions.h: Include windows.h before defining ASSERT. |
| * wtf/MathExtras.h: Include stdlib.h instead of xmath.h. |
| * wtf/Platform.h: Disable ERRNO_H and detect endianess based |
| on the Qt endianess. On Qt for Windows CE the endianess is |
| defined by the vendor specific build spec. |
| * wtf/Threading.h: Use the volatile-less atomic functions. |
| * wtf/dtoa.cpp: Compile without errno. |
| * wtf/win/MainThreadWin.cpp: Don't include windows.h on CE after |
| Assertions.h due to the redefinition of ASSERT. |
| |
| 2008-11-22 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Replace accidentally deleted immediate check from get by id chain trampoline. |
| https://bugs.webkit.org/show_bug.cgi?id=22413 |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileGetByIdChain): |
| |
| 2008-11-21 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Add (really) polymorphic caching for get by id self. |
| Very similar to caching of prototype accesses, described below. |
| |
| Oh, also, probably shouldn't have been leaking those structure list objects. |
| |
| 4% preogression on deltablue. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dump): |
| (JSC::CodeBlock::derefStructures): |
| (JSC::PrototypeStructureList::derefStructures): |
| * bytecode/Instruction.h: |
| * bytecode/Opcode.h: |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::cti_op_get_by_id_self_fail): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileGetByIdSelfList): |
| (JSC::JIT::patchGetByIdSelf): |
| * jit/JIT.h: |
| (JSC::JIT::compileGetByIdSelfList): |
| |
| 2008-11-21 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixed many crashes seen 'round the world (but only in release builds). |
| |
| Update outputParameter offset to reflect slight re-ordering of push |
| instructions in r38669. |
| |
| * wrec/WRECGenerator.cpp: |
| |
| 2008-11-21 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| A little more RegExp refactoring. |
| |
| Deployed a helper function for reading the next character. Used the "link |
| vector of jumps" helper in a place I missed before. |
| |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateLoadCharacter): |
| (JSC::WREC::Generator::generatePatternCharacter): |
| (JSC::WREC::Generator::generateCharacterClass): |
| (JSC::WREC::Generator::generateAssertionEOL): |
| (JSC::WREC::Generator::generateAssertionWordBoundary): |
| * wrec/WRECGenerator.h: |
| |
| 2008-11-21 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reviewed by Dan Bernstein. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22402 |
| Replace abort() with CRASH() |
| |
| * wtf/Assertions.h: Added a different method to crash, which should work even is 0xbbadbeef |
| is a valid memory address. |
| |
| * runtime/Collector.cpp: |
| * wtf/FastMalloc.cpp: |
| * wtf/FastMalloc.h: |
| * wtf/TCSpinLock.h: |
| Replace abort() with CRASH(). |
| |
| 2008-11-21 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reverted fix for bug 22042 (Replace abort() with CRASH()), because it was breaking |
| FOR_EACH_OPCODE_ID macro somehow, making Safari crash. |
| |
| * runtime/Collector.cpp: |
| (JSC::Heap::heapAllocate): |
| (JSC::Heap::collect): |
| * wtf/Assertions.h: |
| * wtf/FastMalloc.cpp: |
| (WTF::fastMalloc): |
| (WTF::fastCalloc): |
| (WTF::fastRealloc): |
| (WTF::InitSizeClasses): |
| (WTF::PageHeapAllocator::New): |
| (WTF::TCMallocStats::do_malloc): |
| * wtf/FastMalloc.h: |
| * wtf/TCSpinLock.h: |
| (TCMalloc_SpinLock::Init): |
| (TCMalloc_SpinLock::Finalize): |
| (TCMalloc_SpinLock::Lock): |
| (TCMalloc_SpinLock::Unlock): |
| |
| 2008-11-21 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| A little more RegExp refactoring. |
| |
| Moved all assembly from WREC.cpp into WRECGenerator helper functions. |
| This should help with portability and readability. |
| |
| Removed ASSERTs after calls to executableCopy(), and changed |
| executableCopy() to ASSERT instead. |
| |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::executableCopy): |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileGetByIdSelf): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdChain): |
| (JSC::JIT::privateCompilePutByIdReplace): |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| * wrec/WREC.cpp: |
| (JSC::WREC::compileRegExp): |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateEnter): |
| (JSC::WREC::Generator::generateReturnSuccess): |
| (JSC::WREC::Generator::generateSaveIndex): |
| (JSC::WREC::Generator::generateIncrementIndex): |
| (JSC::WREC::Generator::generateLoopIfNotEndOfInput): |
| (JSC::WREC::Generator::generateReturnFailure): |
| * wrec/WRECGenerator.h: |
| * wrec/WRECParser.h: |
| (JSC::WREC::Parser::ignoreCase): |
| (JSC::WREC::Parser::generator): |
| |
| 2008-11-21 Alexey Proskuryakov <ap@webkit.org> |
| |
| Build fix. |
| |
| * wtf/Assertions.h: Use ::abort for C++ code. |
| |
| 2008-11-21 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reviewed by Sam Weinig. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22402 |
| Replace abort() with CRASH() |
| |
| * wtf/Assertions.h: Added abort() after an attempt to crash for extra safety. |
| |
| * runtime/Collector.cpp: |
| * wtf/FastMalloc.cpp: |
| * wtf/FastMalloc.h: |
| * wtf/TCSpinLock.h: |
| Replace abort() with CRASH(). |
| |
| 2008-11-21 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Renamed wrec => generator. |
| |
| * wrec/WRECFunctors.cpp: |
| (JSC::WREC::GeneratePatternCharacterFunctor::generateAtom): |
| (JSC::WREC::GeneratePatternCharacterFunctor::backtrack): |
| (JSC::WREC::GenerateCharacterClassFunctor::generateAtom): |
| (JSC::WREC::GenerateCharacterClassFunctor::backtrack): |
| (JSC::WREC::GenerateBackreferenceFunctor::generateAtom): |
| (JSC::WREC::GenerateBackreferenceFunctor::backtrack): |
| (JSC::WREC::GenerateParenthesesNonGreedyFunctor::generateAtom): |
| |
| 2008-11-19 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Add support for (really) polymorphic caching of prototype accesses. |
| |
| If a cached prototype access misses, cti_op_get_by_id_proto_list is called. |
| When this occurs the Structure pointers from the instruction stream are copied |
| off into a new ProtoStubInfo object. A second prototype access trampoline is |
| generated, and chained onto the first. Subsequent missed call to |
| cti_op_get_by_id_proto_list_append, which append futher new trampolines, up to |
| PROTOTYPE_LIST_CACHE_SIZE (currently 4). If any of the misses result in an |
| access other than to a direct prototype property, list formation is halted (or |
| for the initial miss, does not take place at all). |
| |
| Separate fail case functions are provided for each access since this contributes |
| to the performance progression (enables better processor branch prediction). |
| |
| Overall this is a near 5% progression on v8, with around 10% wins on richards |
| and deltablue. |
| |
| * bytecode/CodeBlock.cpp: |
| (JSC::CodeBlock::dump): |
| (JSC::CodeBlock::derefStructures): |
| * bytecode/Instruction.h: |
| (JSC::ProtoStructureList::ProtoStubInfo::set): |
| (JSC::ProtoStructureList::ProtoStructureList): |
| (JSC::Instruction::Instruction): |
| (JSC::Instruction::): |
| * bytecode/Opcode.h: |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::tryCTICacheGetByID): |
| (JSC::Interpreter::cti_op_put_by_id_fail): |
| (JSC::Interpreter::cti_op_get_by_id_self_fail): |
| (JSC::Interpreter::cti_op_get_by_id_proto_list): |
| (JSC::Interpreter::cti_op_get_by_id_proto_list_append): |
| (JSC::Interpreter::cti_op_get_by_id_proto_list_full): |
| (JSC::Interpreter::cti_op_get_by_id_proto_fail): |
| (JSC::Interpreter::cti_op_get_by_id_chain_fail): |
| (JSC::Interpreter::cti_op_get_by_id_array_fail): |
| (JSC::Interpreter::cti_op_get_by_id_string_fail): |
| * interpreter/Interpreter.h: |
| * jit/JIT.cpp: |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileGetByIdSelf): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdProtoList): |
| (JSC::JIT::privateCompileGetByIdChain): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| * jit/JIT.h: |
| (JSC::JIT::compileGetByIdProtoList): |
| |
| 2008-11-20 Sam Weinig <sam@webkit.org> |
| |
| Try and fix the tiger build. |
| |
| * parser/Grammar.y: |
| |
| 2008-11-20 Eric Seidel <eric@webkit.org> |
| |
| Reviewed by Darin Adler. |
| |
| Make JavaScriptCore Chromium build under Windows (cmd only, cygwin almost works) |
| https://bugs.webkit.org/show_bug.cgi?id=22347 |
| |
| * JavaScriptCore.scons: |
| * parser/Parser.cpp: Add using std::auto_ptr since we use auto_ptr |
| |
| 2008-11-20 Steve Falkenburg <sfalken@apple.com> |
| |
| Fix build. |
| |
| Reviewed by Sam Weinig. |
| |
| * parser/Parser.cpp: |
| (JSC::Parser::reparse): |
| |
| 2008-11-20 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| A little more RegExp refactoring. |
| |
| Created a helper function in the assembler for linking a vector of |
| JmpSrc to a location, and deployed it in a bunch of places. |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::link): |
| * wrec/WREC.cpp: |
| (JSC::WREC::compileRegExp): |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateNonGreedyQuantifier): |
| (JSC::WREC::Generator::generateGreedyQuantifier): |
| (JSC::WREC::Generator::generateCharacterClassInverted): |
| (JSC::WREC::Generator::generateParentheses): |
| (JSC::WREC::Generator::generateParenthesesResetTrampoline): |
| (JSC::WREC::Generator::generateAssertionBOL): |
| (JSC::WREC::Generator::generateAssertionEOL): |
| (JSC::WREC::Generator::generateAssertionWordBoundary): |
| (JSC::WREC::Generator::terminateAlternative): |
| (JSC::WREC::Generator::terminateDisjunction): |
| * wrec/WRECParser.cpp: |
| * wrec/WRECParser.h: |
| (JSC::WREC::Parser::consumeHex): |
| |
| 2008-11-20 Sam Weinig <sam@webkit.org> |
| |
| Fix non-mac builds. |
| |
| * parser/Lexer.cpp: |
| * parser/Parser.cpp: |
| |
| 2008-11-20 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Darin Adler. |
| |
| Patch for https://bugs.webkit.org/show_bug.cgi?id=22385 |
| <rdar://problem/6390179> |
| Lazily reparse FunctionBodyNodes on first execution. |
| |
| - Saves 57MB on Membuster head. |
| |
| * bytecompiler/BytecodeGenerator.cpp: |
| (JSC::BytecodeGenerator::generate): Remove vector shrinking since this is now |
| handled by destroying the ScopeNodeData after generation. |
| |
| * parser/Grammar.y: Add alternate NoNode version of the grammar |
| that does not create nodes. This is used to lazily create FunctionBodyNodes |
| on first execution. |
| |
| * parser/Lexer.cpp: |
| (JSC::Lexer::setCode): Fix bug where on reparse, the Lexer was confused about |
| what position and length meant. Position is the current position in the original |
| data buffer (important for getting correct line/column information) and length |
| the end offset in the original buffer. |
| * parser/Lexer.h: |
| (JSC::Lexer::sourceCode): Positions are relative to the beginning of the buffer. |
| |
| * parser/Nodes.cpp: |
| (JSC::ScopeNodeData::ScopeNodeData): Move initialization of ScopeNode data here. |
| (JSC::ScopeNode::ScopeNode): Add constructor that only sets the JSGlobalData |
| for FunctionBodyNode stubs. |
| (JSC::ScopeNode::~ScopeNode): Release m_children now that we don't inherit from |
| BlockNode. |
| (JSC::ScopeNode::releaseNodes): Ditto. |
| (JSC::EvalNode::generateBytecode): Only shrink m_children, as we need to keep around |
| the rest of the data. |
| (JSC::FunctionBodyNode::FunctionBodyNode): Add constructor that only sets the |
| JSGlobalData. |
| (JSC::FunctionBodyNode::create): Ditto. |
| (JSC::FunctionBodyNode::generateBytecode): If we don't have the data, do a reparse |
| to construct it. Then after generation, destroy the data. |
| (JSC::ProgramNode::generateBytecode): After generation, destroy the AST data. |
| * parser/Nodes.h: |
| (JSC::ExpressionNode::): Add isFuncExprNode for FunctionConstructor. |
| (JSC::StatementNode::): Add isExprStatementNode for FunctionConstructor. |
| (JSC::ExprStatementNode::): Ditto. |
| (JSC::ExprStatementNode::expr): Add accessor for FunctionConstructor. |
| (JSC::FuncExprNode::): Add isFuncExprNode for FunctionConstructor |
| |
| (JSC::ScopeNode::adoptData): Adopts a ScopeNodeData. |
| (JSC::ScopeNode::data): Accessor for ScopeNodeData. |
| (JSC::ScopeNode::destroyData): Deletes the ScopeNodeData. |
| (JSC::ScopeNode::setFeatures): Added. |
| (JSC::ScopeNode::varStack): Added assert. |
| (JSC::ScopeNode::functionStack): Ditto. |
| (JSC::ScopeNode::children): Ditto. |
| (JSC::ScopeNode::neededConstants): Ditto. |
| Factor m_varStack, m_functionStack, m_children and m_numConstants into ScopeNodeData. |
| |
| * parser/Parser.cpp: |
| (JSC::Parser::reparse): Reparse the SourceCode in the FunctionBodyNode and set |
| set up the ScopeNodeData for it. |
| * parser/Parser.h: |
| |
| * parser/SourceCode.h: |
| (JSC::SourceCode::endOffset): Added for use in the lexer. |
| |
| * runtime/FunctionConstructor.cpp: |
| (JSC::getFunctionBody): Assuming a ProgramNode with one FunctionExpression in it, |
| get the FunctionBodyNode. Any issues signifies a parse failure in constructFunction. |
| (JSC::constructFunction): Make parsing functions in the form new Function(""), easier |
| by concatenating the strings together (with some glue) and parsing the function expression |
| as a ProgramNode from which we can receive the FunctionBodyNode. This has the added benefit |
| of not having special parsing code for the arguments and lazily constructing the |
| FunctionBodyNode's AST on first execution. |
| |
| * runtime/Identifier.h: |
| (JSC::operator!=): Added. |
| |
| 2008-11-20 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Speedup the lexer to offset coming re-parsing patch. |
| |
| - .6% progression on Sunspider. |
| |
| * bytecompiler/SegmentedVector.h: |
| (JSC::SegmentedVector::shrink): Fixed bug where m_size would not be |
| set when shrinking to 0. |
| |
| * parser/Lexer.cpp: |
| (JSC::Lexer::Lexer): |
| (JSC::Lexer::isIdentStart): Use isASCIIAlpha and isASCII to avoid going into ICU in the common cases. |
| (JSC::Lexer::isIdentPart): Use isASCIIAlphanumeric and isASCII to avoid going into ICU in the common cases |
| (JSC::isDecimalDigit): Use version in ASCIICType.h. Inlining it was a regression. |
| (JSC::Lexer::isHexDigit): Ditto. |
| (JSC::Lexer::isOctalDigit): Ditto. |
| (JSC::Lexer::clear): Resize the m_identifiers SegmentedVector to initial |
| capacity |
| * parser/Lexer.h: Remove unused m_strings vector. Make m_identifiers |
| a SegmentedVector<Identifier> to avoid allocating a new Identifier* for |
| each identifier found. The SegmentedVector is need so we can passes |
| references to the Identifier to the parser, which remain valid even when |
| the vector is resized. |
| (JSC::Lexer::makeIdentifier): Inline and return a reference to the added |
| Identifier. |
| |
| 2008-11-20 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Darin Adler. |
| |
| Add isASCII to ASCIICType. Use coming soon! |
| |
| * wtf/ASCIICType.h: |
| (WTF::isASCII): |
| |
| 2008-11-20 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Darin Adler. |
| |
| Add OwnPtr constructor and OwnPtr::adopt that take an auto_ptr. |
| |
| * wtf/OwnPtr.h: |
| (WTF::OwnPtr::OwnPtr): |
| (WTF::OwnPtr::adopt): |
| |
| 2008-11-20 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22364 |
| Crashes seen on Tiger buildbots due to worker threads exhausting pthread keys |
| |
| * runtime/Collector.cpp: |
| (JSC::Heap::Heap): |
| (JSC::Heap::destroy): |
| (JSC::Heap::makeUsableFromMultipleThreads): |
| (JSC::Heap::registerThread): |
| * runtime/Collector.h: |
| Pthread key for tracking threads is only created on request now, because this is a limited |
| resource, and thread tracking is not needed for worker heaps, or for WebCore heap. |
| |
| * API/JSContextRef.cpp: (JSGlobalContextCreateInGroup): Call makeUsableFromMultipleThreads(). |
| |
| * runtime/JSGlobalData.cpp: (JSC::JSGlobalData::sharedInstance): Ditto. |
| |
| * runtime/JSGlobalData.h: (JSC::JSGlobalData::makeUsableFromMultipleThreads): Just forward |
| the call to Heap, which clients need not know about, ideally. |
| |
| 2008-11-20 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| A little more WREC refactoring. |
| |
| Removed the "Register" suffix from register names in WREC, and renamed: |
| currentPosition => index |
| currentValue => character |
| quantifierCount => repeatCount |
| |
| Added a top-level parsePattern function to the WREC parser, which |
| allowed me to remove the error() and atEndOfPattern() accessors. |
| |
| Factored out an MSVC customization into a constant. |
| |
| Renamed nextLabel => beginPattern. |
| |
| * wrec/WREC.cpp: |
| (JSC::WREC::compileRegExp): |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateBacktrack1): |
| (JSC::WREC::Generator::generateBacktrackBackreference): |
| (JSC::WREC::Generator::generateBackreferenceQuantifier): |
| (JSC::WREC::Generator::generateNonGreedyQuantifier): |
| (JSC::WREC::Generator::generateGreedyQuantifier): |
| (JSC::WREC::Generator::generatePatternCharacter): |
| (JSC::WREC::Generator::generateCharacterClassInvertedRange): |
| (JSC::WREC::Generator::generateCharacterClassInverted): |
| (JSC::WREC::Generator::generateCharacterClass): |
| (JSC::WREC::Generator::generateParentheses): |
| (JSC::WREC::Generator::generateParenthesesResetTrampoline): |
| (JSC::WREC::Generator::generateAssertionBOL): |
| (JSC::WREC::Generator::generateAssertionEOL): |
| (JSC::WREC::Generator::generateAssertionWordBoundary): |
| (JSC::WREC::Generator::generateBackreference): |
| (JSC::WREC::Generator::generateDisjunction): |
| (JSC::WREC::Generator::terminateDisjunction): |
| * wrec/WRECGenerator.h: |
| * wrec/WRECParser.h: |
| (JSC::WREC::Parser::parsePattern): |
| |
| 2008-11-19 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22361 |
| A little more RegExp refactoring. |
| |
| Consistently named variables holding the starting position at which |
| regexp matching should begin to "startOffset". |
| |
| A few more "regExpObject" => "regExpConstructor" changes. |
| |
| Refactored RegExpObject::match for clarity, and replaced a slow "get" |
| of the "global" property with a fast access to the global bit. |
| |
| Made the error message you see when RegExpObject::match has no input a |
| little more informative, as in Firefox. |
| |
| * runtime/RegExp.cpp: |
| (JSC::RegExp::match): |
| * runtime/RegExp.h: |
| * runtime/RegExpObject.cpp: |
| (JSC::RegExpObject::match): |
| * runtime/StringPrototype.cpp: |
| (JSC::stringProtoFuncReplace): |
| (JSC::stringProtoFuncMatch): |
| (JSC::stringProtoFuncSearch): |
| |
| 2008-11-19 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| A little more refactoring. |
| |
| Removed the "emit" and "emitUnlinked" prefixes from the assembler. |
| |
| Moved the JmpSrc and JmpDst class definitions to the top of the X86 |
| assembler class, in accordance with WebKit style guidelines. |
| |
| * assembler/X86Assembler.h: |
| (JSC::X86Assembler::JmpSrc::JmpSrc): |
| (JSC::X86Assembler::JmpDst::JmpDst): |
| (JSC::X86Assembler::int3): |
| (JSC::X86Assembler::pushl_m): |
| (JSC::X86Assembler::popl_m): |
| (JSC::X86Assembler::movl_rr): |
| (JSC::X86Assembler::addl_rr): |
| (JSC::X86Assembler::addl_i8r): |
| (JSC::X86Assembler::addl_i8m): |
| (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_mr): |
| (JSC::X86Assembler::cmpl_i32r): |
| (JSC::X86Assembler::cmpl_i32m): |
| (JSC::X86Assembler::cmpl_i8m): |
| (JSC::X86Assembler::cmpw_rm): |
| (JSC::X86Assembler::orl_rr): |
| (JSC::X86Assembler::orl_mr): |
| (JSC::X86Assembler::orl_i32r): |
| (JSC::X86Assembler::subl_rr): |
| (JSC::X86Assembler::subl_i8r): |
| (JSC::X86Assembler::subl_i8m): |
| (JSC::X86Assembler::subl_i32r): |
| (JSC::X86Assembler::subl_mr): |
| (JSC::X86Assembler::testl_i32r): |
| (JSC::X86Assembler::testl_i32m): |
| (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::imull_rr): |
| (JSC::X86Assembler::imull_i32r): |
| (JSC::X86Assembler::idivl_r): |
| (JSC::X86Assembler::negl_r): |
| (JSC::X86Assembler::movl_mr): |
| (JSC::X86Assembler::movzbl_rr): |
| (JSC::X86Assembler::movzwl_mr): |
| (JSC::X86Assembler::movl_rm): |
| (JSC::X86Assembler::movl_i32r): |
| (JSC::X86Assembler::movl_i32m): |
| (JSC::X86Assembler::leal_mr): |
| (JSC::X86Assembler::jmp_r): |
| (JSC::X86Assembler::jmp_m): |
| (JSC::X86Assembler::movsd_mr): |
| (JSC::X86Assembler::xorpd_mr): |
| (JSC::X86Assembler::movsd_rm): |
| (JSC::X86Assembler::movd_rr): |
| (JSC::X86Assembler::cvtsi2sd_rr): |
| (JSC::X86Assembler::cvttsd2si_rr): |
| (JSC::X86Assembler::addsd_mr): |
| (JSC::X86Assembler::subsd_mr): |
| (JSC::X86Assembler::mulsd_mr): |
| (JSC::X86Assembler::addsd_rr): |
| (JSC::X86Assembler::subsd_rr): |
| (JSC::X86Assembler::mulsd_rr): |
| (JSC::X86Assembler::ucomis_rr): |
| (JSC::X86Assembler::pextrw_irr): |
| (JSC::X86Assembler::call): |
| (JSC::X86Assembler::jmp): |
| (JSC::X86Assembler::jne): |
| (JSC::X86Assembler::jnz): |
| (JSC::X86Assembler::je): |
| (JSC::X86Assembler::jl): |
| (JSC::X86Assembler::jb): |
| (JSC::X86Assembler::jle): |
| (JSC::X86Assembler::jbe): |
| (JSC::X86Assembler::jge): |
| (JSC::X86Assembler::jg): |
| (JSC::X86Assembler::ja): |
| (JSC::X86Assembler::jae): |
| (JSC::X86Assembler::jo): |
| (JSC::X86Assembler::jp): |
| (JSC::X86Assembler::js): |
| (JSC::X86Assembler::predictNotTaken): |
| (JSC::X86Assembler::convertToFastCall): |
| (JSC::X86Assembler::restoreArgumentReference): |
| (JSC::X86Assembler::restoreArgumentReferenceForTrampoline): |
| (JSC::X86Assembler::modRm_rr): |
| (JSC::X86Assembler::modRm_rr_Unchecked): |
| (JSC::X86Assembler::modRm_rm): |
| (JSC::X86Assembler::modRm_rm_Unchecked): |
| (JSC::X86Assembler::modRm_rmsib): |
| (JSC::X86Assembler::modRm_opr): |
| (JSC::X86Assembler::modRm_opr_Unchecked): |
| (JSC::X86Assembler::modRm_opm): |
| (JSC::X86Assembler::modRm_opm_Unchecked): |
| (JSC::X86Assembler::modRm_opmsib): |
| * jit/JIT.cpp: |
| (JSC::JIT::emitNakedCall): |
| (JSC::JIT::emitNakedFastCall): |
| (JSC::JIT::emitCTICall): |
| (JSC::JIT::emitJumpSlowCaseIfNotJSCell): |
| (JSC::JIT::emitJumpSlowCaseIfNotImmNum): |
| (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): |
| (JSC::JIT::emitFastArithIntToImmOrSlowCase): |
| (JSC::JIT::emitArithIntToImmWithJump): |
| (JSC::JIT::compileOpCall): |
| (JSC::JIT::compileOpStrictEq): |
| (JSC::JIT::emitSlowScriptCheck): |
| (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): |
| (JSC::JIT::compileBinaryArithOp): |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileSlowCases): |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileGetByIdSelf): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdChain): |
| (JSC::JIT::privateCompilePutByIdReplace): |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| * wrec/WREC.cpp: |
| (JSC::WREC::compileRegExp): |
| * wrec/WRECGenerator.cpp: |
| (JSC::WREC::Generator::generateBackreferenceQuantifier): |
| (JSC::WREC::Generator::generateNonGreedyQuantifier): |
| (JSC::WREC::Generator::generateGreedyQuantifier): |
| (JSC::WREC::Generator::generatePatternCharacter): |
| (JSC::WREC::Generator::generateCharacterClassInvertedRange): |
| (JSC::WREC::Generator::generateCharacterClassInverted): |
| (JSC::WREC::Generator::generateCharacterClass): |
| (JSC::WREC::Generator::generateParentheses): |
| (JSC::WREC::Generator::generateParenthesesNonGreedy): |
| (JSC::WREC::Generator::generateParenthesesResetTrampoline): |
| (JSC::WREC::Generator::generateAssertionBOL): |
| (JSC::WREC::Generator::generateAssertionEOL): |
| (JSC::WREC::Generator::generateAssertionWordBoundary): |
| (JSC::WREC::Generator::generateBackreference): |
| (JSC::WREC::Generator::generateDisjunction): |
| |
| 2008-11-19 Simon Hausmann <hausmann@webkit.org> |
| |
| Sun CC build fix, removed trailing comman for last enum value. |
| |
| * wtf/unicode/qt4/UnicodeQt4.h: |
| (WTF::Unicode::): |
| |
| 2008-11-19 Mark Rowe <mrowe@apple.com> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| Expand the workaround for Apple GCC compiler bug <rdar://problem/6354696> to all versions of GCC 4.0.1. |
| It has been observed with builds 5465 (Xcode 3.0) and 5484 (Xcode 3.1), and there is no evidence |
| that it has been fixed in newer builds of GCC 4.0.1. |
| |
| This addresses <https://bugs.webkit.org/show_bug.cgi?id=22351> (WebKit nightly crashes on launch on 10.4.11). |
| |
| * wtf/StdLibExtras.h: |
| |
| 2008-11-18 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Maciej Stachowiak and Geoff Garen. |
| |
| Bug 22287: ASSERTION FAILED: Not enough jumps linked in slow case codegen in CTI::privateCompileSlowCases()) |
| <https://bugs.webkit.org/show_bug.cgi?id=22287> |
| |
| Fix a typo in the number cell reuse code where the first and second |
| operands are sometimes confused. |
| |
| * jit/JIT.cpp: |
| (JSC::JIT::compileBinaryArithOpSlowCase): |
| |
| 2008-11-18 Dan Bernstein <mitz@apple.com> |
| |
| - try to fix the Windows build |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| |
| 2008-11-18 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Minor RegExp cleanup. |
| |
| SunSpider says no change. |
| |
| * runtime/RegExpObject.cpp: |
| (JSC::RegExpObject::match): Renamed "regExpObj" to "regExpConstructor". |
| |
| * wrec/WREC.cpp: |
| (JSC::WREC::compileRegExp): Instead of checking for a NULL output vector, |
| ASSERT that the output vector is not NULL. (The rest of WREC is not |
| safe to use with a NULL output vector, and we probably don't want to |
| spend the time and/or performance to make it safe.) |
| |
| 2008-11-18 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| A little more renaming and refactoring. |
| |
| VM_CHECK_EXCEPTION() => CHECK_FOR_EXCEPTION(). |
| NEXT_INSTRUCTION => NEXT_INSTRUCTION(). |
| |
| Removed the "Error_" and "TempError_" prefixes from WREC error types. |
| |
| Refactored the WREC parser so it doesn't need a "setError" function, |
| and changed "isEndOfPattern" and its use -- they read kind of backwards |
| before. |
| |
| Changed our "TODO:" error messages at least to say something, since you |
| can't say "TODO:" in shipping software. |
| |
| * interpreter/Interpreter.cpp: |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::cti_op_convert_this): |
| (JSC::Interpreter::cti_op_add): |
| (JSC::Interpreter::cti_op_pre_inc): |
| (JSC::Interpreter::cti_op_loop_if_less): |
| (JSC::Interpreter::cti_op_loop_if_lesseq): |
| (JSC::Interpreter::cti_op_put_by_id): |
| (JSC::Interpreter::cti_op_put_by_id_second): |
| (JSC::Interpreter::cti_op_put_by_id_generic): |
| (JSC::Interpreter::cti_op_put_by_id_fail): |
| (JSC::Interpreter::cti_op_get_by_id): |
| (JSC::Interpreter::cti_op_get_by_id_second): |
| (JSC::Interpreter::cti_op_get_by_id_generic): |
| (JSC::Interpreter::cti_op_get_by_id_fail): |
| (JSC::Interpreter::cti_op_instanceof): |
| (JSC::Interpreter::cti_op_del_by_id): |
| (JSC::Interpreter::cti_op_mul): |
| (JSC::Interpreter::cti_op_call_NotJSFunction): |
| (JSC::Interpreter::cti_op_resolve): |
| (JSC::Interpreter::cti_op_construct_NotJSConstruct): |
| (JSC::Interpreter::cti_op_get_by_val): |
| (JSC::Interpreter::cti_op_resolve_func): |
| (JSC::Interpreter::cti_op_sub): |
| (JSC::Interpreter::cti_op_put_by_val): |
| (JSC::Interpreter::cti_op_put_by_val_array): |
| (JSC::Interpreter::cti_op_lesseq): |
| (JSC::Interpreter::cti_op_loop_if_true): |
| (JSC::Interpreter::cti_op_negate): |
| (JSC::Interpreter::cti_op_resolve_skip): |
| (JSC::Interpreter::cti_op_resolve_global): |
| (JSC::Interpreter::cti_op_div): |
| (JSC::Interpreter::cti_op_pre_dec): |
| (JSC::Interpreter::cti_op_jless): |
| (JSC::Interpreter::cti_op_not): |
| (JSC::Interpreter::cti_op_jtrue): |
| (JSC::Interpreter::cti_op_post_inc): |
| (JSC::Interpreter::cti_op_eq): |
| (JSC::Interpreter::cti_op_lshift): |
| (JSC::Interpreter::cti_op_bitand): |
| (JSC::Interpreter::cti_op_rshift): |
| (JSC::Interpreter::cti_op_bitnot): |
| (JSC::Interpreter::cti_op_resolve_with_base): |
| (JSC::Interpreter::cti_op_mod): |
| (JSC::Interpreter::cti_op_less): |
| (JSC::Interpreter::cti_op_neq): |
| (JSC::Interpreter::cti_op_post_dec): |
| (JSC::Interpreter::cti_op_urshift): |
| (JSC::Interpreter::cti_op_bitxor): |
| (JSC::Interpreter::cti_op_bitor): |
| (JSC::Interpreter::cti_op_push_scope): |
| (JSC::Interpreter::cti_op_to_jsnumber): |
| (JSC::Interpreter::cti_op_in): |
| (JSC::Interpreter::cti_op_del_by_val): |
| * wrec/WREC.cpp: |
| (JSC::WREC::compileRegExp): |
| * wrec/WRECParser.cpp: |
| (JSC::WREC::Parser::parseGreedyQuantifier): |
| (JSC::WREC::Parser::parseParentheses): |
| (JSC::WREC::Parser::parseCharacterClass): |
| (JSC::WREC::Parser::parseEscape): |
| * wrec/WRECParser.h: |
| (JSC::WREC::Parser::): |
| (JSC::WREC::Parser::atEndOfPattern): |
| |
| 2008-11-18 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22337 |
| Enable workers by default |
| |
| * Configurations/JavaScriptCore.xcconfig: Define ENABLE_WORKERS. |
| |
| 2008-11-18 Alexey Proskuryakov <ap@webkit.org> |
| |
| - Windows build fix |
| |
| * wrec/WRECFunctors.h: |
| * wrec/WRECGenerator.h: |
| * wrec/WRECParser.h: |
| CharacterClass is a struct, not a class, fix forward declarations. |
| |
| 2008-11-18 Dan Bernstein <mitz@apple.com> |
| |
| - Windows build fix |
| |
| * assembler/X86Assembler.h: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix gtk build. |
| |
| * wrec/Quantifier.h: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix gtk build. |
| |
| * assembler/AssemblerBuffer.h: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Split WREC classes out into individual files, with a few modifications |
| to more closely match the WebKit coding style. |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.scons: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * assembler/X86Assembler.h: |
| * runtime/RegExp.cpp: |
| * wrec/CharacterClass.cpp: Copied from wrec/CharacterClassConstructor.cpp. |
| (JSC::WREC::CharacterClass::newline): |
| (JSC::WREC::CharacterClass::digits): |
| (JSC::WREC::CharacterClass::spaces): |
| (JSC::WREC::CharacterClass::wordchar): |
| (JSC::WREC::CharacterClass::nondigits): |
| (JSC::WREC::CharacterClass::nonspaces): |
| (JSC::WREC::CharacterClass::nonwordchar): |
| * wrec/CharacterClass.h: Copied from wrec/CharacterClassConstructor.h. |
| * wrec/CharacterClassConstructor.cpp: |
| (JSC::WREC::CharacterClassConstructor::addSortedRange): |
| (JSC::WREC::CharacterClassConstructor::append): |
| * wrec/CharacterClassConstructor.h: |
| * wrec/Quantifier.h: Copied from wrec/WREC.h. |
| * wrec/WREC.cpp: |
| (JSC::WREC::compileRegExp): |
| * wrec/WREC.h: |
| * wrec/WRECFunctors.cpp: Copied from wrec/WREC.cpp. |
| * wrec/WRECFunctors.h: Copied from wrec/WREC.cpp. |
| (JSC::WREC::GenerateAtomFunctor::~GenerateAtomFunctor): |
| (JSC::WREC::GeneratePatternCharacterFunctor::GeneratePatternCharacterFunctor): |
| (JSC::WREC::GenerateCharacterClassFunctor::GenerateCharacterClassFunctor): |
| (JSC::WREC::GenerateBackreferenceFunctor::GenerateBackreferenceFunctor): |
| (JSC::WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor): |
| * wrec/WRECGenerator.cpp: Copied from wrec/WREC.cpp. |
| (JSC::WREC::Generator::generatePatternCharacter): |
| (JSC::WREC::Generator::generateCharacterClassInvertedRange): |
| (JSC::WREC::Generator::generateCharacterClassInverted): |
| (JSC::WREC::Generator::generateCharacterClass): |
| (JSC::WREC::Generator::generateParentheses): |
| (JSC::WREC::Generator::generateAssertionBOL): |
| (JSC::WREC::Generator::generateAssertionEOL): |
| (JSC::WREC::Generator::generateAssertionWordBoundary): |
| * wrec/WRECGenerator.h: Copied from wrec/WREC.h. |
| * wrec/WRECParser.cpp: Copied from wrec/WREC.cpp. |
| (JSC::WREC::Parser::parseGreedyQuantifier): |
| (JSC::WREC::Parser::parseCharacterClassQuantifier): |
| (JSC::WREC::Parser::parseParentheses): |
| (JSC::WREC::Parser::parseCharacterClass): |
| (JSC::WREC::Parser::parseEscape): |
| (JSC::WREC::Parser::parseTerm): |
| * wrec/WRECParser.h: Copied from wrec/WREC.h. |
| (JSC::WREC::Parser::): |
| (JSC::WREC::Parser::Parser): |
| (JSC::WREC::Parser::setError): |
| (JSC::WREC::Parser::error): |
| (JSC::WREC::Parser::recordSubpattern): |
| (JSC::WREC::Parser::numSubpatterns): |
| (JSC::WREC::Parser::ignoreCase): |
| (JSC::WREC::Parser::multiline): |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix a few builds. |
| |
| * JavaScriptCoreSources.bkl: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix a few builds. |
| |
| * JavaScriptCore.pri: |
| * JavaScriptCore.scons: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Moved VM/CTI.* => jit/JIT.*. |
| |
| Removed VM. |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.scons: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * VM/CTI.cpp: Removed. |
| * VM/CTI.h: Removed. |
| * bytecode/CodeBlock.cpp: |
| * interpreter/Interpreter.cpp: |
| * jit: Added. |
| * jit/JIT.cpp: Copied from VM/CTI.cpp. |
| * jit/JIT.h: Copied from VM/CTI.h. |
| * runtime/RegExp.cpp: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Moved runtime/ExecState.* => interpreter/CallFrame.*. |
| |
| * API/JSBase.cpp: |
| * API/OpaqueJSString.cpp: |
| * GNUmakefile.am: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * debugger/DebuggerCallFrame.h: |
| * interpreter/CallFrame.cpp: Copied from runtime/ExecState.cpp. |
| * interpreter/CallFrame.h: Copied from runtime/ExecState.h. |
| * interpreter/Interpreter.cpp: |
| * parser/Nodes.cpp: |
| * profiler/ProfileGenerator.cpp: |
| * profiler/Profiler.cpp: |
| * runtime/ClassInfo.h: |
| * runtime/Collector.cpp: |
| * runtime/Completion.cpp: |
| * runtime/ExceptionHelpers.cpp: |
| * runtime/ExecState.cpp: Removed. |
| * runtime/ExecState.h: Removed. |
| * runtime/Identifier.cpp: |
| * runtime/JSFunction.cpp: |
| * runtime/JSGlobalObjectFunctions.cpp: |
| * runtime/JSLock.cpp: |
| * runtime/JSNumberCell.h: |
| * runtime/JSObject.h: |
| * runtime/JSString.h: |
| * runtime/Lookup.h: |
| * runtime/PropertyNameArray.h: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix Windows build. |
| |
| * API/APICast.h: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix Windows build. |
| |
| * API/APICast.h: |
| * runtime/ExecState.h: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Moved VM/SamplingTool.* => bytecode/SamplingTool.*. |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.scons: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * JavaScriptCoreSources.bkl: |
| * VM/SamplingTool.cpp: Removed. |
| * VM/SamplingTool.h: Removed. |
| * bytecode/SamplingTool.cpp: Copied from VM/SamplingTool.cpp. |
| * bytecode/SamplingTool.h: Copied from VM/SamplingTool.h. |
| * jsc.cpp: |
| (runWithScripts): |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix Windows build. |
| |
| * runtime/ExecState.h: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Moved VM/ExceptionHelpers.cpp => runtime/ExceptionHelpers.cpp. |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.scons: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * JavaScriptCoreSources.bkl: |
| * VM/ExceptionHelpers.cpp: Removed. |
| * runtime/ExceptionHelpers.cpp: Copied from VM/ExceptionHelpers.cpp. |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Moved VM/RegisterFile.cpp => interpreter/RegisterFile.cpp. |
| |
| * AllInOneFile.cpp: |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.scons: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * JavaScriptCoreSources.bkl: |
| * VM/RegisterFile.cpp: Removed. |
| * interpreter/RegisterFile.cpp: Copied from VM/RegisterFile.cpp. |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix Windows build. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix Windows build. |
| |
| * JavaScriptCore.vcproj/jsc/jsc.vcproj: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix Windows build. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Moved: |
| VM/ExceptionHelpers.h => runtime/ExceptionHelpers.h |
| VM/Register.h => interpreter/Register.h |
| VM/RegisterFile.h => interpreter/RegisterFile.h |
| |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * VM/ExceptionHelpers.h: Removed. |
| * VM/Register.h: Removed. |
| * VM/RegisterFile.h: Removed. |
| * interpreter/Register.h: Copied from VM/Register.h. |
| * interpreter/RegisterFile.h: Copied from VM/RegisterFile.h. |
| * runtime/ExceptionHelpers.h: Copied from VM/ExceptionHelpers.h. |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix Qt build. |
| |
| * JavaScriptCore.pri: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Moved VM/Machine.cpp => interpreter/Interpreter.cpp. |
| |
| * DerivedSources.make: |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.scons: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * JavaScriptCoreSources.bkl: |
| * VM/Machine.cpp: Removed. |
| * interpreter/Interpreter.cpp: Copied from VM/Machine.cpp. |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Moved VM/Machine.h => interpreter/Interpreter.h |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * VM/CTI.cpp: |
| * VM/CTI.h: |
| * VM/ExceptionHelpers.cpp: |
| * VM/Machine.cpp: |
| * VM/Machine.h: Removed. |
| * VM/SamplingTool.cpp: |
| * bytecode/CodeBlock.cpp: |
| * bytecompiler/BytecodeGenerator.cpp: |
| * bytecompiler/BytecodeGenerator.h: |
| * debugger/DebuggerCallFrame.cpp: |
| * interpreter: Added. |
| * interpreter/Interpreter.h: Copied from VM/Machine.h. |
| * profiler/ProfileGenerator.cpp: |
| * runtime/Arguments.h: |
| * runtime/ArrayPrototype.cpp: |
| * runtime/Collector.cpp: |
| * runtime/Completion.cpp: |
| * runtime/ExecState.h: |
| * runtime/FunctionPrototype.cpp: |
| * runtime/JSActivation.cpp: |
| * runtime/JSFunction.cpp: |
| * runtime/JSGlobalData.cpp: |
| * runtime/JSGlobalObject.cpp: |
| * runtime/JSGlobalObjectFunctions.cpp: |
| * wrec/WREC.cpp: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Moved runtime/Interpreter.cpp => runtime/Completion.cpp. |
| |
| Moved functions from Interpreter.h to Completion.h, and removed |
| Interpreter.h from the project. |
| |
| * API/JSBase.cpp: |
| * AllInOneFile.cpp: |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * JavaScriptCoreSources.bkl: |
| * jsc.cpp: |
| * runtime/Completion.cpp: Copied from runtime/Interpreter.cpp. |
| * runtime/Completion.h: |
| * runtime/Interpreter.cpp: Removed. |
| * runtime/Interpreter.h: Removed. |
| |
| 2008-11-17 Gabor Loki <loki@inf.u-szeged.hu> |
| |
| Reviewed by Darin Adler. |
| |
| <https://bugs.webkit.org/show_bug.cgi?id=22312> |
| Fix PCRE include path problem on Qt-port |
| |
| * JavaScriptCore.pri: |
| * pcre/pcre.pri: |
| |
| 2008-11-17 Gabor Loki <loki@inf.u-szeged.hu> |
| |
| Reviewed by Darin Adler. |
| |
| <https://bugs.webkit.org/show_bug.cgi?id=22313> |
| Add missing CTI source to the build system on Qt-port |
| |
| * JavaScriptCore.pri: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix JSGlue build. |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix Qt build. |
| |
| * jsc.pro: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix Qt build. |
| |
| * JavaScriptCore.pri: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix Qt build. |
| |
| * JavaScriptCore.pri: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| More file moves: |
| |
| VM/CodeBlock.* => bytecode/CodeBlock.* |
| VM/EvalCodeCache.h => bytecode/EvalCodeCache.h |
| VM/Instruction.h => bytecode/Instruction.h |
| VM/Opcode.* => bytecode/Opcode.* |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.scons: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.vcproj/jsc/jsc.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * JavaScriptCoreSources.bkl: |
| * VM/CodeBlock.cpp: Removed. |
| * VM/CodeBlock.h: Removed. |
| * VM/EvalCodeCache.h: Removed. |
| * VM/Instruction.h: Removed. |
| * VM/Opcode.cpp: Removed. |
| * VM/Opcode.h: Removed. |
| * bytecode: Added. |
| * bytecode/CodeBlock.cpp: Copied from VM/CodeBlock.cpp. |
| * bytecode/CodeBlock.h: Copied from VM/CodeBlock.h. |
| * bytecode/EvalCodeCache.h: Copied from VM/EvalCodeCache.h. |
| * bytecode/Instruction.h: Copied from VM/Instruction.h. |
| * bytecode/Opcode.cpp: Copied from VM/Opcode.cpp. |
| * bytecode/Opcode.h: Copied from VM/Opcode.h. |
| * jsc.pro: |
| * jscore.bkl: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix a few more builds. |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.scons: |
| * JavaScriptCoreSources.bkl: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix gtk build. |
| |
| * GNUmakefile.am: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix Windows build. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Some file moves: |
| |
| VM/LabelID.h => bytecompiler/Label.h |
| VM/RegisterID.h => bytecompiler/RegisterID.h |
| VM/SegmentedVector.h => bytecompiler/SegmentedVector.h |
| bytecompiler/CodeGenerator.* => bytecompiler/BytecodeGenerator.* |
| |
| * AllInOneFile.cpp: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * VM/LabelID.h: Removed. |
| * VM/RegisterID.h: Removed. |
| * VM/SegmentedVector.h: Removed. |
| * bytecompiler/BytecodeGenerator.cpp: Copied from bytecompiler/CodeGenerator.cpp. |
| * bytecompiler/BytecodeGenerator.h: Copied from bytecompiler/CodeGenerator.h. |
| * bytecompiler/CodeGenerator.cpp: Removed. |
| * bytecompiler/CodeGenerator.h: Removed. |
| * bytecompiler/Label.h: Copied from VM/LabelID.h. |
| * bytecompiler/LabelScope.h: |
| * bytecompiler/RegisterID.h: Copied from VM/RegisterID.h. |
| * bytecompiler/SegmentedVector.h: Copied from VM/SegmentedVector.h. |
| * jsc.cpp: |
| * parser/Nodes.cpp: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix Windows build. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix Windows build. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| |
| 2008-11-17 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix Windows build. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix Windows build. |
| |
| * JavaScriptCore.vcproj/jsc/jsc.vcproj: |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix Windows build. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Moved masm => assembler and split "AssemblerBuffer.h" out of "X86Assembler.h". |
| |
| Also renamed ENABLE_MASM to ENABLE_ASSEMBLER. |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * assembler: Added. |
| * assembler/AssemblerBuffer.h: Copied from masm/X86Assembler.h. |
| (JSC::AssemblerBuffer::AssemblerBuffer): |
| (JSC::AssemblerBuffer::~AssemblerBuffer): |
| (JSC::AssemblerBuffer::ensureSpace): |
| (JSC::AssemblerBuffer::isAligned): |
| (JSC::AssemblerBuffer::putByteUnchecked): |
| (JSC::AssemblerBuffer::putByte): |
| (JSC::AssemblerBuffer::putShortUnchecked): |
| (JSC::AssemblerBuffer::putShort): |
| (JSC::AssemblerBuffer::putIntUnchecked): |
| (JSC::AssemblerBuffer::putInt): |
| (JSC::AssemblerBuffer::data): |
| (JSC::AssemblerBuffer::size): |
| (JSC::AssemblerBuffer::reset): |
| (JSC::AssemblerBuffer::executableCopy): |
| (JSC::AssemblerBuffer::grow): |
| * assembler/X86Assembler.h: Copied from masm/X86Assembler.h. |
| * masm: Removed. |
| * masm/X86Assembler.h: Removed. |
| * wtf/Platform.h: |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix gtk build. |
| |
| * GNUmakefile.am: |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Fixed tyop. |
| |
| * VM/CTI.cpp: |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix windows build. |
| |
| * VM/CTI.cpp: |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix gtk build. |
| |
| * GNUmakefile.am: |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Renamed ENABLE_CTI and ENABLE(CTI) to ENABLE_JIT and ENABLE(JIT). |
| |
| * VM/CTI.cpp: |
| * VM/CTI.h: |
| * VM/CodeBlock.cpp: |
| (JSC::CodeBlock::~CodeBlock): |
| * VM/CodeBlock.h: |
| (JSC::CodeBlock::CodeBlock): |
| * VM/Machine.cpp: |
| (JSC::Interpreter::Interpreter): |
| (JSC::Interpreter::initialize): |
| (JSC::Interpreter::~Interpreter): |
| (JSC::Interpreter::execute): |
| (JSC::Interpreter::privateExecute): |
| * VM/Machine.h: |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::prepareJumpTableForStringSwitch): |
| * runtime/JSFunction.cpp: |
| (JSC::JSFunction::~JSFunction): |
| * runtime/JSGlobalData.h: |
| * wrec/WREC.h: |
| * wtf/Platform.h: |
| * wtf/TCSystemAlloc.cpp: |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix gtk build. |
| |
| * VM/CTI.cpp: |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by a few people on squirrelfish-dev. |
| |
| Renamed CTI => JIT. |
| |
| * VM/CTI.cpp: |
| (JSC::JIT::killLastResultRegister): |
| (JSC::JIT::emitGetVirtualRegister): |
| (JSC::JIT::emitGetVirtualRegisters): |
| (JSC::JIT::emitPutCTIArgFromVirtualRegister): |
| (JSC::JIT::emitPutCTIArg): |
| (JSC::JIT::emitGetCTIArg): |
| (JSC::JIT::emitPutCTIArgConstant): |
| (JSC::JIT::getConstantImmediateNumericArg): |
| (JSC::JIT::emitPutCTIParam): |
| (JSC::JIT::emitGetCTIParam): |
| (JSC::JIT::emitPutToCallFrameHeader): |
| (JSC::JIT::emitGetFromCallFrameHeader): |
| (JSC::JIT::emitPutVirtualRegister): |
| (JSC::JIT::emitInitRegister): |
| (JSC::JIT::printBytecodeOperandTypes): |
| (JSC::JIT::emitAllocateNumber): |
| (JSC::JIT::emitNakedCall): |
| (JSC::JIT::emitNakedFastCall): |
| (JSC::JIT::emitCTICall): |
| (JSC::JIT::emitJumpSlowCaseIfNotJSCell): |
| (JSC::JIT::linkSlowCaseIfNotJSCell): |
| (JSC::JIT::emitJumpSlowCaseIfNotImmNum): |
| (JSC::JIT::emitJumpSlowCaseIfNotImmNums): |
| (JSC::JIT::getDeTaggedConstantImmediate): |
| (JSC::JIT::emitFastArithDeTagImmediate): |
| (JSC::JIT::emitFastArithDeTagImmediateJumpIfZero): |
| (JSC::JIT::emitFastArithReTagImmediate): |
| (JSC::JIT::emitFastArithPotentiallyReTagImmediate): |
| (JSC::JIT::emitFastArithImmToInt): |
| (JSC::JIT::emitFastArithIntToImmOrSlowCase): |
| (JSC::JIT::emitFastArithIntToImmNoCheck): |
| (JSC::JIT::emitArithIntToImmWithJump): |
| (JSC::JIT::emitTagAsBoolImmediate): |
| (JSC::JIT::JIT): |
| (JSC::JIT::compileOpCallInitializeCallFrame): |
| (JSC::JIT::compileOpCallSetupArgs): |
| (JSC::JIT::compileOpCallEvalSetupArgs): |
| (JSC::JIT::compileOpConstructSetupArgs): |
| (JSC::JIT::compileOpCall): |
| (JSC::JIT::compileOpStrictEq): |
| (JSC::JIT::emitSlowScriptCheck): |
| (JSC::JIT::putDoubleResultToJSNumberCellOrJSImmediate): |
| (JSC::JIT::compileBinaryArithOp): |
| (JSC::JIT::compileBinaryArithOpSlowCase): |
| (JSC::JIT::privateCompileMainPass): |
| (JSC::JIT::privateCompileLinkPass): |
| (JSC::JIT::privateCompileSlowCases): |
| (JSC::JIT::privateCompile): |
| (JSC::JIT::privateCompileGetByIdSelf): |
| (JSC::JIT::privateCompileGetByIdProto): |
| (JSC::JIT::privateCompileGetByIdChain): |
| (JSC::JIT::privateCompilePutByIdReplace): |
| (JSC::JIT::privateCompilePutByIdTransition): |
| (JSC::JIT::unlinkCall): |
| (JSC::JIT::linkCall): |
| (JSC::JIT::privateCompileCTIMachineTrampolines): |
| (JSC::JIT::freeCTIMachineTrampolines): |
| (JSC::JIT::patchGetByIdSelf): |
| (JSC::JIT::patchPutByIdReplace): |
| (JSC::JIT::privateCompilePatchGetArrayLength): |
| (JSC::JIT::emitGetVariableObjectRegister): |
| (JSC::JIT::emitPutVariableObjectRegister): |
| * VM/CTI.h: |
| (JSC::JIT::compile): |
| (JSC::JIT::compileGetByIdSelf): |
| (JSC::JIT::compileGetByIdProto): |
| (JSC::JIT::compileGetByIdChain): |
| (JSC::JIT::compilePutByIdReplace): |
| (JSC::JIT::compilePutByIdTransition): |
| (JSC::JIT::compileCTIMachineTrampolines): |
| (JSC::JIT::compilePatchGetArrayLength): |
| * VM/CodeBlock.cpp: |
| (JSC::CodeBlock::unlinkCallers): |
| * VM/Machine.cpp: |
| (JSC::Interpreter::initialize): |
| (JSC::Interpreter::~Interpreter): |
| (JSC::Interpreter::execute): |
| (JSC::Interpreter::tryCTICachePutByID): |
| (JSC::Interpreter::tryCTICacheGetByID): |
| (JSC::Interpreter::cti_op_call_JSFunction): |
| (JSC::Interpreter::cti_vm_dontLazyLinkCall): |
| (JSC::Interpreter::cti_vm_lazyLinkCall): |
| * VM/Machine.h: |
| * VM/RegisterFile.h: |
| * parser/Nodes.h: |
| * runtime/JSArray.h: |
| * runtime/JSCell.h: |
| * runtime/JSFunction.h: |
| * runtime/JSImmediate.h: |
| * runtime/JSNumberCell.h: |
| * runtime/JSObject.h: |
| * runtime/JSString.h: |
| * runtime/JSVariableObject.h: |
| * runtime/ScopeChain.h: |
| * runtime/Structure.h: |
| * runtime/TypeInfo.h: |
| * runtime/UString.h: |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix wx build. |
| |
| * jscore.bkl: |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Nixed X86:: and X86Assembler:: prefixes in a lot of places using typedefs. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::emitGetVirtualRegister): |
| (JSC::CTI::emitGetVirtualRegisters): |
| (JSC::CTI::emitPutCTIArgFromVirtualRegister): |
| (JSC::CTI::emitPutCTIArg): |
| (JSC::CTI::emitGetCTIArg): |
| (JSC::CTI::emitPutCTIParam): |
| (JSC::CTI::emitGetCTIParam): |
| (JSC::CTI::emitPutToCallFrameHeader): |
| (JSC::CTI::emitGetFromCallFrameHeader): |
| (JSC::CTI::emitPutVirtualRegister): |
| (JSC::CTI::emitNakedCall): |
| (JSC::CTI::emitNakedFastCall): |
| (JSC::CTI::emitCTICall): |
| (JSC::CTI::emitJumpSlowCaseIfNotJSCell): |
| (JSC::CTI::emitJumpSlowCaseIfNotImmNum): |
| (JSC::CTI::emitJumpSlowCaseIfNotImmNums): |
| (JSC::CTI::emitFastArithDeTagImmediate): |
| (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero): |
| (JSC::CTI::emitFastArithReTagImmediate): |
| (JSC::CTI::emitFastArithPotentiallyReTagImmediate): |
| (JSC::CTI::emitFastArithImmToInt): |
| (JSC::CTI::emitFastArithIntToImmOrSlowCase): |
| (JSC::CTI::emitFastArithIntToImmNoCheck): |
| (JSC::CTI::emitArithIntToImmWithJump): |
| (JSC::CTI::emitTagAsBoolImmediate): |
| (JSC::CTI::compileOpCall): |
| (JSC::CTI::compileOpStrictEq): |
| (JSC::CTI::emitSlowScriptCheck): |
| (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): |
| (JSC::CTI::compileBinaryArithOp): |
| (JSC::CTI::compileBinaryArithOpSlowCase): |
| (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::privateCompileCTIMachineTrampolines): |
| (JSC::CTI::privateCompilePatchGetArrayLength): |
| (JSC::CTI::emitGetVariableObjectRegister): |
| (JSC::CTI::emitPutVariableObjectRegister): |
| * VM/CTI.h: |
| (JSC::CallRecord::CallRecord): |
| (JSC::JmpTable::JmpTable): |
| (JSC::SlowCaseEntry::SlowCaseEntry): |
| (JSC::CTI::JSRInfo::JSRInfo): |
| * wrec/WREC.h: |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Not reviewed. |
| |
| Try to fix Qt build. |
| |
| * JavaScriptCore.pri: |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Renamed OBJECT_OFFSET => FIELD_OFFSET |
| |
| Nixed use of OBJECT_OFFSET outside of CTI.cpp by making CTI a friend in |
| more places. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::compileOpCallInitializeCallFrame): |
| (JSC::CTI::compileOpCall): |
| (JSC::CTI::emitSlowScriptCheck): |
| (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): |
| (JSC::CTI::compileBinaryArithOp): |
| (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::privateCompileCTIMachineTrampolines): |
| (JSC::CTI::privateCompilePatchGetArrayLength): |
| (JSC::CTI::emitGetVariableObjectRegister): |
| (JSC::CTI::emitPutVariableObjectRegister): |
| * runtime/JSValue.h: |
| * runtime/JSVariableObject.h: |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Renames: |
| |
| X86Assembler::copy => X86Assembler::executableCopy |
| AssemblerBuffer::copy => AssemblerBuffer::executableCopy |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::privateCompile): |
| (JSC::CTI::privateCompileGetByIdSelf): |
| (JSC::CTI::privateCompileGetByIdProto): |
| (JSC::CTI::privateCompileGetByIdChain): |
| (JSC::CTI::privateCompilePutByIdReplace): |
| (JSC::CTI::privateCompilePutByIdTransition): |
| (JSC::CTI::privateCompileCTIMachineTrampolines): |
| (JSC::CTI::privateCompilePatchGetArrayLength): |
| * masm/X86Assembler.h: |
| (JSC::AssemblerBuffer::executableCopy): |
| (JSC::X86Assembler::executableCopy): |
| * wrec/WREC.cpp: |
| (JSC::WREC::compileRegExp): |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Renamed WREC => JSC::WREC, removing JSC:: prefix in a lot of places. |
| Renamed WRECFunction => WREC::CompiledRegExp, and deployed this type |
| name in place of a few casts. |
| |
| * runtime/RegExp.cpp: |
| (JSC::RegExp::RegExp): |
| (JSC::RegExp::~RegExp): |
| (JSC::RegExp::match): |
| * runtime/RegExp.h: |
| * wrec/CharacterClassConstructor.cpp: |
| * wrec/CharacterClassConstructor.h: |
| * wrec/WREC.cpp: |
| (JSC::WREC::compileRegExp): |
| * wrec/WREC.h: |
| (JSC::WREC::Generator::Generator): |
| (JSC::WREC::Parser::Parser): |
| (JSC::WREC::Parser::parseAlternative): |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Renamed BytecodeInterpreter => Interpreter. |
| |
| * JavaScriptCore.exp: |
| * VM/CTI.cpp: |
| (JSC::): |
| (JSC::CTI::compileOpCall): |
| (JSC::CTI::emitSlowScriptCheck): |
| (JSC::CTI::compileBinaryArithOpSlowCase): |
| (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::privateCompileCTIMachineTrampolines): |
| (JSC::CTI::freeCTIMachineTrampolines): |
| (JSC::CTI::patchGetByIdSelf): |
| (JSC::CTI::patchPutByIdReplace): |
| (JSC::CTI::privateCompilePatchGetArrayLength): |
| * VM/CTI.h: |
| * VM/CodeBlock.cpp: |
| (JSC::CodeBlock::printStructures): |
| (JSC::CodeBlock::derefStructures): |
| (JSC::CodeBlock::refStructures): |
| * VM/Machine.cpp: |
| (JSC::jsLess): |
| (JSC::jsLessEq): |
| (JSC::Interpreter::resolve): |
| (JSC::Interpreter::resolveSkip): |
| (JSC::Interpreter::resolveGlobal): |
| (JSC::Interpreter::resolveBase): |
| (JSC::Interpreter::resolveBaseAndProperty): |
| (JSC::Interpreter::resolveBaseAndFunc): |
| (JSC::Interpreter::slideRegisterWindowForCall): |
| (JSC::Interpreter::callEval): |
| (JSC::Interpreter::Interpreter): |
| (JSC::Interpreter::initialize): |
| (JSC::Interpreter::~Interpreter): |
| (JSC::Interpreter::dumpCallFrame): |
| (JSC::Interpreter::dumpRegisters): |
| (JSC::Interpreter::isOpcode): |
| (JSC::Interpreter::unwindCallFrame): |
| (JSC::Interpreter::throwException): |
| (JSC::Interpreter::execute): |
| (JSC::Interpreter::debug): |
| (JSC::Interpreter::resetTimeoutCheck): |
| (JSC::Interpreter::checkTimeout): |
| (JSC::Interpreter::createExceptionScope): |
| (JSC::Interpreter::tryCachePutByID): |
| (JSC::Interpreter::uncachePutByID): |
| (JSC::Interpreter::tryCacheGetByID): |
| (JSC::Interpreter::uncacheGetByID): |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::retrieveArguments): |
| (JSC::Interpreter::retrieveCaller): |
| (JSC::Interpreter::retrieveLastCaller): |
| (JSC::Interpreter::findFunctionCallFrame): |
| (JSC::Interpreter::tryCTICachePutByID): |
| (JSC::Interpreter::tryCTICacheGetByID): |
| (JSC::Interpreter::cti_op_convert_this): |
| (JSC::Interpreter::cti_op_end): |
| (JSC::Interpreter::cti_op_add): |
| (JSC::Interpreter::cti_op_pre_inc): |
| (JSC::Interpreter::cti_timeout_check): |
| (JSC::Interpreter::cti_register_file_check): |
| (JSC::Interpreter::cti_op_loop_if_less): |
| (JSC::Interpreter::cti_op_loop_if_lesseq): |
| (JSC::Interpreter::cti_op_new_object): |
| (JSC::Interpreter::cti_op_put_by_id): |
| (JSC::Interpreter::cti_op_put_by_id_second): |
| (JSC::Interpreter::cti_op_put_by_id_generic): |
| (JSC::Interpreter::cti_op_put_by_id_fail): |
| (JSC::Interpreter::cti_op_get_by_id): |
| (JSC::Interpreter::cti_op_get_by_id_second): |
| (JSC::Interpreter::cti_op_get_by_id_generic): |
| (JSC::Interpreter::cti_op_get_by_id_fail): |
| (JSC::Interpreter::cti_op_instanceof): |
| (JSC::Interpreter::cti_op_del_by_id): |
| (JSC::Interpreter::cti_op_mul): |
| (JSC::Interpreter::cti_op_new_func): |
| (JSC::Interpreter::cti_op_call_JSFunction): |
| (JSC::Interpreter::cti_op_call_arityCheck): |
| (JSC::Interpreter::cti_vm_dontLazyLinkCall): |
| (JSC::Interpreter::cti_vm_lazyLinkCall): |
| (JSC::Interpreter::cti_op_push_activation): |
| (JSC::Interpreter::cti_op_call_NotJSFunction): |
| (JSC::Interpreter::cti_op_create_arguments): |
| (JSC::Interpreter::cti_op_create_arguments_no_params): |
| (JSC::Interpreter::cti_op_tear_off_activation): |
| (JSC::Interpreter::cti_op_tear_off_arguments): |
| (JSC::Interpreter::cti_op_profile_will_call): |
| (JSC::Interpreter::cti_op_profile_did_call): |
| (JSC::Interpreter::cti_op_ret_scopeChain): |
| (JSC::Interpreter::cti_op_new_array): |
| (JSC::Interpreter::cti_op_resolve): |
| (JSC::Interpreter::cti_op_construct_JSConstruct): |
| (JSC::Interpreter::cti_op_construct_NotJSConstruct): |
| (JSC::Interpreter::cti_op_get_by_val): |
| (JSC::Interpreter::cti_op_resolve_func): |
| (JSC::Interpreter::cti_op_sub): |
| (JSC::Interpreter::cti_op_put_by_val): |
| (JSC::Interpreter::cti_op_put_by_val_array): |
| (JSC::Interpreter::cti_op_lesseq): |
| (JSC::Interpreter::cti_op_loop_if_true): |
| (JSC::Interpreter::cti_op_negate): |
| (JSC::Interpreter::cti_op_resolve_base): |
| (JSC::Interpreter::cti_op_resolve_skip): |
| (JSC::Interpreter::cti_op_resolve_global): |
| (JSC::Interpreter::cti_op_div): |
| (JSC::Interpreter::cti_op_pre_dec): |
| (JSC::Interpreter::cti_op_jless): |
| (JSC::Interpreter::cti_op_not): |
| (JSC::Interpreter::cti_op_jtrue): |
| (JSC::Interpreter::cti_op_post_inc): |
| (JSC::Interpreter::cti_op_eq): |
| (JSC::Interpreter::cti_op_lshift): |
| (JSC::Interpreter::cti_op_bitand): |
| (JSC::Interpreter::cti_op_rshift): |
| (JSC::Interpreter::cti_op_bitnot): |
| (JSC::Interpreter::cti_op_resolve_with_base): |
| (JSC::Interpreter::cti_op_new_func_exp): |
| (JSC::Interpreter::cti_op_mod): |
| (JSC::Interpreter::cti_op_less): |
| (JSC::Interpreter::cti_op_neq): |
| (JSC::Interpreter::cti_op_post_dec): |
| (JSC::Interpreter::cti_op_urshift): |
| (JSC::Interpreter::cti_op_bitxor): |
| (JSC::Interpreter::cti_op_new_regexp): |
| (JSC::Interpreter::cti_op_bitor): |
| (JSC::Interpreter::cti_op_call_eval): |
| (JSC::Interpreter::cti_op_throw): |
| (JSC::Interpreter::cti_op_get_pnames): |
| (JSC::Interpreter::cti_op_next_pname): |
| (JSC::Interpreter::cti_op_push_scope): |
| (JSC::Interpreter::cti_op_pop_scope): |
| (JSC::Interpreter::cti_op_typeof): |
| (JSC::Interpreter::cti_op_is_undefined): |
| (JSC::Interpreter::cti_op_is_boolean): |
| (JSC::Interpreter::cti_op_is_number): |
| (JSC::Interpreter::cti_op_is_string): |
| (JSC::Interpreter::cti_op_is_object): |
| (JSC::Interpreter::cti_op_is_function): |
| (JSC::Interpreter::cti_op_stricteq): |
| (JSC::Interpreter::cti_op_nstricteq): |
| (JSC::Interpreter::cti_op_to_jsnumber): |
| (JSC::Interpreter::cti_op_in): |
| (JSC::Interpreter::cti_op_push_new_scope): |
| (JSC::Interpreter::cti_op_jmp_scopes): |
| (JSC::Interpreter::cti_op_put_by_index): |
| (JSC::Interpreter::cti_op_switch_imm): |
| (JSC::Interpreter::cti_op_switch_char): |
| (JSC::Interpreter::cti_op_switch_string): |
| (JSC::Interpreter::cti_op_del_by_val): |
| (JSC::Interpreter::cti_op_put_getter): |
| (JSC::Interpreter::cti_op_put_setter): |
| (JSC::Interpreter::cti_op_new_error): |
| (JSC::Interpreter::cti_op_debug): |
| (JSC::Interpreter::cti_vm_throw): |
| * VM/Machine.h: |
| * VM/Register.h: |
| * VM/SamplingTool.h: |
| (JSC::SamplingTool::SamplingTool): |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::BytecodeGenerator::generate): |
| (JSC::BytecodeGenerator::BytecodeGenerator): |
| * jsc.cpp: |
| (runWithScripts): |
| * runtime/ExecState.h: |
| (JSC::ExecState::interpreter): |
| * runtime/JSCell.h: |
| * runtime/JSFunction.h: |
| * runtime/JSGlobalData.cpp: |
| (JSC::JSGlobalData::JSGlobalData): |
| * runtime/JSGlobalData.h: |
| * runtime/JSString.h: |
| * wrec/WREC.cpp: |
| (WREC::compileRegExp): |
| * wrec/WREC.h: |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Roll out r38461 (my last patch) because it broke the world. |
| |
| 2008-11-16 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| A few more renames: |
| |
| BytecodeInterpreter => Interpreter |
| WREC => JSC::WREC, removing JSC:: prefix in a lot of places |
| X86Assembler::copy => X86Assembler::executableCopy |
| AssemblerBuffer::copy => AssemblerBuffer::executableCopy |
| WRECFunction => WREC::RegExpFunction |
| OBJECT_OFFSET => FIELD_OFFSET |
| |
| Also: |
| |
| Nixed use of OBJECT_OFFSET outside of CTI.cpp by making CTI a friend in more places. |
| Nixed X86:: and X86Assembler:: prefixes in a lot of places using typedefs |
| |
| * JavaScriptCore.exp: |
| * VM/CTI.cpp: |
| (JSC::): |
| (JSC::CTI::emitGetVirtualRegister): |
| (JSC::CTI::emitGetVirtualRegisters): |
| (JSC::CTI::emitPutCTIArgFromVirtualRegister): |
| (JSC::CTI::emitPutCTIArg): |
| (JSC::CTI::emitGetCTIArg): |
| (JSC::CTI::emitPutCTIParam): |
| (JSC::CTI::emitGetCTIParam): |
| (JSC::CTI::emitPutToCallFrameHeader): |
| (JSC::CTI::emitGetFromCallFrameHeader): |
| (JSC::CTI::emitPutVirtualRegister): |
| (JSC::CTI::emitNakedCall): |
| (JSC::CTI::emitNakedFastCall): |
| (JSC::CTI::emitCTICall): |
| (JSC::CTI::emitJumpSlowCaseIfNotJSCell): |
| (JSC::CTI::emitJumpSlowCaseIfNotImmNum): |
| (JSC::CTI::emitJumpSlowCaseIfNotImmNums): |
| (JSC::CTI::emitFastArithDeTagImmediate): |
| (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero): |
| (JSC::CTI::emitFastArithReTagImmediate): |
| (JSC::CTI::emitFastArithPotentiallyReTagImmediate): |
| (JSC::CTI::emitFastArithImmToInt): |
| (JSC::CTI::emitFastArithIntToImmOrSlowCase): |
| (JSC::CTI::emitFastArithIntToImmNoCheck): |
| (JSC::CTI::emitArithIntToImmWithJump): |
| (JSC::CTI::emitTagAsBoolImmediate): |
| (JSC::CTI::compileOpCallInitializeCallFrame): |
| (JSC::CTI::compileOpCall): |
| (JSC::CTI::compileOpStrictEq): |
| (JSC::CTI::emitSlowScriptCheck): |
| (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): |
| (JSC::CTI::compileBinaryArithOp): |
| (JSC::CTI::compileBinaryArithOpSlowCase): |
| (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::privateCompileCTIMachineTrampolines): |
| (JSC::CTI::freeCTIMachineTrampolines): |
| (JSC::CTI::patchGetByIdSelf): |
| (JSC::CTI::patchPutByIdReplace): |
| (JSC::CTI::privateCompilePatchGetArrayLength): |
| (JSC::CTI::emitGetVariableObjectRegister): |
| (JSC::CTI::emitPutVariableObjectRegister): |
| * VM/CTI.h: |
| (JSC::CallRecord::CallRecord): |
| (JSC::JmpTable::JmpTable): |
| (JSC::SlowCaseEntry::SlowCaseEntry): |
| (JSC::CTI::JSRInfo::JSRInfo): |
| * VM/CodeBlock.cpp: |
| (JSC::CodeBlock::printStructures): |
| (JSC::CodeBlock::derefStructures): |
| (JSC::CodeBlock::refStructures): |
| * VM/Machine.cpp: |
| (JSC::jsLess): |
| (JSC::jsLessEq): |
| (JSC::Interpreter::resolve): |
| (JSC::Interpreter::resolveSkip): |
| (JSC::Interpreter::resolveGlobal): |
| (JSC::Interpreter::resolveBase): |
| (JSC::Interpreter::resolveBaseAndProperty): |
| (JSC::Interpreter::resolveBaseAndFunc): |
| (JSC::Interpreter::slideRegisterWindowForCall): |
| (JSC::Interpreter::callEval): |
| (JSC::Interpreter::Interpreter): |
| (JSC::Interpreter::initialize): |
| (JSC::Interpreter::~Interpreter): |
| (JSC::Interpreter::dumpCallFrame): |
| (JSC::Interpreter::dumpRegisters): |
| (JSC::Interpreter::isOpcode): |
| (JSC::Interpreter::unwindCallFrame): |
| (JSC::Interpreter::throwException): |
| (JSC::Interpreter::execute): |
| (JSC::Interpreter::debug): |
| (JSC::Interpreter::resetTimeoutCheck): |
| (JSC::Interpreter::checkTimeout): |
| (JSC::Interpreter::createExceptionScope): |
| (JSC::Interpreter::tryCachePutByID): |
| (JSC::Interpreter::uncachePutByID): |
| (JSC::Interpreter::tryCacheGetByID): |
| (JSC::Interpreter::uncacheGetByID): |
| (JSC::Interpreter::privateExecute): |
| (JSC::Interpreter::retrieveArguments): |
| (JSC::Interpreter::retrieveCaller): |
| (JSC::Interpreter::retrieveLastCaller): |
| (JSC::Interpreter::findFunctionCallFrame): |
| (JSC::Interpreter::tryCTICachePutByID): |
| (JSC::Interpreter::tryCTICacheGetByID): |
| (JSC::): |
| (JSC::Interpreter::cti_op_convert_this): |
| (JSC::Interpreter::cti_op_end): |
| (JSC::Interpreter::cti_op_add): |
| (JSC::Interpreter::cti_op_pre_inc): |
| (JSC::Interpreter::cti_timeout_check): |
| (JSC::Interpreter::cti_register_file_check): |
| (JSC::Interpreter::cti_op_loop_if_less): |
| (JSC::Interpreter::cti_op_loop_if_lesseq): |
| (JSC::Interpreter::cti_op_new_object): |
| (JSC::Interpreter::cti_op_put_by_id): |
| (JSC::Interpreter::cti_op_put_by_id_second): |
| (JSC::Interpreter::cti_op_put_by_id_generic): |
| (JSC::Interpreter::cti_op_put_by_id_fail): |
| (JSC::Interpreter::cti_op_get_by_id): |
| (JSC::Interpreter::cti_op_get_by_id_second): |
| (JSC::Interpreter::cti_op_get_by_id_generic): |
| (JSC::Interpreter::cti_op_get_by_id_fail): |
| (JSC::Interpreter::cti_op_instanceof): |
| (JSC::Interpreter::cti_op_del_by_id): |
| (JSC::Interpreter::cti_op_mul): |
| (JSC::Interpreter::cti_op_new_func): |
| (JSC::Interpreter::cti_op_call_JSFunction): |
| (JSC::Interpreter::cti_op_call_arityCheck): |
| (JSC::Interpreter::cti_vm_dontLazyLinkCall): |
| (JSC::Interpreter::cti_vm_lazyLinkCall): |
| (JSC::Interpreter::cti_op_push_activation): |
| (JSC::Interpreter::cti_op_call_NotJSFunction): |
| (JSC::Interpreter::cti_op_create_arguments): |
| (JSC::Interpreter::cti_op_create_arguments_no_params): |
| (JSC::Interpreter::cti_op_tear_off_activation): |
| (JSC::Interpreter::cti_op_tear_off_arguments): |
| (JSC::Interpreter::cti_op_profile_will_call): |
| (JSC::Interpreter::cti_op_profile_did_call): |
| (JSC::Interpreter::cti_op_ret_scopeChain): |
| (JSC::Interpreter::cti_op_new_array): |
| (JSC::Interpreter::cti_op_resolve): |
| (JSC::Interpreter::cti_op_construct_JSConstruct): |
| (JSC::Interpreter::cti_op_construct_NotJSConstruct): |
| (JSC::Interpreter::cti_op_get_by_val): |
| (JSC::Interpreter::cti_op_resolve_func): |
| (JSC::Interpreter::cti_op_sub): |
| (JSC::Interpreter::cti_op_put_by_val): |
| (JSC::Interpreter::cti_op_put_by_val_array): |
| (JSC::Interpreter::cti_op_lesseq): |
| (JSC::Interpreter::cti_op_loop_if_true): |
| (JSC::Interpreter::cti_op_negate): |
| (JSC::Interpreter::cti_op_resolve_base): |
| (JSC::Interpreter::cti_op_resolve_skip): |
| (JSC::Interpreter::cti_op_resolve_global): |
| (JSC::Interpreter::cti_op_div): |
| (JSC::Interpreter::cti_op_pre_dec): |
| (JSC::Interpreter::cti_op_jless): |
| (JSC::Interpreter::cti_op_not): |
| (JSC::Interpreter::cti_op_jtrue): |
| (JSC::Interpreter::cti_op_post_inc): |
| (JSC::Interpreter::cti_op_eq): |
| (JSC::Interpreter::cti_op_lshift): |
| (JSC::Interpreter::cti_op_bitand): |
| (JSC::Interpreter::cti_op_rshift): |
| (JSC::Interpreter::cti_op_bitnot): |
| (JSC::Interpreter::cti_op_resolve_with_base): |
| (JSC::Interpreter::cti_op_new_func_exp): |
| (JSC::Interpreter::cti_op_mod): |
| (JSC::Interpreter::cti_op_less): |
| (JSC::Interpreter::cti_op_neq): |
| (JSC::Interpreter::cti_op_post_dec): |
| (JSC::Interpreter::cti_op_urshift): |
| (JSC::Interpreter::cti_op_bitxor): |
| (JSC::Interpreter::cti_op_new_regexp): |
| (JSC::Interpreter::cti_op_bitor): |
| (JSC::Interpreter::cti_op_call_eval): |
| (JSC::Interpreter::cti_op_throw): |
| (JSC::Interpreter::cti_op_get_pnames): |
| (JSC::Interpreter::cti_op_next_pname): |
| (JSC::Interpreter::cti_op_push_scope): |
| (JSC::Interpreter::cti_op_pop_scope): |
| (JSC::Interpreter::cti_op_typeof): |
| (JSC::Interpreter::cti_op_is_undefined): |
| (JSC::Interpreter::cti_op_is_boolean): |
| (JSC::Interpreter::cti_op_is_number): |
| (JSC::Interpreter::cti_op_is_string): |
| (JSC::Interpreter::cti_op_is_object): |
| (JSC::Interpreter::cti_op_is_function): |
| (JSC::Interpreter::cti_op_stricteq): |
| (JSC::Interpreter::cti_op_nstricteq): |
| (JSC::Interpreter::cti_op_to_jsnumber): |
| (JSC::Interpreter::cti_op_in): |
| (JSC::Interpreter::cti_op_push_new_scope): |
| (JSC::Interpreter::cti_op_jmp_scopes): |
| (JSC::Interpreter::cti_op_put_by_index): |
| (JSC::Interpreter::cti_op_switch_imm): |
| (JSC::Interpreter::cti_op_switch_char): |
| (JSC::Interpreter::cti_op_switch_string): |
| (JSC::Interpreter::cti_op_del_by_val): |
| (JSC::Interpreter::cti_op_put_getter): |
| (JSC::Interpreter::cti_op_put_setter): |
| (JSC::Interpreter::cti_op_new_error): |
| (JSC::Interpreter::cti_op_debug): |
| (JSC::Interpreter::cti_vm_throw): |
| * VM/Machine.h: |
| * VM/Register.h: |
| * VM/SamplingTool.cpp: |
| (JSC::SamplingTool::dump): |
| * VM/SamplingTool.h: |
| (JSC::SamplingTool::SamplingTool): |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::BytecodeGenerator::generate): |
| (JSC::BytecodeGenerator::BytecodeGenerator): |
| * jsc.cpp: |
| (runWithScripts): |
| * masm/X86Assembler.h: |
| (JSC::AssemblerBuffer::executableCopy): |
| (JSC::X86Assembler::executableCopy): |
| * runtime/ExecState.h: |
| (JSC::ExecState::interpreter): |
| * runtime/JSCell.h: |
| * runtime/JSFunction.h: |
| * runtime/JSGlobalData.cpp: |
| (JSC::JSGlobalData::JSGlobalData): |
| * runtime/JSGlobalData.h: |
| * runtime/JSImmediate.h: |
| * runtime/JSString.h: |
| * runtime/JSValue.h: |
| * runtime/JSVariableObject.h: |
| * runtime/RegExp.cpp: |
| (JSC::RegExp::RegExp): |
| (JSC::RegExp::~RegExp): |
| (JSC::RegExp::match): |
| * runtime/RegExp.h: |
| * wrec/CharacterClassConstructor.cpp: |
| * wrec/CharacterClassConstructor.h: |
| * wrec/WREC.cpp: |
| (JSC::WREC::compileRegExp): |
| * wrec/WREC.h: |
| (JSC::WREC::Generator::Generator): |
| (JSC::WREC::Parser::): |
| (JSC::WREC::Parser::Parser): |
| (JSC::WREC::Parser::parseAlternative): |
| |
| 2008-11-16 Greg Bolsinga <bolsinga@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=21810 |
| Remove use of static C++ objects that are destroyed at exit time (destructors) |
| |
| Conditionally have the DEFINE_STATIC_LOCAL workaround <rdar://problem/6354696> |
| (Codegen issue with C++ static reference in gcc build 5465) based upon the compiler |
| build versions. It will use the: |
| static T& = *new T; |
| style for all other compilers. |
| |
| * wtf/StdLibExtras.h: |
| |
| 2008-11-16 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reviewed by Dan Bernstein. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22290 |
| Remove cross-heap GC and MessagePort multi-threading support |
| |
| It is broken (and may not be implementable at all), and no longer needed, as we |
| don't use MessagePorts for communication with workers any more. |
| |
| * JavaScriptCore.exp: |
| * runtime/Collector.cpp: |
| (JSC::Heap::collect): |
| * runtime/JSGlobalObject.cpp: |
| * runtime/JSGlobalObject.h: |
| Remove hooks for cross-heap GC. |
| |
| 2008-11-15 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Cleanup jsc command line code a little. |
| |
| * jsc.cpp: |
| (functionQuit): |
| (main): Use standard exit status macros |
| (cleanupGlobalData): Factor out cleanup code into this function. |
| (printUsageStatement): Use standard exit status macros. |
| |
| 2008-11-15 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Cleanup BytecodeGenerator constructors. |
| |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::BytecodeGenerator::BytecodeGenerator): |
| * bytecompiler/CodeGenerator.h: |
| * parser/Nodes.cpp: |
| (JSC::ProgramNode::generateBytecode): |
| |
| 2008-11-15 Darin Adler <darin@apple.com> |
| |
| Rubber stamped by Geoff Garen. |
| |
| - do the long-planned StructureID -> Structure rename |
| |
| * API/JSCallbackConstructor.cpp: |
| (JSC::JSCallbackConstructor::JSCallbackConstructor): |
| * API/JSCallbackConstructor.h: |
| (JSC::JSCallbackConstructor::createStructure): |
| * API/JSCallbackFunction.h: |
| (JSC::JSCallbackFunction::createStructure): |
| * API/JSCallbackObject.h: |
| (JSC::JSCallbackObject::createStructure): |
| * API/JSCallbackObjectFunctions.h: |
| (JSC::::JSCallbackObject): |
| * API/JSValueRef.cpp: |
| (JSValueIsInstanceOfConstructor): |
| * GNUmakefile.am: |
| * JavaScriptCore.exp: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.scons: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * JavaScriptCoreSources.bkl: |
| * VM/CTI.cpp: |
| (JSC::CTI::compileBinaryArithOp): |
| (JSC::CTI::privateCompileMainPass): |
| (JSC::CTI::privateCompileGetByIdSelf): |
| (JSC::CTI::privateCompileGetByIdProto): |
| (JSC::CTI::privateCompileGetByIdChain): |
| (JSC::CTI::privateCompilePutByIdReplace): |
| (JSC::transitionWillNeedStorageRealloc): |
| (JSC::CTI::privateCompilePutByIdTransition): |
| (JSC::CTI::patchGetByIdSelf): |
| (JSC::CTI::patchPutByIdReplace): |
| * VM/CTI.h: |
| (JSC::CTI::compileGetByIdSelf): |
| (JSC::CTI::compileGetByIdProto): |
| (JSC::CTI::compileGetByIdChain): |
| (JSC::CTI::compilePutByIdReplace): |
| (JSC::CTI::compilePutByIdTransition): |
| * VM/CodeBlock.cpp: |
| (JSC::CodeBlock::printStructure): |
| (JSC::CodeBlock::printStructures): |
| (JSC::CodeBlock::dump): |
| (JSC::CodeBlock::~CodeBlock): |
| (JSC::CodeBlock::derefStructures): |
| (JSC::CodeBlock::refStructures): |
| * VM/CodeBlock.h: |
| * VM/Instruction.h: |
| (JSC::Instruction::Instruction): |
| (JSC::Instruction::): |
| * VM/Machine.cpp: |
| (JSC::jsTypeStringForValue): |
| (JSC::jsIsObjectType): |
| (JSC::BytecodeInterpreter::resolveGlobal): |
| (JSC::BytecodeInterpreter::BytecodeInterpreter): |
| (JSC::cachePrototypeChain): |
| (JSC::BytecodeInterpreter::tryCachePutByID): |
| (JSC::BytecodeInterpreter::uncachePutByID): |
| (JSC::BytecodeInterpreter::tryCacheGetByID): |
| (JSC::BytecodeInterpreter::uncacheGetByID): |
| (JSC::BytecodeInterpreter::privateExecute): |
| (JSC::BytecodeInterpreter::tryCTICachePutByID): |
| (JSC::BytecodeInterpreter::tryCTICacheGetByID): |
| (JSC::BytecodeInterpreter::cti_op_instanceof): |
| (JSC::BytecodeInterpreter::cti_op_construct_JSConstruct): |
| (JSC::BytecodeInterpreter::cti_op_resolve_global): |
| (JSC::BytecodeInterpreter::cti_op_is_undefined): |
| * runtime/Arguments.h: |
| (JSC::Arguments::createStructure): |
| * runtime/ArrayConstructor.cpp: |
| (JSC::ArrayConstructor::ArrayConstructor): |
| * runtime/ArrayConstructor.h: |
| * runtime/ArrayPrototype.cpp: |
| (JSC::ArrayPrototype::ArrayPrototype): |
| * runtime/ArrayPrototype.h: |
| * runtime/BatchedTransitionOptimizer.h: |
| (JSC::BatchedTransitionOptimizer::BatchedTransitionOptimizer): |
| (JSC::BatchedTransitionOptimizer::~BatchedTransitionOptimizer): |
| * runtime/BooleanConstructor.cpp: |
| (JSC::BooleanConstructor::BooleanConstructor): |
| * runtime/BooleanConstructor.h: |
| * runtime/BooleanObject.cpp: |
| (JSC::BooleanObject::BooleanObject): |
| * runtime/BooleanObject.h: |
| * runtime/BooleanPrototype.cpp: |
| (JSC::BooleanPrototype::BooleanPrototype): |
| * runtime/BooleanPrototype.h: |
| * runtime/DateConstructor.cpp: |
| (JSC::DateConstructor::DateConstructor): |
| * runtime/DateConstructor.h: |
| * runtime/DateInstance.cpp: |
| (JSC::DateInstance::DateInstance): |
| * runtime/DateInstance.h: |
| * runtime/DatePrototype.cpp: |
| (JSC::DatePrototype::DatePrototype): |
| * runtime/DatePrototype.h: |
| (JSC::DatePrototype::createStructure): |
| * runtime/ErrorConstructor.cpp: |
| (JSC::ErrorConstructor::ErrorConstructor): |
| * runtime/ErrorConstructor.h: |
| * runtime/ErrorInstance.cpp: |
| (JSC::ErrorInstance::ErrorInstance): |
| * runtime/ErrorInstance.h: |
| * runtime/ErrorPrototype.cpp: |
| (JSC::ErrorPrototype::ErrorPrototype): |
| * runtime/ErrorPrototype.h: |
| * runtime/FunctionConstructor.cpp: |
| (JSC::FunctionConstructor::FunctionConstructor): |
| * runtime/FunctionConstructor.h: |
| * runtime/FunctionPrototype.cpp: |
| (JSC::FunctionPrototype::FunctionPrototype): |
| (JSC::FunctionPrototype::addFunctionProperties): |
| * runtime/FunctionPrototype.h: |
| (JSC::FunctionPrototype::createStructure): |
| * runtime/GlobalEvalFunction.cpp: |
| (JSC::GlobalEvalFunction::GlobalEvalFunction): |
| * runtime/GlobalEvalFunction.h: |
| * runtime/Identifier.h: |
| * runtime/InternalFunction.cpp: |
| (JSC::InternalFunction::InternalFunction): |
| * runtime/InternalFunction.h: |
| (JSC::InternalFunction::createStructure): |
| (JSC::InternalFunction::InternalFunction): |
| * runtime/JSActivation.cpp: |
| (JSC::JSActivation::JSActivation): |
| * runtime/JSActivation.h: |
| (JSC::JSActivation::createStructure): |
| * runtime/JSArray.cpp: |
| (JSC::JSArray::JSArray): |
| * runtime/JSArray.h: |
| (JSC::JSArray::createStructure): |
| * runtime/JSCell.h: |
| (JSC::JSCell::JSCell): |
| (JSC::JSCell::isObject): |
| (JSC::JSCell::isString): |
| (JSC::JSCell::structure): |
| (JSC::JSValue::needsThisConversion): |
| * runtime/JSFunction.cpp: |
| (JSC::JSFunction::construct): |
| * runtime/JSFunction.h: |
| (JSC::JSFunction::JSFunction): |
| (JSC::JSFunction::createStructure): |
| * runtime/JSGlobalData.cpp: |
| (JSC::JSGlobalData::JSGlobalData): |
| (JSC::JSGlobalData::createLeaked): |
| * runtime/JSGlobalData.h: |
| * runtime/JSGlobalObject.cpp: |
| (JSC::markIfNeeded): |
| (JSC::JSGlobalObject::reset): |
| * runtime/JSGlobalObject.h: |
| (JSC::JSGlobalObject::JSGlobalObject): |
| (JSC::JSGlobalObject::argumentsStructure): |
| (JSC::JSGlobalObject::arrayStructure): |
| (JSC::JSGlobalObject::booleanObjectStructure): |
| (JSC::JSGlobalObject::callbackConstructorStructure): |
| (JSC::JSGlobalObject::callbackFunctionStructure): |
| (JSC::JSGlobalObject::callbackObjectStructure): |
| (JSC::JSGlobalObject::dateStructure): |
| (JSC::JSGlobalObject::emptyObjectStructure): |
| (JSC::JSGlobalObject::errorStructure): |
| (JSC::JSGlobalObject::functionStructure): |
| (JSC::JSGlobalObject::numberObjectStructure): |
| (JSC::JSGlobalObject::prototypeFunctionStructure): |
| (JSC::JSGlobalObject::regExpMatchesArrayStructure): |
| (JSC::JSGlobalObject::regExpStructure): |
| (JSC::JSGlobalObject::stringObjectStructure): |
| (JSC::JSGlobalObject::createStructure): |
| (JSC::Structure::prototypeForLookup): |
| * runtime/JSNotAnObject.h: |
| (JSC::JSNotAnObject::createStructure): |
| * runtime/JSNumberCell.h: |
| (JSC::JSNumberCell::createStructure): |
| (JSC::JSNumberCell::JSNumberCell): |
| * runtime/JSObject.cpp: |
| (JSC::JSObject::mark): |
| (JSC::JSObject::put): |
| (JSC::JSObject::deleteProperty): |
| (JSC::JSObject::defineGetter): |
| (JSC::JSObject::defineSetter): |
| (JSC::JSObject::getPropertyAttributes): |
| (JSC::JSObject::getPropertyNames): |
| (JSC::JSObject::removeDirect): |
| (JSC::JSObject::createInheritorID): |
| * runtime/JSObject.h: |
| (JSC::JSObject::getDirect): |
| (JSC::JSObject::getDirectLocation): |
| (JSC::JSObject::hasCustomProperties): |
| (JSC::JSObject::hasGetterSetterProperties): |
| (JSC::JSObject::createStructure): |
| (JSC::JSObject::JSObject): |
| (JSC::JSObject::~JSObject): |
| (JSC::JSObject::prototype): |
| (JSC::JSObject::setPrototype): |
| (JSC::JSObject::setStructure): |
| (JSC::JSObject::inheritorID): |
| (JSC::JSObject::inlineGetOwnPropertySlot): |
| (JSC::JSObject::getOwnPropertySlotForWrite): |
| (JSC::JSCell::fastGetOwnPropertySlot): |
| (JSC::JSObject::putDirect): |
| (JSC::JSObject::putDirectWithoutTransition): |
| (JSC::JSObject::transitionTo): |
| * runtime/JSPropertyNameIterator.h: |
| (JSC::JSPropertyNameIterator::next): |
| * runtime/JSStaticScopeObject.h: |
| (JSC::JSStaticScopeObject::JSStaticScopeObject): |
| (JSC::JSStaticScopeObject::createStructure): |
| * runtime/JSString.h: |
| (JSC::JSString::JSString): |
| (JSC::JSString::createStructure): |
| * runtime/JSVariableObject.h: |
| (JSC::JSVariableObject::JSVariableObject): |
| * runtime/JSWrapperObject.h: |
| (JSC::JSWrapperObject::JSWrapperObject): |
| * runtime/MathObject.cpp: |
| (JSC::MathObject::MathObject): |
| * runtime/MathObject.h: |
| (JSC::MathObject::createStructure): |
| * runtime/NativeErrorConstructor.cpp: |
| (JSC::NativeErrorConstructor::NativeErrorConstructor): |
| * runtime/NativeErrorConstructor.h: |
| * runtime/NativeErrorPrototype.cpp: |
| (JSC::NativeErrorPrototype::NativeErrorPrototype): |
| * runtime/NativeErrorPrototype.h: |
| * runtime/NumberConstructor.cpp: |
| (JSC::NumberConstructor::NumberConstructor): |
| * runtime/NumberConstructor.h: |
| (JSC::NumberConstructor::createStructure): |
| * runtime/NumberObject.cpp: |
| (JSC::NumberObject::NumberObject): |
| * runtime/NumberObject.h: |
| * runtime/NumberPrototype.cpp: |
| (JSC::NumberPrototype::NumberPrototype): |
| * runtime/NumberPrototype.h: |
| * runtime/ObjectConstructor.cpp: |
| (JSC::ObjectConstructor::ObjectConstructor): |
| * runtime/ObjectConstructor.h: |
| * runtime/ObjectPrototype.cpp: |
| (JSC::ObjectPrototype::ObjectPrototype): |
| * runtime/ObjectPrototype.h: |
| * runtime/Operations.h: |
| (JSC::equalSlowCaseInline): |
| * runtime/PropertyNameArray.h: |
| (JSC::PropertyNameArrayData::setCachedStructure): |
| (JSC::PropertyNameArrayData::cachedStructure): |
| (JSC::PropertyNameArrayData::setCachedPrototypeChain): |
| (JSC::PropertyNameArrayData::cachedPrototypeChain): |
| (JSC::PropertyNameArrayData::PropertyNameArrayData): |
| * runtime/PrototypeFunction.cpp: |
| (JSC::PrototypeFunction::PrototypeFunction): |
| * runtime/PrototypeFunction.h: |
| * runtime/RegExpConstructor.cpp: |
| (JSC::RegExpConstructor::RegExpConstructor): |
| * runtime/RegExpConstructor.h: |
| (JSC::RegExpConstructor::createStructure): |
| * runtime/RegExpObject.cpp: |
| (JSC::RegExpObject::RegExpObject): |
| * runtime/RegExpObject.h: |
| (JSC::RegExpObject::createStructure): |
| * runtime/RegExpPrototype.cpp: |
| (JSC::RegExpPrototype::RegExpPrototype): |
| * runtime/RegExpPrototype.h: |
| * runtime/StringConstructor.cpp: |
| (JSC::StringConstructor::StringConstructor): |
| * runtime/StringConstructor.h: |
| * runtime/StringObject.cpp: |
| (JSC::StringObject::StringObject): |
| * runtime/StringObject.h: |
| (JSC::StringObject::createStructure): |
| * runtime/StringObjectThatMasqueradesAsUndefined.h: |
| (JSC::StringObjectThatMasqueradesAsUndefined::create): |
| (JSC::StringObjectThatMasqueradesAsUndefined::StringObjectThatMasqueradesAsUndefined): |
| (JSC::StringObjectThatMasqueradesAsUndefined::createStructure): |
| * runtime/StringPrototype.cpp: |
| (JSC::StringPrototype::StringPrototype): |
| * runtime/StringPrototype.h: |
| * runtime/Structure.cpp: Copied from JavaScriptCore/runtime/StructureID.cpp. |
| (JSC::Structure::dumpStatistics): |
| (JSC::Structure::Structure): |
| (JSC::Structure::~Structure): |
| (JSC::Structure::startIgnoringLeaks): |
| (JSC::Structure::stopIgnoringLeaks): |
| (JSC::Structure::materializePropertyMap): |
| (JSC::Structure::getEnumerablePropertyNames): |
| (JSC::Structure::clearEnumerationCache): |
| (JSC::Structure::growPropertyStorageCapacity): |
| (JSC::Structure::addPropertyTransitionToExistingStructure): |
| (JSC::Structure::addPropertyTransition): |
| (JSC::Structure::removePropertyTransition): |
| (JSC::Structure::changePrototypeTransition): |
| (JSC::Structure::getterSetterTransition): |
| (JSC::Structure::toDictionaryTransition): |
| (JSC::Structure::fromDictionaryTransition): |
| (JSC::Structure::addPropertyWithoutTransition): |
| (JSC::Structure::removePropertyWithoutTransition): |
| (JSC::Structure::createCachedPrototypeChain): |
| (JSC::Structure::checkConsistency): |
| (JSC::Structure::copyPropertyTable): |
| (JSC::Structure::get): |
| (JSC::Structure::put): |
| (JSC::Structure::remove): |
| (JSC::Structure::insertIntoPropertyMapHashTable): |
| (JSC::Structure::createPropertyMapHashTable): |
| (JSC::Structure::expandPropertyMapHashTable): |
| (JSC::Structure::rehashPropertyMapHashTable): |
| (JSC::Structure::getEnumerablePropertyNamesInternal): |
| * runtime/Structure.h: Copied from JavaScriptCore/runtime/StructureID.h. |
| (JSC::Structure::create): |
| (JSC::Structure::previousID): |
| (JSC::Structure::setCachedPrototypeChain): |
| (JSC::Structure::cachedPrototypeChain): |
| (JSC::Structure::): |
| (JSC::Structure::get): |
| * runtime/StructureChain.cpp: Copied from JavaScriptCore/runtime/StructureIDChain.cpp. |
| (JSC::StructureChain::StructureChain): |
| (JSC::structureChainsAreEqual): |
| * runtime/StructureChain.h: Copied from JavaScriptCore/runtime/StructureIDChain.h. |
| (JSC::StructureChain::create): |
| (JSC::StructureChain::head): |
| * runtime/StructureID.cpp: Removed. |
| * runtime/StructureID.h: Removed. |
| * runtime/StructureIDChain.cpp: Removed. |
| * runtime/StructureIDChain.h: Removed. |
| * runtime/StructureIDTransitionTable.h: Removed. |
| * runtime/StructureTransitionTable.h: Copied from JavaScriptCore/runtime/StructureIDTransitionTable.h. |
| |
| 2008-11-15 Darin Adler <darin@apple.com> |
| |
| - fix non-WREC build |
| |
| * runtime/RegExp.cpp: Put "using namespace WREC" inside #if ENABLE(WREC). |
| |
| 2008-11-15 Kevin Ollivier <kevino@theolliviers.com> |
| |
| Reviewed by Timothy Hatcher. |
| |
| As ThreadingNone doesn't implement threads, isMainThread should return true, |
| not false. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22285 |
| |
| * wtf/ThreadingNone.cpp: |
| (WTF::isMainThread): |
| |
| 2008-11-15 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Moved all WREC-related code into WREC.cpp and put it in a WREC namespace. |
| Removed the WREC prefix from class names. |
| |
| * VM/CTI.cpp: |
| * VM/CTI.h: |
| * VM/Machine.h: |
| (JSC::BytecodeInterpreter::assemblerBuffer): |
| * masm/X86Assembler.h: |
| * runtime/RegExp.cpp: |
| (JSC::RegExp::RegExp): |
| * wrec/CharacterClassConstructor.cpp: |
| * wrec/CharacterClassConstructor.h: |
| * wrec/WREC.cpp: |
| (WREC::GenerateParenthesesNonGreedyFunctor::GenerateParenthesesNonGreedyFunctor): |
| (WREC::GeneratePatternCharacterFunctor::generateAtom): |
| (WREC::GeneratePatternCharacterFunctor::backtrack): |
| (WREC::GenerateCharacterClassFunctor::generateAtom): |
| (WREC::GenerateCharacterClassFunctor::backtrack): |
| (WREC::GenerateBackreferenceFunctor::generateAtom): |
| (WREC::GenerateBackreferenceFunctor::backtrack): |
| (WREC::GenerateParenthesesNonGreedyFunctor::generateAtom): |
| (WREC::GenerateParenthesesNonGreedyFunctor::backtrack): |
| (WREC::Generator::generateBacktrack1): |
| (WREC::Generator::generateBacktrackBackreference): |
| (WREC::Generator::generateBackreferenceQuantifier): |
| (WREC::Generator::generateNonGreedyQuantifier): |
| (WREC::Generator::generateGreedyQuantifier): |
| (WREC::Generator::generatePatternCharacter): |
| (WREC::Generator::generateCharacterClassInvertedRange): |
| (WREC::Generator::generateCharacterClassInverted): |
| (WREC::Generator::generateCharacterClass): |
| (WREC::Generator::generateParentheses): |
| (WREC::Generator::generateParenthesesNonGreedy): |
| (WREC::Generator::generateParenthesesResetTrampoline): |
| (WREC::Generator::generateAssertionBOL): |
| (WREC::Generator::generateAssertionEOL): |
| (WREC::Generator::generateAssertionWordBoundary): |
| (WREC::Generator::generateBackreference): |
| (WREC::Generator::generateDisjunction): |
| (WREC::Generator::terminateDisjunction): |
| (WREC::Parser::parseGreedyQuantifier): |
| (WREC::Parser::parseQuantifier): |
| (WREC::Parser::parsePatternCharacterQualifier): |
| (WREC::Parser::parseCharacterClassQuantifier): |
| (WREC::Parser::parseBackreferenceQuantifier): |
| (WREC::Parser::parseParentheses): |
| (WREC::Parser::parseCharacterClass): |
| (WREC::Parser::parseOctalEscape): |
| (WREC::Parser::parseEscape): |
| (WREC::Parser::parseTerm): |
| (WREC::Parser::parseDisjunction): |
| (WREC::compileRegExp): |
| * wrec/WREC.h: |
| (WREC::Generator::Generator): |
| (WREC::Parser::Parser): |
| (WREC::Parser::parseAlternative): |
| |
| 2008-11-15 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Changed another case of "m_jit" to "m_assembler". |
| |
| * VM/CTI.cpp: |
| * wrec/WREC.cpp: |
| * wrec/WREC.h: |
| (JSC::WRECGenerator::WRECGenerator): |
| (JSC::WRECParser::WRECParser): |
| |
| 2008-11-15 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Renamed "jit" to "assembler" and, for brevity, replaced *jit.* with __ |
| using a macro. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::emitGetVirtualRegister): |
| (JSC::CTI::emitPutCTIArgFromVirtualRegister): |
| (JSC::CTI::emitPutCTIArg): |
| (JSC::CTI::emitGetCTIArg): |
| (JSC::CTI::emitPutCTIArgConstant): |
| (JSC::CTI::emitPutCTIParam): |
| (JSC::CTI::emitGetCTIParam): |
| (JSC::CTI::emitPutToCallFrameHeader): |
| (JSC::CTI::emitGetFromCallFrameHeader): |
| (JSC::CTI::emitPutVirtualRegister): |
| (JSC::CTI::emitInitRegister): |
| (JSC::CTI::emitAllocateNumber): |
| (JSC::CTI::emitNakedCall): |
| (JSC::CTI::emitNakedFastCall): |
| (JSC::CTI::emitCTICall): |
| (JSC::CTI::emitJumpSlowCaseIfNotJSCell): |
| (JSC::CTI::linkSlowCaseIfNotJSCell): |
| (JSC::CTI::emitJumpSlowCaseIfNotImmNum): |
| (JSC::CTI::emitJumpSlowCaseIfNotImmNums): |
| (JSC::CTI::emitFastArithDeTagImmediate): |
| (JSC::CTI::emitFastArithDeTagImmediateJumpIfZero): |
| (JSC::CTI::emitFastArithReTagImmediate): |
| (JSC::CTI::emitFastArithPotentiallyReTagImmediate): |
| (JSC::CTI::emitFastArithImmToInt): |
| (JSC::CTI::emitFastArithIntToImmOrSlowCase): |
| (JSC::CTI::emitFastArithIntToImmNoCheck): |
| (JSC::CTI::emitArithIntToImmWithJump): |
| (JSC::CTI::emitTagAsBoolImmediate): |
| (JSC::CTI::CTI): |
| (JSC::CTI::compileOpCallInitializeCallFrame): |
| (JSC::CTI::compileOpCall): |
| (JSC::CTI::compileOpStrictEq): |
| (JSC::CTI::emitSlowScriptCheck): |
| (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): |
| (JSC::CTI::compileBinaryArithOp): |
| (JSC::CTI::compileBinaryArithOpSlowCase): |
| (JSC::CTI::privateCompileMainPass): |
| (JSC::CTI::privateCompileLinkPass): |
| (JSC::CTI::privateCompileSlowCases): |
| (JSC::CTI::privateCompile): |
| (JSC::CTI::privateCompileGetByIdSelf): |
| (JSC::CTI::privateCompileGetByIdProto): |
| (JSC::CTI::privateCompileGetByIdChain): |
| (JSC::CTI::privateCompilePutByIdReplace): |
| (JSC::CTI::privateCompilePutByIdTransition): |
| (JSC::CTI::privateCompileCTIMachineTrampolines): |
| (JSC::CTI::privateCompilePatchGetArrayLength): |
| (JSC::CTI::emitGetVariableObjectRegister): |
| (JSC::CTI::emitPutVariableObjectRegister): |
| (JSC::CTI::compileRegExp): |
| * VM/CTI.h: |
| * 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::generateParenthesesNonGreedy): |
| (JSC::WRECGenerator::generateParenthesesResetTrampoline): |
| (JSC::WRECGenerator::generateAssertionBOL): |
| (JSC::WRECGenerator::generateAssertionEOL): |
| (JSC::WRECGenerator::generateAssertionWordBoundary): |
| (JSC::WRECGenerator::generateBackreference): |
| (JSC::WRECGenerator::generateDisjunction): |
| (JSC::WRECGenerator::terminateDisjunction): |
| |
| 2008-11-15 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Geoffrey Garen. |
| |
| Remove dead method declaration. |
| |
| * bytecompiler/CodeGenerator.h: |
| |
| 2008-11-15 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Renamed LabelID to Label, Label::isForwardLabel to Label::isForward. |
| |
| * VM/LabelID.h: |
| (JSC::Label::Label): |
| (JSC::Label::isForward): |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::BytecodeGenerator::newLabel): |
| (JSC::BytecodeGenerator::emitLabel): |
| (JSC::BytecodeGenerator::emitJump): |
| (JSC::BytecodeGenerator::emitJumpIfTrue): |
| (JSC::BytecodeGenerator::emitJumpIfFalse): |
| (JSC::BytecodeGenerator::pushFinallyContext): |
| (JSC::BytecodeGenerator::emitComplexJumpScopes): |
| (JSC::BytecodeGenerator::emitJumpScopes): |
| (JSC::BytecodeGenerator::emitNextPropertyName): |
| (JSC::BytecodeGenerator::emitCatch): |
| (JSC::BytecodeGenerator::emitJumpSubroutine): |
| (JSC::prepareJumpTableForImmediateSwitch): |
| (JSC::prepareJumpTableForCharacterSwitch): |
| (JSC::prepareJumpTableForStringSwitch): |
| (JSC::BytecodeGenerator::endSwitch): |
| * bytecompiler/CodeGenerator.h: |
| * bytecompiler/LabelScope.h: |
| (JSC::LabelScope::LabelScope): |
| (JSC::LabelScope::breakTarget): |
| (JSC::LabelScope::continueTarget): |
| * parser/Nodes.cpp: |
| (JSC::LogicalOpNode::emitBytecode): |
| (JSC::ConditionalNode::emitBytecode): |
| (JSC::IfNode::emitBytecode): |
| (JSC::IfElseNode::emitBytecode): |
| (JSC::DoWhileNode::emitBytecode): |
| (JSC::WhileNode::emitBytecode): |
| (JSC::ForNode::emitBytecode): |
| (JSC::ForInNode::emitBytecode): |
| (JSC::ReturnNode::emitBytecode): |
| (JSC::CaseBlockNode::emitBytecodeForBlock): |
| (JSC::TryNode::emitBytecode): |
| |
| 2008-11-15 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Renamed JITCodeBuffer to AssemblerBuffer and renamed its data members |
| to be more like the rest of our buffer classes, with a size and a |
| capacity. |
| |
| Added an assert in the unchecked put case to match the test in the checked |
| put case. |
| |
| Changed a C-style cast to a C++-style cast. |
| |
| Renamed MAX_INSTRUCTION_SIZE to maxInstructionSize. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::CTI): |
| (JSC::CTI::compileRegExp): |
| * VM/Machine.cpp: |
| (JSC::BytecodeInterpreter::BytecodeInterpreter): |
| * VM/Machine.h: |
| (JSC::BytecodeInterpreter::assemblerBuffer): |
| * masm/X86Assembler.h: |
| (JSC::AssemblerBuffer::AssemblerBuffer): |
| (JSC::AssemblerBuffer::~AssemblerBuffer): |
| (JSC::AssemblerBuffer::ensureSpace): |
| (JSC::AssemblerBuffer::isAligned): |
| (JSC::AssemblerBuffer::putByteUnchecked): |
| (JSC::AssemblerBuffer::putByte): |
| (JSC::AssemblerBuffer::putShortUnchecked): |
| (JSC::AssemblerBuffer::putShort): |
| (JSC::AssemblerBuffer::putIntUnchecked): |
| (JSC::AssemblerBuffer::putInt): |
| (JSC::AssemblerBuffer::data): |
| (JSC::AssemblerBuffer::size): |
| (JSC::AssemblerBuffer::reset): |
| (JSC::AssemblerBuffer::copy): |
| (JSC::AssemblerBuffer::grow): |
| (JSC::X86Assembler::): |
| (JSC::X86Assembler::X86Assembler): |
| (JSC::X86Assembler::testl_i32r): |
| (JSC::X86Assembler::movl_mr): |
| (JSC::X86Assembler::movl_rm): |
| (JSC::X86Assembler::movl_i32m): |
| (JSC::X86Assembler::emitCall): |
| (JSC::X86Assembler::label): |
| (JSC::X86Assembler::emitUnlinkedJmp): |
| (JSC::X86Assembler::emitUnlinkedJne): |
| (JSC::X86Assembler::emitUnlinkedJe): |
| (JSC::X86Assembler::emitUnlinkedJl): |
| (JSC::X86Assembler::emitUnlinkedJb): |
| (JSC::X86Assembler::emitUnlinkedJle): |
| (JSC::X86Assembler::emitUnlinkedJbe): |
| (JSC::X86Assembler::emitUnlinkedJge): |
| (JSC::X86Assembler::emitUnlinkedJg): |
| (JSC::X86Assembler::emitUnlinkedJa): |
| (JSC::X86Assembler::emitUnlinkedJae): |
| (JSC::X86Assembler::emitUnlinkedJo): |
| (JSC::X86Assembler::emitUnlinkedJp): |
| (JSC::X86Assembler::emitUnlinkedJs): |
| (JSC::X86Assembler::link): |
| (JSC::X86Assembler::emitModRm_rr): |
| (JSC::X86Assembler::emitModRm_rm): |
| (JSC::X86Assembler::emitModRm_opr): |
| |
| 2008-11-15 Geoffrey Garen <ggaren@apple.com> |
| |
| Suggested by Maciej Stachowiak. |
| |
| Reverted most "opcode" => "bytecode" renames. We use "bytecode" as a |
| mass noun to refer to a stream of instructions. Each instruction may be |
| an opcode or an operand. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::emitCTICall): |
| (JSC::CTI::compileOpCall): |
| (JSC::CTI::compileBinaryArithOp): |
| (JSC::CTI::compileBinaryArithOpSlowCase): |
| (JSC::CTI::privateCompileMainPass): |
| (JSC::CTI::privateCompileSlowCases): |
| (JSC::CTI::privateCompile): |
| * VM/CTI.h: |
| * VM/CodeBlock.cpp: |
| (JSC::CodeBlock::printStructureIDs): |
| (JSC::CodeBlock::dump): |
| (JSC::CodeBlock::derefStructureIDs): |
| (JSC::CodeBlock::refStructureIDs): |
| * VM/CodeBlock.h: |
| * VM/ExceptionHelpers.cpp: |
| (JSC::createNotAnObjectError): |
| * VM/Instruction.h: |
| (JSC::Instruction::Instruction): |
| (JSC::Instruction::): |
| * VM/Machine.cpp: |
| (JSC::BytecodeInterpreter::isOpcode): |
| (JSC::BytecodeInterpreter::throwException): |
| (JSC::BytecodeInterpreter::tryCachePutByID): |
| (JSC::BytecodeInterpreter::uncachePutByID): |
| (JSC::BytecodeInterpreter::tryCacheGetByID): |
| (JSC::BytecodeInterpreter::uncacheGetByID): |
| (JSC::BytecodeInterpreter::privateExecute): |
| (JSC::BytecodeInterpreter::tryCTICachePutByID): |
| (JSC::BytecodeInterpreter::tryCTICacheGetByID): |
| * VM/Machine.h: |
| (JSC::BytecodeInterpreter::getOpcode): |
| (JSC::BytecodeInterpreter::getOpcodeID): |
| (JSC::BytecodeInterpreter::isCallBytecode): |
| * VM/Opcode.cpp: |
| (JSC::): |
| (JSC::OpcodeStats::OpcodeStats): |
| (JSC::compareOpcodeIndices): |
| (JSC::compareOpcodePairIndices): |
| (JSC::OpcodeStats::~OpcodeStats): |
| (JSC::OpcodeStats::recordInstruction): |
| (JSC::OpcodeStats::resetLastInstruction): |
| * VM/Opcode.h: |
| (JSC::): |
| (JSC::padOpcodeName): |
| * VM/SamplingTool.cpp: |
| (JSC::ScopeSampleRecord::sample): |
| (JSC::SamplingTool::run): |
| (JSC::compareOpcodeIndicesSampling): |
| (JSC::SamplingTool::dump): |
| * VM/SamplingTool.h: |
| (JSC::ScopeSampleRecord::ScopeSampleRecord): |
| (JSC::SamplingTool::SamplingTool): |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::BytecodeGenerator::BytecodeGenerator): |
| (JSC::BytecodeGenerator::emitLabel): |
| (JSC::BytecodeGenerator::emitOpcode): |
| (JSC::BytecodeGenerator::emitJump): |
| (JSC::BytecodeGenerator::emitJumpIfTrue): |
| (JSC::BytecodeGenerator::emitJumpIfFalse): |
| (JSC::BytecodeGenerator::emitMove): |
| (JSC::BytecodeGenerator::emitUnaryOp): |
| (JSC::BytecodeGenerator::emitPreInc): |
| (JSC::BytecodeGenerator::emitPreDec): |
| (JSC::BytecodeGenerator::emitPostInc): |
| (JSC::BytecodeGenerator::emitPostDec): |
| (JSC::BytecodeGenerator::emitBinaryOp): |
| (JSC::BytecodeGenerator::emitEqualityOp): |
| (JSC::BytecodeGenerator::emitUnexpectedLoad): |
| (JSC::BytecodeGenerator::emitInstanceOf): |
| (JSC::BytecodeGenerator::emitResolve): |
| (JSC::BytecodeGenerator::emitGetScopedVar): |
| (JSC::BytecodeGenerator::emitPutScopedVar): |
| (JSC::BytecodeGenerator::emitResolveBase): |
| (JSC::BytecodeGenerator::emitResolveWithBase): |
| (JSC::BytecodeGenerator::emitResolveFunction): |
| (JSC::BytecodeGenerator::emitGetById): |
| (JSC::BytecodeGenerator::emitPutById): |
| (JSC::BytecodeGenerator::emitPutGetter): |
| (JSC::BytecodeGenerator::emitPutSetter): |
| (JSC::BytecodeGenerator::emitDeleteById): |
| (JSC::BytecodeGenerator::emitGetByVal): |
| (JSC::BytecodeGenerator::emitPutByVal): |
| (JSC::BytecodeGenerator::emitDeleteByVal): |
| (JSC::BytecodeGenerator::emitPutByIndex): |
| (JSC::BytecodeGenerator::emitNewObject): |
| (JSC::BytecodeGenerator::emitNewArray): |
| (JSC::BytecodeGenerator::emitNewFunction): |
| (JSC::BytecodeGenerator::emitNewRegExp): |
| (JSC::BytecodeGenerator::emitNewFunctionExpression): |
| (JSC::BytecodeGenerator::emitCall): |
| (JSC::BytecodeGenerator::emitReturn): |
| (JSC::BytecodeGenerator::emitUnaryNoDstOp): |
| (JSC::BytecodeGenerator::emitConstruct): |
| (JSC::BytecodeGenerator::emitPopScope): |
| (JSC::BytecodeGenerator::emitDebugHook): |
| (JSC::BytecodeGenerator::emitComplexJumpScopes): |
| (JSC::BytecodeGenerator::emitJumpScopes): |
| (JSC::BytecodeGenerator::emitNextPropertyName): |
| (JSC::BytecodeGenerator::emitCatch): |
| (JSC::BytecodeGenerator::emitNewError): |
| (JSC::BytecodeGenerator::emitJumpSubroutine): |
| (JSC::BytecodeGenerator::emitSubroutineReturn): |
| (JSC::BytecodeGenerator::emitPushNewScope): |
| (JSC::BytecodeGenerator::beginSwitch): |
| * bytecompiler/CodeGenerator.h: |
| * jsc.cpp: |
| (runWithScripts): |
| * masm/X86Assembler.h: |
| (JSC::X86Assembler::): |
| (JSC::X86Assembler::emitModRm_opr): |
| (JSC::X86Assembler::emitModRm_opr_Unchecked): |
| (JSC::X86Assembler::emitModRm_opm): |
| (JSC::X86Assembler::emitModRm_opm_Unchecked): |
| (JSC::X86Assembler::emitModRm_opmsib): |
| * parser/Nodes.cpp: |
| (JSC::UnaryOpNode::emitBytecode): |
| (JSC::BinaryOpNode::emitBytecode): |
| (JSC::ReverseBinaryOpNode::emitBytecode): |
| (JSC::ThrowableBinaryOpNode::emitBytecode): |
| (JSC::emitReadModifyAssignment): |
| (JSC::ScopeNode::ScopeNode): |
| * parser/Nodes.h: |
| (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::InstanceOfNode::): |
| (JSC::InNode::): |
| (JSC::EqualNode::): |
| (JSC::NotEqualNode::): |
| (JSC::StrictEqualNode::): |
| (JSC::NotStrictEqualNode::): |
| (JSC::BitAndNode::): |
| (JSC::BitOrNode::): |
| (JSC::BitXOrNode::): |
| * runtime/StructureID.cpp: |
| (JSC::StructureID::fromDictionaryTransition): |
| * wtf/Platform.h: |
| |
| 2008-11-15 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Renames: |
| |
| CodeGenerator => BytecodeGenerator |
| emitCodeForBlock => emitBytecodeForBlock |
| generatedByteCode => generatedBytecode |
| generateCode => generateBytecode |
| |
| * JavaScriptCore.exp: |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::BytecodeGenerator::setDumpsGeneratedCode): |
| (JSC::BytecodeGenerator::generate): |
| (JSC::BytecodeGenerator::addVar): |
| (JSC::BytecodeGenerator::addGlobalVar): |
| (JSC::BytecodeGenerator::allocateConstants): |
| (JSC::BytecodeGenerator::BytecodeGenerator): |
| (JSC::BytecodeGenerator::addParameter): |
| (JSC::BytecodeGenerator::registerFor): |
| (JSC::BytecodeGenerator::constRegisterFor): |
| (JSC::BytecodeGenerator::isLocal): |
| (JSC::BytecodeGenerator::isLocalConstant): |
| (JSC::BytecodeGenerator::newRegister): |
| (JSC::BytecodeGenerator::newTemporary): |
| (JSC::BytecodeGenerator::highestUsedRegister): |
| (JSC::BytecodeGenerator::newLabelScope): |
| (JSC::BytecodeGenerator::newLabel): |
| (JSC::BytecodeGenerator::emitLabel): |
| (JSC::BytecodeGenerator::emitBytecode): |
| (JSC::BytecodeGenerator::retrieveLastBinaryOp): |
| (JSC::BytecodeGenerator::retrieveLastUnaryOp): |
| (JSC::BytecodeGenerator::rewindBinaryOp): |
| (JSC::BytecodeGenerator::rewindUnaryOp): |
| (JSC::BytecodeGenerator::emitJump): |
| (JSC::BytecodeGenerator::emitJumpIfTrue): |
| (JSC::BytecodeGenerator::emitJumpIfFalse): |
| (JSC::BytecodeGenerator::addConstant): |
| (JSC::BytecodeGenerator::addUnexpectedConstant): |
| (JSC::BytecodeGenerator::addRegExp): |
| (JSC::BytecodeGenerator::emitMove): |
| (JSC::BytecodeGenerator::emitUnaryOp): |
| (JSC::BytecodeGenerator::emitPreInc): |
| (JSC::BytecodeGenerator::emitPreDec): |
| (JSC::BytecodeGenerator::emitPostInc): |
| (JSC::BytecodeGenerator::emitPostDec): |
| (JSC::BytecodeGenerator::emitBinaryOp): |
| (JSC::BytecodeGenerator::emitEqualityOp): |
| (JSC::BytecodeGenerator::emitLoad): |
| (JSC::BytecodeGenerator::emitUnexpectedLoad): |
| (JSC::BytecodeGenerator::findScopedProperty): |
| (JSC::BytecodeGenerator::emitInstanceOf): |
| (JSC::BytecodeGenerator::emitResolve): |
| (JSC::BytecodeGenerator::emitGetScopedVar): |
| (JSC::BytecodeGenerator::emitPutScopedVar): |
| (JSC::BytecodeGenerator::emitResolveBase): |
| (JSC::BytecodeGenerator::emitResolveWithBase): |
| (JSC::BytecodeGenerator::emitResolveFunction): |
| (JSC::BytecodeGenerator::emitGetById): |
| (JSC::BytecodeGenerator::emitPutById): |
| (JSC::BytecodeGenerator::emitPutGetter): |
| (JSC::BytecodeGenerator::emitPutSetter): |
| (JSC::BytecodeGenerator::emitDeleteById): |
| (JSC::BytecodeGenerator::emitGetByVal): |
| (JSC::BytecodeGenerator::emitPutByVal): |
| (JSC::BytecodeGenerator::emitDeleteByVal): |
| (JSC::BytecodeGenerator::emitPutByIndex): |
| (JSC::BytecodeGenerator::emitNewObject): |
| (JSC::BytecodeGenerator::emitNewArray): |
| (JSC::BytecodeGenerator::emitNewFunction): |
| (JSC::BytecodeGenerator::emitNewRegExp): |
| (JSC::BytecodeGenerator::emitNewFunctionExpression): |
| (JSC::BytecodeGenerator::emitCall): |
| (JSC::BytecodeGenerator::emitCallEval): |
| (JSC::BytecodeGenerator::emitReturn): |
| (JSC::BytecodeGenerator::emitUnaryNoDstOp): |
| (JSC::BytecodeGenerator::emitConstruct): |
| (JSC::BytecodeGenerator::emitPushScope): |
| (JSC::BytecodeGenerator::emitPopScope): |
| (JSC::BytecodeGenerator::emitDebugHook): |
| (JSC::BytecodeGenerator::pushFinallyContext): |
| (JSC::BytecodeGenerator::popFinallyContext): |
| (JSC::BytecodeGenerator::breakTarget): |
| (JSC::BytecodeGenerator::continueTarget): |
| (JSC::BytecodeGenerator::emitComplexJumpScopes): |
| (JSC::BytecodeGenerator::emitJumpScopes): |
| (JSC::BytecodeGenerator::emitNextPropertyName): |
| (JSC::BytecodeGenerator::emitCatch): |
| (JSC::BytecodeGenerator::emitNewError): |
| (JSC::BytecodeGenerator::emitJumpSubroutine): |
| (JSC::BytecodeGenerator::emitSubroutineReturn): |
| (JSC::BytecodeGenerator::emitPushNewScope): |
| (JSC::BytecodeGenerator::beginSwitch): |
| (JSC::BytecodeGenerator::endSwitch): |
| (JSC::BytecodeGenerator::emitThrowExpressionTooDeepException): |
| * bytecompiler/CodeGenerator.h: |
| * jsc.cpp: |
| (runWithScripts): |
| * parser/Nodes.cpp: |
| (JSC::ThrowableExpressionData::emitThrowError): |
| (JSC::NullNode::emitBytecode): |
| (JSC::BooleanNode::emitBytecode): |
| (JSC::NumberNode::emitBytecode): |
| (JSC::StringNode::emitBytecode): |
| (JSC::RegExpNode::emitBytecode): |
| (JSC::ThisNode::emitBytecode): |
| (JSC::ResolveNode::isPure): |
| (JSC::ResolveNode::emitBytecode): |
| (JSC::ArrayNode::emitBytecode): |
| (JSC::ObjectLiteralNode::emitBytecode): |
| (JSC::PropertyListNode::emitBytecode): |
| (JSC::BracketAccessorNode::emitBytecode): |
| (JSC::DotAccessorNode::emitBytecode): |
| (JSC::ArgumentListNode::emitBytecode): |
| (JSC::NewExprNode::emitBytecode): |
| (JSC::EvalFunctionCallNode::emitBytecode): |
| (JSC::FunctionCallValueNode::emitBytecode): |
| (JSC::FunctionCallResolveNode::emitBytecode): |
| (JSC::FunctionCallBracketNode::emitBytecode): |
| (JSC::FunctionCallDotNode::emitBytecode): |
| (JSC::emitPreIncOrDec): |
| (JSC::emitPostIncOrDec): |
| (JSC::PostfixResolveNode::emitBytecode): |
| (JSC::PostfixBracketNode::emitBytecode): |
| (JSC::PostfixDotNode::emitBytecode): |
| (JSC::PostfixErrorNode::emitBytecode): |
| (JSC::DeleteResolveNode::emitBytecode): |
| (JSC::DeleteBracketNode::emitBytecode): |
| (JSC::DeleteDotNode::emitBytecode): |
| (JSC::DeleteValueNode::emitBytecode): |
| (JSC::VoidNode::emitBytecode): |
| (JSC::TypeOfResolveNode::emitBytecode): |
| (JSC::TypeOfValueNode::emitBytecode): |
| (JSC::PrefixResolveNode::emitBytecode): |
| (JSC::PrefixBracketNode::emitBytecode): |
| (JSC::PrefixDotNode::emitBytecode): |
| (JSC::PrefixErrorNode::emitBytecode): |
| (JSC::UnaryOpNode::emitBytecode): |
| (JSC::BinaryOpNode::emitBytecode): |
| (JSC::EqualNode::emitBytecode): |
| (JSC::StrictEqualNode::emitBytecode): |
| (JSC::ReverseBinaryOpNode::emitBytecode): |
| (JSC::ThrowableBinaryOpNode::emitBytecode): |
| (JSC::InstanceOfNode::emitBytecode): |
| (JSC::LogicalOpNode::emitBytecode): |
| (JSC::ConditionalNode::emitBytecode): |
| (JSC::emitReadModifyAssignment): |
| (JSC::ReadModifyResolveNode::emitBytecode): |
| (JSC::AssignResolveNode::emitBytecode): |
| (JSC::AssignDotNode::emitBytecode): |
| (JSC::ReadModifyDotNode::emitBytecode): |
| (JSC::AssignErrorNode::emitBytecode): |
| (JSC::AssignBracketNode::emitBytecode): |
| (JSC::ReadModifyBracketNode::emitBytecode): |
| (JSC::CommaNode::emitBytecode): |
| (JSC::ConstDeclNode::emitCodeSingle): |
| (JSC::ConstDeclNode::emitBytecode): |
| (JSC::ConstStatementNode::emitBytecode): |
| (JSC::statementListEmitCode): |
| (JSC::BlockNode::emitBytecode): |
| (JSC::EmptyStatementNode::emitBytecode): |
| (JSC::DebuggerStatementNode::emitBytecode): |
| (JSC::ExprStatementNode::emitBytecode): |
| (JSC::VarStatementNode::emitBytecode): |
| (JSC::IfNode::emitBytecode): |
| (JSC::IfElseNode::emitBytecode): |
| (JSC::DoWhileNode::emitBytecode): |
| (JSC::WhileNode::emitBytecode): |
| (JSC::ForNode::emitBytecode): |
| (JSC::ForInNode::emitBytecode): |
| (JSC::ContinueNode::emitBytecode): |
| (JSC::BreakNode::emitBytecode): |
| (JSC::ReturnNode::emitBytecode): |
| (JSC::WithNode::emitBytecode): |
| (JSC::CaseBlockNode::emitBytecodeForBlock): |
| (JSC::SwitchNode::emitBytecode): |
| (JSC::LabelNode::emitBytecode): |
| (JSC::ThrowNode::emitBytecode): |
| (JSC::TryNode::emitBytecode): |
| (JSC::EvalNode::emitBytecode): |
| (JSC::EvalNode::generateBytecode): |
| (JSC::FunctionBodyNode::generateBytecode): |
| (JSC::FunctionBodyNode::emitBytecode): |
| (JSC::ProgramNode::emitBytecode): |
| (JSC::ProgramNode::generateBytecode): |
| (JSC::FuncDeclNode::emitBytecode): |
| (JSC::FuncExprNode::emitBytecode): |
| * parser/Nodes.h: |
| (JSC::ExpressionNode::): |
| (JSC::BooleanNode::): |
| (JSC::NumberNode::): |
| (JSC::StringNode::): |
| (JSC::ProgramNode::): |
| (JSC::EvalNode::): |
| (JSC::FunctionBodyNode::): |
| * runtime/Arguments.h: |
| (JSC::Arguments::getArgumentsData): |
| (JSC::JSActivation::copyRegisters): |
| * runtime/JSActivation.cpp: |
| (JSC::JSActivation::mark): |
| * runtime/JSActivation.h: |
| (JSC::JSActivation::JSActivationData::JSActivationData): |
| * runtime/JSFunction.cpp: |
| (JSC::JSFunction::~JSFunction): |
| |
| 2008-11-15 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Renamed all forms of "byte code" "opcode" "op code" "code" "bitcode" |
| etc. to "bytecode". |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::printBytecodeOperandTypes): |
| (JSC::CTI::emitAllocateNumber): |
| (JSC::CTI::emitNakedCall): |
| (JSC::CTI::emitNakedFastCall): |
| (JSC::CTI::emitCTICall): |
| (JSC::CTI::emitJumpSlowCaseIfNotJSCell): |
| (JSC::CTI::emitJumpSlowCaseIfNotImmNum): |
| (JSC::CTI::emitJumpSlowCaseIfNotImmNums): |
| (JSC::CTI::emitFastArithIntToImmOrSlowCase): |
| (JSC::CTI::compileOpCall): |
| (JSC::CTI::emitSlowScriptCheck): |
| (JSC::CTI::compileBinaryArithOp): |
| (JSC::CTI::compileBinaryArithOpSlowCase): |
| (JSC::CTI::privateCompileMainPass): |
| (JSC::CTI::privateCompileSlowCases): |
| (JSC::CTI::privateCompile): |
| * VM/CTI.h: |
| (JSC::CallRecord::CallRecord): |
| (JSC::SwitchRecord::SwitchRecord): |
| * VM/CodeBlock.cpp: |
| (JSC::CodeBlock::printStructureIDs): |
| (JSC::CodeBlock::dump): |
| (JSC::CodeBlock::~CodeBlock): |
| (JSC::CodeBlock::derefStructureIDs): |
| (JSC::CodeBlock::refStructureIDs): |
| * VM/CodeBlock.h: |
| (JSC::StructureStubInfo::StructureStubInfo): |
| * VM/ExceptionHelpers.cpp: |
| (JSC::createNotAnObjectError): |
| * VM/Instruction.h: |
| (JSC::Instruction::Instruction): |
| (JSC::Instruction::): |
| * VM/Machine.cpp: |
| (JSC::BytecodeInterpreter::isBytecode): |
| (JSC::BytecodeInterpreter::throwException): |
| (JSC::BytecodeInterpreter::execute): |
| (JSC::BytecodeInterpreter::tryCachePutByID): |
| (JSC::BytecodeInterpreter::uncachePutByID): |
| (JSC::BytecodeInterpreter::tryCacheGetByID): |
| (JSC::BytecodeInterpreter::uncacheGetByID): |
| (JSC::BytecodeInterpreter::privateExecute): |
| (JSC::BytecodeInterpreter::tryCTICachePutByID): |
| (JSC::BytecodeInterpreter::tryCTICacheGetByID): |
| (JSC::BytecodeInterpreter::cti_op_call_JSFunction): |
| (JSC::BytecodeInterpreter::cti_vm_dontLazyLinkCall): |
| (JSC::BytecodeInterpreter::cti_vm_lazyLinkCall): |
| * VM/Machine.h: |
| (JSC::BytecodeInterpreter::getBytecode): |
| (JSC::BytecodeInterpreter::getBytecodeID): |
| (JSC::BytecodeInterpreter::isCallBytecode): |
| * VM/Opcode.cpp: |
| (JSC::): |
| (JSC::BytecodeStats::BytecodeStats): |
| (JSC::compareBytecodeIndices): |
| (JSC::compareBytecodePairIndices): |
| (JSC::BytecodeStats::~BytecodeStats): |
| (JSC::BytecodeStats::recordInstruction): |
| (JSC::BytecodeStats::resetLastInstruction): |
| * VM/Opcode.h: |
| (JSC::): |
| (JSC::padBytecodeName): |
| * VM/SamplingTool.cpp: |
| (JSC::ScopeSampleRecord::sample): |
| (JSC::SamplingTool::run): |
| (JSC::compareBytecodeIndicesSampling): |
| (JSC::SamplingTool::dump): |
| * VM/SamplingTool.h: |
| (JSC::ScopeSampleRecord::ScopeSampleRecord): |
| (JSC::SamplingTool::SamplingTool): |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::CodeGenerator::generate): |
| (JSC::CodeGenerator::CodeGenerator): |
| (JSC::CodeGenerator::emitLabel): |
| (JSC::CodeGenerator::emitBytecode): |
| (JSC::CodeGenerator::emitJump): |
| (JSC::CodeGenerator::emitJumpIfTrue): |
| (JSC::CodeGenerator::emitJumpIfFalse): |
| (JSC::CodeGenerator::emitMove): |
| (JSC::CodeGenerator::emitUnaryOp): |
| (JSC::CodeGenerator::emitPreInc): |
| (JSC::CodeGenerator::emitPreDec): |
| (JSC::CodeGenerator::emitPostInc): |
| (JSC::CodeGenerator::emitPostDec): |
| (JSC::CodeGenerator::emitBinaryOp): |
| (JSC::CodeGenerator::emitEqualityOp): |
| (JSC::CodeGenerator::emitUnexpectedLoad): |
| (JSC::CodeGenerator::emitInstanceOf): |
| (JSC::CodeGenerator::emitResolve): |
| (JSC::CodeGenerator::emitGetScopedVar): |
| (JSC::CodeGenerator::emitPutScopedVar): |
| (JSC::CodeGenerator::emitResolveBase): |
| (JSC::CodeGenerator::emitResolveWithBase): |
| (JSC::CodeGenerator::emitResolveFunction): |
| (JSC::CodeGenerator::emitGetById): |
| (JSC::CodeGenerator::emitPutById): |
| (JSC::CodeGenerator::emitPutGetter): |
| (JSC::CodeGenerator::emitPutSetter): |
| (JSC::CodeGenerator::emitDeleteById): |
| (JSC::CodeGenerator::emitGetByVal): |
| (JSC::CodeGenerator::emitPutByVal): |
| (JSC::CodeGenerator::emitDeleteByVal): |
| (JSC::CodeGenerator::emitPutByIndex): |
| (JSC::CodeGenerator::emitNewObject): |
| (JSC::CodeGenerator::emitNewArray): |
| (JSC::CodeGenerator::emitNewFunction): |
| (JSC::CodeGenerator::emitNewRegExp): |
| (JSC::CodeGenerator::emitNewFunctionExpression): |
| (JSC::CodeGenerator::emitCall): |
| (JSC::CodeGenerator::emitReturn): |
| (JSC::CodeGenerator::emitUnaryNoDstOp): |
| (JSC::CodeGenerator::emitConstruct): |
| (JSC::CodeGenerator::emitPopScope): |
| (JSC::CodeGenerator::emitDebugHook): |
| (JSC::CodeGenerator::emitComplexJumpScopes): |
| (JSC::CodeGenerator::emitJumpScopes): |
| (JSC::CodeGenerator::emitNextPropertyName): |
| (JSC::CodeGenerator::emitCatch): |
| (JSC::CodeGenerator::emitNewError): |
| (JSC::CodeGenerator::emitJumpSubroutine): |
| (JSC::CodeGenerator::emitSubroutineReturn): |
| (JSC::CodeGenerator::emitPushNewScope): |
| (JSC::CodeGenerator::beginSwitch): |
| (JSC::CodeGenerator::endSwitch): |
| * bytecompiler/CodeGenerator.h: |
| (JSC::CodeGenerator::emitNode): |
| * jsc.cpp: |
| (runWithScripts): |
| * masm/X86Assembler.h: |
| (JSC::X86Assembler::): |
| (JSC::X86Assembler::emitModRm_opr): |
| (JSC::X86Assembler::emitModRm_opr_Unchecked): |
| (JSC::X86Assembler::emitModRm_opm): |
| (JSC::X86Assembler::emitModRm_opm_Unchecked): |
| (JSC::X86Assembler::emitModRm_opmsib): |
| * parser/Nodes.cpp: |
| (JSC::NullNode::emitBytecode): |
| (JSC::BooleanNode::emitBytecode): |
| (JSC::NumberNode::emitBytecode): |
| (JSC::StringNode::emitBytecode): |
| (JSC::RegExpNode::emitBytecode): |
| (JSC::ThisNode::emitBytecode): |
| (JSC::ResolveNode::emitBytecode): |
| (JSC::ArrayNode::emitBytecode): |
| (JSC::ObjectLiteralNode::emitBytecode): |
| (JSC::PropertyListNode::emitBytecode): |
| (JSC::BracketAccessorNode::emitBytecode): |
| (JSC::DotAccessorNode::emitBytecode): |
| (JSC::ArgumentListNode::emitBytecode): |
| (JSC::NewExprNode::emitBytecode): |
| (JSC::EvalFunctionCallNode::emitBytecode): |
| (JSC::FunctionCallValueNode::emitBytecode): |
| (JSC::FunctionCallResolveNode::emitBytecode): |
| (JSC::FunctionCallBracketNode::emitBytecode): |
| (JSC::FunctionCallDotNode::emitBytecode): |
| (JSC::PostfixResolveNode::emitBytecode): |
| (JSC::PostfixBracketNode::emitBytecode): |
| (JSC::PostfixDotNode::emitBytecode): |
| (JSC::PostfixErrorNode::emitBytecode): |
| (JSC::DeleteResolveNode::emitBytecode): |
| (JSC::DeleteBracketNode::emitBytecode): |
| (JSC::DeleteDotNode::emitBytecode): |
| (JSC::DeleteValueNode::emitBytecode): |
| (JSC::VoidNode::emitBytecode): |
| (JSC::TypeOfResolveNode::emitBytecode): |
| (JSC::TypeOfValueNode::emitBytecode): |
| (JSC::PrefixResolveNode::emitBytecode): |
| (JSC::PrefixBracketNode::emitBytecode): |
| (JSC::PrefixDotNode::emitBytecode): |
| (JSC::PrefixErrorNode::emitBytecode): |
| (JSC::UnaryOpNode::emitBytecode): |
| (JSC::BinaryOpNode::emitBytecode): |
| (JSC::EqualNode::emitBytecode): |
| (JSC::StrictEqualNode::emitBytecode): |
| (JSC::ReverseBinaryOpNode::emitBytecode): |
| (JSC::ThrowableBinaryOpNode::emitBytecode): |
| (JSC::InstanceOfNode::emitBytecode): |
| (JSC::LogicalOpNode::emitBytecode): |
| (JSC::ConditionalNode::emitBytecode): |
| (JSC::emitReadModifyAssignment): |
| (JSC::ReadModifyResolveNode::emitBytecode): |
| (JSC::AssignResolveNode::emitBytecode): |
| (JSC::AssignDotNode::emitBytecode): |
| (JSC::ReadModifyDotNode::emitBytecode): |
| (JSC::AssignErrorNode::emitBytecode): |
| (JSC::AssignBracketNode::emitBytecode): |
| (JSC::ReadModifyBracketNode::emitBytecode): |
| (JSC::CommaNode::emitBytecode): |
| (JSC::ConstDeclNode::emitBytecode): |
| (JSC::ConstStatementNode::emitBytecode): |
| (JSC::BlockNode::emitBytecode): |
| (JSC::EmptyStatementNode::emitBytecode): |
| (JSC::DebuggerStatementNode::emitBytecode): |
| (JSC::ExprStatementNode::emitBytecode): |
| (JSC::VarStatementNode::emitBytecode): |
| (JSC::IfNode::emitBytecode): |
| (JSC::IfElseNode::emitBytecode): |
| (JSC::DoWhileNode::emitBytecode): |
| (JSC::WhileNode::emitBytecode): |
| (JSC::ForNode::emitBytecode): |
| (JSC::ForInNode::emitBytecode): |
| (JSC::ContinueNode::emitBytecode): |
| (JSC::BreakNode::emitBytecode): |
| (JSC::ReturnNode::emitBytecode): |
| (JSC::WithNode::emitBytecode): |
| (JSC::SwitchNode::emitBytecode): |
| (JSC::LabelNode::emitBytecode): |
| (JSC::ThrowNode::emitBytecode): |
| (JSC::TryNode::emitBytecode): |
| (JSC::ScopeNode::ScopeNode): |
| (JSC::EvalNode::emitBytecode): |
| (JSC::FunctionBodyNode::emitBytecode): |
| (JSC::ProgramNode::emitBytecode): |
| (JSC::FuncDeclNode::emitBytecode): |
| (JSC::FuncExprNode::emitBytecode): |
| * parser/Nodes.h: |
| (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::InstanceOfNode::): |
| (JSC::InNode::): |
| (JSC::EqualNode::): |
| (JSC::NotEqualNode::): |
| (JSC::StrictEqualNode::): |
| (JSC::NotStrictEqualNode::): |
| (JSC::BitAndNode::): |
| (JSC::BitOrNode::): |
| (JSC::BitXOrNode::): |
| (JSC::ProgramNode::): |
| (JSC::EvalNode::): |
| (JSC::FunctionBodyNode::): |
| * runtime/JSNotAnObject.h: |
| * runtime/StructureID.cpp: |
| (JSC::StructureID::fromDictionaryTransition): |
| * wtf/Platform.h: |
| |
| 2008-11-15 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Renamed Machine to BytecodeInterpreter. |
| |
| Nixed the Interpreter class, and changed its two functions to stand-alone |
| functions. |
| |
| * JavaScriptCore.exp: |
| * VM/CTI.cpp: |
| (JSC::): |
| (JSC::CTI::emitCTICall): |
| (JSC::CTI::CTI): |
| (JSC::CTI::compileOpCall): |
| (JSC::CTI::emitSlowScriptCheck): |
| (JSC::CTI::compileBinaryArithOpSlowCase): |
| (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::privateCompileCTIMachineTrampolines): |
| (JSC::CTI::freeCTIMachineTrampolines): |
| (JSC::CTI::patchGetByIdSelf): |
| (JSC::CTI::patchPutByIdReplace): |
| (JSC::CTI::privateCompilePatchGetArrayLength): |
| (JSC::CTI::compileRegExp): |
| * VM/CTI.h: |
| * VM/CodeBlock.cpp: |
| (JSC::CodeBlock::printStructureIDs): |
| (JSC::CodeBlock::dump): |
| (JSC::CodeBlock::derefStructureIDs): |
| (JSC::CodeBlock::refStructureIDs): |
| * VM/ExceptionHelpers.cpp: |
| (JSC::createNotAnObjectError): |
| * VM/Machine.cpp: |
| (JSC::jsLess): |
| (JSC::jsLessEq): |
| (JSC::BytecodeInterpreter::resolve): |
| (JSC::BytecodeInterpreter::resolveSkip): |
| (JSC::BytecodeInterpreter::resolveGlobal): |
| (JSC::BytecodeInterpreter::resolveBase): |
| (JSC::BytecodeInterpreter::resolveBaseAndProperty): |
| (JSC::BytecodeInterpreter::resolveBaseAndFunc): |
| (JSC::BytecodeInterpreter::slideRegisterWindowForCall): |
| (JSC::BytecodeInterpreter::callEval): |
| (JSC::BytecodeInterpreter::BytecodeInterpreter): |
| (JSC::BytecodeInterpreter::initialize): |
| (JSC::BytecodeInterpreter::~BytecodeInterpreter): |
| (JSC::BytecodeInterpreter::dumpCallFrame): |
| (JSC::BytecodeInterpreter::dumpRegisters): |
| (JSC::BytecodeInterpreter::isOpcode): |
| (JSC::BytecodeInterpreter::unwindCallFrame): |
| (JSC::BytecodeInterpreter::throwException): |
| (JSC::BytecodeInterpreter::execute): |
| (JSC::BytecodeInterpreter::debug): |
| (JSC::BytecodeInterpreter::resetTimeoutCheck): |
| (JSC::BytecodeInterpreter::checkTimeout): |
| (JSC::BytecodeInterpreter::createExceptionScope): |
| (JSC::BytecodeInterpreter::tryCachePutByID): |
| (JSC::BytecodeInterpreter::uncachePutByID): |
| (JSC::BytecodeInterpreter::tryCacheGetByID): |
| (JSC::BytecodeInterpreter::uncacheGetByID): |
| (JSC::BytecodeInterpreter::privateExecute): |
| (JSC::BytecodeInterpreter::retrieveArguments): |
| (JSC::BytecodeInterpreter::retrieveCaller): |
| (JSC::BytecodeInterpreter::retrieveLastCaller): |
| (JSC::BytecodeInterpreter::findFunctionCallFrame): |
| (JSC::BytecodeInterpreter::tryCTICachePutByID): |
| (JSC::BytecodeInterpreter::tryCTICacheGetByID): |
| (JSC::BytecodeInterpreter::cti_op_convert_this): |
| (JSC::BytecodeInterpreter::cti_op_end): |
| (JSC::BytecodeInterpreter::cti_op_add): |
| (JSC::BytecodeInterpreter::cti_op_pre_inc): |
| (JSC::BytecodeInterpreter::cti_timeout_check): |
| (JSC::BytecodeInterpreter::cti_register_file_check): |
| (JSC::BytecodeInterpreter::cti_op_loop_if_less): |
| (JSC::BytecodeInterpreter::cti_op_loop_if_lesseq): |
| (JSC::BytecodeInterpreter::cti_op_new_object): |
| (JSC::BytecodeInterpreter::cti_op_put_by_id): |
| (JSC::BytecodeInterpreter::cti_op_put_by_id_second): |
| (JSC::BytecodeInterpreter::cti_op_put_by_id_generic): |
| (JSC::BytecodeInterpreter::cti_op_put_by_id_fail): |
| (JSC::BytecodeInterpreter::cti_op_get_by_id): |
| (JSC::BytecodeInterpreter::cti_op_get_by_id_second): |
| (JSC::BytecodeInterpreter::cti_op_get_by_id_generic): |
| (JSC::BytecodeInterpreter::cti_op_get_by_id_fail): |
| (JSC::BytecodeInterpreter::cti_op_instanceof): |
| (JSC::BytecodeInterpreter::cti_op_del_by_id): |
| (JSC::BytecodeInterpreter::cti_op_mul): |
| (JSC::BytecodeInterpreter::cti_op_new_func): |
| (JSC::BytecodeInterpreter::cti_op_call_JSFunction): |
| (JSC::BytecodeInterpreter::cti_op_call_arityCheck): |
| (JSC::BytecodeInterpreter::cti_vm_dontLazyLinkCall): |
| (JSC::BytecodeInterpreter::cti_vm_lazyLinkCall): |
| (JSC::BytecodeInterpreter::cti_op_push_activation): |
| (JSC::BytecodeInterpreter::cti_op_call_NotJSFunction): |
| (JSC::BytecodeInterpreter::cti_op_create_arguments): |
| (JSC::BytecodeInterpreter::cti_op_create_arguments_no_params): |
| (JSC::BytecodeInterpreter::cti_op_tear_off_activation): |
| (JSC::BytecodeInterpreter::cti_op_tear_off_arguments): |
| (JSC::BytecodeInterpreter::cti_op_profile_will_call): |
| (JSC::BytecodeInterpreter::cti_op_profile_did_call): |
| (JSC::BytecodeInterpreter::cti_op_ret_scopeChain): |
| (JSC::BytecodeInterpreter::cti_op_new_array): |
| (JSC::BytecodeInterpreter::cti_op_resolve): |
| (JSC::BytecodeInterpreter::cti_op_construct_JSConstruct): |
| (JSC::BytecodeInterpreter::cti_op_construct_NotJSConstruct): |
| (JSC::BytecodeInterpreter::cti_op_get_by_val): |
| (JSC::BytecodeInterpreter::cti_op_resolve_func): |
| (JSC::BytecodeInterpreter::cti_op_sub): |
| (JSC::BytecodeInterpreter::cti_op_put_by_val): |
| (JSC::BytecodeInterpreter::cti_op_put_by_val_array): |
| (JSC::BytecodeInterpreter::cti_op_lesseq): |
| (JSC::BytecodeInterpreter::cti_op_loop_if_true): |
| (JSC::BytecodeInterpreter::cti_op_negate): |
| (JSC::BytecodeInterpreter::cti_op_resolve_base): |
| (JSC::BytecodeInterpreter::cti_op_resolve_skip): |
| (JSC::BytecodeInterpreter::cti_op_resolve_global): |
| (JSC::BytecodeInterpreter::cti_op_div): |
| (JSC::BytecodeInterpreter::cti_op_pre_dec): |
| (JSC::BytecodeInterpreter::cti_op_jless): |
| (JSC::BytecodeInterpreter::cti_op_not): |
| (JSC::BytecodeInterpreter::cti_op_jtrue): |
| (JSC::BytecodeInterpreter::cti_op_post_inc): |
| (JSC::BytecodeInterpreter::cti_op_eq): |
| (JSC::BytecodeInterpreter::cti_op_lshift): |
| (JSC::BytecodeInterpreter::cti_op_bitand): |
| (JSC::BytecodeInterpreter::cti_op_rshift): |
| (JSC::BytecodeInterpreter::cti_op_bitnot): |
| (JSC::BytecodeInterpreter::cti_op_resolve_with_base): |
| (JSC::BytecodeInterpreter::cti_op_new_func_exp): |
| (JSC::BytecodeInterpreter::cti_op_mod): |
| (JSC::BytecodeInterpreter::cti_op_less): |
| (JSC::BytecodeInterpreter::cti_op_neq): |
| (JSC::BytecodeInterpreter::cti_op_post_dec): |
| (JSC::BytecodeInterpreter::cti_op_urshift): |
| (JSC::BytecodeInterpreter::cti_op_bitxor): |
| (JSC::BytecodeInterpreter::cti_op_new_regexp): |
| (JSC::BytecodeInterpreter::cti_op_bitor): |
| (JSC::BytecodeInterpreter::cti_op_call_eval): |
| (JSC::BytecodeInterpreter::cti_op_throw): |
| (JSC::BytecodeInterpreter::cti_op_get_pnames): |
| (JSC::BytecodeInterpreter::cti_op_next_pname): |
| (JSC::BytecodeInterpreter::cti_op_push_scope): |
| (JSC::BytecodeInterpreter::cti_op_pop_scope): |
| (JSC::BytecodeInterpreter::cti_op_typeof): |
| (JSC::BytecodeInterpreter::cti_op_is_undefined): |
| (JSC::BytecodeInterpreter::cti_op_is_boolean): |
| (JSC::BytecodeInterpreter::cti_op_is_number): |
| (JSC::BytecodeInterpreter::cti_op_is_string): |
| (JSC::BytecodeInterpreter::cti_op_is_object): |
| (JSC::BytecodeInterpreter::cti_op_is_function): |
| (JSC::BytecodeInterpreter::cti_op_stricteq): |
| (JSC::BytecodeInterpreter::cti_op_nstricteq): |
| (JSC::BytecodeInterpreter::cti_op_to_jsnumber): |
| (JSC::BytecodeInterpreter::cti_op_in): |
| (JSC::BytecodeInterpreter::cti_op_push_new_scope): |
| (JSC::BytecodeInterpreter::cti_op_jmp_scopes): |
| (JSC::BytecodeInterpreter::cti_op_put_by_index): |
| (JSC::BytecodeInterpreter::cti_op_switch_imm): |
| (JSC::BytecodeInterpreter::cti_op_switch_char): |
| (JSC::BytecodeInterpreter::cti_op_switch_string): |
| (JSC::BytecodeInterpreter::cti_op_del_by_val): |
| (JSC::BytecodeInterpreter::cti_op_put_getter): |
| (JSC::BytecodeInterpreter::cti_op_put_setter): |
| (JSC::BytecodeInterpreter::cti_op_new_error): |
| (JSC::BytecodeInterpreter::cti_op_debug): |
| (JSC::BytecodeInterpreter::cti_vm_throw): |
| * VM/Machine.h: |
| * VM/Register.h: |
| * VM/SamplingTool.cpp: |
| (JSC::SamplingTool::run): |
| * VM/SamplingTool.h: |
| (JSC::SamplingTool::SamplingTool): |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::CodeGenerator::generate): |
| (JSC::CodeGenerator::CodeGenerator): |
| (JSC::CodeGenerator::emitOpcode): |
| * debugger/DebuggerCallFrame.cpp: |
| (JSC::DebuggerCallFrame::evaluate): |
| * jsc.cpp: |
| (runWithScripts): |
| * parser/Nodes.cpp: |
| (JSC::ScopeNode::ScopeNode): |
| * profiler/ProfileGenerator.cpp: |
| (JSC::ProfileGenerator::addParentForConsoleStart): |
| * runtime/ArrayPrototype.cpp: |
| (JSC::arrayProtoFuncPop): |
| (JSC::arrayProtoFuncPush): |
| * runtime/Collector.cpp: |
| (JSC::Heap::collect): |
| * runtime/ExecState.h: |
| (JSC::ExecState::interpreter): |
| * runtime/FunctionPrototype.cpp: |
| (JSC::functionProtoFuncApply): |
| * runtime/Interpreter.cpp: |
| (JSC::Interpreter::evaluate): |
| * runtime/JSCell.h: |
| * runtime/JSFunction.cpp: |
| (JSC::JSFunction::call): |
| (JSC::JSFunction::argumentsGetter): |
| (JSC::JSFunction::callerGetter): |
| (JSC::JSFunction::construct): |
| * runtime/JSFunction.h: |
| * runtime/JSGlobalData.cpp: |
| (JSC::JSGlobalData::JSGlobalData): |
| (JSC::JSGlobalData::~JSGlobalData): |
| * runtime/JSGlobalData.h: |
| * runtime/JSGlobalObject.cpp: |
| (JSC::JSGlobalObject::~JSGlobalObject): |
| (JSC::JSGlobalObject::setTimeoutTime): |
| (JSC::JSGlobalObject::startTimeoutCheck): |
| (JSC::JSGlobalObject::stopTimeoutCheck): |
| (JSC::JSGlobalObject::mark): |
| * runtime/JSGlobalObjectFunctions.cpp: |
| (JSC::globalFuncEval): |
| * runtime/JSString.h: |
| * runtime/RegExp.cpp: |
| (JSC::RegExp::RegExp): |
| |
| 2008-11-15 Maciej Stachowiak <mjs@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| - Remove SymbolTable from FunctionBodyNode and move it to CodeBlock |
| |
| It's not needed for functions that have never been executed, so no |
| need to waste the memory. Saves ~4M on membuster after 30 pages. |
| |
| * VM/CodeBlock.h: |
| * VM/Machine.cpp: |
| (JSC::Machine::retrieveArguments): |
| * parser/Nodes.cpp: |
| (JSC::EvalNode::generateCode): |
| (JSC::FunctionBodyNode::generateCode): |
| * parser/Nodes.h: |
| * runtime/JSActivation.h: |
| (JSC::JSActivation::JSActivationData::JSActivationData): |
| |
| 2008-11-14 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Bug 22259: Make all opcodes use eax as their final result register |
| <https://bugs.webkit.org/show_bug.cgi?id=22259> |
| |
| Change one case of op_add (and the corresponding slow case) to use eax |
| rather than edx. Also, change the order in which the two results of |
| resolve_func and resolve_base are emitted so that the retrieved value is |
| put last into eax. |
| |
| This gives no performance change on SunSpider or the V8 benchmark suite |
| when run in either harness. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::privateCompileMainPass): |
| (JSC::CTI::privateCompileSlowCases): |
| |
| 2008-11-14 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Geoff has this wacky notion that emitGetArg and emitPutArg should be related to |
| doing the same thing. Crazy. |
| |
| Rename the methods for accessing virtual registers to say 'VirtualRegister' in the |
| name, and those for setting up the arguments for CTI methods to contain 'CTIArg'. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::emitGetVirtualRegister): |
| (JSC::CTI::emitGetVirtualRegisters): |
| (JSC::CTI::emitPutCTIArgFromVirtualRegister): |
| (JSC::CTI::emitPutCTIArg): |
| (JSC::CTI::emitGetCTIArg): |
| (JSC::CTI::emitPutCTIArgConstant): |
| (JSC::CTI::emitPutVirtualRegister): |
| (JSC::CTI::compileOpCallSetupArgs): |
| (JSC::CTI::compileOpCallEvalSetupArgs): |
| (JSC::CTI::compileOpConstructSetupArgs): |
| (JSC::CTI::compileOpCall): |
| (JSC::CTI::compileOpStrictEq): |
| (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): |
| (JSC::CTI::compileBinaryArithOp): |
| (JSC::CTI::compileBinaryArithOpSlowCase): |
| (JSC::CTI::privateCompileMainPass): |
| (JSC::CTI::privateCompileSlowCases): |
| (JSC::CTI::privateCompileCTIMachineTrampolines): |
| * VM/CTI.h: |
| |
| 2008-11-14 Greg Bolsinga <bolsinga@apple.com> |
| |
| Reviewed by Antti Koivisto |
| |
| Fix potential build break by adding StdLibExtras.h |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.vcproj/WTF/WTF.vcproj: |
| |
| 2008-11-14 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Generate less code for the slow cases of op_call and op_construct. |
| https://bugs.webkit.org/show_bug.cgi?id=22272 |
| |
| 1% progression on v8 tests. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::emitRetrieveArg): |
| (JSC::CTI::emitNakedCall): |
| (JSC::CTI::compileOpCallInitializeCallFrame): |
| (JSC::CTI::compileOpCall): |
| (JSC::CTI::privateCompileSlowCases): |
| (JSC::CTI::privateCompileCTIMachineTrampolines): |
| * VM/CTI.h: |
| * VM/CodeBlock.h: |
| (JSC::getCallLinkInfoReturnLocation): |
| (JSC::CodeBlock::getCallLinkInfo): |
| * VM/Machine.cpp: |
| (JSC::Machine::Machine): |
| (JSC::Machine::cti_vm_dontLazyLinkCall): |
| (JSC::Machine::cti_vm_lazyLinkCall): |
| * VM/Machine.h: |
| |
| 2008-11-14 Greg Bolsinga <bolsinga@apple.com> |
| |
| Reviewed by Darin Alder. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=21810 |
| Remove use of static C++ objects that are destroyed at exit time (destructors) |
| |
| Create DEFINE_STATIC_LOCAL macro. Change static local objects to leak to avoid |
| exit-time destructor. Update code that was changed to fix this issue that ran |
| into a gcc bug (<rdar://problem/6354696> Codegen issue with C++ static reference |
| in gcc build 5465). Also typdefs for template types needed to be added in some |
| cases so the type could make it through the macro successfully. |
| |
| Basically code of the form: |
| static T m; |
| becomes: |
| DEFINE_STATIC_LOCAL(T, m, ()); |
| |
| Also any code of the form: |
| static T& m = *new T; |
| also becomes: |
| DEFINE_STATIC_LOCAL(T, m, ()); |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * wtf/MainThread.cpp: |
| (WTF::mainThreadFunctionQueueMutex): |
| (WTF::functionQueue): |
| * wtf/StdLibExtras.h: Added. Add DEFINE_STATIC_LOCAL macro |
| * wtf/ThreadingPthreads.cpp: |
| (WTF::threadMapMutex): |
| (WTF::threadMap): |
| (WTF::identifierByPthreadHandle): |
| |
| 2008-11-13 Sam Weinig <sam@webkit.org> |
| |
| Reviewed by Darin Adler |
| |
| Fix for https://bugs.webkit.org/show_bug.cgi?id=22269 |
| Reduce PropertyMap usage |
| |
| From observation of StructureID statistics, it became clear that many |
| StructureID's were not being used as StructureIDs themselves, but rather |
| only being necessary as links in the transition chain. Acknowledging this |
| and that PropertyMaps stored in StructureIDs can be treated as caches, that |
| is that they can be reconstructed on demand, it became clear that we could |
| reduce the memory consumption of StructureIDs by only keeping PropertyMaps |
| for the StructureIDs that need them the most. |
| |
| The specific strategy used to reduce the number of StructureIDs with |
| PropertyMaps is to take the previous StructureIDs PropertyMap when initially |
| transitioning (addPropertyTransition) from it and clearing out the pointer |
| in the process. The next time we need to do the same transition, for instance |
| repeated calls to the same constructor, we use the new addPropertyTransitionToExistingStructure |
| first, which allows us not to need the PropertyMap to determine if the property |
| exists already, since a transition to that property would require it not already |
| be present in the StructureID. Should there be no transition, the PropertyMap |
| can be constructed on demand (via materializePropertyMap) to determine if the put is a |
| replace or a transition to a new StructureID. |
| |
| Reduces memory use on Membuster head test (30 pages open) by ~15MB. |
| |
| * JavaScriptCore.exp: |
| * runtime/JSObject.h: |
| (JSC::JSObject::putDirect): First use addPropertyTransitionToExistingStructure |
| so that we can avoid building the PropertyMap on subsequent similar object |
| creations. |
| * runtime/PropertyMapHashTable.h: |
| (JSC::PropertyMapEntry::PropertyMapEntry): Add version of constructor which takes |
| all values to be used when lazily building the PropertyMap. |
| * runtime/StructureID.cpp: |
| (JSC::StructureID::dumpStatistics): Add statistics on the number of StructureIDs |
| with PropertyMaps. |
| (JSC::StructureID::StructureID): Rename m_cachedTransistionOffset to m_offset |
| (JSC::isPowerOf2): |
| (JSC::nextPowerOf2): |
| (JSC::sizeForKeyCount): Returns the expected size of a PropertyMap for a key count. |
| (JSC::StructureID::materializePropertyMap): Builds the PropertyMap out of its previous pointer chain. |
| (JSC::StructureID::addPropertyTransitionToExistingStructure): Only transitions if there is a |
| an existing transition. |
| (JSC::StructureID::addPropertyTransition): Instead of always copying the ProperyMap, try and take |
| it from it previous pointer. |
| (JSC::StructureID::removePropertyTransition): Simplify by calling toDictionaryTransition() to do |
| transition work. |
| (JSC::StructureID::changePrototypeTransition): Build the PropertyMap if necessary before transitioning |
| because once you have transitioned, you will not be able to reconstruct it afterwards as there is no |
| previous pointer, pinning the ProperyMap as well. |
| (JSC::StructureID::getterSetterTransition): Ditto. |
| (JSC::StructureID::toDictionaryTransition): Pin the PropertyMap so that it is not destroyed on further transitions. |
| (JSC::StructureID::fromDictionaryTransition): We can only transition back from a dictionary transition if there |
| are no deleted offsets. |
| (JSC::StructureID::addPropertyWithoutTransition): Build PropertyMap on demands and pin. |
| (JSC::StructureID::removePropertyWithoutTransition): Ditto. |
| (JSC::StructureID::get): Build on demand. |
| (JSC::StructureID::createPropertyMapHashTable): Add version of create that takes a size |
| for on demand building. |
| (JSC::StructureID::expandPropertyMapHashTable): |
| (JSC::StructureID::rehashPropertyMapHashTable): |
| (JSC::StructureID::getEnumerablePropertyNamesInternal): Build PropertyMap on demand. |
| * runtime/StructureID.h: |
| (JSC::StructureID::propertyStorageSize): Account for StructureIDs without PropertyMaps. |
| (JSC::StructureID::isEmpty): Ditto. |
| (JSC::StructureID::materializePropertyMapIfNecessary): |
| (JSC::StructureID::get): Build PropertyMap on demand |
| |
| 2008-11-14 Csaba Osztrogonac <oszi@inf.u-szeged.hu> |
| |
| Reviewed by Simon Hausmann. |
| |
| <https://bugs.webkit.org/show_bug.cgi?id=21500> |
| |
| JavaScriptCore build with -O3 flag instead of -O2 (gcc). |
| 2.02% speedup on SunSpider (Qt-port on Linux) |
| 1.10% speedup on V8 (Qt-port on Linux) |
| 3.45% speedup on WindScorpion (Qt-port on Linux) |
| |
| * JavaScriptCore.pri: |
| |
| 2008-11-14 Kristian Amlie <kristian.amlie@trolltech.com> |
| |
| Reviewed by Darin Adler. |
| |
| Compile fix for RVCT. |
| |
| In reality, it is two fixes: |
| |
| 1. Remove typename. I believe typename can only be used when the named |
| type depends on the template parameters, which it doesn't in this |
| case, so I think this is more correct. |
| 2. Replace ::iterator scope with specialized typedef. This is to work |
| around a bug in RVCT. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22260 |
| |
| * wtf/ListHashSet.h: |
| (WTF::::find): |
| |
| 2008-11-14 Kristian Amlie <kristian.amlie@trolltech.com> |
| |
| Reviewed by Darin Adler. |
| |
| Compile fix for WINSCW. |
| |
| This fix doesn't protect against implicit conversions from bool to |
| integers, but most likely that will be caught on another platform. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22260 |
| |
| * wtf/PassRefPtr.h: |
| (WTF::PassRefPtr::operator bool): |
| * wtf/RefPtr.h: |
| (WTF::RefPtr::operator bool): |
| |
| 2008-11-14 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Bug 22245: Move wtf/dtoa.h into the WTF namespace |
| <https://bugs.webkit.org/show_bug.cgi?id=22245> |
| |
| Move wtf/dtoa.h into the WTF namespace from the JSC namespace. This |
| introduces some ambiguities in name lookups, so I changed all uses of |
| the functions in wtf/dtoa.h to explicitly state the namespace. |
| |
| * JavaScriptCore.exp: |
| * parser/Lexer.cpp: |
| (JSC::Lexer::lex): |
| * runtime/InitializeThreading.cpp: |
| * runtime/JSGlobalObjectFunctions.cpp: |
| (JSC::parseInt): |
| * runtime/NumberPrototype.cpp: |
| (JSC::integerPartNoExp): |
| (JSC::numberProtoFuncToExponential): |
| * runtime/UString.cpp: |
| (JSC::concatenate): |
| (JSC::UString::from): |
| (JSC::UString::toDouble): |
| * wtf/dtoa.cpp: |
| * wtf/dtoa.h: |
| |
| 2008-11-14 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| Bug 22257: Enable redundant read optimizations for results generated by compileBinaryArithOp() |
| <https://bugs.webkit.org/show_bug.cgi?id=22257> |
| |
| This shows no change in performance on either SunSpider or the V8 |
| benchmark suite, but it removes an ugly special case and allows for |
| future optimizations to be implemented in a cleaner fashion. |
| |
| This patch was essentially given to me by Gavin Barraclough upon my |
| request, but I did regression and performance testing so that he could |
| work on something else. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::putDoubleResultToJSNumberCellOrJSImmediate): Move the final |
| result to eax if it is not already there. |
| (JSC::CTI::compileBinaryArithOp): Remove the killing of the final result |
| register that disables the optimization. |
| |
| 2008-11-13 Eric Seidel <eric@webkit.org> |
| |
| Reviewed by Adam Roben. |
| |
| Add a Scons-based build system for building |
| the Chromium-Mac build of JavaScriptCore. |
| https://bugs.webkit.org/show_bug.cgi?id=21991 |
| |
| * JavaScriptCore.scons: Added. |
| * SConstruct: Added. |
| |
| 2008-11-13 Eric Seidel <eric@webkit.org> |
| |
| Reviewed by Adam Roben. |
| |
| Add PLATFORM(CHROMIUM) to the "we don't use cairo" blacklist |
| until https://bugs.webkit.org/show_bug.cgi?id=22250 is fixed. |
| |
| * wtf/Platform.h: |
| |
| 2008-11-13 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| In r38375 the 'jsc' shell was changed to improve teardown on quit. The |
| main() function in jsc.cpp uses Structured Exception Handling, so Visual |
| C++ emits a warning when destructors are used. |
| |
| In order to speculatively fix the Windows build, this patch changes that |
| code to use explicit pointer manipulation and locking rather than smart |
| pointers and RAII. |
| |
| * jsc.cpp: |
| (main): |
| |
| 2008-11-13 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Bug 22246: Get arguments for opcodes together to eliminate more redundant memory reads |
| <https://bugs.webkit.org/show_bug.cgi?id=22246> |
| |
| It is common for opcodes to read their first operand into eax and their |
| second operand into edx. If the value intended for the second operand is |
| in eax, we should first move eax to the register for the second operand |
| and then read the first operand into eax. |
| |
| This is a 0.5% speedup on SunSpider and a 2.0% speedup on the V8 |
| benchmark suite when measured using the V8 harness. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::emitGetArgs): |
| (JSC::CTI::compileOpStrictEq): |
| (JSC::CTI::compileBinaryArithOp): |
| (JSC::CTI::privateCompileMainPass): |
| (JSC::CTI::privateCompileSlowCases): |
| * VM/CTI.h: |
| |
| 2008-11-13 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Bug 22238: Avoid unnecessary reads of temporaries when the target machine register is not eax |
| <https://bugs.webkit.org/show_bug.cgi?id=22238> |
| |
| Enable the optimization of not reading a value back from memory that we |
| just wrote when the target machine register is not eax. In order to do |
| this, the code generation for op_put_global_var must be changed to |
| read its argument into a register before overwriting eax. |
| |
| This is a 0.5% speedup on SunSpider and shows no change on the V8 |
| benchmark suite when run in either harness. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::emitGetArg): |
| (JSC::CTI::privateCompileMainPass): |
| |
| 2008-11-13 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| Perform teardown in the 'jsc' shell in order to suppress annoying and |
| misleading leak messages. There is still a lone JSC::Node leaking when |
| quit() is called, but hopefully that can be fixed as well. |
| |
| * jsc.cpp: |
| (functionQuit): |
| (main): |
| |
| 2008-11-13 Mike Pinkerton <pinkerton@chromium.org> |
| |
| Reviewed by Sam Weinig. |
| |
| Fix for https://bugs.webkit.org/show_bug.cgi?id=22087 |
| Need correct platform defines for Mac Chromium |
| |
| Set the appropriate platform defines for Mac Chromium, which is |
| similar to PLATFORM(MAC), but isn't. |
| |
| * wtf/Platform.h: |
| |
| 2008-11-13 Maciej Stachowiak <mjs@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| - remove immediate checks from native codegen for known non-immediate cases like "this" |
| |
| ~.5% speedup on v8 benchmarks |
| |
| In the future we can extend this model to remove all sorts of |
| typechecks based on local type info or type inference. |
| |
| I also added an assertion to verify that all slow cases linked as |
| many slow case jumps as the corresponding fast case generated, and |
| fixed the pre-existing cases where this was not true. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::emitJumpSlowCaseIfNotJSCell): |
| (JSC::CTI::linkSlowCaseIfNotJSCell): |
| (JSC::CTI::compileBinaryArithOp): |
| (JSC::CTI::compileBinaryArithOpSlowCase): |
| (JSC::CTI::privateCompileMainPass): |
| (JSC::CTI::privateCompileSlowCases): |
| * VM/CTI.h: |
| * VM/CodeBlock.h: |
| (JSC::CodeBlock::isKnownNotImmediate): |
| |
| 2008-11-13 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| Bug 21943: Avoid needless reads of temporary values in CTI code |
| <https://bugs.webkit.org/show_bug.cgi?id=21943> |
| |
| If an opcode needs to load a virtual register and a previous opcode left |
| the contents of that virtual register in a machine register, use the |
| value in the machine register rather than getting it from memory. |
| |
| In order to perform this optimization, it is necessary to know the |
| jump tagets in the CodeBlock. For temporaries, the only problematic |
| jump targets are binary logical operators and the ternary conditional |
| operator. However, if this optimization were to be extended to local |
| variable registers as well, other jump targets would need to be |
| included, like switch statement cases and the beginnings of catch |
| blocks. |
| |
| This optimization also requires that the fast case and the slow case |
| of an opcode use emitPutResult() on the same register, which was chosen |
| to be eax, as that is the register into which we read the first operand |
| of opcodes. In order to make this the case, we needed to add some mov |
| instructions to the slow cases of some instructions. |
| |
| This optimizaton is not applied whenever compileBinaryArithOp() is used |
| to compile an opcode, because different machine registers may be used to |
| store the final result. It seems possible to rewrite the code generation |
| in compileBinaryArithOp() to allow for this optimization. |
| |
| This optimization is also not applied when generating slow cases, |
| because some fast cases overwrite the value of eax before jumping to the |
| slow case. In the future, it may be possible to apply this optimization |
| to slow cases as well, but it did not seem to be a speedup when testing |
| an early version of this patch. |
| |
| This is a 1.0% speedup on SunSpider and a 6.3% speedup on the V8 |
| benchmark suite. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::killLastResultRegister): |
| (JSC::CTI::emitGetArg): |
| (JSC::CTI::emitGetPutArg): |
| (JSC::CTI::emitGetCTIParam): |
| (JSC::CTI::emitGetFromCallFrameHeader): |
| (JSC::CTI::emitPutResult): |
| (JSC::CTI::emitCTICall): |
| (JSC::CTI::CTI): |
| (JSC::CTI::compileOpCall): |
| (JSC::CTI::compileOpStrictEq): |
| (JSC::CTI::emitSlowScriptCheck): |
| (JSC::CTI::compileBinaryArithOp): |
| (JSC::CTI::privateCompileMainPass): |
| (JSC::CTI::privateCompileSlowCases): |
| (JSC::CTI::privateCompileGetByIdProto): |
| (JSC::CTI::privateCompilePatchGetArrayLength): |
| * VM/CTI.h: |
| * VM/CodeBlock.h: |
| (JSC::CodeBlock::isTemporaryRegisterIndex): |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::CodeGenerator::emitLabel): |
| |
| 2008-11-12 Alp Toker <alp@nuanti.com> |
| |
| autotools build system fix-up only. Add FloatQuad.h to the source |
| lists and sort them. |
| |
| * GNUmakefile.am: |
| |
| 2008-11-12 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Fixed https://bugs.webkit.org/show_bug.cgi?id=22192 |
| +37 failures in fast/profiler |
| |
| along with Darin's review comments in |
| https://bugs.webkit.org/show_bug.cgi?id=22174 |
| Simplified op_call by nixing its responsibility for moving the value of |
| "this" into the first argument slot |
| |
| * VM/Machine.cpp: |
| (JSC::returnToThrowTrampoline): |
| (JSC::throwStackOverflowError): |
| (JSC::Machine::cti_register_file_check): |
| (JSC::Machine::cti_op_call_arityCheck): |
| (JSC::Machine::cti_vm_throw): Moved the throw logic into a function, since |
| functions are better than macros. |
| |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::CodeGenerator::emitCall): |
| (JSC::CodeGenerator::emitConstruct): Ensure that the function register |
| is preserved if profiling is enabled, since the profiler uses that |
| register. |
| |
| * runtime/JSGlobalData.h: Renamed throwReturnAddress to exceptionLocation, |
| because I had a hard time understanding what "throwReturnAddress" meant. |
| |
| 2008-11-12 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Roll in r38322, now that test failures have been fixed. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::compileOpCallSetupArgs): |
| (JSC::CTI::compileOpCallEvalSetupArgs): |
| (JSC::CTI::compileOpConstructSetupArgs): |
| (JSC::CTI::compileOpCall): |
| (JSC::CTI::privateCompileMainPass): |
| (JSC::CTI::privateCompileSlowCases): |
| * VM/CTI.h: |
| * VM/CodeBlock.cpp: |
| (JSC::CodeBlock::dump): |
| * VM/Machine.cpp: |
| (JSC::Machine::callEval): |
| (JSC::Machine::dumpCallFrame): |
| (JSC::Machine::dumpRegisters): |
| (JSC::Machine::execute): |
| (JSC::Machine::privateExecute): |
| (JSC::Machine::cti_register_file_check): |
| (JSC::Machine::cti_op_call_arityCheck): |
| (JSC::Machine::cti_op_call_NotJSFunction): |
| (JSC::Machine::cti_op_construct_JSConstruct): |
| (JSC::Machine::cti_op_construct_NotJSConstruct): |
| (JSC::Machine::cti_op_call_eval): |
| (JSC::Machine::cti_vm_throw): |
| * VM/Machine.h: |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::CodeGenerator::emitCall): |
| (JSC::CodeGenerator::emitCallEval): |
| (JSC::CodeGenerator::emitConstruct): |
| * bytecompiler/CodeGenerator.h: |
| * parser/Nodes.cpp: |
| (JSC::EvalFunctionCallNode::emitCode): |
| (JSC::FunctionCallValueNode::emitCode): |
| (JSC::FunctionCallResolveNode::emitCode): |
| (JSC::FunctionCallBracketNode::emitCode): |
| (JSC::FunctionCallDotNode::emitCode): |
| * parser/Nodes.h: |
| (JSC::ScopeNode::neededConstants): |
| |
| 2008-11-12 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Fix for https://bugs.webkit.org/show_bug.cgi?id=22201 |
| Integer conversion in array.length was safe signed values, |
| but the length is unsigned. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::privateCompilePatchGetArrayLength): |
| |
| 2008-11-12 Cameron Zwarich <zwarich@apple.com> |
| |
| Rubber-stamped by Mark Rowe. |
| |
| Roll out r38322 due to test failures on the bots. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::compileOpCallSetupArgs): |
| (JSC::CTI::compileOpCall): |
| (JSC::CTI::privateCompileMainPass): |
| (JSC::CTI::privateCompileSlowCases): |
| * VM/CTI.h: |
| * VM/CodeBlock.cpp: |
| (JSC::CodeBlock::dump): |
| * VM/Machine.cpp: |
| (JSC::Machine::callEval): |
| (JSC::Machine::dumpCallFrame): |
| (JSC::Machine::dumpRegisters): |
| (JSC::Machine::execute): |
| (JSC::Machine::privateExecute): |
| (JSC::Machine::throwStackOverflowPreviousFrame): |
| (JSC::Machine::cti_register_file_check): |
| (JSC::Machine::cti_op_call_arityCheck): |
| (JSC::Machine::cti_op_call_NotJSFunction): |
| (JSC::Machine::cti_op_construct_JSConstruct): |
| (JSC::Machine::cti_op_construct_NotJSConstruct): |
| (JSC::Machine::cti_op_call_eval): |
| (JSC::Machine::cti_vm_throw): |
| * VM/Machine.h: |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::CodeGenerator::emitCall): |
| (JSC::CodeGenerator::emitCallEval): |
| (JSC::CodeGenerator::emitConstruct): |
| * bytecompiler/CodeGenerator.h: |
| * parser/Nodes.cpp: |
| (JSC::EvalFunctionCallNode::emitCode): |
| (JSC::FunctionCallValueNode::emitCode): |
| (JSC::FunctionCallResolveNode::emitCode): |
| (JSC::FunctionCallBracketNode::emitCode): |
| (JSC::FunctionCallDotNode::emitCode): |
| * parser/Nodes.h: |
| (JSC::ScopeNode::neededConstants): |
| |
| 2008-11-11 Geoffrey Garen <ggaren@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Fixed https://bugs.webkit.org/show_bug.cgi?id=22174 |
| Simplified op_call by nixing its responsibility for moving the value of |
| "this" into the first argument slot. |
| |
| Instead, the caller emits an explicit load or mov instruction, or relies |
| on implicit knowledge that "this" is already in the first argument slot. |
| As a result, two operands to op_call are gone: firstArg and thisVal. |
| |
| SunSpider and v8 tests show no change in bytecode or CTI. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::compileOpCallSetupArgs): |
| (JSC::CTI::compileOpCallEvalSetupArgs): |
| (JSC::CTI::compileOpConstructSetupArgs): Split apart these three versions |
| of setting up arguments to op_call, because they're more different than |
| they are the same -- even more so with this patch. |
| |
| (JSC::CTI::compileOpCall): Updated for the fact that op_construct doesn't |
| match op_call anymore. |
| |
| (JSC::CTI::privateCompileMainPass): |
| (JSC::CTI::privateCompileSlowCases): Merged a few call cases. Updated |
| for changes mentioned above. |
| |
| * VM/CTI.h: |
| |
| * VM/CodeBlock.cpp: |
| (JSC::CodeBlock::dump): Updated for new bytecode format of call / construct. |
| |
| * VM/Machine.cpp: |
| (JSC::Machine::callEval): Updated for new bytecode format of call / construct. |
| |
| (JSC::Machine::dumpCallFrame): |
| (JSC::Machine::dumpRegisters): Simplified these debugging functions, |
| taking advantage of the new call frame layout. |
| |
| (JSC::Machine::execute): Fixed up the eval version of execute to be |
| friendlier to calls in the new format. |
| |
| (JSC::Machine::privateExecute): Implemented the new call format in |
| bytecode. |
| |
| (JSC::Machine::cti_op_call_NotJSFunction): |
| (JSC::Machine::cti_op_construct_JSConstruct): |
| (JSC::Machine::cti_op_construct_NotJSConstruct): |
| (JSC::Machine::cti_op_call_eval): Updated CTI helpers to match the new |
| call format. |
| |
| Fixed a latent bug in stack overflow checking that is now hit because |
| the register layout has changed a bit -- namely: when throwing a stack |
| overflow exception inside an op_call helper, we need to account for the |
| fact that the current call frame is only half-constructed, and use the |
| parent call frame instead. |
| |
| * VM/Machine.h: |
| |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::CodeGenerator::emitCall): |
| (JSC::CodeGenerator::emitCallEval): |
| (JSC::CodeGenerator::emitConstruct): |
| * bytecompiler/CodeGenerator.h: Updated codegen to match the new call |
| format. |
| |
| * parser/Nodes.cpp: |
| (JSC::EvalFunctionCallNode::emitCode): |
| (JSC::FunctionCallValueNode::emitCode): |
| (JSC::FunctionCallResolveNode::emitCode): |
| (JSC::FunctionCallBracketNode::emitCode): |
| (JSC::FunctionCallDotNode::emitCode): |
| * parser/Nodes.h: |
| (JSC::ScopeNode::neededConstants): ditto |
| |
| 2008-11-11 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Remove an unused forwarding header for a file that no longer exists. |
| |
| * ForwardingHeaders/JavaScriptCore/JSLock.h: Removed. |
| |
| 2008-11-11 Mark Rowe <mrowe@apple.com> |
| |
| Fix broken dependencies building JavaScriptCore on a freezing cold cat, caused |
| by failure to update all instances of "kjs" to their new locations. |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| |
| 2008-11-11 Alexey Proskuryakov <ap@webkit.org> |
| |
| Rubber-stamped by Adam Roben. |
| |
| * wtf/AVLTree.h: (WTF::AVLTree::Iterator::start_iter): |
| Fix indentation a little more. |
| |
| 2008-11-11 Cameron Zwarich <zwarich@apple.com> |
| |
| Rubber-stamped by Sam Weinig. |
| |
| Clean up EvalCodeCache to match our coding style a bit more. |
| |
| * VM/EvalCodeCache.h: |
| (JSC::EvalCodeCache::get): |
| |
| 2008-11-11 Cameron Zwarich <zwarich@apple.com> |
| |
| Rubber-stamped by Sam Weinig. |
| |
| Bug 22179: Move EvalCodeCache from CodeBlock.h into its own file |
| <https://bugs.webkit.org/show_bug.cgi?id=22179> |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * VM/CodeBlock.h: |
| * VM/EvalCodeCache.h: Copied from VM/CodeBlock.h. |
| * VM/Machine.cpp: |
| |
| 2008-11-11 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Remove the 'm_' prefix from the fields of the SwitchRecord struct. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::privateCompile): |
| * VM/CTI.h: |
| (JSC::SwitchRecord): |
| (JSC::SwitchRecord::SwitchRecord): |
| |
| 2008-11-11 Cameron Zwarich <zwarich@apple.com> |
| |
| Rubber-stamped by Sam Weinig. |
| |
| Make asInteger() a static function so that it has internal linkage. |
| |
| * VM/CTI.cpp: |
| (JSC::asInteger): |
| |
| 2008-11-11 Maciej Stachowiak <mjs@apple.com> |
| |
| Reviewed by Mark Rowe. |
| |
| - shrink CodeBlock and AST related Vectors to exact fit (5-10M savings on membuster test) |
| |
| No perf regression combined with the last patch (each seems like a small regression individually) |
| |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::CodeGenerator::generate): |
| * parser/Nodes.h: |
| (JSC::SourceElements::releaseContentsIntoVector): |
| * wtf/Vector.h: |
| (WTF::Vector::shrinkToFit): |
| |
| 2008-11-11 Maciej Stachowiak <mjs@apple.com> |
| |
| Reviewed by Mark Rowe. |
| |
| - remove inline capacity from declaration stacks (15M savings on membuster test) |
| |
| No perf regression on SunSpider or V8 test combined with other upcoming memory improvement patch. |
| |
| * JavaScriptCore.exp: |
| * parser/Nodes.h: |
| |
| 2008-11-11 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| While r38286 removed the need for the m_callFrame member variable of |
| CTI, it should be also be removed. |
| |
| * VM/CTI.h: |
| |
| 2008-11-10 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Oliver Hunt. |
| |
| Make CTI::asInteger() a non-member function, since it needs no access to |
| any of CTI's member variables. |
| |
| * VM/CTI.cpp: |
| (JSC::asInteger): |
| * VM/CTI.h: |
| |
| 2008-11-10 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| Use 'value' instead of 'js' in CTI as a name for JSValue* to match our |
| usual convention elsewhere. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::emitGetArg): |
| (JSC::CTI::emitGetPutArg): |
| (JSC::CTI::getConstantImmediateNumericArg): |
| (JSC::CTI::printOpcodeOperandTypes): |
| |
| 2008-11-10 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| Make CTI::getConstant() a member function of CodeBlock instead. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::emitGetArg): |
| (JSC::CTI::emitGetPutArg): |
| (JSC::CTI::getConstantImmediateNumericArg): |
| (JSC::CTI::printOpcodeOperandTypes): |
| (JSC::CTI::privateCompileMainPass): |
| * VM/CTI.h: |
| * VM/CodeBlock.h: |
| (JSC::CodeBlock::getConstant): |
| |
| 2008-11-10 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Rename CodeBlock::isConstant() to isConstantRegisterIndex(). |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::emitGetArg): |
| (JSC::CTI::emitGetPutArg): |
| (JSC::CTI::getConstantImmediateNumericArg): |
| (JSC::CTI::printOpcodeOperandTypes): |
| (JSC::CTI::privateCompileMainPass): |
| * VM/CodeBlock.h: |
| (JSC::CodeBlock::isConstantRegisterIndex): |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::CodeGenerator::emitEqualityOp): |
| |
| 2008-11-10 Gavin Barraclough <barraclough@apple.com> |
| |
| Build fix for non-CTI builds. |
| |
| * VM/Machine.cpp: |
| (JSC::Machine::initialize): |
| |
| 2008-11-10 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Sam Weinig. |
| |
| Remove the unused labels member variable of CodeBlock. |
| |
| * VM/CodeBlock.h: |
| * VM/LabelID.h: |
| (JSC::LabelID::setLocation): |
| |
| 2008-11-10 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Batch compile the set of static trampolines at the point Machine is constructed, using a single allocation. |
| Refactor out m_callFrame from CTI, since this is only needed to access the global data (instead store a |
| pointer to the global data directly, since this is available at the point the Machine is constructed). |
| Add a method to align the code buffer, to allow JIT generation for multiple trampolines in one block. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::getConstant): |
| (JSC::CTI::emitGetArg): |
| (JSC::CTI::emitGetPutArg): |
| (JSC::CTI::getConstantImmediateNumericArg): |
| (JSC::CTI::printOpcodeOperandTypes): |
| (JSC::CTI::CTI): |
| (JSC::CTI::compileBinaryArithOp): |
| (JSC::CTI::privateCompileMainPass): |
| (JSC::CTI::privateCompileGetByIdProto): |
| (JSC::CTI::privateCompileGetByIdChain): |
| (JSC::CTI::privateCompileCTIMachineTrampolines): |
| (JSC::CTI::freeCTIMachineTrampolines): |
| * VM/CTI.h: |
| (JSC::CTI::compile): |
| (JSC::CTI::compileGetByIdSelf): |
| (JSC::CTI::compileGetByIdProto): |
| (JSC::CTI::compileGetByIdChain): |
| (JSC::CTI::compilePutByIdReplace): |
| (JSC::CTI::compilePutByIdTransition): |
| (JSC::CTI::compileCTIMachineTrampolines): |
| (JSC::CTI::compilePatchGetArrayLength): |
| * VM/Machine.cpp: |
| (JSC::Machine::initialize): |
| (JSC::Machine::~Machine): |
| (JSC::Machine::execute): |
| (JSC::Machine::tryCTICachePutByID): |
| (JSC::Machine::tryCTICacheGetByID): |
| (JSC::Machine::cti_op_call_JSFunction): |
| (JSC::Machine::cti_vm_lazyLinkCall): |
| * VM/Machine.h: |
| * masm/X86Assembler.h: |
| (JSC::JITCodeBuffer::isAligned): |
| (JSC::X86Assembler::): |
| (JSC::X86Assembler::align): |
| * runtime/JSGlobalData.cpp: |
| (JSC::JSGlobalData::JSGlobalData): |
| |
| 2008-11-10 Maciej Stachowiak <mjs@apple.com> |
| |
| Reviewed by Antti Koivisto. |
| |
| - Make Vector::clear() release the Vector's memory (1MB savings on membuster) |
| https://bugs.webkit.org/show_bug.cgi?id=22170 |
| |
| * wtf/Vector.h: |
| (WTF::VectorBufferBase::deallocateBuffer): Set capacity to 0 as |
| well as size, otherwise shrinking capacity to 0 can fail to reset |
| the capacity and thus cause a future crash. |
| (WTF::Vector::~Vector): Shrink size not capacity; we only need |
| to call destructors, the buffer will be freed anyway. |
| (WTF::Vector::clear): Change this to shrinkCapacity(0), not just shrink(0). |
| (WTF::::shrinkCapacity): Use shrink() instead of resize() for case where |
| the size is greater than the new capacity, to work with types that have no |
| default constructor. |
| |
| 2008-11-10 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| Split multiple definitions into separate lines. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::compileBinaryArithOp): |
| |
| 2008-11-10 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Bug 22162: Remove cachedValueGetter from the JavaScriptCore API implementation |
| <https://bugs.webkit.org/show_bug.cgi?id=22162> |
| |
| There is no more need for the cachedValueGetter hack now that we have |
| PropertySlot::setValue(), so we should remove it. |
| |
| * API/JSCallbackObject.h: |
| * API/JSCallbackObjectFunctions.h: |
| (JSC::::getOwnPropertySlot): |
| |
| 2008-11-10 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Darin Adler. |
| |
| Bug 22152: Remove asObject() call from JSCallbackObject::getOwnPropertySlot() |
| <https://bugs.webkit.org/show_bug.cgi?id=22152> |
| |
| With the recent change to adopt asType() style cast functions with |
| assertions instead of static_casts in many places, the assertion for |
| the asObject() call in JSCallbackObject::getOwnPropertySlot() has been |
| failing when using any nontrivial client of the JavaScriptCore API. |
| The cast isn't even necessary to call slot.setCustom(), so it should |
| be removed. |
| |
| * API/JSCallbackObjectFunctions.h: |
| (JSC::JSCallbackObject::getOwnPropertySlot): |
| |
| 2008-11-10 Alexey Proskuryakov <ap@webkit.org> |
| |
| Reviewed by Adam Roben. |
| |
| A few coding style fixes for AVLTree. |
| |
| * wtf/AVLTree.h: Moved to WTF namespace, Removed "KJS_" from include guards. |
| (WTF::AVLTree::Iterator::start_iter): Fixed indentation |
| |
| * runtime/JSArray.cpp: Added "using namepace WTF". |
| |
| 2008-11-09 Cameron Zwarich <zwarich@apple.com> |
| |
| Not reviewed. |
| |
| Speculatively fix the non-AllInOne build. |
| |
| * runtime/NativeErrorConstructor.cpp: |
| |
| 2008-11-09 Darin Adler <darin@apple.com> |
| |
| Reviewed by Tim Hatcher. |
| |
| - https://bugs.webkit.org/show_bug.cgi?id=22149 |
| remove unused code from the parser |
| |
| * AllInOneFile.cpp: Removed nodes2string.cpp. |
| * GNUmakefile.am: Ditto. |
| * JavaScriptCore.exp: Ditto. |
| * JavaScriptCore.pri: Ditto. |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto. |
| * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. |
| * JavaScriptCoreSources.bkl: Ditto. |
| |
| * VM/CodeBlock.h: Added include. |
| |
| * VM/Machine.cpp: (JSC::Machine::execute): Use the types from |
| DeclarationStacks as DeclarationStacks:: rather than Node:: since |
| "Node" really has little to do with it. |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::CodeGenerator::CodeGenerator): Ditto. |
| |
| * jsc.cpp: |
| (Options::Options): Removed prettyPrint option. |
| (runWithScripts): Ditto. |
| (printUsageStatement): Ditto. |
| (parseArguments): Ditto. |
| (jscmain): Ditto. |
| |
| * parser/Grammar.y: Removed use of obsolete ImmediateNumberNode. |
| |
| * parser/Nodes.cpp: |
| (JSC::ThrowableExpressionData::emitThrowError): Use inline functions |
| instead of direct member access for ThrowableExpressionData values. |
| (JSC::BracketAccessorNode::emitCode): Ditto. |
| (JSC::DotAccessorNode::emitCode): Ditto. |
| (JSC::NewExprNode::emitCode): Ditto. |
| (JSC::EvalFunctionCallNode::emitCode): Ditto. |
| (JSC::FunctionCallValueNode::emitCode): Ditto. |
| (JSC::FunctionCallResolveNode::emitCode): Ditto. |
| (JSC::FunctionCallBracketNode::emitCode): Ditto. |
| (JSC::FunctionCallDotNode::emitCode): Ditto. |
| (JSC::PostfixResolveNode::emitCode): Ditto. |
| (JSC::PostfixBracketNode::emitCode): Ditto. |
| (JSC::PostfixDotNode::emitCode): Ditto. |
| (JSC::DeleteResolveNode::emitCode): Ditto. |
| (JSC::DeleteBracketNode::emitCode): Ditto. |
| (JSC::DeleteDotNode::emitCode): Ditto. |
| (JSC::PrefixResolveNode::emitCode): Ditto. |
| (JSC::PrefixBracketNode::emitCode): Ditto. |
| (JSC::PrefixDotNode::emitCode): Ditto. |
| (JSC::ThrowableBinaryOpNode::emitCode): Ditto. |
| (JSC::InstanceOfNode::emitCode): Ditto. |
| (JSC::ReadModifyResolveNode::emitCode): Ditto. |
| (JSC::AssignResolveNode::emitCode): Ditto. |
| (JSC::AssignDotNode::emitCode): Ditto. |
| (JSC::ReadModifyDotNode::emitCode): Ditto. |
| (JSC::AssignBracketNode::emitCode): Ditto. |
| (JSC::ReadModifyBracketNode::emitCode): Ditto. |
| (JSC::statementListEmitCode): Take a const StatementVector instead |
| of a non-const one. Also removed unused statementListPushFIFO. |
| (JSC::ForInNode::emitCode): Inline functions instead of member access. |
| (JSC::ThrowNode::emitCode): Ditto. |
| (JSC::EvalNode::emitCode): Ditto. |
| (JSC::FunctionBodyNode::emitCode): Ditto. |
| (JSC::ProgramNode::emitCode): Ditto. |
| |
| * parser/Nodes.h: Removed unused includes and forward declarations. |
| Removed Precedence enum. Made many more members private instead of |
| protected or public. Removed unused NodeStack typedef. Moved the |
| VarStack and FunctionStack typedefs from Node to ScopeNode. Made |
| Node::emitCode pure virtual and changed classes that don't emit |
| any code to inherit from ParserRefCounted rather than Node. |
| Moved isReturnNode from Node to StatementNode. Removed the |
| streamTo, precedence, and needsParensIfLeftmost functions from |
| all classes. Removed the ImmediateNumberNode class and make |
| NumberNode::setValue nonvirtual. |
| |
| * parser/nodes2string.cpp: Removed. |
| |
| 2008-11-09 Darin Adler <darin@apple.com> |
| |
| Reviewed by Sam Weinig and Maciej Stachowiak. |
| Includes some work done by Chris Brichford. |
| |
| - fix https://bugs.webkit.org/show_bug.cgi?id=14886 |
| Stack overflow due to deeply nested parse tree doing repeated string concatentation |
| |
| Test: fast/js/large-expressions.html |
| |
| 1) Code generation is recursive, so takes stack proportional to the complexity |
| of the source code expression. Fixed by setting an arbitrary recursion limit |
| of 10,000 nodes. |
| |
| 2) Destruction of the syntax tree was recursive. Fixed by introducing a |
| non-recursive mechanism for destroying the tree. |
| |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::CodeGenerator::CodeGenerator): Initialize depth to 0. |
| (JSC::CodeGenerator::emitThrowExpressionTooDeepException): Added. Emits the code |
| to throw a "too deep" exception. |
| * bytecompiler/CodeGenerator.h: |
| (JSC::CodeGenerator::emitNode): Check depth and emit an exception if we exceed |
| the maximum depth. |
| |
| * parser/Nodes.cpp: |
| (JSC::NodeReleaser::releaseAllNodes): Added. To be called inside node destructors |
| to avoid recursive calls to destructors for nodes inside this one. |
| (JSC::NodeReleaser::release): Added. To be called inside releaseNodes functions. |
| Also added releaseNodes functions and calls to releaseAllNodes inside destructors |
| for each class derived from Node that has RefPtr to other nodes. |
| (JSC::NodeReleaser::adopt): Added. Used by the release function. |
| (JSC::NodeReleaser::adoptFunctionBodyNode): Added. |
| |
| * parser/Nodes.h: Added declarations of releaseNodes and destructors in all classes |
| that needed it. Eliminated use of ListRefPtr and releaseNext, which are the two parts |
| of an older solution to the non-recursive destruction problem that works only for |
| lists, whereas the new solution works for other graphs. Changed ReverseBinaryOpNode |
| to use BinaryOpNode as a base class to avoid some duplicated code. |
| |
| 2008-11-08 Kevin Ollivier <kevino@theolliviers.com> |
| |
| wx build fixes after addition of JSCore parser and bycompiler dirs. Also cleanup |
| the JSCore Bakefile's group names to be consistent. |
| |
| * JavaScriptCoreSources.bkl: |
| * jscore.bkl: |
| |
| 2008-11-07 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Bug 21801: REGRESSION (r37821): YUI date formatting JavaScript puts the letter 'd' in place of the day |
| <https://bugs.webkit.org/show_bug.cgi?id=21801> |
| |
| Fix the constant register check in the 'typeof' optimization in |
| CodeGenerator, which was completely broken after r37821. |
| |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::CodeGenerator::emitEqualityOp): |
| |
| 2008-11-07 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Bug 22129: Move CTI::isConstant() to CodeBlock |
| <https://bugs.webkit.org/show_bug.cgi?id=22129> |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::emitGetArg): |
| (JSC::CTI::emitGetPutArg): |
| (JSC::CTI::getConstantImmediateNumericArg): |
| (JSC::CTI::printOpcodeOperandTypes): |
| (JSC::CTI::privateCompileMainPass): |
| * VM/CTI.h: |
| * VM/CodeBlock.h: |
| (JSC::CodeBlock::isConstant): |
| |
| 2008-11-07 Alp Toker <alp@nuanti.com> |
| |
| autotools fix. Always use the configured perl binary (which may be |
| different to the one in $PATH) when generating sources. |
| |
| * GNUmakefile.am: |
| |
| 2008-11-07 Cameron Zwarich <zwarich@apple.com> |
| |
| Not reviewed. |
| |
| Change grammar.cpp to Grammar.cpp and grammar.h to Grammar.h in several |
| build scripts. |
| |
| * DerivedSources.make: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCoreSources.bkl: |
| |
| 2008-11-07 Alp Toker <alp@nuanti.com> |
| |
| More grammar.cpp -> Grammar.cpp build fixes. |
| |
| * AllInOneFile.cpp: |
| * GNUmakefile.am: |
| |
| 2008-11-07 Simon Hausmann <hausmann@webkit.org> |
| |
| Fix the build on case-sensitive file systems. grammar.y was renamed to |
| Grammar.y but Lexer.cpp includes grammar.h. The build bots didn't |
| notice this change because of stale files. |
| |
| * parser/Lexer.cpp: |
| |
| 2008-11-07 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Alexey Proskuryakov. |
| |
| Rename the m_nextGlobal, m_nextParameter, and m_nextConstant member |
| variables of CodeGenerator to m_nextGlobalIndex, m_nextParameterIndex, |
| and m_nextConstantIndex respectively. This is to distinguish these from |
| member variables like m_lastConstant, which are actually RefPtrs to |
| Registers. |
| |
| * bytecompiler/CodeGenerator.cpp: |
| (JSC::CodeGenerator::addGlobalVar): |
| (JSC::CodeGenerator::allocateConstants): |
| (JSC::CodeGenerator::CodeGenerator): |
| (JSC::CodeGenerator::addParameter): |
| (JSC::CodeGenerator::addConstant): |
| * bytecompiler/CodeGenerator.h: |
| |
| 2008-11-06 Gavin Barraclough barraclough@apple.com |
| |
| Reviewed by Oliver Hunt. |
| |
| Do not make a cti_* call to perform an op_call unless either: |
| (1) The codeblock for the function body has not been generated. |
| (2) The number of arguments passed does not match the callee arity. |
| |
| ~1% progression on sunspider --v8 |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::compileOpCallInitializeCallFrame): |
| (JSC::CTI::compileOpCall): |
| (JSC::CTI::privateCompileSlowCases): |
| * VM/CTI.h: |
| * VM/Machine.cpp: |
| (JSC::Machine::cti_op_call_JSFunction): |
| (JSC::Machine::cti_op_call_arityCheck): |
| (JSC::Machine::cti_op_construct_JSConstruct): |
| * VM/Machine.h: |
| * kjs/nodes.h: |
| |
| 2008-11-06 Cameron Zwarich <zwarich@apple.com> |
| |
| Reviewed by Geoff Garen. |
| |
| Move the remaining files in the kjs subdirectory of JavaScriptCore to |
| a new parser subdirectory, and remove the kjs subdirectory entirely. |
| |
| * AllInOneFile.cpp: |
| * DerivedSources.make: |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.vcproj/WTF/WTF.vcproj: |
| * JavaScriptCore.vcproj/jsc/jsc.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * JavaScriptCoreSources.bkl: |
| * VM/CodeBlock.h: |
| * VM/ExceptionHelpers.cpp: |
| * VM/SamplingTool.h: |
| * bytecompiler/CodeGenerator.h: |
| * jsc.pro: |
| * jscore.bkl: |
| * kjs: Removed. |
| * kjs/NodeInfo.h: Removed. |
| * kjs/Parser.cpp: Removed. |
| * kjs/Parser.h: Removed. |
| * kjs/ResultType.h: Removed. |
| * kjs/SourceCode.h: Removed. |
| * kjs/SourceProvider.h: Removed. |
| * kjs/grammar.y: Removed. |
| * kjs/keywords.table: Removed. |
| * kjs/lexer.cpp: Removed. |
| * kjs/lexer.h: Removed. |
| * kjs/nodes.cpp: Removed. |
| * kjs/nodes.h: Removed. |
| * kjs/nodes2string.cpp: Removed. |
| * parser: Added. |
| * parser/Grammar.y: Copied from kjs/grammar.y. |
| * parser/Keywords.table: Copied from kjs/keywords.table. |
| * parser/Lexer.cpp: Copied from kjs/lexer.cpp. |
| * parser/Lexer.h: Copied from kjs/lexer.h. |
| * parser/NodeInfo.h: Copied from kjs/NodeInfo.h. |
| * parser/Nodes.cpp: Copied from kjs/nodes.cpp. |
| * parser/Nodes.h: Copied from kjs/nodes.h. |
| * parser/Parser.cpp: Copied from kjs/Parser.cpp. |
| * parser/Parser.h: Copied from kjs/Parser.h. |
| * parser/ResultType.h: Copied from kjs/ResultType.h. |
| * parser/SourceCode.h: Copied from kjs/SourceCode.h. |
| * parser/SourceProvider.h: Copied from kjs/SourceProvider.h. |
| * parser/nodes2string.cpp: Copied from kjs/nodes2string.cpp. |
| * pcre/pcre.pri: |
| * pcre/pcre_exec.cpp: |
| * runtime/FunctionConstructor.cpp: |
| * runtime/JSActivation.h: |
| * runtime/JSFunction.h: |
| * runtime/JSGlobalData.cpp: |
| * runtime/JSGlobalObjectFunctions.cpp: |
| * runtime/JSObject.cpp: |
| (JSC::JSObject::toNumber): |
| * runtime/RegExp.cpp: |
| |
| 2008-11-06 Adam Roben <aroben@apple.com> |
| |
| Windows build fix after r38196 |
| |
| * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added bytecompiler/ to the |
| include path. |
| |
| 2008-11-06 Cameron Zwarich <zwarich@apple.com> |
| |
| Rubber-stamped by Sam Weinig. |
| |
| Create a new bytecompiler subdirectory of JavaScriptCore and move some |
| relevant files to it. |
| |
| * AllInOneFile.cpp: |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * JavaScriptCoreSources.bkl: |
| * VM/CodeGenerator.cpp: Removed. |
| * VM/CodeGenerator.h: Removed. |
| * bytecompiler: Added. |
| * bytecompiler/CodeGenerator.cpp: Copied from VM/CodeGenerator.cpp. |
| * bytecompiler/CodeGenerator.h: Copied from VM/CodeGenerator.h. |
| * bytecompiler/LabelScope.h: Copied from kjs/LabelScope.h. |
| * jscore.bkl: |
| * kjs/LabelScope.h: Removed. |
| |
| 2008-11-06 Adam Roben <aroben@apple.com> |
| |
| Windows clean build fix after r38155 |
| |
| Rubberstamped by Cameron Zwarich. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Update |
| the post-build event for the move of create_hash_table out of kjs/. |
| |
| 2008-11-06 Laszlo Gombos <laszlo.1.gombos@nokia.com> |
| |
| Reviewed by Darin Adler. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22107 |
| |
| Bug uncovered during RVCT port in functions not used. get_lt() and |
| get_gt() takes only one argument - remove second argument where |
| applicable. |
| |
| * wtf/AVLTree.h: |
| (JSC::AVLTree::remove): Remove second argument of get_lt/get_gt(). |
| (JSC::AVLTree::subst): Ditto. |
| |
| 2008-11-06 Alp Toker <alp@nuanti.com> |
| |
| Reviewed by Cameron Zwarich. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22033 |
| [GTK] CTI/Linux r38064 crashes; JIT requires executable memory |
| |
| Mark pages allocated by the FastMalloc mmap code path executable with |
| PROT_EXEC. This fixes crashes seen on CPUs and kernels that enforce |
| non-executable memory (like ExecShield on Fedora Linux) when the JIT |
| is enabled. |
| |
| This patch does not resolve the issue on debug builds so affected |
| developers may still need to pass --disable-jit to configure. |
| |
| * wtf/TCSystemAlloc.cpp: |
| (TryMmap): |
| (TryDevMem): |
| (TCMalloc_SystemRelease): |
| |
| 2008-11-06 Peter Gal <galpeter@inf.u-szeged.hu> |
| |
| Reviewed by Cameron Zwarich. |
| |
| Bug 22099: Make the Qt port build the JSC shell in the correct place |
| <https://bugs.webkit.org/show_bug.cgi?id=22099> |
| |
| Adjust include paths and build destination dir for the 'jsc' executable |
| in the Qt build. |
| |
| * jsc.pro: |
| |
| 2008-11-06 Kristian Amlie <kristian.amlie@nokia.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| Implemented the block allocation on Symbian through heap allocation. |
| |
| Unfortunately there is no way to allocate virtual memory. The Posix |
| layer provides mmap() but no anonymous mapping. So this is a very slow |
| solution but it should work as a start. |
| |
| * runtime/Collector.cpp: |
| (JSC::allocateBlock): |
| (JSC::freeBlock): |
| |
| 2008-11-06 Laszlo Gombos <laszlo.1.gombos@nokia.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| Borrow some math functions from the MSVC port to the build with the |
| RVCT compiler. |
| |
| * wtf/MathExtras.h: |
| (isinf): |
| (isnan): |
| (signbit): |
| |
| 2008-11-06 Laszlo Gombos <laszlo.1.gombos@nokia.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| Include strings.h for strncasecmp(). |
| This is needed for compilation inside Symbian and it is also |
| confirmed by the man-page on Linux. |
| |
| * runtime/DateMath.cpp: |
| |
| 2008-11-06 Norbert Leser <norbert.leser@nokia.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| Implemented currentThreadStackBase for Symbian. |
| |
| * runtime/Collector.cpp: |
| (JSC::currentThreadStackBase): |
| |
| 2008-11-06 Laszlo Gombos <laszlo.1.gombos@nokia.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| RVCT does not support tm_gmtoff field, so disable that code just like |
| for MSVC. |
| |
| * runtime/DateMath.h: |
| (JSC::GregorianDateTime::GregorianDateTime): |
| (JSC::GregorianDateTime::operator tm): |
| |
| 2008-11-06 Kristian Amlie <kristian.amlie@nokia.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| Define PLATFORM(UNIX) for S60. Effectively WebKit on S60 is compiled |
| on top of the Posix layer. |
| |
| * wtf/Platform.h: |
| |
| 2008-11-06 Norbert Leser <norbert.leser@nokia.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| Added __SYMBIAN32__ condition for defining PLATFORM(SYMBIAN). |
| |
| * wtf/Platform.h: |
| |
| 2008-11-06 Ariya Hidayat <ariya.hidayat@trolltech.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| Added WINSCW compiler define for Symbian S60. |
| |
| * wtf/Platform.h: |
| |
| 2008-11-06 Kristian Amlie <kristian.amlie@nokia.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| Use the GCC defines of the WTF_ALIGN* macros for the RVCT and the |
| MINSCW compiler. |
| |
| * wtf/Vector.h: |
| |
| 2008-11-06 Kristian Amlie <kristian.amlie@nokia.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| Define capabilities of the SYMBIAN platform. Some of the system |
| headers are actually dependent on RVCT. |
| |
| * wtf/Platform.h: |
| |
| 2008-11-06 Kristian Amlie <kristian.amlie@nokia.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| Add missing stddef.h header needed for compilation in Symbian. |
| |
| * runtime/Collector.h: |
| |
| 2008-11-06 Kristian Amlie <kristian.amlie@nokia.com> |
| |
| Reviewed by Simon Hausmann. |
| |
| Added COMPILER(RVCT) to detect the ARM RVCT compiler used in the Symbian environment. |
| |
| * wtf/Platform.h: |
| |
| 2008-11-06 Simon Hausmann <hausmann@webkit.org> |
| |
| Fix the Qt build, adjust include paths after move of jsc.pro. |
| |
| * jsc.pro: |
| |
| 2008-11-06 Cameron Zwarich <zwarich@apple.com> |
| |
| Rubber-stamped by Sam Weinig. |
| |
| Move kjs/Shell.cpp to the top level of the JavaScriptCore directory and |
| rename it to jsc.cpp to reflect the name of the binary compiled from it. |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.vcproj/jsc/jsc.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * jsc.cpp: Copied from kjs/Shell.cpp. |
| * jsc.pro: |
| * jscore.bkl: |
| * kjs/Shell.cpp: Removed. |
| |
| 2008-11-06 Cameron Zwarich <zwarich@apple.com> |
| |
| Rubber-stamped by Sam Weinig. |
| |
| Move create_hash_table and jsc.pro out of the kjs directory and into the |
| root directory of JavaScriptCore. |
| |
| * DerivedSources.make: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * create_hash_table: Copied from kjs/create_hash_table. |
| * jsc.pro: Copied from kjs/jsc.pro. |
| * kjs/create_hash_table: Removed. |
| * kjs/jsc.pro: Removed. |
| * make-generated-sources.sh: |
| |
| 2008-11-05 Gavin Barraclough <barraclough@apple.com> |
| |
| Reviewed by Maciej Stachowiak. |
| |
| https://bugs.webkit.org/show_bug.cgi?id=22094 |
| |
| Fix for bug where the callee incorrectly recieves the caller's lexical |
| global object as this, rather than its own. Implementation closely |
| follows the spec, passing jsNull, checking in the callee and replacing |
| with the global object where necessary. |
| |
| * VM/CTI.cpp: |
| (JSC::CTI::compileOpCall): |
| * VM/Machine.cpp: |
| (JSC::Machine::cti_op_call_NotJSFunction): |
| (JSC::Machine::cti_op_call_eval): |
| * runtime/JSCell.h: |
| (JSC::JSValue::toThisObject): |
| * runtime/JSImmediate.cpp: |
| (JSC::JSImmediate::toThisObject): |
| * runtime/JSImmediate.h: |
| |
| 2008-11-05 Kevin Ollivier <kevino@theolliviers.com> |
| |
| wx build fix after Operations.cpp move. |
| |
| * JavaScriptCoreSources.bkl: |
| |
| 2008-11-05 Cameron Zwarich <zwarich@apple.com> |
| |
| Not reviewed. |
| |
| Fix the build for case-sensitive build systems and wxWindows. |
| |
| * JavaScriptCoreSources.bkl: |
| * kjs/create_hash_table: |
| |
| 2008-11-05 Cameron Zwarich <zwarich@apple.com> |
| |
| Not reviewed. |
| |
| Fix the build for case-sensitive build systems. |
| |
| * JavaScriptCoreSources.bkl: |
| * kjs/Shell.cpp: |
| * runtime/Interpreter.cpp: |
| * runtime/JSArray.cpp: |
| |
| 2008-11-05 Cameron Zwarich <zwarich@apple.com> |
| |
| Not reviewed. |
| |
| Fix the build for case-sensitive build systems. |
| |
| * API/JSBase.cpp: |
| * API/JSObjectRef.cpp: |
| * runtime/CommonIdentifiers.h: |
| * runtime/Identifier.cpp: |
| * runtime/InitializeThreading.cpp: |
| * runtime/InternalFunction.h: |
| * runtime/JSString.h: |
| * runtime/Lookup.h: |
| * runtime/PropertyNameArray.h: |
| * runtime/PropertySlot.h: |
| * runtime/StructureID.cpp: |
| * runtime/StructureID.h: |
| * runtime/UString.cpp: |
| |
| 2008-11-05 Cameron Zwarich <zwarich@apple.com> |
| |
| Rubber-stamped by Sam Weinig. |
| |
| Move more files to the runtime subdirectory of JavaScriptCore. |
| |
| * API/APICast.h: |
| * API/JSBase.cpp: |
| * API/JSCallbackObject.cpp: |
| * API/JSClassRef.cpp: |
| * API/JSClassRef.h: |
| * API/JSStringRefCF.cpp: |
| * API/JSValueRef.cpp: |
| * API/OpaqueJSString.cpp: |
| * API/OpaqueJSString.h: |
| * AllInOneFile.cpp: |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * JavaScriptCoreSources.bkl: |
| * VM/CodeBlock.h: |
| * VM/CodeGenerator.cpp: |
| * VM/Machine.cpp: |
| * VM/RegisterFile.h: |
| * debugger/Debugger.h: |
| * kjs/SourceProvider.h: |
| * kjs/TypeInfo.h: Removed. |
| * kjs/collector.cpp: Removed. |
| * kjs/collector.h: Removed. |
| * kjs/completion.h: Removed. |
| * kjs/create_hash_table: |
| * kjs/identifier.cpp: Removed. |
| * kjs/identifier.h: Removed. |
| * kjs/interpreter.cpp: Removed. |
| * kjs/interpreter.h: Removed. |
| * kjs/lexer.cpp: |
| * kjs/lexer.h: |
| * kjs/lookup.cpp: Removed. |
| * kjs/lookup.h: Removed. |
| * kjs/nodes.cpp: |
| * kjs/nodes.h: |
| * kjs/operations.cpp: Removed. |
| * kjs/operations.h: Removed. |
| * kjs/protect.h: Removed. |
| * kjs/regexp.cpp: Removed. |
| * kjs/regexp.h: Removed. |
| * kjs/ustring.cpp: Removed. |
| * kjs/ustring.h: Removed. |
| * pcre/pcre_exec.cpp: |
| * profiler/CallIdentifier.h: |
| * profiler/Profile.h: |
| * runtime/ArrayConstructor.cpp: |
| * runtime/ArrayPrototype.cpp: |
| * runtime/ArrayPrototype.h: |
| * runtime/Collector.cpp: Copied from kjs/collector.cpp. |
| * runtime/Collector.h: Copied from kjs/collector.h. |
| * runtime/CollectorHeapIterator.h: |
| * runtime/Completion.h: Copied from kjs/completion.h. |
| * runtime/ErrorPrototype.cpp: |
| * runtime/Identifier.cpp: Copied from kjs/identifier.cpp. |
| * runtime/Identifier.h: Copied from kjs/identifier.h. |
| * runtime/InitializeThreading.cpp: |
| * runtime/Interpreter.cpp: Copied from kjs/interpreter.cpp. |
| * runtime/Interpreter.h: Copied from kjs/interpreter.h. |
| * runtime/JSCell.h: |
| * runtime/JSGlobalData.cpp: |
| * runtime/JSGlobalData.h: |
| * runtime/JSLock.cpp: |
| * runtime/JSNumberCell.cpp: |
| * runtime/JSNumberCell.h: |
| * runtime/JSObject.cpp: |
| * runtime/JSValue.h: |
| * runtime/Lookup.cpp: Copied from kjs/lookup.cpp. |
| * runtime/Lookup.h: Copied from kjs/lookup.h. |
| * runtime/MathObject.cpp: |
| * runtime/NativeErrorPrototype.cpp: |
| * runtime/NumberPrototype.cpp: |
| * runtime/Operations.cpp: Copied from kjs/operations.cpp. |
| * runtime/Operations.h: Copied from kjs/operations.h. |
| * runtime/PropertyMapHashTable.h: |
| * runtime/Protect.h: Copied from kjs/protect.h. |
| * runtime/RegExp.cpp: Copied from kjs/regexp.cpp. |
| * runtime/RegExp.h: Copied from kjs/regexp.h. |
| * runtime/RegExpConstructor.cpp: |
| * runtime/RegExpObject.h: |
| * runtime/RegExpPrototype.cpp: |
| * runtime/SmallStrings.h: |
| * runtime/StringObjectThatMasqueradesAsUndefined.h: |
| * runtime/StructureID.cpp: |
| * runtime/StructureID.h: |
| * runtime/StructureIDTransitionTable.h: |
| * runtime/SymbolTable.h: |
| * runtime/TypeInfo.h: Copied from kjs/TypeInfo.h. |
| * runtime/UString.cpp: Copied from kjs/ustring.cpp. |
| * runtime/UString.h: Copied from kjs/ustring.h. |
| * wrec/CharacterClassConstructor.h: |
| * wrec/WREC.h: |
| |
| 2008-11-05 Geoffrey Garen <ggaren@apple.com> |
| |
| Suggested by Darin Adler. |
| |
| Removed two copy constructors that the compiler can generate for us |
| automatically. |
| |
| * VM/LabelID.h: |
| (JSC::LabelID::setLocation): |
| (JSC::LabelID::offsetFrom): |
| (JSC::LabelID::ref): |
| (JSC::LabelID::refCount): |
| * kjs/LabelScope.h: |
| |
| 2008-11-05 Anders Carlsson <andersca@apple.com> |
| |
| Fix Snow Leopard build. |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| |
| 2008-11-04 Cameron Zwarich <zwarich@apple.com> |
| |
| Rubber-stamped by Steve Falkenburg. |
| |
| Move dtoa.cpp and dtoa.h to the WTF Visual Studio project to reflect |
| their movement in the filesystem. |
| |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.vcproj/WTF/WTF.vcproj: |
| |
| 2008-11-04 Cameron Zwarich <zwarich@apple.com> |
| |
| Rubber-stamped by Sam Weinig. |
| |
| Move kjs/dtoa.h to the wtf subdirectory of JavaScriptCore. |
| |
| * AllInOneFile.cpp: |
| * GNUmakefile.am: |
| * JavaScriptCore.pri: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * JavaScriptCoreSources.bkl: |
| * kjs/dtoa.cpp: Removed. |
| * kjs/dtoa.h: Removed. |
| * wtf/dtoa.cpp: Copied from kjs/dtoa.cpp. |
| * wtf/dtoa.h: Copied from kjs/dtoa.h. |
| |
| 2008-11-04 Cameron Zwarich <zwarich@apple.com> |
| |
| Rubber-stamped by Sam Weinig. |
| |
| Move kjs/config.h to the top level of JavaScriptCore. |
| |
| * GNUmakefile.am: |
| * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: |
| * JavaScriptCore.xcodeproj/project.pbxproj: |
| * config.h: Copied from kjs/config.h. |
| * kjs/config.h: Removed. |
| |
| 2008-11-04 Darin Adler <darin@apple.com> |
| |
| Reviewed by Tim Hatcher. |
| |
| * wtf/ThreadingNone.cpp: Tweak formatting. |
| |
| 2008-11-03 Darin Adler <darin@apple.com> |
| |
| Reviewed by Tim Hatcher. |
| |
| - https://bugs.webkit.org/show_bug.cgi?id=22061 |
| create script to check for exit-time destructors |
| |
| * JavaScriptCore.exp: Changed to export functions rather than |
| a global for the atomically initialized static mutex. |
| |
| * JavaScriptCore.xcodeproj/project.pbxproj: Added a script |
| phase that runs the check-for-exit-time-destructors script. |
| |
| * wtf/MainThread.cpp: |
| (WTF::mainThreadFunctionQueueMutex): Changed to leak an object |
| rather than using an exit time destructor. |
| (WTF::functionQueue): Ditto. |
| * wtf/unicode/icu/CollatorICU.cpp: |
| (WTF::cachedCollatorMutex): Ditto. |
| |
| * wtf/Threading.h: Changed other platforms to share the Windows |
| approach where the mutex is internal and the functions are exported. |
| * wtf/ThreadingGtk.cpp: |
| (WTF::lockAtomicallyInitializedStaticMutex): Ditto. |
| (WTF::unlockAtomicallyInitializedStaticMutex): Ditto. |
| * wtf/ThreadingNone.cpp: |
| (WTF::lockAtomicallyInitializedStaticMutex): Ditto. |
| (WTF::unlockAtomicallyInitializedStaticMutex): Ditto. |
| * wtf/ThreadingPthreads.cpp: |
| (WTF::threadMapMutex): Changed to leak an object rather than using |
| an exit time destructor. |
| (WTF::lockAtomicallyInitializedStaticMutex): Mutex change. |
| (WTF::unlockAtomicallyInitializedStaticMutex): Ditto. |
| (WTF::threadMap): Changed to leak an object rather than using |
| an exit time destructor. |
| * wtf/ThreadingQt.cpp: |
| (WTF::lockAtomicallyInitializedStaticMutex): Mutex change. |
| (WTF::unlockAtomicallyInitializedStaticMutex): Ditto. |
| * wtf/ThreadingWin.cpp: |
| (WTF::lockAtomicallyInitializedStaticMutex): Added an assertion. |
| |
| 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 Cameron 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 == |