diff options
Diffstat (limited to 'src/3rdparty/webkit/JavaScriptCore/ChangeLog')
-rw-r--r-- | src/3rdparty/webkit/JavaScriptCore/ChangeLog | 39442 |
1 files changed, 517 insertions, 38925 deletions
diff --git a/src/3rdparty/webkit/JavaScriptCore/ChangeLog b/src/3rdparty/webkit/JavaScriptCore/ChangeLog index fbda5150fd..55518f585e 100644 --- a/src/3rdparty/webkit/JavaScriptCore/ChangeLog +++ b/src/3rdparty/webkit/JavaScriptCore/ChangeLog @@ -1,39240 +1,832 @@ -2009-06-08 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> +2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu> - Reviewed by Simon Hausmann. - - [Qt] Use $QMAKE_PATH_SEP instead of hardcoded / to fix Windows build - - * JavaScriptCore.pri: - * JavaScriptCore.pro: - * jsc.pro: - -2009-06-07 Gavin Barraclough <barraclough@apple.com> - - RS by Sam Weinig. - - Remove bonus bogus \n from last commit. - - * jit/JITStubs.cpp: - (JSC::): - -2009-06-07 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Sam Weinig. - - Change the implementation of op_throw so the stub function always modifies its - return address - if it doesn't find a 'catch' it will switch to a trampoline - to force a return from JIT execution. This saves memory, by avoiding the need - for a unique return for every op_throw. - - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_throw): - JITStubs::cti_op_throw now always changes its return address, - remove return code generated after the stub call (this is now - handled by ctiOpThrowNotCaught). - * jit/JITStubs.cpp: - (JSC::): - Add ctiOpThrowNotCaught definitions. - (JSC::JITStubs::DEFINE_STUB_FUNCTION): - Change cti_op_throw to always change its return address. - * jit/JITStubs.h: - Add ctiOpThrowNotCaught declaration. - -2009-06-05 Gavin Barraclough <barraclough@apple.com> - - Rudder stamped by Sam Weinig. - - Add missing ASSERT. - - * assembler/X86Assembler.h: - (JSC::X86Assembler::getRelocatedAddress): - -2009-06-05 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Sam Weinig. - - Switch storePtrWithPatch to take the initial immediate value as an argument. - - * assembler/MacroAssemblerX86.h: - (JSC::MacroAssemblerX86::storePtrWithPatch): - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::storePtrWithPatch): - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_jsr): - -2009-06-05 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Sam Weinig. - - Remove patchLength..tByIdExternalLoadPrefix magic numbers from JIT.h. + Reviewed by Maciej Stachowiak. - These aren't really suitable values to be tracking within common code - of the JIT, since they are not (and realistically cannot) be checked - by ASSERTs, as the other repatch offsets are. Move this functionality - (skipping the REX prefix when patching load instructions to LEAs on - x86-64) into the X86Assembler. + https://bugs.webkit.org/show_bug.cgi?id=26645 - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadPtrToLEA): - * assembler/X86Assembler.h: - (JSC::X86Assembler::repatchLoadPtrToLEA): - * jit/JIT.h: - * jit/JITPropertyAccess.cpp: - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): + Inherits ScopeChainNode class from FastAllocBase because it has been + instantiated by 'new' in JavaScriptCore/runtime/ScopeChain.h:95. -2009-06-05 Shinichiro Hamaji <hamaji@chromium.org> + * wtf/RefPtr.h: - Bug 26160: Compile fails in MacOSX when GNU fileutils are installed +2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu> - <https://bugs.webkit.org/show_bug.cgi?id=26160> + Reviewed by Darin Adler. - Reviewed by Alexey Proskuryakov. + https://bugs.webkit.org/show_bug.cgi?id=26648 - Use /bin/ln instead of ln for cases where this command is used with -h option. - As this option is not supported by GNU fileutils, this change helps users - who have GNU fileutils in their PATH. + Inherits Deque class from FastAllocBase because it has been + instantiated by 'new' with DEFINE_STATIC_LOCAL macro in + JavaScriptCore/wtf/MainThread.cpp:62. - * JavaScriptCore.xcodeproj/project.pbxproj: + * wtf/Deque.h: -2009-06-05 Gavin Barraclough <barraclough@apple.com> +2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu> - Reviewed by Oliver Hunt. + Reviewed by Darin Adler. - Remove DoubleNotEqual floating point comparison condition for now - - it is not used, and it is unclear the semantics are correct (I think - this comparison would actually give you not-equal-or-unordered, which - might be what is wanted... we can revisit this interface & get it - right when required). + https://bugs.webkit.org/show_bug.cgi?id=26644 - Also, fix asserts in branchArith32 ops. All adds & subs can check - for Signed, multiply only sets OF so can only check for overflow. + Inherits RefPtr class from FastAllocBase because it has been + instantiated by 'new' in JavaScriptCore/runtime/StructureChain.cpp:41. - * assembler/MacroAssemblerX86Common.h: - (JSC::MacroAssemblerX86Common::): - (JSC::MacroAssemblerX86Common::branchAdd32): - (JSC::MacroAssemblerX86Common::branchMul32): - (JSC::MacroAssemblerX86Common::branchSub32): + * wtf/RefPtr.h: -2009-06-05 Gavin Barraclough <barraclough@apple.com> +2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu> - Reviewed by Oliver Hunt. + Reviewed by Darin Adler. - Minor tidy up in JITStubs. + Inherits HashSet class from FastAllocBase, because it has been + instantiated by 'new' in JavaScriptCore/runtime/Collector.h:116. - * jit/JITStubs.cpp: - (JSC::StackHack::StackHack): - * jit/JITStubs.h: + * wtf/HashSet.h: -2009-06-05 Koen Kooi <koen@dominion.thruhere.net> +2009-06-24 Zoltan Horvath <hzoltan@inf.u-szeged.hu> - Reviewed by Xan Lopez. + Reviewed by Darin Adler. - Build fix for glib unicode backend. + Inherits Vector class from FastAllocBase because it has been + instantiated by 'new' in JavaScriptCore/runtime/Structure.cpp:633. - * wtf/unicode/glib/UnicodeMacrosFromICU.h: + * wtf/Vector.h: -2009-06-05 Gavin Barraclough <barraclough@apple.com> +2009-06-24 Norbert Leser <norbert.leser@nokia.com> - Reviewed by Oliver Hunt. + Reviewed by Maciej Stachoviak. - 3 tiny cleanups: + The BytecodeGenerator objects were instantiated on stack, which takes up ~38kB per instance + (each instance includes copy of JSC::CodeBlock with large SymbolTable, etc.). + Specifically, since there is nested invocation (e.g., GlobalCode --> FunctionCode), + the stack overflows immediately on Symbian hardware (max. 80 kB). + Proposed change allocates generator objects on heap. + Performance impact (if any) should be negligible and change is proposed as general fix, + rather than ifdef'd for SYMBIAN. - * assembler/MacroAssemblerX86.h: - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::storePtrWithPatch): - store*() methods should take an ImplicitAddress, rather than an Address. - * assembler/X86Assembler.h: - Make patchPointer private. - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_ret): - Remove empty line at end of function. + * parser/Nodes.cpp: + (JSC::ProgramNode::generateBytecode): + (JSC::EvalNode::generateBytecode): + (JSC::EvalNode::bytecodeForExceptionInfoReparse): + (JSC::FunctionBodyNode::generateBytecode): + (JSC::FunctionBodyNode::bytecodeForExceptionInfoReparse): -2009-06-05 Gavin Barraclough <barraclough@apple.com> +2009-06-23 Oliver Hunt <oliver@apple.com> - Reviewed by Oliver Hunt. + Reviewed by Gavin Barraclough. - Encapsulate many uses of void* in the assembler & jit with types that provide - more semantic information. The new types are: - - * MacroAssemblerCodePtr - this wraps a pointer into JIT generated code. - * FunctionPtr - this wraps a pointer to a C/C++ function in JSC. - * ReturnAddressPtr - this wraps a return address resulting from a 'call' instruction. + <rdar://problem/6992806> REGRESSION: Enumeration can skip new properties in cases of prototypes that have more than 64 (26593) + <https://bugs.webkit.org/show_bug.cgi?id=26593> - Wrapping these types allows for stronger type-checking than is possible with everything - represented a void*. For example, it is now enforced by the type system that near - calls can only be linked to JIT code and not to C functions in JSC (this was previously - required, but could not be enforced on the interface). + Do not attempt to cache structure chains if they contain a dictionary at any level. - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::CodeLocationCommon::CodeLocationCommon): - (JSC::AbstractMacroAssembler::CodeLocationCommon::dataLocation): - (JSC::AbstractMacroAssembler::CodeLocationCommon::executableAddress): - (JSC::AbstractMacroAssembler::CodeLocationCommon::reset): - (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadToLEA): - (JSC::AbstractMacroAssembler::CodeLocationInstruction::CodeLocationInstruction): - (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForSwitch): - (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForExceptionHandler): - (JSC::AbstractMacroAssembler::CodeLocationLabel::addressForJSR): - (JSC::AbstractMacroAssembler::CodeLocationLabel::operator!): - (JSC::AbstractMacroAssembler::CodeLocationLabel::reset): - (JSC::AbstractMacroAssembler::CodeLocationLabel::CodeLocationLabel): - (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::CodeLocationNearCall::relink): - (JSC::AbstractMacroAssembler::CodeLocationNearCall::calleeReturnAddressValue): - (JSC::AbstractMacroAssembler::CodeLocationNearCall::CodeLocationNearCall): - (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): - (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::CodeLocationDataLabel32): - (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): - (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::CodeLocationDataLabelPtr): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToTrampoline): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::addressForLookup): - (JSC::AbstractMacroAssembler::trampolineAt): - (JSC::AbstractMacroAssembler::PatchBuffer::link): - (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization): - (JSC::::CodeLocationCommon::instructionAtOffset): - (JSC::::CodeLocationCommon::labelAtOffset): - (JSC::::CodeLocationCommon::jumpAtOffset): - (JSC::::CodeLocationCommon::callAtOffset): - (JSC::::CodeLocationCommon::nearCallAtOffset): - (JSC::::CodeLocationCommon::dataLabelPtrAtOffset): - (JSC::::CodeLocationCommon::dataLabel32AtOffset): - * assembler/MacroAssemblerCodeRef.h: - (JSC::FunctionPtr::FunctionPtr): - (JSC::FunctionPtr::value): - (JSC::FunctionPtr::executableAddress): - (JSC::ReturnAddressPtr::ReturnAddressPtr): - (JSC::ReturnAddressPtr::value): - (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): - (JSC::MacroAssemblerCodePtr::executableAddress): - (JSC::MacroAssemblerCodePtr::dataLocation): - (JSC::MacroAssemblerCodeRef::MacroAssemblerCodeRef): - * assembler/X86Assembler.h: - (JSC::X86Assembler::patchPointerForCall): - * jit/JIT.cpp: - (JSC::ctiPatchNearCallByReturnAddress): - (JSC::ctiPatchCallByReturnAddress): - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - (JSC::JIT::compileCTIMachineTrampolines): - * jit/JITCall.cpp: - (JSC::JIT::compileOpCall): - * jit/JITCode.h: - (JSC::JITCode::operator !): - (JSC::JITCode::addressForCall): - (JSC::JITCode::offsetOf): - (JSC::JITCode::execute): - (JSC::JITCode::size): - (JSC::JITCode::HostFunction): - * jit/JITInlineMethods.h: - (JSC::JIT::emitNakedCall): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): - (JSC::JIT::privateCompilePatchGetArrayLength): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdChain): + * interpreter/Interpreter.cpp: + (JSC::Interpreter::tryCachePutByID): + (JSC::Interpreter::tryCacheGetByID): * jit/JITStubs.cpp: - (JSC::JITThunks::JITThunks): (JSC::JITThunks::tryCachePutByID): - (JSC::JITThunks::tryCacheGetByID): - (JSC::JITStubs::DEFINE_STUB_FUNCTION): - * jit/JITStubs.h: - (JSC::JITThunks::ctiArrayLengthTrampoline): - (JSC::JITThunks::ctiStringLengthTrampoline): - (JSC::JITThunks::ctiVirtualCallPreLink): - (JSC::JITThunks::ctiVirtualCallLink): - (JSC::JITThunks::ctiVirtualCall): - (JSC::JITThunks::ctiNativeCallThunk): - * yarr/RegexJIT.h: - (JSC::Yarr::RegexCodeBlock::operator!): - (JSC::Yarr::RegexCodeBlock::execute): - -2009-06-05 Antti Koivisto <antti@apple.com> - - Try to unbreak Windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-06-03 Antti Koivisto <antti@apple.com> - - Reviewed by Dave Kilzer. - - https://bugs.webkit.org/show_bug.cgi?id=13128 - Safari not obeying cache header - - Export JSC::parseDate() - - * JavaScriptCore.exp: - * JavaScriptCore.xcodeproj/project.pbxproj: - -2009-06-04 Oliver Hunt <oliver@apple.com> + * runtime/Structure.cpp: + (JSC::Structure::getEnumerablePropertyNames): + (JSC::Structure::addPropertyTransition): + * runtime/StructureChain.cpp: + (JSC::StructureChain::isCacheable): + * runtime/StructureChain.h: - Reviewed by Gavin Barraclough. +2009-06-23 Yong Li <yong.li@torchmobile.com> - Bug in property caching of getters and setters. + Reviewed by George Staikos. - Make sure that the transition logic accounts for getters and setters. - If we don't we end up screwing up the transition tables so that some - transitions will start incorrectly believing that they need to check - for getters and setters. + https://bugs.webkit.org/show_bug.cgi?id=26654 + Add the proper export define for the JavaScriptCore API when building for WINCE. - * runtime/JSObject.cpp: - (JSC::JSObject::defineGetter): - (JSC::JSObject::defineSetter): - * runtime/JSObject.h: - (JSC::): - * runtime/Structure.h: + * API/JSBase.h: -2009-06-04 Gavin Barraclough <barraclough@apple.com> +2009-06-23 Joe Mason <joe.mason@torchmobile.com> - Reviewed by Sam Weinig. + Reviewed by Adam Treat. - Minor tweak to PatchBuffer, change it so it no longer holds a CodeRef, and instead - holds a separate code pointer and executable pool. Since it now always holds its - own copy of the code size, and to simplify the construction sequence, it's neater - this way. + Authors: Yong Li <yong.li@torchmobile.com>, Joe Mason <joe.mason@torchmobile.com> - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer): - (JSC::AbstractMacroAssembler::PatchBuffer::finalizeCode): - (JSC::AbstractMacroAssembler::PatchBuffer::code): - (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization): + https://bugs.webkit.org/show_bug.cgi?id=26611 + Implement currentThreadStackBase on WINCE by adding a global, + g_stackBase, which must be set to the address of a local variable + by the caller before calling any WebKit function that invokes JSC. -2009-06-04 Gavin Barraclough <barraclough@apple.com> + * runtime/Collector.cpp: + (JSC::isPageWritable): + (JSC::getStackBase): + Starts at the top of the stack and returns the entire range of + consecutive writable pages as an estimate of the actual stack. + This will be much bigger than the actual stack range, so some + dead objects can't be collected, but it guarantees live objects + aren't collected prematurely. - Reviewed by Oliver Hunt. + (JSC::currentThreadStackBase): + On WinCE, returns g_stackBase if set or call getStackBase as a + fallback if not. - Remove 'JIT_STUB_ARGUMENT_STACK' this is unused and untested. +2009-06-23 Oliver Hunt <oliver@apple.com> - This just leaves JIT_STUB_ARGUMENT_REGISTER and JIT_STUB_ARGUMENT_VA_LIST. - Since JIT_STUB_ARGUMENT_REGISTER is the sensible configuration on most platforms, - remove this define and make this the default behaviour. - Platforms must now define JIT_STUB_ARGUMENT_VA_LIST to get crazy va_list voodoo, - if they so desire. + Reviewed by Alexey Proskuryakov. - (Refactoring of #ifdefs only, no functional change, no performance impact.) + Fix stupid performance problem in the LiteralParser - * jit/JIT.h: - * jit/JITInlineMethods.h: - (JSC::JIT::restoreArgumentReference): - (JSC::JIT::restoreArgumentReferenceForTrampoline): - * jit/JITStubs.cpp: - (JSC::): - * jit/JITStubs.h: - * wtf/Platform.h: + The LiteralParser was making a new UString in order to use + toDouble, however UString's toDouble allows a much wider range + of numberic strings than the LiteralParser accepts, and requires + an additional heap allocation or two for the construciton of the + UString. To rectify this we just call WTF::dtoa directly using + a stack allocated buffer to hold the validated numeric literal. -2009-06-04 Gavin Barraclough <barraclough@apple.com> + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::Lexer::lexNumber): + (JSC::LiteralParser::parse): + * runtime/LiteralParser.h: - Rubber stamped by Sam Weinig. +2009-06-22 Oliver Hunt <oliver@apple.com> - * jit/JITArithmetic.cpp: - Remove some redundant typedefs, unused since arithmetic was added to the MacroAssembler interface. + Reviewed by Alexey Proskuryakov. -2009-06-04 Brent Fulgham <bfulgham@webkit.org> + Bug 26640: JSON.stringify needs to special case Boolean objects + <https://bugs.webkit.org/show_bug.cgi?id=26640> - Build fix due to header include problem. + Add special case handling of the Boolean object so we match current + ES5 errata. - * interpreter/Interpreter.h: Remove wtf from includes so that - compile can find the headers in expected places. + * runtime/JSONObject.cpp: + (JSC::unwrapBoxedPrimitive): renamed from unwrapNumberOrString + (JSC::gap): + (JSC::Stringifier::appendStringifiedValue): -2009-06-04 Zoltan Horvath <hzoltan@inf.u-szeged.hu> +2009-06-22 Oliver Hunt <oliver@apple.com> Reviewed by Darin Adler. - HashTable class (JavaScriptCore/wtf/HashTable.h) doesn't instantiated by 'new', so - inheritance was removed. HashTable struct has been instantiated by operator new in - JSGlobalData.cpp:106. - HashTable couldn't inherited from FastAllocBase since struct with inheritance is - no longer POD, so HashTable struct has been instantiated by fastNew, destroyed by - fastDelete. + Bug 26591: Support revivers in JSON.parse + <https://bugs.webkit.org/show_bug.cgi?id=26591> - * interpreter/Interpreter.h: - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - (JSC::JSGlobalData::~JSGlobalData): - * wtf/HashTable.h: - -2009-06-04 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Oliver Hunt. + Add reviver support to JSON.parse. This completes the JSON object. - Wrap the code that plants pushes/pops planted by JIT in explanatorily named - methods; move property storage reallocation into a standard stub function. + * runtime/JSONObject.cpp: + (JSC::Walker::Walker): + (JSC::Walker::callReviver): + (JSC::Walker::walk): + (JSC::JSONProtoFuncParse): - ~No performance impact (possible <1% progression on x86-64, likely just noise). +2009-06-21 Oliver Hunt <oliver@apple.com> - * jit/JIT.cpp: - (JSC::JIT::privateCompile): - (JSC::JIT::privateCompileCTIMachineTrampolines): - Wrap calls to push/pop. - * jit/JIT.h: - Declare the new wrapper methods. - * jit/JITInlineMethods.h: - (JSC::JIT::preverveReturnAddressAfterCall): - (JSC::JIT::restoreReturnAddressBeforeReturn): - Define the new wrapper methods. - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_end): - (JSC::JIT::emit_op_ret): - Wrap calls to push/pop. - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - Move property storage reallocation into a standard stub function. - * jit/JITStubs.cpp: - (JSC::JITStubs::DEFINE_STUB_FUNCTION): - * jit/JITStubs.h: - (JSC::JITStubs::): - -2009-06-04 Laszlo Gombos <laszlo.1.gombos@nokia.com> - - Reviewed by Ariya Hidayat. - - [Qt] Single-threaded QtWebKit configuration - <https://bugs.webkit.org/show_bug.cgi?id=26015> - - * JavaScriptCore.pri: Use ThreadingNone.cpp instead of - ThreadingQt.cpp and make sure ENABLE_JSC_MULTIPLE_THREADS is turned off - when ENABLE_SINGLE_THREADED is tuned on - * wtf/ThreadingNone.cpp: - (WTF::ThreadCondition::wait): Fix compilation warning. - (WTF::ThreadCondition::timedWait): Ditto. - -2009-06-02 Mark Rowe <mrowe@apple.com> + Reviewed by Darin Adler. - Reviewed by Anders Carlsson. + Bug 26592: Support standard toJSON functions + <https://bugs.webkit.org/show_bug.cgi?id=26592> - Remove workaround that was added to address <rdar://problem/5488678> as it no longer affects our Tiger builds. + Add support for the standard Date.toJSON function. - * Configurations/Base.xcconfig: + * runtime/DatePrototype.cpp: + (JSC::dateProtoFuncToJSON): -2009-06-02 Xan Lopez <xlopez@igalia.com> +2009-06-21 Oliver Hunt <oliver@apple.com> Reviewed by Sam Weinig. - Use C-style comments in Platform.h so it can be included from C - files. + Bug 26594: JSC needs to support Date.toISOString + <https://bugs.webkit.org/show_bug.cgi?id=26594> - * wtf/Platform.h: + Add support for Date.toISOString. -2009-06-02 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> - - Rubber-stamped by Simon Hausmann. - - Use File::Spec->tmpdir instead of hardcoded paths for tempfile() dir - - This fixes the Windows-build if the user does not have a /tmp directory. - - * pcre/dftables: - -2009-06-02 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Oliver ">>" Hunt. - - emitSlow_op_rshift is linking the wrong number of slow cases, if !supportsFloatingPoint(). - Fixerate, and refactor/comment the code a little to make it clearer what is going on. - - * jit/JITArithmetic.cpp: - (JSC::JIT::emit_op_rshift): - (JSC::JIT::emitSlow_op_rshift): - -2009-06-01 Gavin Barraclough <barraclough@apple.com> - - Reviewed by NOBODY - speculative windows build fix (errm, for the other patch!). - - * jit/JITStubs.cpp: - (JSC::): - -2009-06-01 Gavin Barraclough <barraclough@apple.com> - - Reviewed by NOBODY - speculative windows build fix. - - * assembler/AbstractMacroAssembler.h: - (JSC::::CodeLocationCall::CodeLocationCall): - (JSC::::CodeLocationNearCall::CodeLocationNearCall): - -2009-06-01 Gavin Barraclough <barraclough@apple.com> + * runtime/DatePrototype.cpp: + (JSC::dateProtoFuncToISOString): - Reviewed by Olliej Hunt. +2009-06-21 Oliver Hunt <oliver@apple.com> - Change JITStub functions from being static members on the JITStub class to be - global extern "C" functions, and switch their the function signature declaration - in the definition of the functions to be C-macro generated. This makes it easier - to work with the stub functions from assembler code (since the names no longer - require mangling), and by delaring the functions with a macro we can look at - also auto-generating asm thunks to wrap the JITStub functions to perform the - work currently in 'restoreArgumentReference' (as a memory saving). + Reviewed by NOBODY (Build fix). - Making this change also forces us to be a bit more realistic about what is private - on the Register and CallFrame objects. Presently most everything on these classes - is private, and the classes have plenty of friends. We could befriend all the - global functions to perpetuate the delusion of encapsulation, but using friends is - a bit of a sledgehammer solution here - since friends can poke around with all of - the class's privates, and since all the major classes taht operate on Regsiters are - currently friends, right there is currently in practice very little protection at - all. Better to start removing friend delclarations, and exposing just the parts - that need to be exposed. + Remove dead code. - * interpreter/CallFrame.h: - (JSC::ExecState::returnPC): - (JSC::ExecState::setCallerFrame): - (JSC::ExecState::returnValueRegister): - (JSC::ExecState::setArgumentCount): - (JSC::ExecState::setCallee): - (JSC::ExecState::setCodeBlock): - * interpreter/Interpreter.h: - * interpreter/Register.h: - (JSC::Register::Register): - (JSC::Register::i): - * jit/JITStubs.cpp: - (JSC::): - (JSC::JITThunks::JITThunks): - (JSC::JITThunks::tryCachePutByID): - (JSC::JITThunks::tryCacheGetByID): - (JSC::JITStubs::DEFINE_STUB_FUNCTION): - * jit/JITStubs.h: - (JSC::JITStubs::): - * runtime/JSFunction.h: - (JSC::JSFunction::nativeFunction): - (JSC::JSFunction::classInfo): - * runtime/JSGlobalData.h: + * runtime/LiteralParser.cpp: + (JSC::LiteralParser::parse): -2009-06-01 Oliver Hunt <oliver@apple.com> +2009-06-21 Oliver Hunt <oliver@apple.com> - Reviewed by Gavin Barraclough. + Reviewed by Darin Adler and Cameron Zwarich. - Tidy up the literal parser. + Bug 26587: Support JSON.parse + <https://bugs.webkit.org/show_bug.cgi?id=26587> - Make the number lexing in the LiteralParser exactly match the JSON spec, which - makes us cover more cases, but also more strict. Also made string lexing only - allow double-quoted strings. + Extend the LiteralParser to support the full strict JSON + grammar, fix a few places where the grammar was incorrectly + lenient. Doesn't yet support the JSON.parse reviver function + but that does not block the JSON.parse functionality itself. + * interpreter/Interpreter.cpp: + (JSC::Interpreter::callEval): + * runtime/JSGlobalObjectFunctions.cpp: + (JSC::globalFuncEval): + * runtime/JSONObject.cpp: + (JSC::JSONProtoFuncParse): * runtime/LiteralParser.cpp: (JSC::LiteralParser::Lexer::lex): + (JSC::isSafeStringCharacter): (JSC::LiteralParser::Lexer::lexString): - (JSC::LiteralParser::Lexer::lexNumber): - -2009-06-01 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Sam "WX" Weinig. - - Allow the JIT to operate without relying on use of RWX memory, on platforms where this is supported. - - This patch adds a switch to Platform.h (ENABLE_ASSEMBLER_WX_EXCLUSIVE) which enables this mode of operation. - When this flag is set, all executable memory will be allocated RX, and switched to RW only whilst being - modified. Upon completion of code generation the protection is switched back to RX to allow execution. - - Further optimization will be required before it is desirable to enable this mode of operation by default; - enabling this presently incurs a 5%-10% regression. - - (Submitting disabled - no performance impact). - - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::CodeLocationInstruction::repatchLoadToLEA): - (JSC::AbstractMacroAssembler::CodeLocationLabel::fromFunctionPointer): - (JSC::AbstractMacroAssembler::CodeLocationJump::relink): - (JSC::AbstractMacroAssembler::CodeLocationCall::relink): - (JSC::AbstractMacroAssembler::CodeLocationNearCall::relink): - (JSC::AbstractMacroAssembler::CodeLocationDataLabel32::repatch): - (JSC::AbstractMacroAssembler::CodeLocationDataLabelPtr::repatch): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToFunction): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToTrampoline): - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkNearCallerToFunction): - (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer): - (JSC::AbstractMacroAssembler::PatchBuffer::~PatchBuffer): - (JSC::AbstractMacroAssembler::PatchBuffer::link): - (JSC::AbstractMacroAssembler::PatchBuffer::patch): - (JSC::AbstractMacroAssembler::PatchBuffer::performFinalization): - (JSC::::CodeLocationCommon::nearCallAtOffset): - (JSC::::CodeLocationCall::CodeLocationCall): - (JSC::::CodeLocationNearCall::CodeLocationNearCall): - * assembler/AssemblerBuffer.h: - (JSC::AssemblerBuffer::executableCopy): - * assembler/X86Assembler.h: - (JSC::CAN_SIGN_EXTEND_U32_64): - (JSC::X86Assembler::linkJump): - (JSC::X86Assembler::linkCall): - (JSC::X86Assembler::patchPointer): - (JSC::X86Assembler::relinkJump): - (JSC::X86Assembler::relinkCall): - (JSC::X86Assembler::repatchInt32): - (JSC::X86Assembler::repatchPointer): - (JSC::X86Assembler::repatchLoadToLEA): - (JSC::X86Assembler::patchInt32): - (JSC::X86Assembler::patchRel32): - * jit/ExecutableAllocator.h: - (JSC::ExecutableAllocator::): - (JSC::ExecutableAllocator::makeWritable): - (JSC::ExecutableAllocator::makeExecutable): - * jit/ExecutableAllocatorFixedVMPool.cpp: - (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): - * jit/ExecutableAllocatorPosix.cpp: - (JSC::ExecutablePool::systemAlloc): - (JSC::ExecutablePool::systemRelease): - (JSC::ExecutableAllocator::reprotectRegion): - * jit/ExecutableAllocatorWin.cpp: - * jit/JITPropertyAccess.cpp: - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): - * wtf/Platform.h: - -2009-05-29 Zoltan Horvath <hzoltan@inf.u-szeged.hu> - - Reviewed by Darin Adler. - - Inherits Interpreter class from FastAllocBase because it has been - instantiated by 'new' in JavaScriptCore/runtime/JSGlobalData.cpp. - - * interpreter/Interpreter.h: - -2009-06-01 David Levin <levin@chromium.org> - - Reviewed by NOBODY (windows build fix). - - Add exports for windows (corresponding to the JavaScriptCore.exp modification - in the previous change). - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-06-01 David Levin <levin@chromium.org> - - Reviewed by Darin Alder and Maciej Stachowiak. - - Bug 26057: StringImpl should share buffers with UString. - https://bugs.webkit.org/show_bug.cgi?id=26057 - - * JavaScriptCore.exp: - * runtime/UString.cpp: - (JSC::UString::Rep::create): - (JSC::UString::BaseString::sharedBuffer): Only do the sharing when - the buffer exceeds a certain size. The size was tuned by running - various dom benchmarks with numbers ranging from 20 to 800 and finding - a place that seemed to do the best overall. - * runtime/UString.h: - -2009-05-31 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Olliej "you just need to change NativeFunctionWrapper.h" Hunt. - - Add ENABLE_JIT_OPTIMIZE_NATIVE_CALL switch to allow JIT to operate without native call optimizations. - - * runtime/NativeFunctionWrapper.h: - * wtf/Platform.h: - -2009-05-30 Darin Adler <darin@apple.com> - - Reviewed by Sam Weinig. - - <rdar://problem/6935193> REGRESSION (r42734): Celtic Kane JavaScript benchmark does not run: - "Maximum call stack size exceeded" - - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncToString): Use the same recursion limit as the other recursion checks. - We need a limit of at least 100 to run the benchmark above. - (JSC::arrayProtoFuncToLocaleString): Ditto. - (JSC::arrayProtoFuncJoin): Ditto. - -2009-05-28 Dirk Schulze <krit@webkit.org> - - Reviewed by Nikolas Zimmermann. - - Added new build flag --filters for Mac. More details in WebCore/ChangeLog. - - * Configurations/FeatureDefines.xcconfig: - -2009-05-27 Oliver Hunt <oliver@apple.com> - - Reviewed by Mark Rowe. - - <rdar://problem/6928025> Stack overflow in JSC::stringProtoFuncReplace() running jsFunFuzz - - We should always check for exceptions after creating a CachedCall, this wasn't being done in - the string replace logic. - - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): - -2009-05-27 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk> - - Unreviewed (make distcheck) build fix; adding missing headers. - - * GNUmakefile.am: - -2009-05-27 Jessie Berlin <jberlin@apple.com> - - Reviewed by Adam Roben - - Fix the Windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-27 Fridrich Strba <fridrich.strba@bluewin.ch> - - Reviewed by Gustavo Noronha. - - When building on Windows, consider Windows specific files. - - * GNUmakefile.am: - -2009-05-27 Fridrich Strba <fridrich.strba@bluewin.ch> - - Reviewed by Maciej Stachowiak. - - When building with MinGW, don't use the __declspec(dl{import,export}) - decorations and rely on the linker to use its nifty auto-import feature. - It is extremely hard to get the decorations right with MinGW in general - and impossible in WebKit, where the resulting shared library is linking - together some static libraries. + (JSC::LiteralParser::parse): + * runtime/LiteralParser.h: + (JSC::LiteralParser::LiteralParser): + (JSC::LiteralParser::tryJSONParse): + (JSC::LiteralParser::): + (JSC::LiteralParser::Lexer::Lexer): - * config.h: +2009-06-21 David Levin <levin@chromium.org> -2009-05-26 Holger Hans Peter Freyther <zecke@selfish.org> + Reviewed by NOBODY (speculative build fix for windows). - Reviewed by Xan Lopez. + Simply removed some whitespace form this file to make windows build wtf and + hopefully copy the new MessageQueque.h so that WebCore picks it up. - https://bugs.webkit.org/show_bug.cgi?id=25613 + * wtf/Assertions.cpp: - Be able to use GOwnPtr for GHashTable as well. The assumption - is that the hash table has been created with g_hash_table_new_full - and has proper destruction functions. +2009-06-21 Drew Wilson <atwilson@google.com> - * wtf/GOwnPtr.cpp: - (WTF::GHashTable): - * wtf/GOwnPtr.h: + Reviewed by David Levin. -2009-05-26 Oliver Hunt <oliver@apple.com> + <https://bugs.webkit.org/show_bug.cgi?id=25043> + Added support for multi-threaded MessagePorts. - Reviewed by Gavin Barraclough. + * wtf/MessageQueue.h: + (WTF::::appendAndCheckEmpty): + Added API to test whether the queue was empty before adding an element. + +2009-06-20 David D. Kilzer <ddkilzer@webkit.org> - <rdar://problem/6924033> REGRESSION: Assertion failure due to forward references + Fix namespace comment in SegmentedVector.h - Add a pattern type for forward references to ensure that we don't confuse the - quantifier alternatives assertion. + * wtf/SegmentedVector.h: Updated namespace comment to reflect + new namespace after r44897. - * yarr/RegexCompiler.cpp: - (JSC::Yarr::RegexPatternConstructor::atomBackReference): - (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): - * yarr/RegexInterpreter.cpp: - (JSC::Yarr::ByteCompiler::emitDisjunction): - * yarr/RegexJIT.cpp: - (JSC::Yarr::RegexGenerator::generateTerm): - * yarr/RegexPattern.h: - (JSC::Yarr::PatternTerm::): - (JSC::Yarr::PatternTerm::PatternTerm): - (JSC::Yarr::PatternTerm::ForwardReference): +2009-06-20 Zoltan Herczeg <zherczeg@inf.u-szeged.hu> -2009-05-26 Gavin Barraclough <barraclough@apple.com> + Bug 24986: ARM JIT port + <https://bugs.webkit.org/show_bug.cgi?id=24986> Reviewed by Oliver Hunt. - Fix for: <rdar://problem/6918095> REGRESSION: jQuery load() issue (25981), - and also an ASSERT failure on http://ihasahotdog.com/. - - When overwriting a property on a dictionary with a cached specific value, - clear the cache if new value being written is different. - - * JavaScriptCore.exp: - Export the new symbols. - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_get_by_id_method_check_second): - Close dictionary prototypes upon caching a method access, as would happen when caching - a regular get_by_id. - * runtime/JSObject.h: - (JSC::JSObject::propertyStorage): - (JSC::JSObject::locationForOffset): - Make these methods private. - (JSC::JSObject::putDirectInternal): - When overwriting a property on a dictionary with a cached specific value, - clear the cache if new value being written is different. - * runtime/Structure.cpp: - (JSC::Structure::despecifyDictionaryFunction): - Reset the specific value field for a given property in a dictionary. - (JSC::Structure::despecifyFunctionTransition): - Rename of 'changeFunctionTransition' (this was already internally refered to as a despecification). - * runtime/Structure.h: - Declare new method. - -2009-05-26 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Oliver "pieces of eight" Hunt. - - When reseting RegexPattern class, should fully reset the class, not just bits of it. - In particular, we delete the cached character classes (for wordchars, etc), but do - not reset the set of pointers to the cached classes. In the case of a repeated parse - due to an illegal back-reference we will continue to use the deleted character class. - - * yarr/RegexPattern.h: - (JSC::Yarr::RegexPattern::reset): + An Iterator added for SegmentedVector. Currently + only the pre ++ operator is supported. -2009-05-26 Brent Fulgham <bfulgham@webkit.org> + * wtf/SegmentedVector.h: + (WTF::SegmentedVectorIterator::~SegmentedVectorIterator): + (WTF::SegmentedVectorIterator::operator*): + (WTF::SegmentedVectorIterator::operator->): + (WTF::SegmentedVectorIterator::operator++): + (WTF::SegmentedVectorIterator::operator==): + (WTF::SegmentedVectorIterator::operator!=): + (WTF::SegmentedVectorIterator::operator=): + (WTF::SegmentedVectorIterator::SegmentedVectorIterator): + (WTF::SegmentedVector::alloc): + (WTF::SegmentedVector::begin): + (WTF::SegmentedVector::end): - Build fix to correct r44161. +2009-06-20 Zoltan Herczeg <zherczeg@inf.u-szeged.hu> - * wtf/FastAllocBase.h: - -2009-05-26 Zoltan Horvath <horvath.zoltan.6@stud.u-szeged.hu> - - Reviewed by Maciej Stachowiak. - - Inherite HashTable from FastAllocBase, because it has been instantiated by - 'new' in JavaScriptCore/runtime/JSGlobalData.cpp. - - * wtf/HashTable.h: - * wtf/FastAllocBase.h: Remove 'wtf' path from TypeTraits.h to allow use outside of wtf. - -2009-05-25 David Levin <levin@chromium.org> - - Reviewed by Maciej Stachowiak and Oliver Hunt. - - https://bugs.webkit.org/show_bug.cgi?id=25126 - Allow the buffer underlying UString to be shared. - - In order to not grow the underlying size of any structure, - there is a union in the Rep string which holds - + m_sharedBuffer -- a pointer to the shared ref counted buffer - if the class is BaseString and the buffer is being shared OR - + m_baseString -- the BaseString if the class is only UString::Rep - but not a UString::BaseString - - Ideally, m_sharedBuffer would be a RefPtr, but it cannot be because - it is in a union. - - No change in sunspider perf. - - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * runtime/UString.cpp: - (JSC::UString::Rep::share): - (JSC::UString::Rep::destroy): - (JSC::UString::BaseString::sharedBuffer): - (JSC::UString::BaseString::setSharedBuffer): - (JSC::UString::BaseString::slowIsBufferReadOnly): - (JSC::expandCapacity): - (JSC::UString::Rep::reserveCapacity): - (JSC::UString::expandPreCapacity): - (JSC::concatenate): - (JSC::UString::append): - * runtime/UString.h: - (JSC::UString::Rep::Rep): - (JSC::UString::Rep::): - (JSC::UString::BaseString::isShared): - (JSC::UString::BaseString::isBufferReadOnly): - (JSC::UString::Rep::baseString): - * wtf/CrossThreadRefCounted.h: - (WTF::CrossThreadRefCounted::isShared): - * wtf/OwnFastMallocPtr.h: Added. - (WTF::OwnFastMallocPtr::OwnFastMallocPtr): - (WTF::OwnFastMallocPtr::~OwnFastMallocPtr): - (WTF::OwnFastMallocPtr::get): - (WTF::OwnFastMallocPtr::release): - -2009-05-25 Oliver Hunt <oliver@apple.com> - - Reviewed by Maciej Stachowiak. - - Re-add interpreter logic to jit-enabled builds as GCC mysteriously regresses without it - - * wtf/Platform.h: - -2009-05-25 Fridrich Strba <fridrich.strba@bluewin.ch> - - Reviewed by Maciej Stachowiak. - - The functions written in assembly need to have a leading - underscore on Windows too. - - * jit/JITStubs.cpp: - -2009-05-24 Steve Falkenburg <sfalken@apple.com> - - Build fix for experimental PGO Windows target. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2009-05-23 David Kilzer <ddkilzer@apple.com> - - Part 1 of 2: Bug 25495: Implement PassOwnPtr and replace uses of std::auto_ptr - - <https://bugs.webkit.org/show_bug.cgi?id=25495> + Bug 24986: ARM JIT port + <https://bugs.webkit.org/show_bug.cgi?id=24986> Reviewed by Oliver Hunt. - * GNUmakefile.am: Added OwnPtrCommon.h and PassOwnPtr.h. - * JavaScriptCore.vcproj/WTF/WTF.vcproj: Ditto. - * JavaScriptCore.xcodeproj/project.pbxproj: Ditto. - - * wtf/OwnPtr.h: - (WTF::OwnPtr::OwnPtr): Added constructors that take a - PassOwnPtr. Also added a copy constructor declaration that's - required when assigning a PassOwnPtr to a stack-based OwnPtr. - (WTF::operator=): Added assignment operator methods that take a - PassOwnPtr. - (WTF::swap): Reformatted. - (WTF::operator==): Whitespace changes. - (WTF::operator!=): Ditto. - - * wtf/OwnPtrCommon.h: Added. - (WTF::deleteOwnedPtr): + Move SegmentedVector to /wtf subdirectory + and change "namespace JSC" to "namespace WTF" - * wtf/PassOwnPtr.h: Added. - (WTF::PassOwnPtr::PassOwnPtr): - (WTF::PassOwnPtr::~PassOwnPtr): - (WTF::PassOwnPtr::get): - (WTF::PassOwnPtr::clear): - (WTF::PassOwnPtr::release): - (WTF::PassOwnPtr::operator*): - (WTF::PassOwnPtr::operator->): - (WTF::PassOwnPtr::operator!): - (WTF::PassOwnPtr::operator UnspecifiedBoolType): - (WTF::::operator): - (WTF::operator==): - (WTF::operator!=): - (WTF::static_pointer_cast): - (WTF::const_pointer_cast): - (WTF::getPtr): - -2009-05-23 Oliver Hunt <oliver@apple.com> - - Reviewed by Maciej Stachowiak. - - Remove interpreter specific logic from the JIT builds. - - This saves ~100k in JSC release builds. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - * interpreter/Interpreter.h: - * wtf/Platform.h: - -2009-05-22 Mark Rowe <mrowe@apple.com> - - Part two of an attempted Windows build fix. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-22 Mark Rowe <mrowe@apple.com> - - Part one of an attempted Windows build fix. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-21 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Geoff Garen. - - op_method_check - - Optimize method calls, by caching specific function values within the Structure. - The new opcode is used almost like an x86 opcode prefix byte to optimize op_get_by_id, - where the property access is being used to read a function to be passed to op-call (i.e. - 'foo.bar();'). This patch modifies the Structure class such that when a property is - put to an object for the first time we will check if the value is a function. If it is, - we will cache the function value on the Structure. A Structure in such a state guarantees - that not only does a property with the given identifier exist on the object, but also that - its value is unchanged. Upon any further attempt to put a property with the same identifier - (but a different value) to the object, it will transition back to a normal Structure (where - it will guarantee the presence but not the value of the property). - - op_method_check makes use of the new information made available by the Structure, by - augmenting the functionality of op_get_by_id. Upon generating a FunctionCallDotNode a - check will be emitted prior to the property access reading the function value, and the JIT - will generate an extra (initially unlinked but patchable) set of checks prior to the regular - JIT code for get_by_id. The new code will do inline structure and prototype structure check - (unlike a regular get_by_id, which can only handle 'self' accesses inline), and then performs - an immediate load of the function value, rather than using memory accesses to load the value - from the obejct's property storage array. If the method check fails it will revert, or if - the access is polymorphic, the op_get_by_id will continue to operate - and optimize itself - - just as any other regular op_get_by_id would. - - ~2.5% on v8-tests, due to a ~9% progression on richards. - - * API/JSCallbackObjectFunctions.h: - (JSC::::put): - (JSC::::staticFunctionGetter): - * API/JSObjectRef.cpp: - (JSObjectMakeConstructor): - * JavaScriptCore.exp: - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::differenceBetween): - * assembler/MacroAssemblerX86.h: - (JSC::MacroAssemblerX86::moveWithPatch): - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * bytecode/CodeBlock.h: - (JSC::getMethodCallLinkInfoReturnLocation): - (JSC::CodeBlock::getMethodCallLinkInfo): - (JSC::CodeBlock::addMethodCallLinkInfos): - (JSC::CodeBlock::methodCallLinkInfo): - * bytecode/Opcode.h: - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitMethodCheck): - * bytecompiler/BytecodeGenerator.h: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompile): - * jit/JIT.h: - (JSC::MethodCallCompilationInfo::MethodCallCompilationInfo): - * jit/JITOpcodes.cpp: - * jit/JITPropertyAccess.cpp: - (JSC::JIT::emit_op_method_check): - (JSC::JIT::emitSlow_op_method_check): - (JSC::JIT::emit_op_get_by_id): - (JSC::JIT::emitSlow_op_get_by_id): - (JSC::JIT::emit_op_put_by_id): - (JSC::JIT::emitSlow_op_put_by_id): - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compileGetByIdSlowCase): - (JSC::JIT::patchMethodCallProto): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_get_by_id_method_check): - (JSC::JITStubs::cti_op_get_by_id_method_check_second): - * jit/JITStubs.h: - * jsc.cpp: - (GlobalObject::GlobalObject): - * parser/Nodes.cpp: - (JSC::FunctionCallDotNode::emitBytecode): - * runtime/Arguments.cpp: - (JSC::Arguments::put): - * runtime/ArrayConstructor.cpp: - (JSC::ArrayConstructor::ArrayConstructor): - * runtime/BooleanConstructor.cpp: - (JSC::BooleanConstructor::BooleanConstructor): - * runtime/DateConstructor.cpp: - (JSC::DateConstructor::DateConstructor): - * runtime/ErrorConstructor.cpp: - (JSC::ErrorConstructor::ErrorConstructor): - (JSC::constructError): - * runtime/ErrorPrototype.cpp: - (JSC::ErrorPrototype::ErrorPrototype): - * runtime/FunctionConstructor.cpp: - (JSC::FunctionConstructor::FunctionConstructor): - * runtime/FunctionPrototype.cpp: - (JSC::FunctionPrototype::FunctionPrototype): - * runtime/InternalFunction.cpp: - (JSC::InternalFunction::InternalFunction): - * runtime/JSActivation.cpp: - (JSC::JSActivation::put): - (JSC::JSActivation::putWithAttributes): - * runtime/JSByteArray.cpp: - (JSC::JSByteArray::JSByteArray): - * runtime/JSFunction.cpp: - (JSC::JSFunction::JSFunction): - (JSC::JSFunction::getOwnPropertySlot): - * runtime/JSGlobalObject.cpp: - (JSC::JSGlobalObject::putWithAttributes): - (JSC::JSGlobalObject::reset): - (JSC::JSGlobalObject::mark): - * runtime/JSGlobalObject.h: - (JSC::JSGlobalObject::JSGlobalObjectData::JSGlobalObjectData): - (JSC::JSGlobalObject::methodCallDummy): - * runtime/JSObject.cpp: - (JSC::JSObject::put): - (JSC::JSObject::putWithAttributes): - (JSC::JSObject::deleteProperty): - (JSC::JSObject::defineGetter): - (JSC::JSObject::defineSetter): - (JSC::JSObject::getPropertyAttributes): - (JSC::JSObject::getPropertySpecificFunction): - (JSC::JSObject::putDirectFunction): - (JSC::JSObject::putDirectFunctionWithoutTransition): - * runtime/JSObject.h: - (JSC::getJSFunction): - (JSC::JSObject::getDirectLocation): - (JSC::JSObject::putDirect): - (JSC::JSObject::putDirectWithoutTransition): - * runtime/LiteralParser.cpp: - (JSC::LiteralParser::parseObject): - * runtime/Lookup.cpp: - (JSC::setUpStaticFunctionSlot): - * runtime/Lookup.h: - (JSC::lookupPut): - * runtime/MathObject.cpp: - (JSC::MathObject::MathObject): - * runtime/NativeErrorConstructor.cpp: - (JSC::NativeErrorConstructor::NativeErrorConstructor): - (JSC::NativeErrorConstructor::construct): - * runtime/NativeErrorPrototype.cpp: - (JSC::NativeErrorPrototype::NativeErrorPrototype): - * runtime/NumberConstructor.cpp: - (JSC::NumberConstructor::NumberConstructor): - * runtime/ObjectConstructor.cpp: - (JSC::ObjectConstructor::ObjectConstructor): - * runtime/PropertyMapHashTable.h: - (JSC::PropertyMapEntry::PropertyMapEntry): - * runtime/PrototypeFunction.cpp: - (JSC::PrototypeFunction::PrototypeFunction): - * runtime/PutPropertySlot.h: - (JSC::PutPropertySlot::): - (JSC::PutPropertySlot::PutPropertySlot): - (JSC::PutPropertySlot::setNewProperty): - (JSC::PutPropertySlot::setDespecifyFunctionProperty): - (JSC::PutPropertySlot::isCacheable): - (JSC::PutPropertySlot::cachedOffset): - * runtime/RegExpConstructor.cpp: - (JSC::RegExpConstructor::RegExpConstructor): - * runtime/StringConstructor.cpp: - (JSC::StringConstructor::StringConstructor): - * runtime/StringPrototype.cpp: - (JSC::StringPrototype::StringPrototype): - * runtime/Structure.cpp: - (JSC::Structure::Structure): - (JSC::Structure::~Structure): - (JSC::Structure::materializePropertyMap): - (JSC::Structure::addPropertyTransitionToExistingStructure): - (JSC::Structure::addPropertyTransition): - (JSC::Structure::changeFunctionTransition): - (JSC::Structure::addPropertyWithoutTransition): - (JSC::Structure::get): - (JSC::Structure::despecifyFunction): - (JSC::Structure::put): - (JSC::Structure::remove): - * runtime/Structure.h: - (JSC::Structure::get): - (JSC::Structure::specificFunction): - * runtime/StructureTransitionTable.h: - (JSC::StructureTransitionTableHashTraits::emptyValue): - * wtf/Platform.h: - -2009-05-22 Brent Fulgham <bfulgham@webkit.org> - - Reviewed by Steve Falkenburg. - - https://bugs.webkit.org/show_bug.cgi?id=25950 - JavaScriptCore Fails to build on Windows (Cairo) due to CoreFoundation - link requirement. - - Modify project to add new Debug_CFLite and Release_CFLite targets. These - use the new JavaScriptCoreCFLite.vsprops to link against CFLite.dll. - Existing projects are changed to use the new JavaScriptCoreCF.vsprops - to link against CoreFoundation.dll. - - The JavaScriptCoreCommon.vsprops is modified to remove the link - against CoreFoundation.dll. + Additional build file updates by David Kilzer. + * GNUmakefile.am: Updated path to SegmentedVector.h. + * JavaScriptCore.order: Updated SegmentedVector namespace from + JSC to WTF in mangled C++ method name. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCF.vsprops: Added. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCFLite.vsprops: Added. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: - -2009-05-22 Dominik Röttsches <dominik.roettsches@access-company.com> - - Reviewed by Gustavo Noronha. - - https://bugs.webkit.org/show_bug.cgi?id=15914 - [GTK] Implement Unicode functionality using GLib - - Original patch by Jürg Billeter and Naiem Shaik. - Implementing WTF Unicode functionality based on GLib. - - * GNUmakefile.am: - * wtf/unicode/Unicode.h: - * wtf/unicode/glib: Added. - * wtf/unicode/glib/UnicodeGLib.cpp: Added. - (WTF::Unicode::foldCase): - (WTF::Unicode::toLower): - (WTF::Unicode::toUpper): - (WTF::Unicode::direction): - (WTF::Unicode::umemcasecmp): - * wtf/unicode/glib/UnicodeGLib.h: Added. - (WTF::Unicode::): - (WTF::Unicode::toLower): - (WTF::Unicode::toUpper): - (WTF::Unicode::toTitleCase): - (WTF::Unicode::isArabicChar): - (WTF::Unicode::isFormatChar): - (WTF::Unicode::isSeparatorSpace): - (WTF::Unicode::isPrintableChar): - (WTF::Unicode::isDigit): - (WTF::Unicode::isPunct): - (WTF::Unicode::mirroredChar): - (WTF::Unicode::category): - (WTF::Unicode::isLower): - (WTF::Unicode::digitValue): - (WTF::Unicode::combiningClass): - (WTF::Unicode::decompositionType): - * wtf/unicode/glib/UnicodeMacrosFromICU.h: Added. - -2009-05-21 Xan Lopez <xlopez@igalia.com> - - Unreviewed build fix. - - Add MacroAssemblerCodeRef.h to file list. + Removed reference to bytecompiler\SegmentedVector.h. + * JavaScriptCore.vcproj/WTF/WTF.vcproj: Added reference to + wtf\SegmentedVector.h. + * JavaScriptCore.xcodeproj/project.pbxproj: Moved + SegmentedVector.h definition from bytecompiler subdirectory to + wtf subdirectory. + * bytecompiler/BytecodeGenerator.h: Updated #include path to + SegmentedVector.h and prepended WTF:: namespace to its use. + * parser/Lexer.h: Ditto. + * wtf/SegmentedVector.h: Renamed from JavaScriptCore/bytecompiler/SegmentedVector.h. + (WTF::SegmentedVector::SegmentedVector): + (WTF::SegmentedVector::~SegmentedVector): + (WTF::SegmentedVector::size): + (WTF::SegmentedVector::at): + (WTF::SegmentedVector::operator[]): + (WTF::SegmentedVector::last): + (WTF::SegmentedVector::append): + (WTF::SegmentedVector::removeLast): + (WTF::SegmentedVector::grow): + (WTF::SegmentedVector::clear): + (WTF::SegmentedVector::deleteAllSegments): + (WTF::SegmentedVector::segmentExistsFor): + (WTF::SegmentedVector::segmentFor): + (WTF::SegmentedVector::subscriptFor): + (WTF::SegmentedVector::ensureSegmentsFor): + (WTF::SegmentedVector::ensureSegment): - * GNUmakefile.am: +2009-06-19 Gavin Barraclough <barraclough@apple.com> -2009-05-21 Gavin Barraclough <barraclough@apple.com> + Reviewed by NOBODY (build fix take 2 - rename FIELD_OFFSET to something that doesn't conflict with winnt.h). - Reviewed by Darin Adler. - Addition of MacroAssemblerCodeRef.h rubber stamped by Geoff Garen. - - Refactor JIT code-handle objects. The representation of generated code is currently - a bit of a mess. We have a class JITCode which wraps the pointer to a block of - generated code, but this object does not reference the executable pool meaning that - external events (the pool being derefed) could make the pointer become invalid. - To overcome this both the JIT and Yarr implement further (and similar) objects to - wrap the code pointer with a RefPtr to the pool. To add to the mire, as well as the - CodeBlock containing a handle onto the code the FunctionBodyNode also contains a - copy of the code pointer which is used almost (but not entirely) uniquely to access - the JIT code for a function. - - Rationalization of all this: - - * Add a new type 'MacroAssembler::CodeRef' as a handle for a block of JIT generated code. - * Change the JIT & Yarr to internally handle code using CodeRefs. - * Move the CodeRef (formerly anow defunct JITCodeRef) from CodeBlock to its owner node. - * Remove the (now) redundant code pointer from FunctionBodyNode. - - While tidying this up I've made the PatchBuffer return code in new allocations using a CodeRef, - and have enforced an interface that the PatchBuffer will always be used, and 'finalizeCode()' or - 'finalizeCodeAddendum()' will always be called exactly once on the PatchBuffer to complete code generation. - - This gives us a potentially useful hook ('PatchBuffer::performFinalization()') at the end of generation, - which may have a number of uses. It may be helpful should we wish to switch our generation - model to allow RW/RX exclusive memory, and it may be useful on non-cache-coherent platforms to - give us an oportunity to cache flush as necessary. - - No performance impact. - - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::ProcessorReturnAddress::relinkCallerToTrampoline): - (JSC::AbstractMacroAssembler::CodeRef::CodeRef): - (JSC::AbstractMacroAssembler::CodeRef::trampolineAt): - (JSC::AbstractMacroAssembler::PatchBuffer::PatchBuffer): - (JSC::AbstractMacroAssembler::PatchBuffer::~PatchBuffer): - (JSC::AbstractMacroAssembler::PatchBuffer::link): - (JSC::AbstractMacroAssembler::PatchBuffer::linkTailRecursive): - (JSC::AbstractMacroAssembler::PatchBuffer::patch): - (JSC::AbstractMacroAssembler::PatchBuffer::complete): - (JSC::AbstractMacroAssembler::PatchBuffer::finalize): - (JSC::AbstractMacroAssembler::PatchBuffer::entry): - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::CodeBlock): - (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): - (JSC::CodeBlock::setJITCode): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::getBytecodeIndex): - (JSC::CodeBlock::executablePool): - * interpreter/CallFrameClosure.h: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::execute): - (JSC::Interpreter::prepareForRepeatCall): * jit/JIT.cpp: (JSC::JIT::privateCompile): (JSC::JIT::privateCompileCTIMachineTrampolines): - (JSC::JIT::linkCall): - * jit/JIT.h: - * jit/JITCode.h: - (JSC::JITCode::JITCode): - (JSC::JITCode::operator bool): - (JSC::JITCode::addressForCall): - (JSC::JITCode::offsetOf): - (JSC::JITCode::execute): - (JSC::JITCode::size): - (JSC::JITCode::executablePool): - (JSC::JITCode::HostFunction): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - (JSC::JIT::privateCompilePatchGetArrayLength): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdSelfList): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_vm_dontLazyLinkCall): - (JSC::JITStubs::cti_vm_lazyLinkCall): - * parser/Nodes.cpp: - (JSC::ProgramNode::generateJITCode): - (JSC::EvalNode::generateJITCode): - (JSC::FunctionBodyNode::FunctionBodyNode): - (JSC::FunctionBodyNode::createNativeThunk): - (JSC::FunctionBodyNode::generateJITCode): - * parser/Nodes.h: - (JSC::ScopeNode::generatedJITCode): - (JSC::ScopeNode::getExecutablePool): - (JSC::ScopeNode::setJITCode): - (JSC::ProgramNode::jitCode): - (JSC::EvalNode::jitCode): - (JSC::FunctionBodyNode::jitCode): - * runtime/RegExp.cpp: - (JSC::RegExp::match): - * yarr/RegexJIT.cpp: - (JSC::Yarr::RegexGenerator::compile): - (JSC::Yarr::jitCompileRegex): - (JSC::Yarr::executeRegex): - * yarr/RegexJIT.h: - (JSC::Yarr::RegexCodeBlock::RegexCodeBlock): - (JSC::Yarr::RegexCodeBlock::pcreFallback): - (JSC::Yarr::RegexCodeBlock::setFallback): - (JSC::Yarr::RegexCodeBlock::operator bool): - (JSC::Yarr::RegexCodeBlock::set): - (JSC::Yarr::RegexCodeBlock::execute): - -2009-05-21 Oliver Hunt <oliver@apple.com> - - Reviewed by Maciej Stachowiak. - - <rdar://problem/6910264> REGRESSION: Cached DOM global object property access fails in browser (25921) - <https://bugs.webkit.org/show_bug.cgi?id=25921> - - When caching properties on the global object we need to ensure that we're - not attempting to cache through a shell object. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::resolveGlobal): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_resolve_global): - -2009-05-21 Steve Falkenburg <sfalken@apple.com> - - Windows build fix. - - * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: - -2009-05-21 Cameron Zwarich <zwarich@apple.com> - - Reviewed by Mark Rowe. - - Bug 25945: Add support for MADV_FREE to TCMalloc - <https://bugs.webkit.org/show_bug.cgi?id=25945> - <rdar://problem/6910754> - - Add support for MADV_FREE to TCMalloc_SystemRelease for platforms that - don't also support MADV_FREE_REUSE. The code is identical to the MADV_DONTNEED - case except for the advice passed to madvise(), so combining the two cases - makes the most sense. - - * wtf/Platform.h: Only define HAVE_MADV_FREE when not building on Tiger or - Leopard, because while it is defined on these platforms it actually does - nothing. - * wtf/TCSystemAlloc.cpp: - (TCMalloc_SystemRelease): use MADV_FREE if it is available; otherwise use - MADV_DONTNEED. - -2009-05-21 Mark Rowe <mrowe@apple.com> - - Reviewed by Oliver Hunt. - - Fix <https://bugs.webkit.org/show_bug.cgi?id=25917> / <rdar://problem/6910066>. - Bug 25917: REGRESSION (r43559?): Javascript debugger crashes when pausing page - - The debugger currently retrieves the arguments object from an activation rather than pulling - it from a call frame. This is unreliable to due to the recent optimization to lazily create - the arguments object. In the long-term it should stop doing that (<rdar://problem/6911886>), - but for now we force eager creation of the arguments object when debugging. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): - -2009-05-21 Cameron Zwarich <zwarich@apple.com> - - Reviewed by Maciej Stachowiak. - - Bug 25912: Harden NumberPrototype.cpp by removing use of strcpy() - <https://bugs.webkit.org/show_bug.cgi?id=25912> - - This causes no change on SunSpider. - - * runtime/NumberPrototype.cpp: - (JSC::integerPartNoExp): replace strcpy() with memcpy(), ASSERT that the - temporary buffer has sufficient space to store the result, and move the - explicit null-termination closer to the memcpy() for easier visual inspection - of the code. - (JSC::fractionalPartToString): replace strcpy() with memcpy(), and ASSERT - that the temporary buffer has sufficient space to store the result. There - is no explicit null-termination because this is done by the caller. The - same is already true for exponentialPartToString(). - (JSC::numberProtoFuncToExponential): replace strcpy() with memcpy(), explicitly - null-terminate the result, and ASSERT that the temporary buffer has sufficient - space to store the result. - -2009-05-20 Sam Weinig <sam@webkit.org> - - Reviewed by Cameron Zwarich. - - Cleanup the JSGlobalData when exiting early with the usage statement in jsc. - - * jsc.cpp: - (printUsageStatement): - (parseArguments): - (jscmain): - -2009-05-20 Stephanie Lewis <slewis@apple.com> - - Update the order files. <rdar://problem/6881750> Generate new order files. - - * JavaScriptCore.order: - -2009-05-19 Kenneth Rohde Christiansen <kenneth.christiansen@openbossa.org> - - Reviewed by Simon Hausmann. - - Replace WREC with YARR + YARR_JIT for the Qt port. This is only - used when compiled with JIT support for now, so it is a drop-in - replacement for the WREC usage. Still including the wrec headers - as they are being referred from RegExp.h, though the contents of - that header it protected by "#if ENABLE(WREC)". - - * JavaScriptCore.pri: - -2009-05-20 Xan Lopez <xlopez@igalia.com> - - Reviewed by Eric Seidel. - - Fix GTK debug build. - - The function dumpDisjunction, compiled with debug enabled, uses - printf, which needs stdio.h to be included. - - * yarr/RegexInterpreter.cpp: - -2009-05-20 Laszlo Gombos <laszlo.1.gombos@nokia.com> - - Reviewed by George Staikos. - - BUG 25843: [Qt] Remove qt-port build flag - <https://bugs.webkit.org/show_bug.cgi?id=25843> - - * JavaScriptCore.pro: - - -2009-05-19 Geoffrey Garen <ggaren@apple.com> - - Windows build fix. - - * interpreter/RegisterFile.cpp: - (JSC::RegisterFile::releaseExcessCapacity): Copy-paste typo. - -2009-05-19 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Sam Weinig. - - Fixed <rdar://problem/6885680> CrashTracer: [USER] 1 crash in Install - Mac OS X at <unknown binary> • 0x9274241c - - (Original patch by Joe Sokol and Ronnie Misra.) - - SunSpider says 1.004x faster. - - * interpreter/RegisterFile.cpp: - (JSC::RegisterFile::releaseExcessCapacity): Instead of doing complicated - math that sometimes used to overflow, just release the full range of the - register file. - - * interpreter/RegisterFile.h: - (JSC::isPageAligned): - (JSC::RegisterFile::RegisterFile): Added ASSERTs to verify that it's - safe to release the full range of the register file. - - (JSC::RegisterFile::shrink): No need to releaseExcessCapacity() if the - new end is not smaller than the old end. (Also, doing so used to cause - numeric overflow, unmapping basically the whole process from memory.) - -2009-05-19 Oliver Hunt <oliver@apple.com> - - RS=Mark Rowe. - - <rdar://problem/6888393> REGRESSION: Start Debugging JavaScript crashes browser (nightly builds only?) - <https://bugs.webkit.org/show_bug.cgi?id=25717> - - Remove JSC_FAST_CALL as it wasn't gaining us anything, and was - resulting in weird bugs in the nightly builds. - - * parser/Nodes.cpp: - * parser/Nodes.h: - (JSC::ExpressionNode::isNumber): - (JSC::ExpressionNode::isString): - (JSC::ExpressionNode::isNull): - (JSC::ExpressionNode::isPure): - (JSC::ExpressionNode::isLocation): - (JSC::ExpressionNode::isResolveNode): - (JSC::ExpressionNode::isBracketAccessorNode): - (JSC::ExpressionNode::isDotAccessorNode): - (JSC::ExpressionNode::isFuncExprNode): - (JSC::ExpressionNode::isSimpleArray): - (JSC::ExpressionNode::isAdd): - (JSC::ExpressionNode::resultDescriptor): - (JSC::StatementNode::firstLine): - (JSC::StatementNode::lastLine): - (JSC::StatementNode::isEmptyStatement): - (JSC::StatementNode::isReturnNode): - (JSC::StatementNode::isExprStatement): - (JSC::StatementNode::isBlock): - (JSC::NullNode::isNull): - (JSC::BooleanNode::isPure): - (JSC::NumberNode::value): - (JSC::NumberNode::setValue): - (JSC::NumberNode::isNumber): - (JSC::NumberNode::isPure): - (JSC::StringNode::isPure): - (JSC::StringNode::isString): - (JSC::ResolveNode::identifier): - (JSC::ResolveNode::isLocation): - (JSC::ResolveNode::isResolveNode): - (JSC::BracketAccessorNode::isLocation): - (JSC::BracketAccessorNode::isBracketAccessorNode): - (JSC::DotAccessorNode::base): - (JSC::DotAccessorNode::identifier): - (JSC::DotAccessorNode::isLocation): - (JSC::DotAccessorNode::isDotAccessorNode): - (JSC::TypeOfResolveNode::identifier): - (JSC::AddNode::isAdd): - (JSC::BlockNode::isBlock): - (JSC::EmptyStatementNode::isEmptyStatement): - (JSC::ExprStatementNode::isExprStatement): - (JSC::ReturnNode::isReturnNode): - (JSC::ScopeNode::sourceURL): - (JSC::ProgramNode::bytecode): - (JSC::EvalNode::bytecode): - (JSC::FunctionBodyNode::parameters): - (JSC::FunctionBodyNode::toSourceString): - (JSC::FunctionBodyNode::bytecode): - (JSC::FuncExprNode::isFuncExprNode): - -2009-05-19 Maciej Stachowiak <mjs@apple.com> - - Reviewed by Gavin Barraclough. - - - speed up string comparison, especially for short strings - - ~1% on SunSpider - - * JavaScriptCore.exp: - * runtime/UString.cpp: - * runtime/UString.h: - (JSC::operator==): Inline UString's operator==, since it is called from - hot places in the runtime. Also, specialize 2-char strings in a similar way to - 1-char, since we're taking the hit of a switch anyway. - -2009-05-18 Maciej Stachowiak <mjs@apple.com> - - Reviewed by Gavin Barraclough. - - - for polymorphic prototype lookups, increase the number of slots from 4 to 8 - - ~4% faster on v8 raytrace benchmark - - * bytecode/Instruction.h: - -2009-05-18 Maciej Stachowiak <mjs@apple.com> - - Reviewed by Oliver Hunt. - - - tighten up the code for the load_varargs stub - - ~1-2% on v8-raytrace - - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_load_varargs): Hoist some loop invariants that - the compiler didn't feel like hoisting for us. Remove unneeded exception check. - -2009-05-18 Maciej Stachowiak <mjs@apple.com> - - Reviewed by Geoff Garen. - - - Improve code generation for access to prototype properties - - ~0.4% speedup on SunSpider. - - Based on a suggestion from Geoff Garen. - - * jit/JIT.h: - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compileGetDirectOffset): - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdProtoList): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - -2009-05-18 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk> - - Reviewed by Gavin Barraclough. - - Enable YARR, and disable WREC for GTK+. - - * GNUmakefile.am: - * yarr/RegexParser.h: - -2009-05-18 Jan Michael Alonzo <jmalonzo@webkit.org> - - Reviewed by Xan Lopez. - - [Gtk] Various autotools build refactoring and fixes - https://bugs.webkit.org/show_bug.cgi?id=25286 - - Add -no-install and -no-fast-install to programs and tests that we - don't install. Also remove -O2 since this is already handled at - configure time. - - * GNUmakefile.am: - -2009-05-17 Jan Michael Alonzo <jmalonzo@webkit.org> - - Reviewed by Xan Lopez. - - [Gtk] Various autotools build refactoring and fixes - https://bugs.webkit.org/show_bug.cgi?id=25286 - - Add JavaScriptCore/ to JSC include path only since it's not - required when building WebCore. - - * GNUmakefile.am: - -2009-05-17 Steve Falkenburg <sfalken@apple.com> - - Windows build fix - - * JavaScriptCore.vcproj/JavaScriptCore.make: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2009-05-15 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Oliver Hunt. - - Looking like MSVC doesn't like static variables in inline methods? - Make the state of the SSE2 check a static variable on the class - MacroAssemblerX86Common as a speculative build fix for Windows. - - * assembler/MacroAssemblerX86Common.h: - (JSC::MacroAssemblerX86Common::convertInt32ToDouble): - (JSC::MacroAssemblerX86Common::branchDouble): - (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32): - (JSC::MacroAssemblerX86Common::isSSE2Present): - (JSC::MacroAssemblerX86Common::): - * jit/JIT.cpp: - -2009-05-15 Adam Roben <aroben@apple.com> - - Add some assembler headers to JavaScriptCore.vcproj - - This is just a convenience for Windows developers. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2009-05-15 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Oliver Hunt. - - Add FP support to the MacroAssembler, port JITArithmetic over to make use of this. Also add - API to determine whether FP support is available 'MacroAssembler::supportsFloatingPoint()', - FP is presently only supported on SSE2 platforms, not x87. On platforms where a suitable - hardware FPU is not available 'supportsFloatingPoint()' may simply return false, and all - other methods ASSERT_NOT_REACHED(). - - * assembler/AbstractMacroAssembler.h: - * assembler/MacroAssemblerX86.h: - (JSC::MacroAssemblerX86::MacroAssemblerX86): - (JSC::MacroAssemblerX86::branch32): - (JSC::MacroAssemblerX86::branchPtrWithPatch): - (JSC::MacroAssemblerX86::supportsFloatingPoint): - * assembler/MacroAssemblerX86Common.h: - (JSC::MacroAssemblerX86Common::): - (JSC::MacroAssemblerX86Common::loadDouble): - (JSC::MacroAssemblerX86Common::storeDouble): - (JSC::MacroAssemblerX86Common::addDouble): - (JSC::MacroAssemblerX86Common::subDouble): - (JSC::MacroAssemblerX86Common::mulDouble): - (JSC::MacroAssemblerX86Common::convertInt32ToDouble): - (JSC::MacroAssemblerX86Common::branchDouble): - (JSC::MacroAssemblerX86Common::branchTruncateDoubleToInt32): - (JSC::MacroAssemblerX86Common::branch32): - (JSC::MacroAssemblerX86Common::branch16): - (JSC::MacroAssemblerX86Common::branchTest32): - (JSC::MacroAssemblerX86Common::branchAdd32): - (JSC::MacroAssemblerX86Common::branchMul32): - (JSC::MacroAssemblerX86Common::branchSub32): - (JSC::MacroAssemblerX86Common::set32): - (JSC::MacroAssemblerX86Common::setTest32): - (JSC::MacroAssemblerX86Common::x86Condition): - (JSC::MacroAssemblerX86Common::isSSE2Present): - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::movePtrToDouble): - (JSC::MacroAssemblerX86_64::moveDoubleToPtr): - (JSC::MacroAssemblerX86_64::setPtr): - (JSC::MacroAssemblerX86_64::branchPtr): - (JSC::MacroAssemblerX86_64::branchTestPtr): - (JSC::MacroAssemblerX86_64::branchAddPtr): - (JSC::MacroAssemblerX86_64::branchSubPtr): - (JSC::MacroAssemblerX86_64::supportsFloatingPoint): - * assembler/X86Assembler.h: - * jit/JIT.cpp: - (JSC::JIT::JIT): + (JSC::JIT::emitGetVariableObjectRegister): + (JSC::JIT::emitPutVariableObjectRegister): * jit/JIT.h: * jit/JITArithmetic.cpp: (JSC::JIT::emit_op_rshift): - (JSC::JIT::emitSlow_op_rshift): (JSC::JIT::emitSlow_op_jnless): (JSC::JIT::emitSlow_op_jnlesseq): (JSC::JIT::compileBinaryArithOp): - (JSC::JIT::compileBinaryArithOpSlowCase): - (JSC::JIT::emit_op_add): - (JSC::JIT::emitSlow_op_add): - (JSC::JIT::emit_op_mul): - (JSC::JIT::emitSlow_op_mul): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompilePutByIdTransition): - -2009-05-15 Francisco Tolmasky <francisco@280north.com> - - BUG 25467: JavaScript debugger should use function.displayName as the function's name in the call stack - <https://bugs.webkit.org/show_bug.cgi?id=25467> - - Reviewed by Adam Roben. - - * JavaScriptCore.exp: Added calculatedFunctionName - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: Added calculatedFunctionName - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Added calculatedFunctionName - * debugger/DebuggerCallFrame.cpp: Added calculatedFunctionName to match existing one in ProfileNode. - (JSC::DebuggerCallFrame::calculatedFunctionName): - * debugger/DebuggerCallFrame.h: Added calculatedFunctionName to match existing one in ProfileNode. - -2009-05-14 Gavin Barraclough <barraclough@apple.com> - - Build fix, not reviewed. - - Quick fixes for JIT builds with OPTIMIZE flags disabled. - * jit/JITCall.cpp: + (JSC::JIT::compileOpCallInitializeCallFrame): (JSC::JIT::compileOpCall): - (JSC::JIT::compileOpCallSlowCase): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::compilePutByIdHotPath): - -2009-05-14 Steve Falkenburg <sfalken@apple.com> - - Back out incorrect Windows build fix - - * JavaScriptCore.vcproj/JavaScriptCore.make: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2009-05-14 Steve Falkenburg <sfalken@apple.com> - - Windows build fix - - * JavaScriptCore.vcproj/JavaScriptCore.make: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - -2009-05-14 Adam Roben <aroben@apple.com> - - Windows jsc build fix - - r43648 modified jsc.vcproj's post-build event not to try to copy files - that aren't present. Then r43661 mistakenly un-did that modification. - This patch restores the modification from r43648, but puts the code in - jscCommon.vsprops (where it should have been added in r43648). - - * JavaScriptCore.vcproj/jsc/jsc.vcproj: Restored empty - VCPostBuildEventTool tags. - * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Modified the post-build - event command line to match the one in jsc.vcproj from r43648. - -2009-05-14 Laszlo Gombos <laszlo.1.gombos@nokia.com> - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=25325 - - Make sure pthread_self() is declared before it gets called in Collector.cpp - - * runtime/Collector.cpp: Include pthread.h in most Unix-like platforms - (not just for OPENBSD) - -2009-05-14 Mark Rowe <mrowe@apple.com> - - Reviewed by Oliver Hunt. - - Fix <https://bugs.webkit.org/show_bug.cgi?id=25785>. - Bug 25785: Segfault in mark when using JSObjectMakeConstructor - - * API/JSObjectRef.cpp: - (JSObjectMakeConstructor): OpaqueJSClass::prototype can return 0. We need to use the default object prototype when it does. - * API/tests/testapi.c: - (main): Add a test case. - * runtime/JSObject.h: - (JSC::JSObject::putDirect): Add a clearer assertion for a null value. The assertion on the next line does catch this, - but the cause of the failure is not clear from the assertion itself. - -2009-05-14 Mark Rowe <mrowe@apple.com> - - Rubber-stamped by Darin Adler. - - <rdar://problem/6681868> When building with Xcode 3.1.3 should be using gcc 4.2 - - The meaning of XCODE_VERSION_ACTUAL is more sensible in newer versions of Xcode. - Update our logic to select the compiler version to use the more appropriate XCODE_VERSION_MINOR - if the version of Xcode supports it, and fall back to XCODE_VERSION_ACTUAL if not. - - * Configurations/Base.xcconfig: - -2009-05-14 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Geoff Garen. - - Checking register file bounds should be a ptr comparison (m_end is a Register*). - Also, the compare should be unsigned, pointers don'ts go negative. - - * jit/JIT.cpp: - (JSC::JIT::privateCompile): - -2009-05-13 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Oliver Hunt. - - Fix <rdar://problem/6882919> REGRESSION: page at Metroauto site crashes in cti_op_loop_if_less (25730) - - op_loop_if_less (imm < op) was loading op into regT1, but in the slow path spills regT0. - This leads to bad happen. - - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_loop_if_less): - (JSC::JIT::emitSlow_op_loop_if_less): - -2009-05-13 Dmitry Titov <dimich@chromium.org> - - Rubber-stamped by Mark Rowe. - - https://bugs.webkit.org/show_bug.cgi?id=25746 - Revert http://trac.webkit.org/changeset/43507 which caused crash in PPC nightlies with Safari 4. - - * JavaScriptCore.exp: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - * bytecode/SamplingTool.cpp: - (JSC::SamplingThread::start): - (JSC::SamplingThread::stop): - * bytecode/SamplingTool.h: - * wtf/CrossThreadRefCounted.h: - (WTF::CrossThreadRefCounted::CrossThreadRefCounted): - (WTF::::ref): - (WTF::::deref): - * wtf/Threading.h: - * wtf/ThreadingNone.cpp: - * wtf/ThreadingPthreads.cpp: - (WTF::threadMapMutex): - (WTF::initializeThreading): - (WTF::threadMap): - (WTF::identifierByPthreadHandle): - (WTF::establishIdentifierForPthreadHandle): - (WTF::pthreadHandleForIdentifier): - (WTF::clearPthreadHandleForIdentifier): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::detachThread): - (WTF::currentThread): - * wtf/ThreadingWin.cpp: - (WTF::threadMapMutex): - (WTF::initializeThreading): - (WTF::threadMap): - (WTF::storeThreadHandleByIdentifier): - (WTF::threadHandleForIdentifier): - (WTF::clearThreadHandleForIdentifier): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::detachThread): - (WTF::currentThread): - * wtf/gtk/ThreadingGtk.cpp: - (WTF::threadMapMutex): - (WTF::initializeThreading): - (WTF::threadMap): - (WTF::identifierByGthreadHandle): - (WTF::establishIdentifierForThread): - (WTF::threadForIdentifier): - (WTF::clearThreadForIdentifier): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::currentThread): - * wtf/qt/ThreadingQt.cpp: - (WTF::threadMapMutex): - (WTF::threadMap): - (WTF::identifierByQthreadHandle): - (WTF::establishIdentifierForThread): - (WTF::clearThreadForIdentifier): - (WTF::threadForIdentifier): - (WTF::initializeThreading): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::currentThread): - -2009-05-13 Darin Adler <darin@apple.com> - - Revert the parser arena change. It was a slowdown, not a speedup. - Better luck next time (I'll break it up into pieces). - -2009-05-13 Darin Adler <darin@apple.com> - - Tiger build fix. - - * parser/Grammar.y: Add back empty code blocks, needed by older - versions of bison on certain rules. - -2009-05-13 Steve Falkenburg <sfalken@apple.com> - - Windows build fix. - - * JavaScriptCore.vcproj/jsc/jsc.vcproj: - -2009-05-13 Adam Roben <aroben@apple.com> - - Windows build fixes after r43642 - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - Updated. - - * debugger/Debugger.cpp: - * runtime/ArrayConstructor.cpp: - * runtime/JSArray.cpp: - * runtime/RegExp.cpp: - * runtime/RegExpConstructor.cpp: - * runtime/RegExpPrototype.cpp: - * runtime/StringPrototype.cpp: - Added missing #includes. - -2009-05-13 Darin Adler <darin@apple.com> - - Reviewed by Cameron Zwarich. - - Bug 25674: syntax tree nodes should use arena allocation - https://bugs.webkit.org/show_bug.cgi?id=25674 - - Step 3: Add some actual arena allocation. About 1% SunSpider speedup. - - * JavaScriptCore.exp: Updated. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): Updated since VarStack - contains const Identifier* now. - (JSC::BytecodeGenerator::emitPushNewScope): Updated to take a const - Identifier&. - * bytecompiler/BytecodeGenerator.h: Ditto - - * bytecompiler/SegmentedVector.h: Added isEmpty. - - * debugger/Debugger.cpp: - (JSC::Debugger::recompileAllJSFunctions): Moved this function here from - WebCore so WebCore doesn't need the details of FunctionBodyNode. - * debugger/Debugger.h: Ditto. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::execute): Updated since VarStack contains const - Identifier* now. - - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_vm_lazyLinkCall): Call isHostFunction on the body - rather than on the function object, since we can't easily have inlined - access to the FunctionBodyNode in JSFunction.h since WebCore needs - access to that header. - (JSC::JITStubs::cti_op_construct_JSConstruct): Ditto. - * profiler/Profiler.cpp: - (JSC::Profiler::createCallIdentifier): Ditto. - - * parser/Grammar.y: Use JSGlobalData* to pass the global data pointer - around whenever possible instead of using void*. Changed - SET_EXCEPTION_LOCATION from a macro to an inline function. Marked - the structure-creating functions inline. Changed the VarStack to use - identifier pointers instead of actual identifiers. This takes - advantage of the fact that all identifier pointers come from the - arena and avoids reference count churn. Changed Identifier* to - const Identifier* to make sure we don't modify any by accident. - Used identifiers for regular expression strings too, using the new - scanRegExp that has out parameters instead of the old one that relied - on side effects in the Lexer. Move the creation of numeric identifiers - out of this file and into the PropertyNode constructor. - - * parser/Lexer.cpp: - (JSC::Lexer::setCode): Pass in ParserArena, used for identifiers. - (JSC::Lexer::makeIdentifier): Changed return type to const Identifier* - and changed to call ParserArena. - (JSC::Lexer::scanRegExp): Added out arguments that are const Identifier* - as well as a prefix character argument so we can handle the /= case - without a string append. - (JSC::Lexer::skipRegExp): Added. Skips a regular expression without - allocating Identifier objects. - (JSC::Lexer::clear): Removed the code to manage m_identifiers, m_pattern, - and m_flags, and added code to set m_arena to 0. - * parser/Lexer.h: Updated for changes above. - - * parser/NodeConstructors.h: - (JSC::ParserArenaFreeable::operator new): Added. Calls allocateFreeable - on the arena. - (JSC::ParserArenaDeletable::operator new): Changed to call the - allocateDeletable function on the arena instead of deleteWithArena. - (JSC::RegExpNode::RegExpNode): Changed arguments to Identifier instead - of UString since these come from the parser which makes identifiers. - (JSC::PropertyNode::PropertyNode): Added new constructor that makes - numeric identifiers. Some day we might want to optimize this for - integers so it doesn't create a string for each one. - (JSC::ContinueNode::ContinueNode): Initialize m_ident to nullIdentifier - since it's now a const Identifier& so it can't be left uninitialized. - (JSC::BreakNode::BreakNode): Ditto. - (JSC::CaseClauseNode::CaseClauseNode): Updated to use SourceElements* - to keep track of the statements rather than a separate statement vector. - (JSC::BlockNode::BlockNode): Ditto. - (JSC::ForInNode::ForInNode): Initialize m_ident to nullIdentifier. - - * parser/Nodes.cpp: Moved the comment explaining emitBytecode in here. - It seemed strangely out of place in the header. - (JSC::ThrowableExpressionData::emitThrowError): Added an overload for - UString as well as Identifier. - (JSC::SourceElements::singleStatement): Added. - (JSC::SourceElements::lastStatement): Added. - (JSC::RegExpNode::emitBytecode): Updated since the pattern and flags - are now Identifier instead of UString. Also changed the throwError code - to use the substitution mechanism instead of doing a string append. - (JSC::SourceElements::emitBytecode): Added. Replaces the old - statementListEmitCode function, since we now keep the SourceElements - objects around. - (JSC::BlockNode::lastStatement): Added. - (JSC::BlockNode::emitBytecode): Changed to use emitBytecode instead of - statementListEmitCode. - (JSC::CaseClauseNode::emitBytecode): Added. - (JSC::CaseBlockNode::emitBytecodeForBlock): Changed to use emitBytecode - instead of statementListEmitCode. - (JSC::ScopeNodeData::ScopeNodeData): Changed to store the - SourceElements* instead of using releaseContentsIntoVector. - (JSC::ScopeNode::emitStatementsBytecode): Added. - (JSC::ScopeNode::singleStatement): Added. - (JSC::ProgramNode::emitBytecode): Call emitStatementsBytecode instead - of statementListEmitCode. - (JSC::EvalNode::emitBytecode): Ditto. - (JSC::EvalNode::generateBytecode): Removed code to clear the children - vector. This optimization is no longer possible since everything is in - a single arena. - (JSC::FunctionBodyNode::emitBytecode): Call emitStatementsBytecode - insetad of statementListEmitCode and check for the return node using - the new functions. - - * parser/Nodes.h: Changed VarStack to store const Identifier* instead - of Identifier and rely on the arena to control lifetime. Added a new - ParserArenaFreeable class. Made ParserArenaDeletable inherit from - FastAllocBase instead of having its own operator new. Base the Node - class on ParserArenaFreeable. Changed the various Node classes - to use const Identifier& instead of Identifier to avoid the need to - call their destructors and allow them to function as "freeable" in the - arena. Removed extraneous JSC_FAST_CALL on definitions of inline functions. - Changed ElementNode, PropertyNode, ArgumentsNode, ParameterNode, - CaseClauseNode, ClauseListNode, and CaseBlockNode to use ParserArenaFreeable - as a base class since they do not descend from Node. Eliminated the - StatementVector type and instead have various classes use SourceElements* - instead of StatementVector. This prevents those classes from having th - use ParserArenaDeletable to make sure the vector destructor is called. - - * parser/Parser.cpp: - (JSC::Parser::parse): Pass the arena to the lexer. - - * parser/Parser.h: Added an include of ParserArena.h, which is no longer - included by Nodes.h. - - * parser/ParserArena.cpp: - (JSC::ParserArena::ParserArena): Added. Initializes the new members, - m_freeableMemory, m_freeablePoolEnd, and m_identifiers. - (JSC::ParserArena::freeablePool): Added. Computes the pool pointer, - since we store only the current pointer and the end of pool pointer. - (JSC::ParserArena::deallocateObjects): Added. Contains the common - memory-deallocation logic used by both the destructor and the - reset function. - (JSC::ParserArena::~ParserArena): Changed to call deallocateObjects. - (JSC::ParserArena::reset): Ditto. Also added code to zero out the - new structures, and switched to use clear() instead of shrink(0) since - we don't really reuse arenas. - (JSC::ParserArena::makeNumericIdentifier): Added. - (JSC::ParserArena::allocateFreeablePool): Added. Used when the pool - is empty. - (JSC::ParserArena::isEmpty): Added. No longer inline, which is fine - since this is used only for assertions at the moment. - - * parser/ParserArena.h: Added an actual arena of "freeable" objects, - ones that don't need destructors to be called. Also added the segmented - vector of identifiers that used to be in the Lexer. - - * runtime/FunctionConstructor.cpp: - (JSC::extractFunctionBody): Use singleStatement function rather than - getting at a StatementVector. - - * runtime/FunctionPrototype.cpp: - (JSC::functionProtoFuncToString): Call isHostFunction on the body - rather than the function object. - - * runtime/JSFunction.cpp: - (JSC::JSFunction::JSFunction): Moved the structure version of this in - here from the header. It's not hot enough that it needs to be inlined. - (JSC::JSFunction::isHostFunction): Moved this in here from the header. - It's now a helper to be used only within the class. - (JSC::JSFunction::setBody): Moved this in here. It's not hot enough that - it needs to be inlined, and we want to be able to compile the header - without the definition of FunctionBodyNode. - - * runtime/JSFunction.h: Eliminated the include of "Nodes.h". This was - exposing too much JavaScriptCore dependency to WebCore. Because of this - change and some changes made to WebCore, we could now export a lot fewer - headers from JavaScriptCore, but I have not done that yet in this check-in. - Made a couple functions non-inline. Removes some isHostFunction() assertions. - - * wtf/FastAllocBase.h: Added the conventional using statements we use in - WTF so we can use identifiers from the WTF namespace without explicit - namespace qualification or namespace directive. This is the usual WTF style, - although it's unconventional in the C++ world. We use the namespace primarily - for link-time disambiguation, not compile-time. - - * wtf/FastMalloc.cpp: Fixed an incorrect comment. - -2009-05-13 Xan Lopez <xlopez@igalia.com> - - Unreviewed build fix: add JITStubCall.h to files list. - - * GNUmakefile.am: - -2009-05-13 Ariya Hidayat <ariya.hidayat@nokia.com> - - Unreviewed build fix, as suggested by Yael Aharon <yael.aharon@nokia.com>. - - * wtf/qt/ThreadingQt.cpp: - (WTF::waitForThreadCompletion): renamed IsValid to isValid. - -2009-05-13 Jan Michael Alonzo <jmalonzo@webkit.org> - - Revert r43562 - [Gtk] WTF_USE_JSC is already defined in - WebCore/config.h. - - * wtf/Platform.h: - -2009-05-12 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Oliver Hunt. - - Add SamplingCounter tool to provide a simple mechanism for counting events in JSC - (enabled using ENABLE(SAMPLING_COUNTERS)). To count events within a single function - use the class 'SamplingCounter', where the counter may be incremented from multiple - functions 'GlobalSamplingCounter' may be convenient; all other counters (stack or - heap allocated, rather than statically declared) should use the DeletableSamplingCounter. - Further description of these classes is provided alongside their definition in - SamplingTool.h. - - Counters may be incremented from c++ by calling the 'count()' method on the counter, - or may be incremented by JIT code by using the 'emitCount()' method within the JIT. - - This patch also fixes CODEBLOCK_SAMPLING, which was missing a null pointer check. - - * JavaScriptCore.exp: - * assembler/MacroAssemblerX86.h: - (JSC::MacroAssemblerX86::addWithCarry32): - (JSC::MacroAssemblerX86::and32): - (JSC::MacroAssemblerX86::or32): - * assembler/MacroAssemblerX86Common.h: - (JSC::MacroAssemblerX86Common::and32): - (JSC::MacroAssemblerX86Common::or32): - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::and32): - (JSC::MacroAssemblerX86_64::or32): - (JSC::MacroAssemblerX86_64::addPtr): - * assembler/X86Assembler.h: - (JSC::X86Assembler::): - (JSC::X86Assembler::adcl_im): - (JSC::X86Assembler::addq_im): - (JSC::X86Assembler::andl_im): - (JSC::X86Assembler::orl_im): - * bytecode/SamplingTool.cpp: - (JSC::AbstractSamplingCounter::dump): - * bytecode/SamplingTool.h: - (JSC::AbstractSamplingCounter::count): - (JSC::GlobalSamplingCounter::name): - (JSC::SamplingCounter::SamplingCounter): - * jit/JIT.h: - * jit/JITCall.cpp: - (JSC::): - * jit/JITInlineMethods.h: - (JSC::JIT::setSamplingFlag): - (JSC::JIT::clearSamplingFlag): - (JSC::JIT::emitCount): - * jsc.cpp: - (runWithScripts): - * parser/Nodes.cpp: - (JSC::ScopeNode::ScopeNode): - * wtf/Platform.h: - -2009-05-13 Steve Falkenburg <sfalken@apple.com> - - Windows build fix. - - * JavaScriptCore.vcproj/JavaScriptCore.make: - -2009-05-12 Steve Falkenburg <sfalken@apple.com> - - Windows build fix. - - * JavaScriptCore.vcproj/JavaScriptCore.make: - -2009-05-12 Oliver Hunt <oliver@apple.com> - - Reviewed by Gavin Barraclough. - - <rdar://problem/6881457> Crash occurs at JSC::Interpreter::execute() when loading http://www.sears.com - - We created the arguments objects before an op_push_scope but not - before op_push_new_scope, this meant a null arguments object could - be resolved inside catch blocks. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitPushNewScope): - -2009-05-12 Oliver Hunt <oliver@apple.com> - - Reviewed by Gavin Barraclough. - - <rdar://problem/6879881> Crash occurs at JSC::JSActivation::mark() when loading http://www.monster.com; http://www.cnet.com - <https://bugs.webkit.org/show_bug.cgi?id=25736> Crash loading www.google.dk/ig (and other igoogle's as well) - - Following on from the lazy arguments creation patch, it's now - possible for an activation to to have a null register in the callframe - so we can't just blindly mark the local registers in an activation, - and must null check first instead. - - * API/tests/testapi.c: - (functionGC): - * API/tests/testapi.js: - (bludgeonArguments.return.g): - (bludgeonArguments): - * runtime/JSActivation.cpp: - (JSC::JSActivation::mark): - -2009-05-12 Gavin Barraclough <barraclough@apple.com> - - Rubber stamped by Geoff Garen. - - WTF_USE_CTI_REPATCH_PIC is no longer used, remove. - - * jit/JIT.h: - * jit/JITStubCall.h: - -2009-05-12 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Maciej Stachowiak. - - We've run into some problems where changing the size of the class JIT leads to - performance fluctuations. Try forcing alignment in an attempt to stabalize this. - - * jit/JIT.h: - -2009-05-12 Kevin Ollivier <kevino@theolliviers.com> - - wx build fix. Add ParserArena.cpp to the build. - - * JavaScriptCoreSources.bkl: - -2009-05-12 Oliver Hunt <oliver@apple.com> - - Reviewed by Geoff Garen. - - Unsigned underflow on 64bit cannot be treated as a negative number - - This code included some placeswhere we deliberately create negative offsets - from unsigned values, on 32bit this is "safe", but in 64bit builds much - badness occurs. Solution is to use signed types as nature intended. - - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_load_varargs): - -2009-05-12 Jan Michael Alonzo <jmalonzo@webkit.org> - - Reviewed by Holger Freyther. - - [Gtk] Various autotools build refactoring and fixes - https://bugs.webkit.org/show_bug.cgi?id=25286 - - Define WTF_USE_JSC for the Gtk port. - - * wtf/Platform.h: - -2009-05-12 Maciej Stachowiak <mjs@apple.com> - - Reviewed by Oliver Hunt. - - - allow all of strictEqual to be inlined into cti_op_stricteq once again - - We had this optimization once but accidentally lost it at some point. - - * runtime/Operations.h: - (JSC::JSValue::strictEqualSlowCaseInline): - (JSC::JSValue::strictEqual): - -2009-05-12 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Oliver Hunt. - - instanceof should throw if the constructor being tested does not implement - 'HasInstance" (i.e. is a function). Instead we were returning false. - - * interpreter/Interpreter.cpp: - (JSC::isInvalidParamForIn): - (JSC::isInvalidParamForInstanceOf): - (JSC::Interpreter::privateExecute): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_instanceof): - * tests/mozilla/ecma_2/instanceof/instanceof-003.js: - Fix broken test case. - * tests/mozilla/ecma_2/instanceof/regress-7635.js: - Remove broken test case (was an exact duplicate of a test in instanceof-003.js). - -2009-05-12 Oliver Hunt <oliver@apple.com> - - Reviewed by Gavin Barraclough. - - Improve function call forwarding performance - - Make creation of the Arguments object occur lazily, so it - is not necessarily created for every function that references - it. Then add logic to Function.apply to allow it to avoid - allocating the Arguments object at all. Helps a lot with - the function forwarding/binding logic in jQuery, Prototype, - and numerous other JS libraries. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * bytecode/Opcode.h: - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): - (JSC::BytecodeGenerator::registerFor): - (JSC::BytecodeGenerator::willResolveToArguments): - (JSC::BytecodeGenerator::uncheckedRegisterForArguments): - (JSC::BytecodeGenerator::createArgumentsIfNecessary): - (JSC::BytecodeGenerator::emitCallEval): - (JSC::BytecodeGenerator::emitPushScope): - * bytecompiler/BytecodeGenerator.h: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::retrieveArguments): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * jit/JIT.h: - * jit/JITOpcodes.cpp: - (JSC::JIT::emit_op_create_arguments): - (JSC::JIT::emit_op_init_arguments): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_tear_off_arguments): - (JSC::JITStubs::cti_op_load_varargs): - * parser/Nodes.cpp: - (JSC::ApplyFunctionCallDotNode::emitBytecode): - -2009-05-11 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Oliver Hunt. - - Enable use of SamplingFlags directly from JIT code. - - * bytecode/SamplingTool.h: - * jit/JIT.h: - (JSC::JIT::sampleCodeBlock): - (JSC::JIT::sampleInstruction): - * jit/JITInlineMethods.h: - (JSC::JIT::setSamplingFlag): - (JSC::JIT::clearSamplingFlag): - -2009-05-11 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Cameron Zwarich. - - Implement JIT generation for instanceof for non-objects (always returns false). - Also fixes the sequencing of the prototype and value isObject checks, to no match the spec. - - 0.5% progression on v8 tests overall, due to 3.5% on early-boyer. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - * runtime/JSObject.cpp: - (JSC::JSObject::hasInstance): - * runtime/TypeInfo.h: - (JSC::TypeInfo::TypeInfo): - -2009-05-11 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Sam Weinig. - - A little more JIT refactoring. - - Rearranged code to more clearly indicate what's conditionally compiled - and why. Now, all shared code is at the top of our JIT files, and all - #if'd code is at the bottom. #if'd code is delineated by large comments. - - Moved functions that relate to the JIT but don't explicitly do codegen - into JIT.cpp. Refactored SSE2 check to store its result as a data member - in the JIT. - - * jit/JIT.cpp: - (JSC::isSSE2Present): - (JSC::JIT::JIT): - (JSC::JIT::unlinkCall): - (JSC::JIT::linkCall): - * jit/JIT.h: - (JSC::JIT::isSSE2Present): - * jit/JITArithmetic.cpp: - (JSC::JIT::emit_op_mod): - (JSC::JIT::emitSlow_op_mod): - * jit/JITCall.cpp: - (JSC::JIT::compileOpCallVarargs): - (JSC::JIT::compileOpCallVarargsSlowCase): - -2009-05-11 Holger Hans Peter Freyther <zecke@selfish.org> - - Build fix. - - * JavaScriptCore.pri: Build the new JITOpcodes.cpp - -2009-05-11 Sam Weinig <sam@webkit.org> - - Reviewed by Geoffrey Garen. - - More re-factoring of JIT code generation. Use a macro to - forward the main switch-statement cases to the helper functions. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - -2009-05-11 Sam Weinig <sam@webkit.org> - - Reviewed by Geoffrey Garen. - - More re-factoring of JIT code generation to move opcode generation - to helper functions outside the main switch-statement and gave those - helper functions standardized names. This patch covers the remaining - slow cases. - - * jit/JIT.cpp: - * jit/JIT.h: - * jit/JITOpcodes.cpp: - -2009-05-11 Geoffrey Garen <ggaren@apple.com> - - Build fix. - - * GNUmakefile.am: Added JITOpcodes.cpp and JITStubCall.h to the project. - -2009-05-11 Geoffrey Garen <ggaren@apple.com> - - Build fix. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added - JITOpcodes.cpp and JITStubCall.h to the project. - -2009-05-11 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Sam Weinig. - - Some JIT refactoring. - - Moved JITStubCall* into its own header. - - Modified JITStubCall to ASSERT that its return value is handled correctly. - Also, replaced function template with explicit instantiations to resolve - some confusion. - - Replaced all uses of emit{Get,Put}CTIArgument with explicit peeks, pokes, - and calls to killLastResultRegister(). - - * JavaScriptCore.xcodeproj/project.pbxproj: - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompile): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - * jit/JITCall.cpp: * jit/JITInlineMethods.h: (JSC::JIT::restoreArgumentReference): - * jit/JITPropertyAccess.cpp: - * jit/JITStubCall.h: Copied from jit/JIT.h. - (JSC::JITStubCall::JITStubCall): - (JSC::JITStubCall::addArgument): - (JSC::JITStubCall::call): - (JSC::JITStubCall::): - -2009-05-11 Sam Weinig <sam@webkit.org> - - Reviewed by Geoffrey Garen. - - Start re-factoring JIT code generation to move opcode generation - to helper functions outside the main switch-statement and gave those - helper functions standardized names. This patch only covers the main - pass and all the arithmetic opcodes in the slow path. - - * JavaScriptCore.xcodeproj/project.pbxproj: - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - * jit/JITOpcodes.cpp: Copied from jit/JIT.cpp. - * jit/JITPropertyAccess.cpp: - -2009-05-11 Steve Falkenburg <sfalken@apple.com> - - Re-add experimental PGO configs. - - Reviewed by Adam Roben. - - * JavaScriptCore.vcproj/JavaScriptCore.make: - * JavaScriptCore.vcproj/JavaScriptCore.sln: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: - * JavaScriptCore.vcproj/jsc/jsc.vcproj: - -2009-05-11 Sam Weinig <sam@webkit.org> - - Reviewed by Geoffrey "1" Garen. - - Rip out the !USE(CTI_REPATCH_PIC) code. It was untested and unused. - - * jit/JIT.h: - (JSC::JIT::compileGetByIdChainList): - (JSC::JIT::compileGetByIdChain): - (JSC::JIT::compileCTIMachineTrampolines): - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdChainList): - (JSC::JIT::privateCompileGetByIdChain): - * jit/JITStubs.cpp: - (JSC::JITStubs::tryCachePutByID): - (JSC::JITStubs::tryCacheGetByID): - -2009-05-11 Dmitry Titov <dimich@chromium.org> - - GTK build fix - the deprecated waitForThreadCompletion is not needed on GTK. - - * wtf/ThreadingPthreads.cpp: used #ifdef PLATFORM(DARWIN) around waitForThreadCompletion(). - -2009-05-11 Adam Roben <aroben@apple.com> - - Build fix for newer versions of GCC - - * wtf/ThreadingPthreads.cpp: Added a declaration of - waitForThreadCompletion before its definition to silence a warning. - -2009-05-11 Dmitry Titov <dimich@chromium.org> - - Reviewed by Alexey Proskuryakov and Adam Roben. - - https://bugs.webkit.org/show_bug.cgi?id=25348 - Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap. - - * wtf/Threading.h: - (WTF::ThreadIdentifier::ThreadIdentifier): - (WTF::ThreadIdentifier::isValid): - (WTF::ThreadIdentifier::invalidate): - (WTF::ThreadIdentifier::platformId): - ThreadIdentifier is now a class, containing a PlatformThreadIdentifier and - methods that are used across the code on thread ids: construction, comparisons, - check for 'valid' state etc. '0' is used as invalid id, which happens to just work - with all platform-specific thread id implementations. - - All the following files repeatedly reflect the new ThreadIdentifier for each platform. - We remove ThreadMap and threadMapMutex from all of them, remove the functions that - populated/searched/cleared the map and add platform-specific comparison operators - for ThreadIdentifier. - - There are specific temporary workarounds for Safari 4 beta on OSX and Win32 since the - public build uses WTF threading functions with old type of ThreadingIdentifier. - The next time Safari 4 is rebuilt, it will 'automatically' pick up the new type and new - functions so the deprecated ones can be removed. - - * wtf/gtk/ThreadingGtk.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - (WTF::initializeThreading): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::currentThread): - - * wtf/ThreadingNone.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - - * wtf/ThreadingPthreads.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - (WTF::initializeThreading): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::detachThread): - (WTF::currentThread): - (WTF::waitForThreadCompletion): This is a workaround for Safari 4 beta on Mac. - Safari 4 is linked against old definition of ThreadIdentifier so it treats it as uint32_t. - This 'old' variant of waitForThreadCompletion takes uint32_t and has the old decorated name, so Safari can - load it from JavaScriptCore library. The other functions (CurrentThread() etc) happen to match their previous - decorated names and, while they return pthread_t now, it is a pointer which round-trips through a uint32_t. - This function will be removed as soon as Safari 4 will release next public build. - - * wtf/qt/ThreadingQt.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - (WTF::initializeThreading): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::currentThread): - - * wtf/ThreadingWin.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - (WTF::initializeThreading): - (WTF::createThreadInternal): All the platforms (except Windows) used a sequential - counter as a thread ID and mapped it into platform ID. Windows was using native thread - id and mapped it into thread handle. Since we can always obtain a thread handle - by thread id, createThread now closes the handle. - (WTF::waitForThreadCompletion): obtains another one using OpenThread(id) API. If can not obtain a handle, - it means the thread already exited. - (WTF::detachThread): - (WTF::currentThread): - (WTF::detachThreadDeprecated): old function, renamed (for Win Safari 4 beta which uses it for now). - (WTF::waitForThreadCompletionDeprecated): same. - (WTF::currentThreadDeprecated): same. - (WTF::createThreadDeprecated): same. - - * bytecode/SamplingTool.h: - * bytecode/SamplingTool.cpp: Use DEFINE_STATIC_LOCAL for a static ThreadIdentifier variable, to avoid static constructor. - - * JavaScriptCore.exp: export lists - updated decorated names of the WTF threading functions - since they now take a different type as a parameter. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: ditto for Windows, plus added "deprecated" functions - that take old parameter type - turns out public beta of Safari 4 uses those, so they need to be kept along for a while. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: ditto. - -2009-05-11 Darin Adler <darin@apple.com> - - Reviewed by Oliver Hunt. - - Bug 25560: REGRESSION (r34821): "string value".__proto__ gets the wrong object. - https://bugs.webkit.org/show_bug.cgi?id=25560 - rdar://problem/6861069 - - I missed this case back a year ago when I sped up handling - of JavaScript wrappers. Easy to fix. - - * runtime/JSObject.h: - (JSC::JSValue::get): Return the prototype itself if the property name - is __proto__. - * runtime/JSString.cpp: - (JSC::JSString::getOwnPropertySlot): Ditto. - -2009-05-09 Oliver Hunt <oliver@apple.com> - - Reviewed by Maciej Stachowiak. - - Rename emitGetFromCallFrameHeader to emitGetFromCallFrameHeaderPtr - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jit/JIT.h: - * jit/JITInlineMethods.h: - (JSC::JIT::emitGetFromCallFrameHeaderPtr): - (JSC::JIT::emitGetFromCallFrameHeader32): - -2009-05-11 Holger Hans Peter Freyther <zecke@selfish.org> - - Unreviewed build fix. Build ParserAreana.cpp for Qt - - * JavaScriptCore.pri: - -2009-05-11 Norbert Leser <norbert.leser@nokia.com> - - Reviewed by Darin Adler. - - https://bugs.webkit.org/show_bug.cgi?id=24536 - - Symbian compilers cannot resolve WTF::PassRefPtr<JSC::Profile> - unless Profile.h is included. - - * profiler/ProfileGenerator.h: - -2009-05-11 Csaba Osztrogonac <oszi@inf.u-szeged.hu> - - Reviewed by Holger Freyther. - - https://bugs.webkit.org/show_bug.cgi?id=24284 - - * JavaScriptCore.pri: coding style modified - * jsc.pro: duplicated values removed from INCLUDEPATH, DEFINES - -2009-05-11 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk> - - Reviewed by NOBODY (build fix). - - Also add ParserArena, in addition to AllInOne, for release builds, - since adding it to AllInOne breaks Mac. - - * GNUmakefile.am: - -2009-05-11 Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk> - - Unreviewed build fix. Adding ParserArena to the autotools build. - - * GNUmakefile.am: - -2009-05-11 Adam Roben <aroben@apple.com> - - More Windows build fixes after r43479 - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - Export ParserArena::reset. - -2009-05-11 Adam Roben <aroben@apple.com> - - Windows build fixes after r43479 - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Added - ParserArena to the project. - - * parser/NodeConstructors.h: Added a missing include. - (JSC::ParserArenaDeletable::operator new): Marked these as inline. - -2009-05-10 Maciej Stachowiak <mjs@apple.com> - - Reviewed by Geoff Garen. - - - fixed REGRESSION(r43432): Many JavaScriptCore tests crash in 64-bit - https://bugs.webkit.org/show_bug.cgi?id=25680 - - Accound for the 64-bit instruction prefix when rewriting mov to lea on 64-bit. - - * jit/JIT.h: - * jit/JITPropertyAccess.cpp: - (JSC::JIT::patchGetByIdSelf): - (JSC::JIT::patchPutByIdReplace): - -2009-05-10 Darin Adler <darin@apple.com> - - Reviewed by Cameron Zwarich. - - Bug 25674: syntax tree nodes should use arena allocation - https://bugs.webkit.org/show_bug.cgi?id=25674 - - Part two: Remove reference counting from most nodes. - - * JavaScriptCore.exp: Updated. - - * JavaScriptCore.xcodeproj/project.pbxproj: Added ParserArena.h and .cpp. - - * parser/Grammar.y: Replaced uses of ParserRefCountedData with uses of - ParserArenaData. Took out now-nonfunctional code that tries to manually - release declaration list. Changed the new calls that create FuncDeclNode - and FuncExprNode so that they use the proper version of operator new for - the reference-counted idiom, not the deletion idiom. - - * parser/NodeConstructors.h: - (JSC::ParserArenaDeletable::operator new): Added. - (JSC::ParserArenaRefCounted::ParserArenaRefCounted): Added. - (JSC::Node::Node): Removed ParserRefCounted initializer. - (JSC::ElementNode::ElementNode): Ditto. - (JSC::PropertyNode::PropertyNode): Ditto. - (JSC::ArgumentsNode::ArgumentsNode): Ditto. - (JSC::SourceElements::SourceElements): Ditto. - (JSC::ParameterNode::ParameterNode): Ditto. - (JSC::FuncExprNode::FuncExprNode): Added ParserArenaRefCounted initializer. - (JSC::FuncDeclNode::FuncDeclNode): Ditto. - (JSC::CaseClauseNode::CaseClauseNode): Removed ParserRefCounted initializer. - (JSC::ClauseListNode::ClauseListNode): Ditto. - (JSC::CaseBlockNode::CaseBlockNode): Ditto. - - * parser/NodeInfo.h: Replaced uses of ParserRefCountedData with uses of - ParserArenaData. - - * parser/Nodes.cpp: - (JSC::ScopeNode::ScopeNode): Added ParserArenaRefCounted initializer. - (JSC::ProgramNode::create): Use the proper version of operator new for - the reference-counted idiom, not the deletion idiom. Use the arena - contains function instead of the vecctor find function. - (JSC::EvalNode::create): Use the proper version of operator new for - the reference-counted idiom, not the deletion idiom. Use the arena - reset function instead of the vector shrink function. - (JSC::FunctionBodyNode::createNativeThunk): Use the proper version - of operator new for the reference-counted idiom, not the deletion idiom. - (JSC::FunctionBodyNode::create): More of the same. - - * parser/Nodes.h: Added ParserArenaDeletable and ParserArenaRefCounted - to replace ParserRefCounted. Fixed inheritance so only the classes that - need reference counting inherit from ParserArenaRefCounted. - - * parser/Parser.cpp: - (JSC::Parser::parse): Set m_sourceElements to 0 since it now starts - uninitialized. Just set it to 0 again in the failure case, since it's - now just a raw pointer, not an owning one. - (JSC::Parser::reparseInPlace): Removed now-unneeded get() function. - (JSC::Parser::didFinishParsing): Replaced uses of ParserRefCountedData - with uses of ParserArenaData. - - * parser/Parser.h: Less RefPtr, more arena. - - * parser/ParserArena.cpp: Added. - * parser/ParserArena.h: Added. - - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::~JSGlobalData): Removed arena-related code, since it's - now in the Parser. - (JSC::JSGlobalData::createLeaked): Removed unneeded #ifndef. - (JSC::JSGlobalData::createNativeThunk): Tweaked #if a bit. - - * runtime/JSGlobalData.h: Removed parserArena, which is now in Parser. - - * wtf/RefCounted.h: Added deletionHasBegun function, for use in - assertions to catch deletion not done by the deref function. - -2009-05-10 David Kilzer <ddkilzer@apple.com> - - Part 2: Try to fix the Windows build by adding a symbol which is really just a re-mangling of a changed method signature - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-10 David Kilzer <ddkilzer@apple.com> - - Try to fix the Windows build by removing an unknown symbol - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-10 David Kilzer <ddkilzer@apple.com> - - Touch Nodes.cpp to try to fix Windows build - - * parser/Nodes.cpp: Removed whitespace. - -2009-05-10 Darin Adler <darin@apple.com> - - Reviewed by Maciej Stachowiak. - - Quick fix for failures seen on buildbot. Maciej plans a better fix later. - - * wtf/dtoa.cpp: Change the hardcoded number of 32-bit words in a BigInt - from 32 to 64. Parsing "1e500", for example, requires more than 32 words. - -2009-05-10 Darin Adler <darin@apple.com> - - Reviewed by Sam Weinig. - - Bug 25674: syntax tree nodes should use arena allocation - Part one: Change lifetimes so we won't have to use reference - counting so much, but don't eliminate the reference counts - entirely yet. - - * JavaScriptCore.exp: Updated. - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::BytecodeGenerator): Update for use of raw pointers - instead of RefPtr. - (JSC::BytecodeGenerator::emitCall): Ditto. - (JSC::BytecodeGenerator::emitConstruct): Ditto. - - * parser/Grammar.y: Update node creating code to use new (JSGlobalData*) - instead of the plain new. At the moment this is just a hook for future - arena allocation; it's inline and JSGlobalData* is not used. - - * parser/NodeConstructors.h: Updated for name change of parserObjects to - parserArena. Also added explicit initialization for raw pointers that used - to be RefPtr. Also removed some uses of get() that aren't needed now that - the pointers are raw pointers. Also eliminated m_parameter from FuncExprNode - and FuncDeclNode. Also changed node-creating code to use new (JSGlobalData*) - as above. - - * parser/Nodes.cpp: Eliminated NodeReleaser and all use of it. - (JSC::ParserRefCounted::ParserRefCounted): Updated for name change of - parserObjects to parserArena. - (JSC::SourceElements::append): Use raw pointers. - (JSC::ArrayNode::emitBytecode): Ditto. - (JSC::ArrayNode::isSimpleArray): Ditto. - (JSC::ArrayNode::toArgumentList): Ditto. - (JSC::ObjectLiteralNode::emitBytecode): Ditto. - (JSC::PropertyListNode::emitBytecode): Ditto. - (JSC::BracketAccessorNode::emitBytecode): Ditto. - (JSC::DotAccessorNode::emitBytecode): Ditto. - (JSC::ArgumentListNode::emitBytecode): Ditto. - (JSC::NewExprNode::emitBytecode): Ditto. - (JSC::EvalFunctionCallNode::emitBytecode): Ditto. - (JSC::FunctionCallValueNode::emitBytecode): Ditto. - (JSC::FunctionCallResolveNode::emitBytecode): Ditto. - (JSC::FunctionCallBracketNode::emitBytecode): Ditto. - (JSC::FunctionCallDotNode::emitBytecode): Ditto. - (JSC::CallFunctionCallDotNode::emitBytecode): Ditto. - (JSC::ApplyFunctionCallDotNode::emitBytecode): Ditto. - (JSC::PostfixBracketNode::emitBytecode): Ditto. - (JSC::PostfixDotNode::emitBytecode): Ditto. - (JSC::DeleteBracketNode::emitBytecode): Ditto. - (JSC::DeleteDotNode::emitBytecode): Ditto. - (JSC::DeleteValueNode::emitBytecode): Ditto. - (JSC::VoidNode::emitBytecode): Ditto. - (JSC::TypeOfValueNode::emitBytecode): Ditto. - (JSC::PrefixBracketNode::emitBytecode): Ditto. - (JSC::PrefixDotNode::emitBytecode): Ditto. - (JSC::UnaryOpNode::emitBytecode): Ditto. - (JSC::BinaryOpNode::emitStrcat): Ditto. - (JSC::BinaryOpNode::emitBytecode): Ditto. - (JSC::EqualNode::emitBytecode): Ditto. - (JSC::StrictEqualNode::emitBytecode): Ditto. - (JSC::ReverseBinaryOpNode::emitBytecode): Ditto. - (JSC::ThrowableBinaryOpNode::emitBytecode): Ditto. - (JSC::InstanceOfNode::emitBytecode): Ditto. - (JSC::LogicalOpNode::emitBytecode): Ditto. - (JSC::ConditionalNode::emitBytecode): Ditto. - (JSC::ReadModifyResolveNode::emitBytecode): Ditto. - (JSC::AssignResolveNode::emitBytecode): Ditto. - (JSC::AssignDotNode::emitBytecode): Ditto. - (JSC::ReadModifyDotNode::emitBytecode): Ditto. - (JSC::AssignBracketNode::emitBytecode): Ditto. - (JSC::ReadModifyBracketNode::emitBytecode): Ditto. - (JSC::CommaNode::emitBytecode): Ditto. - (JSC::ConstDeclNode::emitCodeSingle): Ditto. - (JSC::ConstDeclNode::emitBytecode): Ditto. - (JSC::ConstStatementNode::emitBytecode): Ditto. - (JSC::statementListEmitCode): Ditto. - (JSC::BlockNode::emitBytecode): Ditto. - (JSC::ExprStatementNode::emitBytecode): Ditto. - (JSC::VarStatementNode::emitBytecode): Ditto. - (JSC::IfNode::emitBytecode): Ditto. - (JSC::IfElseNode::emitBytecode): Ditto. - (JSC::DoWhileNode::emitBytecode): Ditto. - (JSC::WhileNode::emitBytecode): Ditto. - (JSC::ForNode::emitBytecode): Ditto. - (JSC::ForInNode::emitBytecode): Ditto. - (JSC::ReturnNode::emitBytecode): Ditto. - (JSC::WithNode::emitBytecode): Ditto. - (JSC::CaseBlockNode::tryOptimizedSwitch): Ditto. - (JSC::CaseBlockNode::emitBytecodeForBlock): Ditto. - (JSC::SwitchNode::emitBytecode): Ditto. - (JSC::LabelNode::emitBytecode): Ditto. - (JSC::ThrowNode::emitBytecode): Ditto. - (JSC::TryNode::emitBytecode): Ditto. - (JSC::ScopeNodeData::ScopeNodeData): Use swap to transfer ownership - of the arena, varStack and functionStack. - (JSC::ScopeNode::ScopeNode): Pass in the arena when creating the - ScopeNodeData. - (JSC::ProgramNode::ProgramNode): Made this inline since it's used - in only one place. - (JSC::ProgramNode::create): Changed this to return a PassRefPtr since - we plan to have the scope nodes be outside the arena, so they will need - some kind of ownership transfer (maybe auto_ptr instead of PassRefPtr - in the future, though). Remove the node from the newly-created arena to - avoid a circular reference. Later we'll keep the node out of the arena - by using a different operator new, but for now it's the ParserRefCounted - constructor that puts the node into the arena, and there's no way to - bypass that. - (JSC::EvalNode::EvalNode): Ditto. - (JSC::EvalNode::create): Ditto. - (JSC::FunctionBodyNode::FunctionBodyNode): Ditto. - (JSC::FunctionBodyNode::createNativeThunk): Moved the code that - reseets the arena here instead of the caller. - (JSC::FunctionBodyNode::create): Same change as the other create - functions above. - (JSC::FunctionBodyNode::emitBytecode): Use raw pointers. - - * parser/Nodes.h: Removed NodeReleaser. Changed FunctionStack to - use raw pointers. Removed the releaseNodes function. Added an override - of operator new that takes a JSGlobalData* to prepare for future arena use. - Use raw pointers instead of RefPtr everywhere possible. - - * parser/Parser.cpp: - (JSC::Parser::reparseInPlace): Pass the arena in. - - * parser/Parser.h: - (JSC::Parser::parse): Updated for name change of parserObjects to parserArena. - (JSC::Parser::reparse): Ditto. - * runtime/FunctionConstructor.cpp: - (JSC::extractFunctionBody): Ditto. - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::~JSGlobalData): Ditto. - (JSC::JSGlobalData::createNativeThunk): Moved arena manipulation into the - FunctionBodyNode::createNativeThunk function. - - * runtime/JSGlobalData.h: Tweaked formatting and renamed parserObjects to - parserArena. - - * wtf/NotFound.h: Added the usual "using WTF" to this header to match the - rest of WTF. - -2009-05-10 Dimitri Glazkov <dglazkov@chromium.org> - - Reviewed by Geoffrey Garen. - - https://bugs.webkit.org/show_bug.cgi?id=25670 - Remove no longer valid chunk of code from dtoa. - - * wtf/dtoa.cpp: - (WTF::dtoa): Removed invalid code. - -2009-05-10 Alexey Proskuryakov <ap@webkit.org> - - Reviewed by Geoff Garen. - - "Class const *" is the same as "const Class*", use the latter syntax consistently. - - See <http://www.parashift.com/c++-faq-lite/const-correctness.html#faq-18.9>. - - * pcre/pcre_compile.cpp: - (calculateCompiledPatternLength): - * runtime/JSObject.h: - (JSC::JSObject::offsetForLocation): - (JSC::JSObject::locationForOffset): - -2009-05-10 Maciej Stachowiak <mjs@apple.com> - - Reviewed by Alexey Proskuryakov. - - - speedup dtoa/strtod - - Added a bunch of inlining, and replaced malloc with stack allocation. - - 0.5% SunSpider speedup (7% on string-tagcloud). - - * runtime/NumberPrototype.cpp: - (JSC::integerPartNoExp): - (JSC::numberProtoFuncToExponential): - * runtime/UString.cpp: - (JSC::concatenate): - (JSC::UString::from): - * wtf/dtoa.cpp: - (WTF::BigInt::BigInt): - (WTF::BigInt::operator=): - (WTF::Balloc): - (WTF::Bfree): - (WTF::multadd): - (WTF::s2b): - (WTF::i2b): - (WTF::mult): - (WTF::pow5mult): - (WTF::lshift): - (WTF::cmp): - (WTF::diff): - (WTF::b2d): - (WTF::d2b): - (WTF::ratio): - (WTF::strtod): - (WTF::quorem): - (WTF::freedtoa): - (WTF::dtoa): - * wtf/dtoa.h: - -2009-05-09 Mike Hommey <glandium@debian.org> - - Reviewed by Geoffrey Garen. Landed by Jan Alonzo. - - Enable JIT on x86-64 gtk+ - https://bugs.webkit.org/show_bug.cgi?id=24724 - - * GNUmakefile.am: - -2009-05-09 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Cameron Zwarich. - - Removed the last non-call-related manually managed JIT stub call. - - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArithSlow_op_rshift): Fully use the JITStubCall - abstraction, instead of emitPutJITStubArg. - -2009-05-09 Sebastian Andrzej Siewior <sebastian@breakpoint.cc> - - Reviewed by Gustavo Noronha. - - https://bugs.webkit.org/show_bug.cgi?id=25653 - PLATFORM(X86_64) inherits ia64 - - __ia64__ is defined by gcc in an IA64 arch and has completely - nothing in common with X86-64 exept both are from Intel and have - an 64bit address space. That's it. Since code seems to expect x86 - here, ia64 has to go. - - * wtf/Platform.h: - -2009-05-09 Gustavo Noronha Silva <gns@gnome.org> - - Suggested by Geoffrey Garen. - - Assume SSE2 is present on X86-64 and on MAC X86-32. This fixes a - build breakage on non-Mac X86-64 when JIT is enabled. - - * jit/JITArithmetic.cpp: - -2009-05-09 Gustavo Noronha Silva <gns@gnome.org> - - Build fix, adding missing files to make dist. - - * GNUmakefile.am: - -2009-05-09 Geoffrey Garen <ggaren@apple.com> - - Windows build fix. - - * assembler/X86Assembler.h: - (JSC::X86Assembler::patchLoadToLEA): - -2009-05-09 Geoffrey Garen <ggaren@apple.com> - - Windows build fix. - - * assembler/X86Assembler.h: - (JSC::X86Assembler::patchLoadToLEA): - -2009-05-09 Maciej Stachowiak <mjs@apple.com> - - Reviewed by Gavin Barraclough. - - Original patch by John McCall. Updated by Cameron Zwarich. Further refined by me. - - - Assorted speedups to property access - - ~.3%-1% speedup on SunSpider - - 1) When we know from the structure ID that an object is using inline storage, plant direct - loads and stores against it; no need to indirect through storage pointer. - - 2) Also because of the above, union the property storage pointer with the first inline property - slot and add an extra inline property slot. - - * assembler/AbstractMacroAssembler.h: - (JSC::AbstractMacroAssembler::CodeLocationInstruction::CodeLocationInstruction): - (JSC::AbstractMacroAssembler::CodeLocationInstruction::patchLoadToLEA): - (JSC::::CodeLocationCommon::instructionAtOffset): - * assembler/MacroAssembler.h: - (JSC::MacroAssembler::storePtr): - * assembler/MacroAssemblerX86.h: - (JSC::MacroAssemblerX86::store32): - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::storePtr): - * assembler/X86Assembler.h: - (JSC::X86Assembler::movq_EAXm): - (JSC::X86Assembler::movl_rm): - (JSC::X86Assembler::patchLoadToLEA): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * jit/JIT.h: - * jit/JITPropertyAccess.cpp: + (JSC::JIT::checkStructure): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_instanceof): + (JSC::JIT::emit_op_get_scoped_var): + (JSC::JIT::emit_op_put_scoped_var): + (JSC::JIT::emit_op_construct_verify): + (JSC::JIT::emit_op_resolve_global): + (JSC::JIT::emit_op_jeq_null): + (JSC::JIT::emit_op_jneq_null): + (JSC::JIT::emit_op_to_jsnumber): + (JSC::JIT::emit_op_catch): + (JSC::JIT::emit_op_eq_null): + (JSC::JIT::emit_op_neq_null): + (JSC::JIT::emit_op_convert_this): + (JSC::JIT::emit_op_profile_will_call): + (JSC::JIT::emit_op_profile_did_call): + (JSC::JIT::emitSlow_op_get_by_val): + * jit/JITPropertyAccess.cpp: + (JSC::JIT::emit_op_get_by_val): + (JSC::JIT::emit_op_put_by_val): + (JSC::JIT::emit_op_method_check): (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compilePutByIdHotPath): + (JSC::JIT::emit_op_put_by_id): (JSC::JIT::compilePutDirectOffset): (JSC::JIT::compileGetDirectOffset): (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): - * runtime/JSObject.cpp: - (JSC::JSObject::mark): - (JSC::JSObject::removeDirect): - * runtime/JSObject.h: - (JSC::JSObject::propertyStorage): - (JSC::JSObject::getDirect): - (JSC::JSObject::getOffset): - (JSC::JSObject::offsetForLocation): - (JSC::JSObject::locationForOffset): - (JSC::JSObject::getDirectOffset): - (JSC::JSObject::putDirectOffset): - (JSC::JSObject::isUsingInlineStorage): - (JSC::JSObject::): - (JSC::JSObject::JSObject): - (JSC::JSObject::~JSObject): - (JSC::Structure::isUsingInlineStorage): - (JSC::JSObject::putDirect): - (JSC::JSObject::putDirectWithoutTransition): - (JSC::JSObject::allocatePropertyStorageInline): - * runtime/Structure.h: - -2009-05-09 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Gavin Barraclough. - - Changed all our JIT stubs so that they return a maximum of 1 JS value or - two non-JS pointers, and do all other value returning through out - parameters, in preparation for 64bit JS values on a 32bit system. - - Stubs that used to return two JSValues now return one JSValue and take - and out parameter specifying where in the register array the second - value should go. - - SunSpider reports no change. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArithSlow_op_post_inc): - (JSC::JIT::compileFastArithSlow_op_post_dec): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_call_arityCheck): - (JSC::JITStubs::cti_op_resolve_func): - (JSC::JITStubs::cti_op_post_inc): - (JSC::JITStubs::cti_op_resolve_with_base): - (JSC::JITStubs::cti_op_post_dec): - * jit/JITStubs.h: - (JSC::): - -2009-05-08 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Cameron Zwarich. - - Fixed <rdar://problem/6634956> CrashTracer: [REGRESSION] >400 crashes - in Safari at com.apple.JavaScriptCore • JSC::BytecodeGenerator::emitComplexJumpScopes + 468 - https://bugs.webkit.org/show_bug.cgi?id=25658 - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitComplexJumpScopes): Guard the whole loop - with a bounds check. The old loop logic would decrement and read topScope - without a bounds check, which could cause crashes on page boundaries. - -2009-05-08 Jan Michael Alonzo <jmalonzo@webkit.org> - - Reviewed by NOBODY (BuildFix). - - Gtk fix: add LiteralParser to the build script per r43424. - - Add LiteralParser to the Qt and Wx build scripts too. - - * GNUmakefile.am: - * JavaScriptCore.pri: - * JavaScriptCoreSources.bkl: - -2009-05-08 Oliver Hunt <oliver@apple.com> - - Reviewed by Gavin Barraclough and Darin Adler. - - Add a limited literal parser for eval to handle object and array literals fired at eval - - This is a simplified parser and lexer that we can throw at strings passed to eval - in case a site is using eval to parse JSON (eg. json2.js). The lexer is intentionally - limited (in effect it's whitelisting a limited "common" subset of the JSON grammar) - as this decreases the likelihood of us wating time attempting to parse any significant - amount of non-JSON content. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.xcodeproj/project.pbxproj: - * interpreter/Interpreter.cpp: - (JSC::Interpreter::callEval): - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncEval): - * runtime/LiteralParser.cpp: Added. - (JSC::isStringCharacter): - (JSC::LiteralParser::Lexer::lex): - (JSC::LiteralParser::Lexer::lexString): - (JSC::LiteralParser::Lexer::lexNumber): - (JSC::LiteralParser::parseStatement): - (JSC::LiteralParser::parseExpression): - (JSC::LiteralParser::parseArray): - (JSC::LiteralParser::parseObject): - (JSC::LiteralParser::StackGuard::StackGuard): - (JSC::LiteralParser::StackGuard::~StackGuard): - (JSC::LiteralParser::StackGuard::isSafe): - * runtime/LiteralParser.h: Added. - (JSC::LiteralParser::LiteralParser): - (JSC::LiteralParser::attemptJSONParse): - (JSC::LiteralParser::): - (JSC::LiteralParser::Lexer::Lexer): - (JSC::LiteralParser::Lexer::next): - (JSC::LiteralParser::Lexer::currentToken): - (JSC::LiteralParser::abortParse): - -2009-05-08 Geoffrey Garen <ggaren@apple.com> - - Not reviewed. - - Restored a Mozilla JS test I accidentally gutted. - - * tests/mozilla/ecma/Array/15.4.4.2.js: - (getTestCases): - (test): - -2009-05-08 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Gavin Barraclough. - - More abstraction for JITStub calls from JITed code. - - Added a JITStubCall class that automatically handles things like assigning - arguments to different stack slots and storing return values. Deployed - the class in about a billion places. A bunch more places remain to be - fixed up, but this is a good stopping point for now. - - * jit/JIT.cpp: - (JSC::JIT::emitTimeoutCheck): - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - (JSC::JIT::privateCompile): - * jit/JIT.h: - (JSC::JIT::JSRInfo::JSRInfo): - (JSC::JITStubCall::JITStubCall): - (JSC::JITStubCall::addArgument): - (JSC::JITStubCall::call): - (JSC::JITStubCall::): - (JSC::CallEvalJITStub::CallEvalJITStub): - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArithSlow_op_lshift): - (JSC::JIT::compileFastArithSlow_op_rshift): - (JSC::JIT::compileFastArithSlow_op_jnless): - (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/JITPropertyAccess.cpp: - (JSC::JIT::compileGetByIdHotPath): - (JSC::JIT::compilePutByIdHotPath): - (JSC::JIT::compileGetByIdSlowCase): - (JSC::JIT::compilePutByIdSlowCase): + (JSC::JIT::privateCompilePatchGetArrayLength): * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_resolve_func): - (JSC::JITStubs::cti_op_resolve_with_base): - -2009-05-08 Cameron Zwarich <cwzwarich@uwaterloo.ca> - - Reviewed by Maciej Stachowiak. + (JSC::JITThunks::JITThunks): - Add a new opcode jnlesseq, and optimize its compilation in the JIT using - techniques similar to what were used to optimize jnless in r43363. +2009-06-19 Gavin Barraclough <barraclough@apple.com> - This gives a 0.7% speedup on SunSpider, particularly on the tests 3d-cube, - control-flow-recursive, date-format-xparb, and string-base64. + Reviewed by NOBODY (Windows build fix). - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): Add support for dumping op_jnlesseq. - * bytecode/Opcode.h: Add op_jnlesseq to the list of opcodes. - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitJumpIfFalse): Add a peephole optimization - for op_jnlesseq when emitting lesseq followed by a jump. - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): Add case for op_jnlesseq. - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): Add case for op_jnlesseq. - (JSC::JIT::privateCompileSlowCases): Add case for op_jnlesseq. * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_jnlesseq): Added. - (JSC::JIT::compileFastArithSlow_op_jnlesseq): Added. - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_jlesseq): Added. - * jit/JITStubs.h: - -2009-05-08 Maciej Stachowiak <mjs@apple.com> - - Reviewed by Cameron Zwarich. - - - fix test failures on 64-bit - - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArithSlow_op_jnless): Avoid accidentaly treating an - immediate int as an immediate float in the 64-bit value representation. - -2009-05-08 Gavin Barraclough <barraclough@apple.com> - - Rubber stamped by Oliver Hunt. - - Removing an empty constructor and an uncalled, empty function seems to be a - pretty solid 1% regeression on my machine, so I'm going to put them back. - Um. Yeah, this this pretty pointles and makes no sense at all. I officially - lose the will to live in 3... 2... - - * bytecode/SamplingTool.cpp: - (JSC::SamplingTool::notifyOfScope): - * bytecode/SamplingTool.h: - (JSC::SamplingTool::~SamplingTool): - -2009-05-08 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Oliver "I see lots of ifdefs" Hunt. - - Fix (kinda) for sampling tool breakage. The codeblock sampling tool has become - b0rked due to recent changes in native function calling. The initialization of - a ScopeNode appears to now occur before the sampling tool (or possibly the - interpreter has been brought into existence, wihich leads to crashyness). - - This patch doesn't fix the problem. The crash occurs when tracking a Scope, but - we shouldn't need to track scopes when we're just sampling opcodes, not - codeblocks. Not retaining Scopes when just opcode sampling will reduce sampling - overhead reducing any instrumentation skew, which is a good thing. As a side - benefit this patch also gets the opcode sampling going again, albeit in a bit of - a lame way. Will come back later with a proper fix from codeblock sampling. - - * JavaScriptCore.exp: - * bytecode/SamplingTool.cpp: - (JSC::compareLineCountInfoSampling): - (JSC::SamplingTool::dump): - * bytecode/SamplingTool.h: - (JSC::SamplingTool::SamplingTool): - * parser/Nodes.cpp: - (JSC::ScopeNode::ScopeNode): - -2009-05-07 Mark Rowe <mrowe@apple.com> - - Rubber-stamped by Oliver Hunt. - - Fix <https://bugs.webkit.org/show_bug.cgi?id=25640>. - Bug 25640: Crash on quit in r43384 nightly build on Leopard w/ Safari 4 beta installed - - Roll out r43366 as it removed symbols that Safari 4 Beta uses. - - * JavaScriptCore.exp: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - * bytecode/SamplingTool.cpp: - (JSC::SamplingThread::start): - (JSC::SamplingThread::stop): - * bytecode/SamplingTool.h: - * wtf/CrossThreadRefCounted.h: - (WTF::CrossThreadRefCounted::CrossThreadRefCounted): - (WTF::::ref): - (WTF::::deref): - * wtf/Threading.h: - * wtf/ThreadingNone.cpp: - * wtf/ThreadingPthreads.cpp: - (WTF::threadMapMutex): - (WTF::initializeThreading): - (WTF::threadMap): - (WTF::identifierByPthreadHandle): - (WTF::establishIdentifierForPthreadHandle): - (WTF::pthreadHandleForIdentifier): - (WTF::clearPthreadHandleForIdentifier): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::detachThread): - (WTF::currentThread): - * wtf/ThreadingWin.cpp: - (WTF::threadMapMutex): - (WTF::initializeThreading): - (WTF::threadMap): - (WTF::storeThreadHandleByIdentifier): - (WTF::threadHandleForIdentifier): - (WTF::clearThreadHandleForIdentifier): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::detachThread): - (WTF::currentThread): - * wtf/gtk/ThreadingGtk.cpp: - (WTF::threadMapMutex): - (WTF::initializeThreading): - (WTF::threadMap): - (WTF::identifierByGthreadHandle): - (WTF::establishIdentifierForThread): - (WTF::threadForIdentifier): - (WTF::clearThreadForIdentifier): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::currentThread): - * wtf/qt/ThreadingQt.cpp: - (WTF::threadMapMutex): - (WTF::threadMap): - (WTF::identifierByQthreadHandle): - (WTF::establishIdentifierForThread): - (WTF::clearThreadForIdentifier): - (WTF::threadForIdentifier): - (WTF::initializeThreading): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::currentThread): - -2009-05-07 Gustavo Noronha Silva <gns@gnome.org> - - Suggested by Oliver Hunt. - - Also check for Linux for the special-cased calling convention. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileCTIMachineTrampolines): - * wtf/Platform.h: - -2009-05-07 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Maciej Stachowiak. - - Previously, when appending to an existing string and growing the underlying buffer, - we would actually allocate 110% of the required size in order to give us some space - to expand into. Now we treat strings differently based on their size: - - Small Strings (up to 4 pages): - Expand the allocation size to 112.5% of the amount requested. This is largely sicking - to our previous policy, however 112.5% is cheaper to calculate. - - Medium Strings (up to 128 pages): - For pages covering multiple pages over-allocation is less of a concern - any unused - space will not be paged in if it is not used, so this is purely a VM overhead. For - these strings allocate 2x the requested size. - - Large Strings (to infinity and beyond!): - Revert to our 112.5% policy - probably best to limit the amount of unused VM we allow - any individual string be responsible for. - - Additionally, round small allocations up to a multiple of 16 bytes, and medium and - large allocations up to a multiple of page size. - - ~1.5% progression on Sunspider, due to 5% improvement on tagcloud & 15% on validate. - - * runtime/UString.cpp: - (JSC::expandedSize): - -2009-05-07 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Cameron Zwarich. - - Fixed a minor sequencing error introduced by recent Parser speedups. - - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::createNativeThunk): Missed a spot in my last patch. - -2009-05-07 Geoffrey Garen <ggaren@apple.com> - - Not reviewed. - - * wtf/Platform.h: Reverted an accidental (and performance-catastrophic) - change. - -2009-05-07 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Cameron Zwarich. - - Fixed a minor sequencing error introduced by recent Parser speedups. - - * parser/Parser.cpp: - (JSC::Parser::reparseInPlace): Missed a spot in my last patch. - -2009-05-07 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Cameron Zwarich. - - Fixed a minor sequencing error introduced by recent Parser speedups. - - * parser/Parser.cpp: - (JSC::Parser::parse): - * parser/Parser.h: - (JSC::Parser::parse): - (JSC::Parser::reparse): Shrink the parsedObjects vector after allocating - the root node, to avoid leaving a stray node in the vector, since that's - a slight memory leak, and it causes problems during JSGlobalData teardown. - - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::~JSGlobalData): ASSERT that we're not being torn - down while we think we're still parsing, since that would cause lots of - bad memory references during our destruction. - -2009-05-07 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Cameron Zwarich. - - Replaced two more macros with references to the JITStackFrame structure. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): * jit/JITInlineMethods.h: - (JSC::JIT::restoreArgumentReference): - * jit/JITStubs.cpp: - (JSC::): - * jit/JITStubs.h: - -2009-05-07 Oliver Hunt <oliver@apple.com> - - Reviewed by Gavin Barraclough. - - Improve native call performance - - Fix the windows build by adding calling convention declarations everywhere, - chose fastcall as that seemed most sensible given we were having to declare - the convention explicitly. In addition switched to fastcall on mac in the - deluded belief that documented fastcall behavior on windows would match - actual its actual behavior. - - * API/JSCallbackFunction.h: - * API/JSCallbackObject.h: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - * interpreter/CallFrame.h: - (JSC::ExecState::argumentCount): - * jit/JIT.cpp: - (JSC::JIT::privateCompileCTIMachineTrampolines): - * jsc.cpp: - (functionPrint): - (functionDebug): - (functionGC): - (functionVersion): - (functionRun): - (functionLoad): - (functionSetSamplingFlags): - (functionClearSamplingFlags): - (functionReadline): - (functionQuit): - * runtime/ArrayConstructor.cpp: - (JSC::callArrayConstructor): - * 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::arrayProtoFuncReduce): - (JSC::arrayProtoFuncReduceRight): - (JSC::arrayProtoFuncIndexOf): - (JSC::arrayProtoFuncLastIndexOf): - * runtime/BooleanConstructor.cpp: - (JSC::callBooleanConstructor): - * runtime/BooleanPrototype.cpp: - (JSC::booleanProtoFuncToString): - (JSC::booleanProtoFuncValueOf): - * runtime/CallData.h: - * runtime/DateConstructor.cpp: - (JSC::callDate): - (JSC::dateParse): - (JSC::dateNow): - (JSC::dateUTC): - * runtime/DatePrototype.cpp: - (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::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/ErrorConstructor.cpp: - (JSC::callErrorConstructor): - * runtime/ErrorPrototype.cpp: - (JSC::errorProtoFuncToString): - * runtime/FunctionConstructor.cpp: - (JSC::callFunctionConstructor): - * runtime/FunctionPrototype.cpp: - (JSC::callFunctionPrototype): - (JSC::functionProtoFuncToString): - (JSC::functionProtoFuncApply): - (JSC::functionProtoFuncCall): - * runtime/JSFunction.h: - (JSC::JSFunction::nativeFunction): - (JSC::JSFunction::setScopeChain): - * runtime/JSGlobalObjectFunctions.cpp: - (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/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/NativeErrorConstructor.cpp: - (JSC::callNativeErrorConstructor): - * runtime/NativeFunctionWrapper.h: - * runtime/NumberConstructor.cpp: - (JSC::callNumberConstructor): - * runtime/NumberPrototype.cpp: - (JSC::numberProtoFuncToString): - (JSC::numberProtoFuncToLocaleString): - (JSC::numberProtoFuncValueOf): - (JSC::numberProtoFuncToFixed): - (JSC::numberProtoFuncToExponential): - (JSC::numberProtoFuncToPrecision): - * runtime/ObjectConstructor.cpp: - (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/RegExpConstructor.cpp: - (JSC::callRegExpConstructor): - * runtime/RegExpObject.cpp: - (JSC::callRegExpObject): - * runtime/RegExpPrototype.cpp: - (JSC::regExpProtoFuncTest): - (JSC::regExpProtoFuncExec): - (JSC::regExpProtoFuncCompile): - (JSC::regExpProtoFuncToString): - * runtime/StringConstructor.cpp: - (JSC::stringFromCharCode): - (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): - * wtf/Platform.h: - -2009-05-07 Geoffrey Garen <ggaren@apple.com> - - Not reviewed. - - Rolled out a portion of r43352 because it broke 64bit. - - * jit/JITStubs.h: - -2009-05-07 Kevin Ollivier <kevino@theolliviers.com> - - Build fix for functions reaturning ThreadIdentifier. - - * wtf/ThreadingNone.cpp: - (WTF::createThreadInternal): - (WTF::currentThread): - -2009-05-07 Maciej Stachowiak <mjs@apple.com> - - Reviewed by John Honeycutt. - - - enable optimization case im the last patch that I accidentally had disabled. - - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArithSlow_op_jnless): - -2009-05-07 Dmitry Titov <dimich@chromium.org> - - Attempt to fix Win build. - - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArithSlow_op_jnless): - -2009-05-07 Dmitry Titov <dimich@chromium.org> - - Reviewed by Alexey Proskuryakov and Adam Roben. - - https://bugs.webkit.org/show_bug.cgi?id=25348 - Change WTF::ThreadIdentifier to be an actual (but wrapped) thread id, remove ThreadMap. - - * wtf/Threading.h: - (WTF::ThreadIdentifier::ThreadIdentifier): - (WTF::ThreadIdentifier::isValid): - (WTF::ThreadIdentifier::invalidate): - (WTF::ThreadIdentifier::platformId): - ThreadIdentifier is now a class, containing a PlatformThreadIdentifier and - methods that are used across the code on thread ids: construction, comparisons, - check for 'valid' state etc. '0' is used as invalid id, which happens to just work - with all platform-specific thread id implementations. - - All the following files repeatedly reflect the new ThreadIdentifier for each platform. - We remove ThreadMap and threadMapMutex from all of them, remove the functions that - populated/searched/cleared the map and add platform-specific comparison operators - for ThreadIdentifier. - - * wtf/gtk/ThreadingGtk.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - (WTF::initializeThreading): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::currentThread): - - * wtf/ThreadingNone.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - - * wtf/ThreadingPthreads.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - (WTF::initializeThreading): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::detachThread): - (WTF::currentThread): - - * wtf/qt/ThreadingQt.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - (WTF::initializeThreading): - (WTF::createThreadInternal): - (WTF::waitForThreadCompletion): - (WTF::currentThread): - - * wtf/ThreadingWin.cpp: - (WTF::ThreadIdentifier::operator==): - (WTF::ThreadIdentifier::operator!=): - (WTF::initializeThreading): - (WTF::createThreadInternal): All the platforms (except Windows) used a sequential - counter as a thread ID and mapped it into platform ID. Windows was using native thread - id and mapped it into thread handle. Since we can always obtain a thread handle - by thread id, createThread now closes the handle. - (WTF::waitForThreadCompletion): obtains another one using OpenThread(id) API. If can not obtain a handle, - it means the thread already exited. - (WTF::detachThread): - (WTF::currentThread): - (WTF::detachThreadDeprecated): old function, renamed (for Win Safari 4 beta which uses it for now). - (WTF::waitForThreadCompletionDeprecated): same. - (WTF::currentThreadDeprecated): same. - (WTF::createThreadDeprecated): same. - - * bytecode/SamplingTool.h: - * bytecode/SamplingTool.cpp: Use DEFINE_STATIC_LOCAL for a static ThreadIdentifier variable, to avoid static constructor. - - * JavaScriptCore.exp: export lists - updated the WTF threading functions decorated names - since they now take a different type as a parameter. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: ditto for Windows, plus added "deprecated" functions - that take old parameter type - turns out public beta of Safari 4 uses those, so they need to be kept along for a while. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: ditto. - -2009-05-07 Maciej Stachowiak <mjs@apple.com> - - Reviewed by Sam Weinig. - - - optimize various cases of branch-fused less - - 1% speedup on SunSpider overall - 13% speedup on math-cordic - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - op_loop_if_less: Optimize case of constant as first operand, just as case of constant as - second operand. - op_jnless: Factored out into compileFastArith_op_jnless. - (JSC::JIT::privateCompileSlowCases): - op_jnless: Factored out into compileFastArithSlow_op_jnless. - * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_jnless): Factored out from main compile loop. - - Generate inline code for comparison of constant immediate int as first operand to another - immediate int, as for loop_if_less - - (JSC::JIT::compileFastArithSlow_op_jnless): - - Generate inline code for comparing two floating point numbers. - - Generate code for both cases of comparing a floating point number to a constant immediate - int. - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): Fix dumping of op_jnless (tangentially related bugfix). - -2009-05-07 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Sam Weinig. - - Added the return address of a stub function to the JITStackFrame abstraction. - - * jit/JIT.cpp: - * jit/JIT.h: - * jit/JITStubs.cpp: - (JSC::): - (JSC::StackHack::StackHack): - (JSC::StackHack::~StackHack): - (JSC::returnToThrowTrampoline): - (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_string): - (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_load_varargs): - (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_to_primitive): - (JSC::JITStubs::cti_op_strcat): - (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::JITStackFrame::returnAddressSlot): - -2009-05-07 Darin Adler <darin@apple.com> - - Reviewed by Geoff Garen. - - * parser/Lexer.cpp: - (JSC::Lexer::lex): Fix missing braces. This would make us always - take the slower case for string parsing and Visual Studio correctly - noticed unreachable code. - -2009-05-07 Darin Adler <darin@apple.com> - - Reviewed by Sam Weinig. - - Bug 25589: goto instead of state machine in lexer - https://bugs.webkit.org/show_bug.cgi?id=25589 - - SunSpider is 0.8% faster. - - * parser/Lexer.cpp: - (JSC::Lexer::currentCharacter): Added. - (JSC::Lexer::currentOffset): Changed to call currentCharacter for clarity. - (JSC::Lexer::setCode): Removed code to set now-obsolete m_skipLineEnd. - (JSC::Lexer::shiftLineTerminator): Added. Handles line numbers and the - two-character line terminators. - (JSC::Lexer::makeIdentifier): Changed to take characters and length rather - than a vector, since we now make these directly out of the source buffer - when possible. - (JSC::Lexer::lastTokenWasRestrKeyword): Added. - (JSC::isNonASCIIIdentStart): Broke out the non-inline part. - (JSC::isIdentStart): Moved here. - (JSC::isNonASCIIIdentPart): Broke out the non-inline part. - (JSC::isIdentPart): Moved here. - (JSC::singleEscape): Moved here, and removed some unneeded cases. - (JSC::Lexer::record8): Moved here. - (JSC::Lexer::record16): Moved here. - (JSC::Lexer::lex): Rewrote this whole function to use goto and not use - a state machine. Got rid of most of the local variables. Also rolled the - matchPunctuator function in here. - (JSC::Lexer::scanRegExp): Changed to use the new version of isLineTerminator. - Clear m_buffer16 after using it instead of before. - - * parser/Lexer.h: Removed State enum, setDone function, nextLine function, - lookupKeywordFunction, one of the isLineTerminator functions, m_done data member, - m_skipLineEnd data member, and m_state data member. Added shiftLineTerminator - function, currentCharacter function, and changed the arguments to the makeIdentifier - function. Removed one branch from the isLineTerminator function. - - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): Streamlined the case where we don't replace anything. - -2009-05-07 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Gavin Barraclough. - - Removed a few more special constants, and replaced them with uses of - the JITStackFrame struct. - - Removed one of the two possible definitions of VoidPtrPair. The Mac - definition was more elegant, but SunSpider doesn't think it's any - faster, and it's net less elegant to have two ways of doing things. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompile): - * jit/JITStubs.h: - (JSC::): - -2009-05-07 Darin Adler <darin@apple.com> - - * runtime/ScopeChain.h: - (JSC::ScopeChainNode::~ScopeChainNode): Tweak formatting. -2009-05-07 Simon Hausmann <simon.hausmann@nokia.com> - - Reviewed by Tor Arne Vestbø. - - Fix the build thread stack base determination build on Symbian, - by moving the code block before PLATFORM(UNIX), which is also - enabled on Symbian builds. - - * runtime/Collector.cpp: - (JSC::currentThreadStackBase): - -2009-05-07 Oliver Hunt <oliver@apple.com> +2009-06-19 Gabor Loki <loki@inf.u-szeged.hu> Reviewed by Gavin Barraclough. - Fix crash due to incorrectly using an invalid scopechain - - stringProtoFuncReplace was checking for an exception on a CachedCall - by asking for the cached callframes exception. Unfortunately this - could crash in certain circumstances as CachedCall does not guarantee - a valid callframe following a call. Even more unfortunately the check - was entirely unnecessary as there is only a single exception slot per - global data, so it was already checked via the initial exec->hadException() - check. - - To make bugs like this more obvious, i've added a debug only destructor - to ScopeChainNode that 0's all of its fields. This exposed a crash in - the standard javascriptcore tests. - - * runtime/ScopeChain.h: - (JSC::ScopeChainNode::~ScopeChainNode): - (JSC::ScopeChain::~ScopeChain): - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): - -2009-05-07 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Geoff Garen. - - Enable op_strcat across += assignments. This patch allows the lhs of a read/modify node - to be included within the concatenation operation, and also modifies the implementation - of the concatenation to attempt to reuse and cat onto the leftmost string, rather than - always allocating a new empty output string to copy into (as was previously the behaviour). - - ~0.5% progression, due to a 3%-3.5% progression on the string tests (particularly validate). - - * parser/Nodes.cpp: - (JSC::BinaryOpNode::emitStrcat): - (JSC::emitReadModifyAssignment): - (JSC::ReadModifyResolveNode::emitBytecode): - (JSC::ReadModifyDotNode::emitBytecode): - (JSC::ReadModifyBracketNode::emitBytecode): - * parser/Nodes.h: - * runtime/Operations.h: - (JSC::concatenateStrings): - * runtime/UString.cpp: - (JSC::UString::reserveCapacity): - * runtime/UString.h: - -2009-05-07 Simon Hausmann <simon.hausmann@nokia.com> - - Reviewed by Oliver Hunt. + Reorganize ARM architecture specific macros. + Use PLATFORM_ARM_ARCH(7) instead of PLATFORM(ARM_V7). - Fix the build on Windows without JIT: interpreter/RegisterFile.h needs - roundUpAllocationSize, which is protected by #if ENABLED(ASSEMBLER). - Moved the #ifdef down and always offer the function. + Bug 24986: ARM JIT port + <https://bugs.webkit.org/show_bug.cgi?id=24986> + * assembler/ARMv7Assembler.h: + * assembler/AbstractMacroAssembler.h: + (JSC::AbstractMacroAssembler::Imm32::Imm32): + * assembler/MacroAssembler.h: + * assembler/MacroAssemblerCodeRef.h: + (JSC::MacroAssemblerCodePtr::MacroAssemblerCodePtr): * jit/ExecutableAllocator.h: - -2009-05-06 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Gavin "++" Barraclough. - - Added some abstraction around the JIT stub calling convention by creating - a struct to represent the persistent stack frame JIT code shares with - JIT stubs. - - SunSpider reports no change. - + (JSC::ExecutableAllocator::cacheFlush): * jit/JIT.h: + * jit/JITInlineMethods.h: + (JSC::JIT::restoreArgumentReferenceForTrampoline): * jit/JITStubs.cpp: - (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_string): - (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_load_varargs): - (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_to_primitive): - (JSC::JITStubs::cti_op_strcat): - (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::): - -2009-05-06 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Maciej Stachowiak & Darin Adler. - - Improve string concatenation (as coded in JS as a sequence of adds). - - Detect patterns corresponding to string concatenation, and change the bytecode - generation to emit a new op_strcat instruction. By handling the full set of - additions within a single function we do not need allocate JSString wrappers - for intermediate results, and we can calculate the size of the output string - prior to allocating storage, in order to prevent reallocation of the buffer. - - 1.5%-2% progression on Sunspider, largely due to a 30% progression on date-format-xparb. - - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - Add new opcodes. - * bytecode/Opcode.h: - Add new opcodes. - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitStrcat): - (JSC::BytecodeGenerator::emitToPrimitive): - Add generation of new opcodes. - * bytecompiler/BytecodeGenerator.h: - Add generation of new opcodes. - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - Add implmentation of new opcodes. - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - (JSC::JIT::privateCompileSlowCases): - Add implmentation of new opcodes. - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_to_primitive): - (JSC::JITStubs::cti_op_strcat): - Add implmentation of new opcodes. - * jit/JITStubs.h: - Add implmentation of new opcodes. - * parser/Nodes.cpp: - (JSC::BinaryOpNode::emitStrcat): - (JSC::BinaryOpNode::emitBytecode): - (JSC::ReadModifyResolveNode::emitBytecode): - Add generation of new opcodes. - * parser/Nodes.h: - (JSC::ExpressionNode::): - (JSC::AddNode::): - Add methods to allow identification of add nodes. - * parser/ResultType.h: - (JSC::ResultType::definitelyIsString): - (JSC::ResultType::forAdd): - Fix error in detection of adds that will produce string results. - * runtime/Operations.h: - (JSC::concatenateStrings): - Add implmentation of new opcodes. - * runtime/UString.cpp: - (JSC::UString::appendNumeric): - Add methods to append numbers to an existing string. - * runtime/UString.h: - (JSC::UString::Rep::createEmptyBuffer): - (JSC::UString::BaseString::BaseString): - Add support for creating an empty string with a non-zero capacity available in the BaseString. - -2009-05-06 Darin Adler <darin@apple.com> - - Reviewed by Sam Weinig. - - Made RefCounted::m_refCount private. - - * runtime/Structure.h: Removed addressOfCount. - * wtf/RefCounted.h: Made m_refCount private. - Added addressOfCount. - -2009-05-06 Darin Adler <darin@apple.com> - - Fixed assertion seen a lot! - - * parser/Nodes.cpp: - (JSC::FunctionBodyNode::~FunctionBodyNode): Removed now-bogus assertion. - -2009-05-06 Darin Adler <darin@apple.com> - - Working with Sam Weinig. - - Redo parse tree constructor optimization without breaking the Windows - build the way I did yesterday. The previous try broke the build by adding - an include of Lexer.h and all its dependencies that had to work outside - the JavaScriptCore project. - - * GNUmakefile.am: Added NodeConstructors.h. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Ditto. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: - Removed byteocde directory -- we no longer are trying to include Lexer.h - outside JavaScriptCore. - - * JavaScriptCore.xcodeproj/project.pbxproj: Change SegmentedVector.h - and Lexer.h back to internal files. Added NodeConstructors.h. - - * parser/Grammar.y: Added include of NodeConstructors.h. - Changed use of ConstDeclNode to use public functions. - - * parser/NodeConstructors.h: Copied from parser/Nodes.h. - Just contains the inlined constructors now. - - * parser/Nodes.cpp: Added include of NodeConstructors.h. - Moved node constructors into the header. - (JSC::FunctionBodyNode::FunctionBodyNode): Removed m_refCount - initialization. - - * parser/Nodes.h: Removed all the constructor definitions, and also - removed the JSC_FAST_CALL from them since these are all inlined, so the - calling convention is irrelevant. Made more things private. Used a data - member for operator opcodes instead of a virtual function. Removed the - special FunctionBodyNode::ref/deref functions since the default functions - are now just as fast. - - * runtime/FunctionConstructor.cpp: - (JSC::extractFunctionBody): Fixed types here so we don't typecast until - after we do type checking. - -2009-05-06 Simon Hausmann <simon.hausmann@nokia.com> - - Reviewed by Ariya Hidayat. - - Fix the Qt build on Windows. - - * JavaScriptCore.pri: Define BUILDING_JavaScriptCore/WTF to get the meaning - of the JS_EXPORTDATA macros correct - -2009-05-06 Simon Hausmann <simon.hausmann@nokia.com> - - Reviewed by Ariya Hidayat. - - Enable the JIT for the Qt build on Windows. - - * JavaScriptCore.pri: - -2009-05-06 Simon Hausmann <simon.hausmann@nokia.com> - - Reviewed by Tor Arne Vestbø. - - Tweak JavaScriptCore.pri for being able to override the generated sources dir for the - generated_files target. - - * JavaScriptCore.pri: - -2009-05-06 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> - - Reviewed by Simon Hausmann. - - Build QtWebKit as a framework on Mac - - This implies both debug and release build by default, unless - one of the --debug or --release config options are passed to - the build-webkit script. - - Frameworks can be disabled by passing CONFIG+=webkit_no_framework - to the build-webkit script. - - To be able to build both debug and release targets in parallel - we have to use separate output directories for the generated - sources, which is not optimal, but required to avoid race conditions. - - An optimization would be to only require this spit-up on Mac. - - * JavaScriptCore.pri: - * JavaScriptCore.pro: - * jsc.pro: - -2009-05-06 Tor Arne Vestbø <tor.arne.vestbo@nokia.com> - - Reviewed by Simon Hausmann. - - [Qt] Use $$GENERATED_SOURCES_DIR as output when running bison - - A couple of the generators left the bison output file in the source - tree, and then moved it into $$GENERATED_SOURCES_DIR, which did not - work well when building release and debug configurations in parallel. - - * JavaScriptCore.pri: - -2009-05-05 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Maciej Stachowiak. - - Simplified a bit of codegen. - - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - -2009-05-05 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Cameron Zwarich. - - Moved all the JIT stub related code into one place. - - * jit/JIT.cpp: - * jit/JIT.h: - * jit/JITCode.h: - * jit/JITStubs.cpp: - (JSC::): * jit/JITStubs.h: + * wtf/Platform.h: + * yarr/RegexJIT.cpp: + (JSC::Yarr::RegexGenerator::generateEnter): + (JSC::Yarr::RegexGenerator::generateReturn): -2009-05-05 Sam Weinig <sam@webkit.org> - - Try to fix Windows build. - - Move Node constructor to the .cpp file. - - * parser/Nodes.cpp: - * parser/Nodes.h: - -2009-05-05 Darin Adler <darin@apple.com> - - Try to fix Windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - - Try to fix Mac build. - - * JavaScriptCore.xcodeproj/project.pbxproj: Made SegmentedVector.h private. - -2009-05-05 Darin Adler <darin@apple.com> - - Try to fix Mac build. - - * JavaScriptCore.xcodeproj/project.pbxproj: Made Lexer.h private. - -2009-05-05 Darin Adler <darin@apple.com> - - Reviewed by Sam Weinig. - - Bug 25569: make ParserRefCounted use conventional reference counting - https://bugs.webkit.org/show_bug.cgi?id=25569 - - SunSpider speedup of about 1.6%. - - * JavaScriptCore.exp: Updated. - - * parser/Nodes.cpp: - (JSC::NodeReleaser::releaseAllNodes): ALWAYS_INLINE. - (JSC::NodeReleaser::adopt): Ditto. - (JSC::ParserRefCounted::ParserRefCounted): Removed most of the code. - Add the object to a Vector<RefPtr> that gets cleared after parsing. - (JSC::ParserRefCounted::~ParserRefCounted): Removed most of the code. - - * parser/Nodes.h: Made ParserRefCounted inherit from RefCounted and - made inline versions of the constructor and destructor. Made the - Node constructor inline. - - * parser/Parser.cpp: - (JSC::Parser::parse): Call globalData->parserObjects.shrink(0) after - parsing, where it used to call ParserRefCounted::deleteNewObjects. - - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): Eliminated code to manage the - newParserObjects and parserObjectExtraRefCounts. - (JSC::JSGlobalData::~JSGlobalData): Ditto. - - * runtime/JSGlobalData.h: Replaced the HashSet and HashCountedSet - with a Vector. - - * wtf/PassRefPtr.h: - (WTF::PassRefPtr::~PassRefPtr): The most common thing to do with a - PassRefPtr in hot code is to pass it and then destroy it once it's - set to zero. Help the optimizer by telling it that's true. - -2009-05-05 Xan Lopez <xlopez@igalia.com> and Gustavo Noronha Silva <gustavo.noronha@collabora.co.uk> +2009-06-19 Gavin Barraclough <barraclough@apple.com> Reviewed by Oliver Hunt. - Disable the NativeFunctionWrapper for all non-Mac ports for now, - as it is also crashing on Linux/x86. - - * runtime/NativeFunctionWrapper.h: + Fix armv7 JIT build issues. -2009-05-05 Steve Falkenburg <sfalken@apple.com> + Unfortunate the arm compiler does not like the use of offsetof on JITStackFrame (since it now contains non POD types), + and the FIELD_OFFSET macro does not appear constantish enough for it to be happy with its use in COMPILE_ASSERT macros. - Fix build. + * Replace offsetofs with FIELD_OFFSETs (safe on C++ objects). + * Move COMPILE_ASSERTs defending layout of JITStackFrame structure on armv7 into JITThunks constructor. - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-05 Oliver Hunt <oliver@apple.com> - - Reviewed by Maciej Stachowiak. - - Expose toThisObject for the DOM Window - - * JavaScriptCore.exp: - -2009-05-05 Oliver Hunt <oliver@apple.com> - - Reviewed by NOBODY (Make windows go again until i work out the - accursed calling convention). - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: * jit/JIT.cpp: - * runtime/NativeFunctionWrapper.h: - -2009-05-05 Oliver Hunt <oliver@apple.com> - - Reviewed by NOBODY (Fix windows debug builds). - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-05 Oliver Hunt <oliver@apple.com> - - Reviewed by NOBODY (Hopefully the last fix). - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - -2009-05-05 Oliver Hunt <oliver@apple.com> - - Reviewed by NOBODY (Fix the build fix caused by a different build fix). - - * parser/Nodes.cpp: - * parser/Nodes.h: - -2009-05-05 Oliver Hunt <oliver@apple.com> - - Reviewed by NOBODY (No idea how my changes could have broken these). - - * runtime/DatePrototype.cpp: - * runtime/RegExpObject.cpp: - -2009-05-05 Oliver Hunt <oliver@apple.com> - - Reviewed by NOBODY (Why should i expect msvc to list all the errors in a file?). - - * parser/Nodes.cpp: - -2009-05-05 Oliver Hunt <oliver@apple.com> - - Reviewed by NOBODY (Fix warning, and another missing include). - - * jit/JIT.cpp: - * parser/Nodes.h: - -2009-05-05 Oliver Hunt <oliver@apple.com> - - Reviewed by NOBODY (More build fixes). - - * runtime/ErrorPrototype.cpp: - * runtime/JSGlobalObject.cpp: - * runtime/NumberPrototype.cpp: - * runtime/ObjectPrototype.cpp: - * runtime/StringConstructor.cpp: - -2009-05-05 Oliver Hunt <oliver@apple.com> - - Reviewed by NOBODY (Will the fixes never end?). - - * runtime/FunctionPrototype.h: - * runtime/Lookup.cpp: - -2009-05-05 Oliver Hunt <oliver@apple.com> - - Reviewed by NOBODY (More build fixes). - - * jit/JIT.cpp: - -2009-05-05 Oliver Hunt <oliver@apple.com> - - Reviewed by NOBODY (More build fixing). - - * runtime/CallData.h: - -2009-05-05 Oliver Hunt <oliver@apple.com> - - Reviewed by NOBODY (Build fix). - - * runtime/ArrayConstructor.cpp: - * runtime/BooleanPrototype.cpp: - * runtime/DateConstructor.cpp: - * runtime/Error.cpp: - * runtime/ObjectConstructor.cpp: - * runtime/RegExpPrototype.cpp: - -2009-05-05 Oliver Hunt <oliver@apple.com> - - Reviewed by NOBODY (Buildfix). - - Add missing file - - * runtime/NativeFunctionWrapper.h: Copied from JavaScriptCore/jit/ExecutableAllocator.cpp. - -2009-05-05 Oliver Hunt <oliver@apple.com> - - Reviewed by Gavin Barraclough. - - Bug 25559: Improve native function call performance - <https://bugs.webkit.org/show_bug.cgi?id=25559> - - In order to cache calls to native functions we now make the standard - prototype functions use a small assembly thunk that converts the JS - calling convention into the native calling convention. As this is - only beneficial in the JIT we use the NativeFunctionWrapper typedef - to alternate between PrototypeFunction and JSFunction to keep the - code sane. This change from PrototypeFunction to NativeFunctionWrapper - is the bulk of this patch. - - * JavaScriptCore.exp: - * JavaScriptCore.xcodeproj/project.pbxproj: - * assembler/MacroAssemblerX86Common.h: - (JSC::MacroAssemblerX86Common::call): - * assembler/MacroAssemblerX86_64.h: - (JSC::MacroAssemblerX86_64::addPtr): - * assembler/X86Assembler.h: - (JSC::X86Assembler::leaq_mr): - (JSC::X86Assembler::call_m): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::execute): - (JSC::Interpreter::prepareForRepeatCall): - * jit/JIT.cpp: - (JSC::JIT::privateCompileCTIMachineTrampolines): * jit/JIT.h: - (JSC::JIT::compileCTIMachineTrampolines): - * jit/JITCall.cpp: - (JSC::JIT::linkCall): - (JSC::JIT::compileOpCallInitializeCallFrame): - (JSC::JIT::compileOpCall): - * jit/JITCode.h: - (JSC::JITCode::operator bool): * jit/JITInlineMethods.h: - (JSC::JIT::emitGetFromCallFrameHeader): - (JSC::JIT::emitGetFromCallFrameHeader32): - * jit/JITStubs.cpp: - (JSC::JITStubs::JITStubs): - (JSC::JITStubs::cti_op_call_JSFunction): - (JSC::JITStubs::cti_vm_dontLazyLinkCall): - (JSC::JITStubs::cti_vm_lazyLinkCall): - (JSC::JITStubs::cti_op_construct_JSConstruct): - * jit/JITStubs.h: - (JSC::JITStubs::ctiNativeCallThunk): - * jsc.cpp: - (GlobalObject::GlobalObject): - * parser/Nodes.cpp: - (JSC::FunctionBodyNode::FunctionBodyNode): - (JSC::FunctionBodyNode::createNativeThunk): - (JSC::FunctionBodyNode::generateJITCode): - * parser/Nodes.h: - (JSC::FunctionBodyNode::): - (JSC::FunctionBodyNode::generatedJITCode): - (JSC::FunctionBodyNode::jitCode): - * profiler/Profiler.cpp: - (JSC::Profiler::createCallIdentifier): - * runtime/ArgList.h: - * runtime/ArrayPrototype.cpp: - (JSC::isNumericCompareFunction): - * runtime/BooleanPrototype.cpp: - (JSC::BooleanPrototype::BooleanPrototype): - * runtime/DateConstructor.cpp: - (JSC::DateConstructor::DateConstructor): - * runtime/ErrorPrototype.cpp: - (JSC::ErrorPrototype::ErrorPrototype): - * runtime/FunctionPrototype.cpp: - (JSC::FunctionPrototype::addFunctionProperties): - (JSC::functionProtoFuncToString): - * runtime/FunctionPrototype.h: - * runtime/JSFunction.cpp: - (JSC::JSFunction::JSFunction): - (JSC::JSFunction::~JSFunction): - (JSC::JSFunction::mark): - (JSC::JSFunction::getCallData): - (JSC::JSFunction::call): - (JSC::JSFunction::argumentsGetter): - (JSC::JSFunction::callerGetter): - (JSC::JSFunction::lengthGetter): - (JSC::JSFunction::getOwnPropertySlot): - (JSC::JSFunction::put): - (JSC::JSFunction::deleteProperty): - (JSC::JSFunction::getConstructData): - (JSC::JSFunction::construct): - * runtime/JSFunction.h: - (JSC::JSFunction::JSFunction): - (JSC::JSFunction::setScope): - (JSC::JSFunction::scope): - (JSC::JSFunction::isHostFunction): - (JSC::JSFunction::scopeChain): - (JSC::JSFunction::clearScopeChain): - (JSC::JSFunction::setScopeChain): - (JSC::JSFunction::nativeFunction): - (JSC::JSFunction::setNativeFunction): - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::~JSGlobalData): - (JSC::JSGlobalData::createNativeThunk): - * runtime/JSGlobalData.h: - (JSC::JSGlobalData::nativeFunctionThunk): - * runtime/JSGlobalObject.cpp: - (JSC::JSGlobalObject::reset): - * runtime/JSGlobalObject.h: - * runtime/Lookup.cpp: - (JSC::setUpStaticFunctionSlot): - * runtime/Lookup.h: - * runtime/NumberPrototype.cpp: - (JSC::NumberPrototype::NumberPrototype): - * runtime/ObjectPrototype.cpp: - (JSC::ObjectPrototype::ObjectPrototype): - * runtime/RegExpPrototype.cpp: - (JSC::RegExpPrototype::RegExpPrototype): - * runtime/StringConstructor.cpp: - (JSC::StringConstructor::StringConstructor): - -2009-05-05 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Oliver Hunt. - - For convenience, let the sampling flags tool clear multiple flags at once. - - * jsc.cpp: - (GlobalObject::GlobalObject): - (functionSetSamplingFlags): - (functionClearSamplingFlags): - -2009-05-04 Maciej Stachowiak <mjs@apple.com> - - Rubber stamped by Gavin. - - - inline Vector::resize for a ~1.5% speedup on string-tagcloud - - * wtf/Vector.h: - (WTF::Vector::resize): Inline - -2009-05-03 Steve Falkenburg <sfalken@apple.com> - - Windows build fix. - - * JavaScriptCore.vcproj/JavaScriptCoreSubmit.sln: - -2009-05-03 Mark Rowe <mrowe@apple.com> - - Fix the 64-bit build. - - * API/APICast.h: - (toJS): - (toRef): - * runtime/JSNumberCell.cpp: - (JSC::jsAPIMangledNumber): - * runtime/JSNumberCell.h: - -2009-05-02 Sam Weinig <sam@webkit.org> - - Roll JSC API number marshaling back in one last time (I hope). - -2009-05-03 Sam Weinig <sam@webkit.org> - - Roll JSC API number marshaling back out. It still breaks windows. - -2009-05-03 Sam Weinig <sam@webkit.org> - - Roll JSC API number marshaling back in. - -2009-05-02 Darin Adler <darin@apple.com> - - Reviewed by Maciej Stachowiak. - - Bug 25519: streamline lexer by handling BOMs differently - https://bugs.webkit.org/show_bug.cgi?id=25519 - - Roughly 1% faster SunSpider. - - * parser/Grammar.y: Tweak formatting a bit. - - * parser/Lexer.cpp: - (JSC::Lexer::Lexer): Remove unnnecessary initialization of data members - that are set up by setCode. - (JSC::Lexer::currentOffset): Added. Used where the old code would look at - m_currentOffset. - (JSC::Lexer::shift1): Replaces the old shift function. No longer does anything - to handle BOM characters. - (JSC::Lexer::shift2): Ditto. - (JSC::Lexer::shift3): Ditto. - (JSC::Lexer::shift4): Ditto. - (JSC::Lexer::setCode): Updated for name change from yylineno to m_line. - Removed now-unused m_eatNextIdentifier, m_stackToken, and m_restrKeyword. - Replaced m_skipLF and m_skipCR with m_skipLineEnd. Replaced the old - m_length with m_codeEnd and m_currentOffset with m_codeStart. Added code - to scan for a BOM character and call copyCodeWithoutBOMs() if we find any. - (JSC::Lexer::copyCodeWithoutBOMs): Added. - (JSC::Lexer::nextLine): Updated for name change from yylineno to m_line. - (JSC::Lexer::makeIdentifier): Moved up higher in the file. - (JSC::Lexer::matchPunctuator): Moved up higher in the file and changed to - use a switch statement instead of just if statements. - (JSC::Lexer::isLineTerminator): Moved up higher in the file and changed to - have fewer branches. - (JSC::Lexer::lastTokenWasRestrKeyword): Added. This replaces the old - m_restrKeyword boolean. - (JSC::Lexer::isIdentStart): Moved up higher in the file. Changed to use - fewer branches in the ASCII but not identifier case. - (JSC::Lexer::isIdentPart): Ditto. - (JSC::Lexer::singleEscape): Moved up higher in the file. - (JSC::Lexer::convertOctal): Moved up higher in the file. - (JSC::Lexer::convertHex): Moved up higher in the file. Changed to use - toASCIIHexValue instead of rolling our own here. - (JSC::Lexer::convertUnicode): Ditto. - (JSC::Lexer::record8): Moved up higher in the file. - (JSC::Lexer::record16): Moved up higher in the file. - (JSC::Lexer::lex): Changed type of stringType to int. Replaced m_skipLF - and m_skipCR with m_skipLineEnd, which requires fewer branches in the - main lexer loop. Use currentOffset instead of m_currentOffset. Removed - unneeded m_stackToken. Use isASCIIDigit instead of isDecimalDigit. - Split out the two cases for InIdentifierOrKeyword and InIdentifier. - Added special case tight loops for identifiers and other simple states. - Removed a branch from the code that sets m_atLineStart to false using goto. - Streamlined the number-handling code so we don't check for the same types - twice for non-numeric cases and don't add a null to m_buffer8 when it's - not being used. Removed m_eatNextIdentifier, which wasn't working anyway, - and m_restrKeyword, which is redundant with m_lastToken. Set the - m_delimited flag without using a branch. - (JSC::Lexer::scanRegExp): Tweaked style a bit. - (JSC::Lexer::clear): Clear m_codeWithoutBOMs so we don't use memory after - parsing. Clear out UString objects in the more conventional way. - (JSC::Lexer::sourceCode): Made this no-longer inline since it has more - work to do in the case where we stripped BOMs. - - * parser/Lexer.h: Renamed yylineno to m_lineNumber. Removed convertHex - function, which is the same as toASCIIHexValue. Removed isHexDigit - function, which is the same as isASCIIHedDigit. Replaced shift with four - separate shift functions. Removed isWhiteSpace function that passes - m_current, instead just passing m_current explicitly. Removed isOctalDigit, - which is the same as isASCIIOctalDigit. Eliminated unused arguments from - matchPunctuator. Added copyCoodeWithoutBOMs and currentOffset. Moved the - makeIdentifier function out of the header. Added lastTokenWasRestrKeyword - function. Added new constants for m_skipLineEnd. Removed unused yycolumn, - m_restrKeyword, m_skipLF, m_skipCR, m_eatNextIdentifier, m_stackToken, - m_position, m_length, m_currentOffset, m_nextOffset1, m_nextOffset2, - m_nextOffset3. Added m_skipLineEnd, m_codeStart, m_codeEnd, and - m_codeWithoutBOMs. - - * parser/SourceProvider.h: Added hasBOMs function. In the future this can - be used to tell the lexer about strings known not to have BOMs. - - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncUnescape): Changed to use isASCIIHexDigit. - - * wtf/ASCIICType.h: Added using statements to match the design of the - other WTF headers. - -2009-05-02 Ada Chan <adachan@apple.com> - - Fix windows build (when doing a clean build) - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-02 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Sam Weinig. - - Simplified null-ish JSValues. - - Replaced calls to noValue() with calls to JSValue() (which is what - noValue() returned). Removed noValue(). - - Replaced almost all uses of jsImpossibleValue() with uses of JSValue(). - Its one remaining use is for construction of hash table deleted values. - For that specific task, I made a new, private constructor with a special - tag. Removed jsImpossibleValue(). - - Removed "JSValue()" initialiazers, since default construction happens... - by default. - - * API/JSCallbackObjectFunctions.h: - (JSC::::call): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitLoad): - * bytecompiler/BytecodeGenerator.h: - * debugger/DebuggerCallFrame.cpp: - (JSC::DebuggerCallFrame::evaluate): - * debugger/DebuggerCallFrame.h: - (JSC::DebuggerCallFrame::DebuggerCallFrame): - * interpreter/CallFrame.h: - (JSC::ExecState::clearException): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::retrieveLastCaller): - * interpreter/Register.h: - (JSC::Register::Register): - * jit/JITCall.cpp: - (JSC::JIT::unlinkCall): - (JSC::JIT::compileOpCallInitializeCallFrame): - (JSC::JIT::compileOpCall): + (JSC::JIT::restoreArgumentReference): + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_catch): * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_call_eval): - (JSC::JITStubs::cti_vm_throw): - * profiler/Profiler.cpp: - (JSC::Profiler::willExecute): - (JSC::Profiler::didExecute): - * runtime/ArrayPrototype.cpp: - (JSC::getProperty): - * runtime/Completion.cpp: - (JSC::evaluate): - * runtime/Completion.h: - (JSC::Completion::Completion): - * runtime/GetterSetter.cpp: - (JSC::GetterSetter::getPrimitiveNumber): - * runtime/JSArray.cpp: - (JSC::JSArray::putSlowCase): - (JSC::JSArray::deleteProperty): - (JSC::JSArray::increaseVectorLength): - (JSC::JSArray::setLength): - (JSC::JSArray::pop): - (JSC::JSArray::sort): - (JSC::JSArray::compactForSorting): - * runtime/JSCell.cpp: - (JSC::JSCell::getJSNumber): - * runtime/JSCell.h: - (JSC::JSValue::getJSNumber): - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - * runtime/JSImmediate.h: - (JSC::JSImmediate::fromNumberOutsideIntegerRange): - (JSC::JSImmediate::from): - * runtime/JSNumberCell.cpp: - (JSC::jsNumberCell): - * runtime/JSObject.cpp: - (JSC::callDefaultValueFunction): - * runtime/JSObject.h: - (JSC::JSObject::getDirect): - * runtime/JSPropertyNameIterator.cpp: - (JSC::JSPropertyNameIterator::toPrimitive): - * runtime/JSPropertyNameIterator.h: - (JSC::JSPropertyNameIterator::next): - * runtime/JSValue.h: - (JSC::JSValue::): - (JSC::JSValueHashTraits::constructDeletedValue): - (JSC::JSValueHashTraits::isDeletedValue): - (JSC::JSValue::JSValue): - * runtime/JSWrapperObject.h: - (JSC::JSWrapperObject::JSWrapperObject): - * runtime/Operations.h: - (JSC::resolveBase): - * runtime/PropertySlot.h: - (JSC::PropertySlot::clearBase): - (JSC::PropertySlot::clearValue): - -2009-05-02 Maciej Stachowiak <mjs@apple.com> - - Reviewed by Cameron Zwarich. - - - speed up the lexer in various ways - - ~2% command-line SunSpider speedup - - * parser/Lexer.cpp: - (JSC::Lexer::setCode): Moved below shift() so it can inline. - (JSC::Lexer::scanRegExp): Use resize(0) instead of clear() on Vectors, since the intent - here is not to free the underlying buffer. - (JSC::Lexer::lex): ditto; also, change the loop logic a bit for the main lexing loop - to avoid branching on !m_done twice per iteration. Now we only check it once. - (JSC::Lexer::shift): Make this ALWAYS_INLINE and tag an unusual branch as UNLIKELY - * parser/Lexer.h: - (JSC::Lexer::makeIdentifier): force to be ALWAYS_INLINE - * wtf/Vector.h: - (WTF::::append): force to be ALWAYS_INLINE (may have helped in ways other than parsing but it wasn't - getting inlined in a hot code path in the lexer) - -2009-05-01 Steve Falkenburg <sfalken@apple.com> - - Windows build fix. - - * JavaScriptCore.vcproj/JavaScriptCore.make: - -2009-05-01 Sam Weinig <sam@webkit.org> - - Fix 64bit build. - - * runtime/JSNumberCell.h: - (JSC::JSValue::JSValue): - * runtime/JSValue.h: - (JSC::jsNumber): - -2009-05-01 Sam Weinig <sam@webkit.org> - - Roll out JavaScriptCore API number marshaling. - - * API/APICast.h: - (toJS): - (toRef): - * API/JSBase.cpp: - (JSEvaluateScript): - (JSCheckScriptSyntax): - * API/JSCallbackConstructor.cpp: - (JSC::constructJSCallback): - * API/JSCallbackFunction.cpp: - (JSC::JSCallbackFunction::call): - * API/JSCallbackObjectFunctions.h: - (JSC::::getOwnPropertySlot): - (JSC::::put): - (JSC::::deleteProperty): - (JSC::::construct): - (JSC::::hasInstance): - (JSC::::call): - (JSC::::toNumber): - (JSC::::toString): - (JSC::::staticValueGetter): - (JSC::::callbackGetter): - * API/JSObjectRef.cpp: - (JSObjectMakeFunction): - (JSObjectMakeArray): - (JSObjectMakeDate): - (JSObjectMakeError): - (JSObjectMakeRegExp): - (JSObjectGetPrototype): - (JSObjectSetPrototype): - (JSObjectGetProperty): - (JSObjectSetProperty): - (JSObjectGetPropertyAtIndex): - (JSObjectSetPropertyAtIndex): - (JSObjectDeleteProperty): - (JSObjectCallAsFunction): - (JSObjectCallAsConstructor): - * API/JSValueRef.cpp: - (JSValueGetType): - (JSValueIsUndefined): - (JSValueIsNull): - (JSValueIsBoolean): - (JSValueIsNumber): - (JSValueIsString): - (JSValueIsObject): - (JSValueIsObjectOfClass): - (JSValueIsEqual): - (JSValueIsStrictEqual): - (JSValueIsInstanceOfConstructor): - (JSValueMakeUndefined): - (JSValueMakeNull): - (JSValueMakeBoolean): - (JSValueMakeNumber): - (JSValueMakeString): - (JSValueToBoolean): - (JSValueToNumber): - (JSValueToStringCopy): - (JSValueToObject): - (JSValueProtect): - (JSValueUnprotect): - * JavaScriptCore.exp: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - * runtime/JSNumberCell.cpp: - * runtime/JSNumberCell.h: - * runtime/JSValue.h: - -2009-05-01 Sam Weinig <sam@webkit.org> - - Fix windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-01 Sam Weinig <sam@webkit.org> - - Fix the build. - - * JavaScriptCore.exp: - -2009-05-01 Sam Weinig <sam@webkit.org> - - Reviewed by Geoffrey "Too Far!" Garen. - - Move JS number construction into JSValue. - - * runtime/JSImmediate.h: - * runtime/JSNumberCell.h: - (JSC::JSValue::JSValue): - * runtime/JSValue.h: - (JSC::jsNumber): - -2009-05-01 Sam Weinig <sam@webkit.org> - - Reviewed by Geoff "The Minneapolis" Garen. - - Add mechanism to vend heap allocated JS numbers to JavaScriptCore API clients with a - representation that is independent of the number representation in the VM. - - Numbers leaving the interpreter are converted to a tagged JSNumberCell. - - The numbers coming into the interpreter (asserted to be the tagged JSNumberCell) are - converted back to the VM's internal number representation. - - * API/APICast.h: - (toJS): - (toRef): - * API/JSBase.cpp: - (JSEvaluateScript): - (JSCheckScriptSyntax): - * API/JSCallbackConstructor.cpp: - (JSC::constructJSCallback): - * API/JSCallbackFunction.cpp: - (JSC::JSCallbackFunction::call): - * API/JSCallbackObjectFunctions.h: - (JSC::::getOwnPropertySlot): - (JSC::::put): - (JSC::::deleteProperty): - (JSC::::construct): - (JSC::::hasInstance): - (JSC::::call): - (JSC::::toNumber): - (JSC::::toString): - (JSC::::staticValueGetter): - (JSC::::callbackGetter): - * API/JSObjectRef.cpp: - (JSObjectMakeFunction): - (JSObjectMakeArray): - (JSObjectMakeDate): - (JSObjectMakeError): - (JSObjectMakeRegExp): - (JSObjectGetPrototype): - (JSObjectSetPrototype): - (JSObjectGetProperty): - (JSObjectSetProperty): - (JSObjectGetPropertyAtIndex): - (JSObjectSetPropertyAtIndex): - (JSObjectDeleteProperty): - (JSObjectCallAsFunction): - (JSObjectCallAsConstructor): - * API/JSValueRef.cpp: - (JSValueGetType): - (JSValueIsUndefined): - (JSValueIsNull): - (JSValueIsBoolean): - (JSValueIsNumber): - (JSValueIsString): - (JSValueIsObject): - (JSValueIsObjectOfClass): - (JSValueIsEqual): - (JSValueIsStrictEqual): - (JSValueIsInstanceOfConstructor): - (JSValueMakeUndefined): - (JSValueMakeNull): - (JSValueMakeBoolean): - (JSValueMakeNumber): - (JSValueMakeString): - (JSValueToBoolean): - (JSValueToNumber): - (JSValueToStringCopy): - (JSValueToObject): - (JSValueProtect): - (JSValueUnprotect): - * runtime/JSNumberCell.cpp: - (JSC::jsAPIMangledNumber): - * runtime/JSNumberCell.h: - (JSC::JSNumberCell::isAPIMangledNumber): - (JSC::JSNumberCell::): - (JSC::JSNumberCell::JSNumberCell): - (JSC::JSValue::isAPIMangledNumber): - * runtime/JSValue.h: - -2009-05-01 Geoffrey Garen <ggaren@apple.com> - - Windows build fix take 6. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - -2009-05-01 Geoffrey Garen <ggaren@apple.com> - - Windows build fix take 5. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-01 Geoffrey Garen <ggaren@apple.com> - - Windows build fix take 4. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-01 Geoffrey Garen <ggaren@apple.com> - - Windows build fix take 3. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-05-01 Geoffrey Garen <ggaren@apple.com> - - Windows build fix take 2. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: + (JSC::JITThunks::JITThunks): -2009-05-01 Geoffrey Garen <ggaren@apple.com> +2009-06-19 Adam Treat <adam.treat@torchmobile.com> - Windows build fix take 1. + Blind attempt at build fix. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: -2009-05-01 Geoffrey Garen <ggaren@apple.com> - - Rubber Stamped by Sam Weinig. - - Renamed JSValuePtr => JSValue. - - * API/APICast.h: - (toJS): - (toRef): - * 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::addConstant): - (JSC::BytecodeGenerator::addUnexpectedConstant): - (JSC::BytecodeGenerator::emitLoad): - (JSC::BytecodeGenerator::emitGetScopedVar): - (JSC::BytecodeGenerator::emitPutScopedVar): - (JSC::BytecodeGenerator::emitNewError): - (JSC::keyForImmediateSwitch): - * bytecompiler/BytecodeGenerator.h: - (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): - (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): - * debugger/Debugger.cpp: - (JSC::evaluateInGlobalCallFrame): - * debugger/Debugger.h: - * debugger/DebuggerActivation.cpp: - (JSC::DebuggerActivation::put): - (JSC::DebuggerActivation::putWithAttributes): - (JSC::DebuggerActivation::lookupGetter): - (JSC::DebuggerActivation::lookupSetter): - * debugger/DebuggerActivation.h: - (JSC::DebuggerActivation::createStructure): - * debugger/DebuggerCallFrame.cpp: - (JSC::DebuggerCallFrame::evaluate): - * debugger/DebuggerCallFrame.h: - (JSC::DebuggerCallFrame::DebuggerCallFrame): - (JSC::DebuggerCallFrame::exception): - * interpreter/CachedCall.h: - (JSC::CachedCall::CachedCall): - (JSC::CachedCall::call): - (JSC::CachedCall::setThis): - (JSC::CachedCall::setArgument): - * interpreter/CallFrame.cpp: - (JSC::CallFrame::thisValue): - (JSC::CallFrame::dumpCaller): - * interpreter/CallFrame.h: - (JSC::ExecState::setException): - (JSC::ExecState::exception): - (JSC::ExecState::exceptionSlot): - * interpreter/CallFrameClosure.h: - (JSC::CallFrameClosure::setArgument): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::resolve): - (JSC::Interpreter::resolveSkip): - (JSC::Interpreter::resolveGlobal): - (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::prepareForRepeatCall): - (JSC::Interpreter::createExceptionScope): - (JSC::Interpreter::tryCachePutByID): - (JSC::Interpreter::tryCacheGetByID): - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::retrieveArguments): - (JSC::Interpreter::retrieveCaller): - (JSC::Interpreter::retrieveLastCaller): - * interpreter/Interpreter.h: - * interpreter/Register.h: - (JSC::Register::): - (JSC::Register::Register): - (JSC::Register::jsValue): - * jit/JIT.cpp: - (JSC::): - (JSC::JIT::privateCompileMainPass): - * jit/JIT.h: - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_mod): - * jit/JITCall.cpp: - (JSC::JIT::unlinkCall): - (JSC::JIT::compileOpCallInitializeCallFrame): - (JSC::JIT::compileOpCall): - * jit/JITCode.h: - (JSC::): - (JSC::JITCode::execute): - * jit/JITInlineMethods.h: - (JSC::JIT::emitGetVirtualRegister): - (JSC::JIT::getConstantOperand): - (JSC::JIT::emitPutJITStubArgFromVirtualRegister): - (JSC::JIT::emitInitRegister): - * jit/JITPropertyAccess.cpp: - (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): - * jit/JITStubs.cpp: - (JSC::JITStubs::tryCachePutByID): - (JSC::JITStubs::tryCacheGetByID): - (JSC::JITStubs::cti_op_convert_this): - (JSC::JITStubs::cti_op_add): - (JSC::JITStubs::cti_op_pre_inc): - (JSC::JITStubs::cti_op_loop_if_less): - (JSC::JITStubs::cti_op_loop_if_lesseq): - (JSC::JITStubs::cti_op_get_by_id_generic): - (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_call_NotJSFunction): - (JSC::JITStubs::cti_op_resolve): - (JSC::JITStubs::cti_op_construct_NotJSConstruct): - (JSC::JITStubs::cti_op_get_by_val): - (JSC::JITStubs::cti_op_get_by_val_string): - (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_load_varargs): - (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_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_bitor): - (JSC::JITStubs::cti_op_call_eval): - (JSC::JITStubs::cti_op_throw): - (JSC::JITStubs::cti_op_next_pname): - (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_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_new_error): - (JSC::JITStubs::cti_vm_throw): - * jit/JITStubs.h: - * jsc.cpp: - (functionPrint): - (functionDebug): - (functionGC): - (functionVersion): - (functionRun): - (functionLoad): - (functionSetSamplingFlag): - (functionClearSamplingFlag): - (functionReadline): - (functionQuit): - * parser/Nodes.cpp: - (JSC::processClauseList): - * 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::MarkedArgumentBuffer::slowAppend): - * runtime/ArgList.h: - (JSC::MarkedArgumentBuffer::at): - (JSC::MarkedArgumentBuffer::append): - (JSC::ArgList::ArgList): - (JSC::ArgList::at): - * 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::arrayProtoFuncReduce): - (JSC::arrayProtoFuncReduceRight): - (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): - * runtime/Collector.h: - * runtime/Completion.cpp: - (JSC::evaluate): - * runtime/Completion.h: - (JSC::Completion::Completion): - (JSC::Completion::value): - (JSC::Completion::setValue): - * 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::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/InternalFunction.cpp: - (JSC::InternalFunction::displayName): - * 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::setLength): - (JSC::JSArray::pop): - (JSC::JSArray::push): - (JSC::JSArray::mark): - (JSC::compareNumbersForQSort): - (JSC::JSArray::sortNumeric): - (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): - (JSC::isJSArray): - * runtime/JSByteArray.cpp: - (JSC::JSByteArray::createStructure): - (JSC::JSByteArray::put): - * runtime/JSByteArray.h: - (JSC::JSByteArray::getIndex): - (JSC::JSByteArray::setIndex): - (JSC::asByteArray): - (JSC::isJSByteArray): - * runtime/JSCell.cpp: - (JSC::JSCell::put): - (JSC::JSCell::getJSNumber): - * runtime/JSCell.h: - (JSC::asCell): - (JSC::JSValue::asCell): - (JSC::JSValue::isString): - (JSC::JSValue::isGetterSetter): - (JSC::JSValue::isObject): - (JSC::JSValue::getString): - (JSC::JSValue::getObject): - (JSC::JSValue::getCallData): - (JSC::JSValue::getConstructData): - (JSC::JSValue::getUInt32): - (JSC::JSValue::getTruncatedInt32): - (JSC::JSValue::getTruncatedUInt32): - (JSC::JSValue::mark): - (JSC::JSValue::marked): - (JSC::JSValue::toPrimitive): - (JSC::JSValue::getPrimitiveNumber): - (JSC::JSValue::toBoolean): - (JSC::JSValue::toNumber): - (JSC::JSValue::toString): - (JSC::JSValue::toObject): - (JSC::JSValue::toThisObject): - (JSC::JSValue::needsThisConversion): - (JSC::JSValue::toThisString): - (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): - (JSC::Structure::prototypeChain): - (JSC::Structure::isValid): - * 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::isIntegerNumber): - (JSC::JSImmediate::isDoubleNumber): - (JSC::JSImmediate::isPositiveIntegerNumber): - (JSC::JSImmediate::isBoolean): - (JSC::JSImmediate::isUndefinedOrNull): - (JSC::JSImmediate::isEitherImmediate): - (JSC::JSImmediate::areBothImmediate): - (JSC::JSImmediate::areBothImmediateIntegerNumbers): - (JSC::JSImmediate::makeValue): - (JSC::JSImmediate::makeInt): - (JSC::JSImmediate::makeDouble): - (JSC::JSImmediate::makeBool): - (JSC::JSImmediate::makeUndefined): - (JSC::JSImmediate::makeNull): - (JSC::JSImmediate::doubleValue): - (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::fromNumberOutsideIntegerRange): - (JSC::JSImmediate::from): - (JSC::JSImmediate::getTruncatedInt32): - (JSC::JSImmediate::toDouble): - (JSC::JSImmediate::getUInt32): - (JSC::JSValue::JSValue): - (JSC::JSValue::isUndefinedOrNull): - (JSC::JSValue::isBoolean): - (JSC::JSValue::getBoolean): - (JSC::JSValue::toInt32): - (JSC::JSValue::toUInt32): - (JSC::JSValue::isCell): - (JSC::JSValue::isInt32Fast): - (JSC::JSValue::getInt32Fast): - (JSC::JSValue::isUInt32Fast): - (JSC::JSValue::getUInt32Fast): - (JSC::JSValue::makeInt32Fast): - (JSC::JSValue::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/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): - * runtime/JSNumberCell.h: - (JSC::JSNumberCell::createStructure): - (JSC::isNumberCell): - (JSC::asNumberCell): - (JSC::jsNumber): - (JSC::JSValue::isDoubleNumber): - (JSC::JSValue::getDoubleNumber): - (JSC::JSValue::isNumber): - (JSC::JSValue::uncheckedGetNumber): - (JSC::jsNaN): - (JSC::JSValue::toJSNumber): - (JSC::JSValue::getNumber): - (JSC::JSValue::numberToInt32): - (JSC::JSValue::numberToUInt32): - * 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::JSValue::isObject): - (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): - (JSC::isJSString): - (JSC::JSValue::toThisJSString): - * runtime/JSValue.cpp: - (JSC::JSValue::toInteger): - (JSC::JSValue::toIntegerPreserveNaN): - * runtime/JSValue.h: - (JSC::JSValue::makeImmediate): - (JSC::JSValue::asValue): - (JSC::noValue): - (JSC::jsImpossibleValue): - (JSC::jsNull): - (JSC::jsUndefined): - (JSC::jsBoolean): - (JSC::operator==): - (JSC::operator!=): - (JSC::JSValue::encode): - (JSC::JSValue::decode): - (JSC::JSValue::JSValue): - (JSC::JSValue::operator bool): - (JSC::JSValue::operator==): - (JSC::JSValue::operator!=): - (JSC::JSValue::isUndefined): - (JSC::JSValue::isNull): - * runtime/JSVariableObject.h: - (JSC::JSVariableObject::symbolTablePut): - (JSC::JSVariableObject::symbolTablePutWithAttributes): - * 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::constructNumber): - * 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::JSValue::equalSlowCase): - (JSC::JSValue::strictEqualSlowCase): - (JSC::throwOutOfMemoryError): - (JSC::jsAddSlowCase): - (JSC::jsTypeStringForValue): - (JSC::jsIsObjectType): - (JSC::jsIsFunctionType): - * runtime/Operations.h: - (JSC::JSValue::equal): - (JSC::JSValue::equalSlowCaseInline): - (JSC::JSValue::strictEqual): - (JSC::JSValue::strictEqualSlowCaseInline): - (JSC::jsLess): - (JSC::jsLessEq): - (JSC::jsAdd): - (JSC::countPrototypeChainEntriesAndCheckForProxies): - (JSC::resolveBase): - * 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::operator JSValue): - (JSC::ProtectedJSValue::ProtectedJSValue): - (JSC::ProtectedJSValue::get): - (JSC::ProtectedJSValue::operator JSValue): - (JSC::ProtectedJSValue::operator->): - (JSC::ProtectedJSValue::~ProtectedJSValue): - (JSC::ProtectedJSValue::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): - * runtime/Structure.h: - (JSC::Structure::create): - (JSC::Structure::setPrototypeWithoutTransition): - (JSC::Structure::storedPrototype): - -2009-05-01 Geoffrey Garen <ggaren@apple.com> - - Reviewed by Sam "That doesn't look like what I thought it looks like" Weinig. - - Beefed up the JSValuePtr class and removed some non-JSValuePtr dependencies - on JSImmediate, in prepapration for making JSImmediate an implementation - detail of JSValuePtr. - - SunSpider reports no change. - - * interpreter/Interpreter.cpp: - (JSC::Interpreter::privateExecute): - * jit/JIT.cpp: - (JSC::JIT::privateCompileMainPass): - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_mod): - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::globalFuncParseInt): Updated for interface changes. - - * runtime/JSImmediate.h: - (JSC::JSValuePtr::JSValuePtr): - * runtime/JSValue.h: - (JSC::JSValuePtr::): - (JSC::jsImpossibleValue): - (JSC::jsNull): - (JSC::jsUndefined): - (JSC::jsBoolean): - (JSC::JSValuePtr::encode): - (JSC::JSValuePtr::decode): - (JSC::JSValuePtr::JSValuePtr): - (JSC::JSValuePtr::operator bool): - (JSC::JSValuePtr::operator==): - (JSC::JSValuePtr::operator!=): - (JSC::JSValuePtr::isUndefined): - (JSC::JSValuePtr::isNull): Changed jsImpossibleValue(), jsNull(), - jsUndefined(), and jsBoolean() to operate in terms of JSValuePtr instead - of JSImmediate. - - * wtf/StdLibExtras.h: - (WTF::bitwise_cast): Fixed up for clarity. - -2009-04-30 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Geoff Garen. - - Bug fix for rdar:/6845379. If a case-insensitive regex contains - a character class containing a range with an upper bound of \uFFFF - the parser will infinite-loop whist adding other-case characters - for characters in the range that do have another case. - - * yarr/RegexCompiler.cpp: - (JSC::Yarr::CharacterClassConstructor::putRange): - -2009-04-30 Gavin Barraclough <barraclough@apple.com> +2009-06-19 Zoltan Horvath <hzoltan@inf.u-szeged.hu> Reviewed by Oliver Hunt. - OPCODE_SAMPLING without CODEBLOCK_SAMPLING is currently broken, - since SamplingTool::Sample::isNull() checks the m_codeBlock - member (which is always null without CODEBLOCK_SAMPLING). - - Restructure the checks so make this work again. - - * bytecode/SamplingTool.cpp: - (JSC::SamplingTool::doRun): - * bytecode/SamplingTool.h: - (JSC::SamplingTool::Sample::isNull): - -2009-04-30 Maciej Stachowiak <mjs@apple.com> - - Reviewed by Gavin Barraclough. - - - Concatenate final three strings in simple replace case at one go - - ~0.2% SunSpider speedup - - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): Use new replaceRange helper instead of - taking substrings and concatenating three strings. - * runtime/UString.cpp: - (JSC::UString::replaceRange): New helper function. - * runtime/UString.h: - -2009-04-30 Geoffrey Garen <ggaren@apple.com> - - Rubber Stamped by Gavin Barraclough. - - Changed JSValueEncodedAsPtr* => EncodedJSValuePtr to support a non-pointer - encoding for JSValuePtrs. - - * API/APICast.h: - (toJS): - * bytecompiler/BytecodeGenerator.h: - (JSC::BytecodeGenerator::JSValueHashTraits::constructDeletedValue): - (JSC::BytecodeGenerator::JSValueHashTraits::isDeletedValue): - * interpreter/Register.h: - (JSC::Register::): - * jit/JIT.cpp: - (JSC::): - * jit/JIT.h: - * jit/JITCode.h: - (JSC::): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_add): - (JSC::JITStubs::cti_op_pre_inc): - (JSC::JITStubs::cti_op_get_by_id_generic): - (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_call_NotJSFunction): - (JSC::JITStubs::cti_op_resolve): - (JSC::JITStubs::cti_op_construct_NotJSConstruct): - (JSC::JITStubs::cti_op_get_by_val): - (JSC::JITStubs::cti_op_get_by_val_string): - (JSC::JITStubs::cti_op_get_by_val_byte_array): - (JSC::JITStubs::cti_op_sub): - (JSC::JITStubs::cti_op_lesseq): - (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_not): - (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_mod): - (JSC::JITStubs::cti_op_less): - (JSC::JITStubs::cti_op_neq): - (JSC::JITStubs::cti_op_urshift): - (JSC::JITStubs::cti_op_bitxor): - (JSC::JITStubs::cti_op_bitor): - (JSC::JITStubs::cti_op_call_eval): - (JSC::JITStubs::cti_op_throw): - (JSC::JITStubs::cti_op_next_pname): - (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_del_by_val): - (JSC::JITStubs::cti_vm_throw): - * jit/JITStubs.h: - * runtime/JSValue.h: - (JSC::JSValuePtr::encode): - (JSC::JSValuePtr::decode): - -2009-04-30 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Oliver "Abandon Ship!" Hunt. - - Fix a leak in Yarr. + Inherits CallIdentifier struct from FastAllocBase because it has been + instantiated by 'new' in JavaScriptCore/profiler/CallIdentifier.h:86. - All Disjunctions should be recorded in RegexPattern::m_disjunctions, - so that they can be freed at the end of compilation - copyDisjunction - is failing to do so. - - * yarr/RegexCompiler.cpp: - (JSC::Yarr::RegexPatternConstructor::copyDisjunction): - -2009-04-30 Oliver Hunt <oliver@apple.com> - - Reviewed by Gavin Barraclough. - - Add function to CallFrame for dumping the current JS caller - - Added debug only method CallFrame::dumpCaller() that provide the call location - of the deepest currently executing JS function. - - * interpreter/CallFrame.cpp: - (JSC::CallFrame::dumpCaller): - * interpreter/CallFrame.h: - -2009-04-30 Maciej Stachowiak <mjs@apple.com> - - Reviewed by Geoff Garen. - - - make BaseStrings have themselves as a base, instead of nothing, to remove common branches - - ~0.7% SunSpider speedup - - * runtime/UString.h: - (JSC::UString::Rep::Rep): For the constructor without a base, set self as base instead of null. - (JSC::UString::Rep::baseString): Just read m_baseString - no more branching. + * wtf/HashCountedSet.h: -2009-04-30 Gavin Barraclough <barraclough@apple.com> +2009-06-19 Adam Treat <adam.treat@torchmobile.com> Reviewed by Oliver Hunt. - Two quick improvements to SamplingFlags mechanism. - - SamplingFlags::ScopedFlag class to provide support for automagically - clearing a flag as it goes out of scope, and add a little more detail - to the output generated by the tool. - - * bytecode/SamplingTool.cpp: - (JSC::SamplingFlags::stop): - * bytecode/SamplingTool.h: - (JSC::SamplingFlags::ScopedFlag::ScopedFlag): - (JSC::SamplingFlags::ScopedFlag::~ScopedFlag): - -2009-04-30 Adam Roben <aroben@apple.com> - - Restore build event steps that were truncated in r43082 - - Rubber-stamped by Steve Falkenburg. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: - * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: - * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: - Re-copied the command lines for the build events from the pre-r43082 - .vcproj files. - - * JavaScriptCore.vcproj/jsc/jsc.vcproj: Removed an unnecessary - attribute. - -2009-04-30 Adam Roben <aroben@apple.com> - - Move settings from .vcproj files to .vsprops files within the - JavaScriptCore directory - - Moving the settings to a .vsprops file means that we will only have to - change a single setting to affect all configurations, instead of one - setting per configuration. - - Reviewed by Steve Falkenburg. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * JavaScriptCore.vcproj/WTF/WTF.vcproj: - * JavaScriptCore.vcproj/jsc/jsc.vcproj: - * JavaScriptCore.vcproj/testapi/testapi.vcproj: - Moved settings from these files to the new .vsprops files. Note that - testapi.vcproj had a lot of overrides of default settings that were - the same as the defaults, which I've removed. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreCommon.vsprops: Added. - * JavaScriptCore.vcproj/WTF/WTFCommon.vsprops: Added. - * JavaScriptCore.vcproj/jsc/jscCommon.vsprops: Added. - * JavaScriptCore.vcproj/testapi/testapiCommon.vsprops: Added. - -2009-04-30 Dimitri Glazkov <dglazkov@chromium.org> - - Reviewed by Timothy Hatcher. + https://bugs.webkit.org/show_bug.cgi?id=26540 + Modify the test shell to add a new function 'checkSyntax' that will + only parse the source instead of executing it. In this way we can test + pure parsing performance against some of the larger scripts in the wild. - https://bugs.webkit.org/show_bug.cgi?id=25470 - Extend the cover of ENABLE_JAVASCRIPT_DEBUGGER to profiler. - - * Configurations/FeatureDefines.xcconfig: Added ENABLE_JAVASCRIPT_DEBUGGER define. - -2009-04-30 Maciej Stachowiak <mjs@apple.com> - - Reviewed by Alexey Proskuryakov. - - - speed up string concatenation by reorganizing some simple cases - - 0.7% SunSpider speedup - - * runtime/UString.cpp: - (JSC::concatenate): Put fast case for appending a single character - before the empty string special cases; streamline code a bit to - delay computing values that are not needed in the fast path. - -2009-04-30 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Maciej Stachowiak. - - Add SamplingFlags mechanism. - - This mechanism allows fine-grained JSC and JavaScript program aware - performance measurement. The mechanism provides a set of 32 flags, - numbered #1..#32. Flag #16 is initially set, and all other flags - are cleared. Flags may be set and cleared from within - - Enable by setting ENABLE_SAMPLING_FLAGS to 1 in wtf/Platform.h. - Disabled by default, no performance impact. Flags may be modified - by calling SamplingFlags::setFlag() and SamplingFlags::clearFlag() - from within JSC implementation, or by calling setSamplingFlag() and - clearSamplingFlag() from JavaScript. - - The flags are sampled with a frequency of 10000Hz, and the highest - set flag in recorded, allowing multiple events to be measured (with - the highest flag number representing the highest priority). - - Disabled by default; no performance impact. - - * JavaScriptCore.exp: - * bytecode/SamplingTool.cpp: - (JSC::SamplingFlags::sample): - (JSC::SamplingFlags::start): - (JSC::SamplingFlags::stop): - (JSC::SamplingThread::threadStartFunc): - (JSC::SamplingThread::start): - (JSC::SamplingThread::stop): - (JSC::ScopeSampleRecord::sample): - (JSC::SamplingTool::doRun): - (JSC::SamplingTool::sample): - (JSC::SamplingTool::start): - (JSC::SamplingTool::stop): - * bytecode/SamplingTool.h: - (JSC::SamplingFlags::setFlag): - (JSC::SamplingFlags::clearFlag): - (JSC::SamplingTool::SamplingTool): * jsc.cpp: (GlobalObject::GlobalObject): - (functionSetSamplingFlag): - (functionClearSamplingFlag): - (runWithScripts): - * wtf/Platform.h: - -2009-04-29 Sam Weinig <sam@webkit.org> + (functionCheckSyntax): - Another attempt to fix the windows build. +2009-06-19 Zoltan Horvath <hzoltan@inf.u-szeged.hu> - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-04-29 Sam Weinig <sam@webkit.org> - - Try and fix the windows build. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - -2009-04-29 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Oliver "Peg-Leg" Hunt. - - Coallesce input checking and reduce futzing with the index position - between alternatives and iterations of the main loop of a regex, - when run in YARR. - - Consider the following regex: /foo|bar/ - - Prior to this patch, this will be implemented something like this pseudo-code description: + Reviewed by Darin Adler. - loop: - check_for_available_input(3) // this increments the index by 3, for the first alterantive. - if (available) { test "foo" } - decrement_index(3) - check_for_available_input(3) // this increments the index by 3, for the second alterantive. - if (available) { test "bar" } - decrement_index(3) - check_for_available_input(1) // can we loop again? - if (available) { goto loop } - - With these changes it will look more like this: - - check_for_available_input(3) // this increments the index by 3, for the first alterantive. - if (!available) { goto fail } - loop: - test "foo" - test "bar" - check_for_available_input(1) // can we loop again? - if (available) { goto loop } - fail: - - - This gives about a 5% gain on v8-regex, no change on Sunspider. - - * yarr/RegexJIT.cpp: - (JSC::Yarr::RegexGenerator::TermGenerationState::linkAlternativeBacktracksTo): - (JSC::Yarr::RegexGenerator::generateDisjunction): - -2009-04-29 Oliver Hunt <oliver@apple.com> + Inherits HashCountedSet class from FastAllocBase because it has been + instantiated by 'new' in JavaScriptCore/runtime/Collector.cpp:1095. - Reviewed by Gavin Barraclough. - - Clean up ArgList to be a trivial type - - Separate out old ArgList logic to handle buffering and marking arguments - into a distinct MarkedArgumentBuffer type. ArgList becomes a trivial - struct of a pointer and length. - - * API/JSObjectRef.cpp: - (JSObjectMakeFunction): - (JSObjectMakeArray): - (JSObjectMakeDate): - (JSObjectMakeError): - (JSObjectMakeRegExp): - (JSObjectCallAsFunction): - (JSObjectCallAsConstructor): - * JavaScriptCore.exp: - * interpreter/CallFrame.h: - (JSC::ExecState::emptyList): - * runtime/ArgList.cpp: - (JSC::ArgList::getSlice): - (JSC::MarkedArgumentBuffer::markLists): - (JSC::MarkedArgumentBuffer::slowAppend): - * runtime/ArgList.h: - (JSC::MarkedArgumentBuffer::MarkedArgumentBuffer): - (JSC::MarkedArgumentBuffer::~MarkedArgumentBuffer): - (JSC::ArgList::ArgList): - (JSC::ArgList::at): - (JSC::ArgList::isEmpty): - (JSC::ArgList::size): - (JSC::ArgList::begin): - (JSC::ArgList::end): - * runtime/Arguments.cpp: - (JSC::Arguments::fillArgList): - * runtime/Arguments.h: - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncConcat): - (JSC::arrayProtoFuncPush): - (JSC::arrayProtoFuncSort): - (JSC::arrayProtoFuncFilter): - (JSC::arrayProtoFuncMap): - (JSC::arrayProtoFuncEvery): - (JSC::arrayProtoFuncForEach): - (JSC::arrayProtoFuncSome): - (JSC::arrayProtoFuncReduce): - (JSC::arrayProtoFuncReduceRight): - * runtime/Collector.cpp: - (JSC::Heap::collect): - * runtime/Collector.h: - (JSC::Heap::markListSet): - * runtime/CommonIdentifiers.h: - * runtime/Error.cpp: - (JSC::Error::create): - * runtime/FunctionPrototype.cpp: - (JSC::functionProtoFuncApply): - * runtime/JSArray.cpp: - (JSC::JSArray::JSArray): - (JSC::AVLTreeAbstractorForArrayCompare::compare_key_key): - (JSC::JSArray::fillArgList): - (JSC::constructArray): - * runtime/JSArray.h: - * runtime/JSGlobalData.cpp: - (JSC::JSGlobalData::JSGlobalData): - * runtime/JSGlobalData.h: - * runtime/JSObject.cpp: - (JSC::JSObject::put): - * runtime/StringConstructor.cpp: - (JSC::stringFromCharCodeSlowCase): - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): - (JSC::stringProtoFuncConcat): - (JSC::stringProtoFuncMatch): - -2009-04-29 Laszlo Gombos <laszlo.1.gombos@nokia.com> - - Reviewed by Sam Weinig. - - https://bugs.webkit.org/show_bug.cgi?id=25334 - - Fix Qt build when ENABLE_JIT is explicitly set to 1 - to overrule defaults. - - * JavaScriptCore.pri: - -2009-04-29 Oliver Hunt <oliver@apple.com> - - Reviewed by Steve Falkenburg. - - Crash in profiler due to incorrect assuming displayName would be a string. + * wtf/HashCountedSet.h: - Fixed by adding a type guard. +2009-06-19 Yong Li <yong.li@torchmobile.com> - * runtime/InternalFunction.cpp: - (JSC::InternalFunction::displayName): + Reviewed by George Staikos. -2009-04-28 Geoffrey Garen <ggaren@apple.com> + https://bugs.webkit.org/show_bug.cgi?id=26558 + Declare these symbols extern for WINCE as they are provided by libce. - Rubber stamped by Beth Dakin. - - Removed scaffolding supporting dynamically converting between 32bit and - 64bit value representations. - - * API/JSCallbackConstructor.cpp: - (JSC::constructJSCallback): - * API/JSCallbackFunction.cpp: - (JSC::JSCallbackFunction::call): - * API/JSCallbackObjectFunctions.h: - (JSC::::construct): - (JSC::::call): - * bytecode/CodeBlock.cpp: - (JSC::CodeBlock::dump): - * bytecode/CodeBlock.h: - (JSC::CodeBlock::getConstant): - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::emitEqualityOp): - * interpreter/CallFrame.cpp: - (JSC::CallFrame::thisValue): - * interpreter/Interpreter.cpp: - (JSC::Interpreter::callEval): - (JSC::Interpreter::throwException): - (JSC::Interpreter::createExceptionScope): - (JSC::Interpreter::privateExecute): - (JSC::Interpreter::retrieveArguments): - * interpreter/Register.h: - (JSC::Register::): - (JSC::Register::Register): - (JSC::Register::jsValue): - (JSC::Register::marked): - (JSC::Register::mark): - (JSC::Register::i): - (JSC::Register::activation): - (JSC::Register::arguments): - (JSC::Register::callFrame): - (JSC::Register::codeBlock): - (JSC::Register::function): - (JSC::Register::propertyNameIterator): - (JSC::Register::scopeChain): - (JSC::Register::vPC): - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_call_NotJSFunction): - (JSC::JITStubs::cti_op_load_varargs): - (JSC::JITStubs::cti_op_call_eval): - * jsc.cpp: - (functionPrint): - (functionDebug): - (functionRun): - (functionLoad): - * runtime/ArgList.h: - (JSC::ArgList::at): - * runtime/Arguments.cpp: - (JSC::Arguments::copyToRegisters): - (JSC::Arguments::fillArgList): - (JSC::Arguments::getOwnPropertySlot): - * runtime/ArrayConstructor.cpp: - (JSC::constructArrayWithSizeQuirk): - * runtime/ArrayPrototype.cpp: - (JSC::arrayProtoFuncJoin): - (JSC::arrayProtoFuncConcat): - (JSC::arrayProtoFuncPush): - (JSC::arrayProtoFuncSlice): - (JSC::arrayProtoFuncSort): - (JSC::arrayProtoFuncSplice): - (JSC::arrayProtoFuncUnShift): - (JSC::arrayProtoFuncFilter): - (JSC::arrayProtoFuncMap): - (JSC::arrayProtoFuncEvery): - (JSC::arrayProtoFuncForEach): - (JSC::arrayProtoFuncSome): - (JSC::arrayProtoFuncReduce): - (JSC::arrayProtoFuncReduceRight): - (JSC::arrayProtoFuncIndexOf): - (JSC::arrayProtoFuncLastIndexOf): - * runtime/BooleanConstructor.cpp: - (JSC::constructBoolean): - (JSC::callBooleanConstructor): * runtime/DateConstructor.cpp: - (JSC::constructDate): - (JSC::dateParse): - (JSC::dateUTC): * runtime/DatePrototype.cpp: (JSC::formatLocaleDate): - (JSC::fillStructuresUsingTimeArgs): - (JSC::fillStructuresUsingDateArgs): - (JSC::dateProtoFuncSetTime): - (JSC::dateProtoFuncSetYear): - * runtime/ErrorConstructor.cpp: - (JSC::constructError): - * runtime/FunctionConstructor.cpp: - (JSC::constructFunction): - * runtime/FunctionPrototype.cpp: - (JSC::functionProtoFuncApply): - (JSC::functionProtoFuncCall): - * runtime/JSArray.cpp: - (JSC::JSArray::JSArray): - (JSC::constructArray): - * runtime/JSArray.h: - * runtime/JSGlobalObjectFunctions.cpp: - (JSC::encode): - (JSC::decode): - (JSC::globalFuncEval): - (JSC::globalFuncParseInt): - (JSC::globalFuncParseFloat): - (JSC::globalFuncIsNaN): - (JSC::globalFuncIsFinite): - (JSC::globalFuncEscape): - (JSC::globalFuncUnescape): - (JSC::globalFuncJSCPrint): - * 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::construct): - * runtime/NumberConstructor.cpp: - (JSC::constructWithNumberConstructor): - (JSC::callNumberConstructor): - * runtime/NumberPrototype.cpp: - (JSC::numberProtoFuncToString): - (JSC::numberProtoFuncToFixed): - (JSC::numberProtoFuncToExponential): - (JSC::numberProtoFuncToPrecision): - * runtime/ObjectConstructor.cpp: - (JSC::constructObject): - * runtime/ObjectPrototype.cpp: - (JSC::objectProtoFuncHasOwnProperty): - (JSC::objectProtoFuncIsPrototypeOf): - (JSC::objectProtoFuncDefineGetter): - (JSC::objectProtoFuncDefineSetter): - (JSC::objectProtoFuncLookupGetter): - (JSC::objectProtoFuncLookupSetter): - (JSC::objectProtoFuncPropertyIsEnumerable): - * runtime/PropertySlot.h: - (JSC::PropertySlot::getValue): - * runtime/RegExpConstructor.cpp: - (JSC::constructRegExp): - * runtime/RegExpObject.cpp: - (JSC::RegExpObject::match): - * runtime/RegExpPrototype.cpp: - (JSC::regExpProtoFuncCompile): - * runtime/StringConstructor.cpp: - (JSC::stringFromCharCodeSlowCase): - (JSC::stringFromCharCode): - (JSC::constructWithStringConstructor): - (JSC::callStringConstructor): - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): - (JSC::stringProtoFuncCharAt): - (JSC::stringProtoFuncCharCodeAt): - (JSC::stringProtoFuncConcat): - (JSC::stringProtoFuncIndexOf): - (JSC::stringProtoFuncLastIndexOf): - (JSC::stringProtoFuncMatch): - (JSC::stringProtoFuncSearch): - (JSC::stringProtoFuncSlice): - (JSC::stringProtoFuncSplit): - (JSC::stringProtoFuncSubstr): - (JSC::stringProtoFuncSubstring): - (JSC::stringProtoFuncLocaleCompare): - (JSC::stringProtoFuncFontcolor): - (JSC::stringProtoFuncFontsize): - (JSC::stringProtoFuncAnchor): - (JSC::stringProtoFuncLink): - -2009-04-28 David Kilzer <ddkilzer@apple.com> - - A little more hardening for UString - - Reviewed by Maciej Stachowiak. - - Revised fix for <rdar://problem/5861045> in r42644. - - * runtime/UString.cpp: - (JSC::newCapacityWithOverflowCheck): Added. - (JSC::concatenate): Used newCapacityWithOverflowCheck(). - (JSC::UString::append): Ditto. - -2009-04-28 Oliver Hunt <oliver@apple.com> - - Reviewed by Gavin Barraclough. - - Bring back r42969, this time with correct codegen - - Add logic to the codegen for right shift to avoid jumping to a helper function - when shifting a small floating point value. - - * jit/JITArithmetic.cpp: - (isSSE2Present): - (JSC::JIT::compileFastArith_op_rshift): - (JSC::JIT::compileFastArithSlow_op_rshift): - -2009-04-28 Kevin Ollivier <kevino@theolliviers.com> - - wxMSW build fix. Switch JSCore build back to static. - - * API/JSBase.h: - * config.h: - * jscore.bkl: - -2009-04-28 Oliver Hunt <oliver@apple.com> - - Reviewed by NOBODY (Build fix). - - Roll out r42969, due to hangs in build bot. - - * jit/JITArithmetic.cpp: - (JSC::JIT::compileFastArith_op_rshift): - (JSC::JIT::compileFastArithSlow_op_rshift): - (JSC::isSSE2Present): - -2009-04-28 Xan Lopez <xlopez@igalia.com> - - Unreviewed: fix distcheck build, add (even more) missing files to list. - - * GNUmakefile.am: - -2009-04-28 Oliver Hunt <oliver@apple.com> - - Reviewed by Geoff Garen. - - Improve performance of string indexing - - Add a cti_get_by_val_string function to specialise indexing into a string object. - This gives us a slight performance win on a number of string tests. - - * jit/JITStubs.cpp: - (JSC::JITStubs::cti_op_get_by_val): - (JSC::JITStubs::cti_op_get_by_val_string): - * jit/JITStubs.h: - -2009-04-28 Oliver Hunt <oliver@apple.com> - - Reviewed by Geoff Garen. - - Improve performance of right shifts of large or otherwise floating point values. - - Add logic to the codegen for right shift to avoid jumping to a helper function - when shifting a small floating point value. - - * jit/JITArithmetic.cpp: - (isSSE2Present): Moved to the head of file. - (JSC::JIT::compileFastArith_op_rshift): - (JSC::JIT::compileFastArithSlow_op_rshift): - -2009-04-28 Xan Lopez <xlopez@igalia.com> - - Unreviewed: fix distcheck build, add (more) missing files to list. - - * GNUmakefile.am: - -2009-04-28 Xan Lopez <xlopez@igalia.com> - - Unreviewed: fix distcheck build, add missing header to file list. - - * GNUmakefile.am: - -2009-04-28 Gavin Barraclough <barraclough@apple.com> - Rubber stamped by Maciej "Henry Morgan" Stachowiak. - - Enable YARR. - (Again.) - - * wtf/Platform.h: - -2009-04-27 Gavin Barraclough <barraclough@apple.com> +2009-06-19 Oliver Hunt <oliver@apple.com> Reviewed by Maciej Stachowiak. - Tweak a loop condition to keep GCC happy, - some GCCs seem to be having issues with this. :-/ - - * bytecompiler/BytecodeGenerator.cpp: - (JSC::BytecodeGenerator::breakTarget): - * wtf/Platform.h: - -2009-04-27 Adam Roben <aroben@apple.com> - - Windows Debug build fix - - Not sure why the buildbots weren't affected by this problem. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: Let VS - re-order the file list, and added JavaScriptCore[_debug].def to the - project. This was not necessary for the fix, but made making the fix - easier. + <rdar://problem/6988973> ScopeChain leak in interpreter builds - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: - Removed a function that no longer exists. - -2009-04-26 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Weinig Sam. - - Fix for https://bugs.webkit.org/show_bug.cgi?id=25416 - "Cached prototype accesses unsafely hoist property storage load above structure checks." - - Do not hoist the load of the pointer to the property storage array. + Move the Scopechain destruction code in JSFunction outside of the ENABLE(JIT) + path. - No performance impact. - - * jit/JITPropertyAccess.cpp: - (JSC::JIT::privateCompileGetByIdProto): - (JSC::JIT::privateCompileGetByIdProtoList): - -2009-04-26 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Geoffrey "Gaffe or energy?" Garen. - - Randomize address requested by ExecutableAllocatorFixedVMPool. - - * jit/ExecutableAllocatorFixedVMPool.cpp: - (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): - -2009-04-26 Sam Weinig <sam@webkit.org> - - Reviewed by Eric Seidel. - - Remove scons-based build system. - - * JavaScriptCore.scons: Removed. - -2009-04-25 Oliver Hunt <oliver@apple.com> - - Reviewed by NOBODY (Buildfix). - - Make HAVE_MADV_FREE darwin only for now - - * wtf/Platform.h: - -2009-04-25 Jan Michael Alonzo <jmalonzo@webkit.org> - - Reviewed by Oliver Hunt. - - Gtk build fix - check if we have MADV_FREE before using it. - - * interpreter/RegisterFile.cpp: - (JSC::RegisterFile::releaseExcessCapacity): + * runtime/JSFunction.cpp: + (JSC::JSFunction::~JSFunction): * wtf/Platform.h: -2009-04-24 Kevin Ollivier <kevino@theolliviers.com> - - wx build fix. Switching JSCore from a static lib to a dynamic lib - to match the Apple build and fix symbol exports. - - * jscore.bkl: - -2009-04-24 Laszlo Gombos <laszlo.1.gombos@nokia.com> - - Rubber-stamped by Mark Rowe. - - https://bugs.webkit.org/show_bug.cgi?id=25337 - Move ThreadingQt.cpp under the qt directory. - - * JavaScriptCore.pri: - * wtf/ThreadingQt.cpp: Removed. - * wtf/qt/ThreadingQt.cpp: Copied from JavaScriptCore/wtf/ThreadingQt.cpp. - -2009-04-24 Laszlo Gombos <laszlo.1.gombos@nokia.com> - - Rubber-stamped by Mark Rowe. - - https://bugs.webkit.org/show_bug.cgi?id=25338 - Move ThreadingGtk.cpp under the gtk directory. - - * GNUmakefile.am: - * wtf/ThreadingGtk.cpp: Removed. - * wtf/gtk/ThreadingGtk.cpp: Copied from JavaScriptCore/wtf/ThreadingGtk.cpp. - -2009-04-24 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Sam "Wesley" Weinig. - - Improve performance to YARR interpreter. - (From about 3x slower than PCRE on regex-dna to about 30% slower). - - * yarr/RegexCompiler.cpp: - (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): - * yarr/RegexInterpreter.cpp: - (JSC::Yarr::Interpreter::checkCharacter): - (JSC::Yarr::Interpreter::checkCasedCharacter): - (JSC::Yarr::Interpreter::backtrackPatternCharacter): - (JSC::Yarr::Interpreter::backtrackPatternCasedCharacter): - (JSC::Yarr::Interpreter::matchParentheticalAssertionBegin): - (JSC::Yarr::Interpreter::matchParentheticalAssertionEnd): - (JSC::Yarr::Interpreter::backtrackParentheticalAssertionBegin): - (JSC::Yarr::Interpreter::backtrackParentheticalAssertionEnd): - (JSC::Yarr::Interpreter::matchDisjunction): - (JSC::Yarr::Interpreter::interpret): - (JSC::Yarr::ByteCompiler::atomPatternCharacter): - (JSC::Yarr::ByteCompiler::atomParenthesesSubpatternBegin): - (JSC::Yarr::ByteCompiler::atomParentheticalAssertionBegin): - (JSC::Yarr::ByteCompiler::closeAlternative): - (JSC::Yarr::ByteCompiler::closeBodyAlternative): - (JSC::Yarr::ByteCompiler::atomParenthesesEnd): - (JSC::Yarr::ByteCompiler::regexBegin): - (JSC::Yarr::ByteCompiler::regexEnd): - (JSC::Yarr::ByteCompiler::alterantiveBodyDisjunction): - (JSC::Yarr::ByteCompiler::alterantiveDisjunction): - (JSC::Yarr::ByteCompiler::emitDisjunction): - * yarr/RegexInterpreter.h: - (JSC::Yarr::ByteTerm::): - (JSC::Yarr::ByteTerm::ByteTerm): - (JSC::Yarr::ByteTerm::BodyAlternativeBegin): - (JSC::Yarr::ByteTerm::BodyAlternativeDisjunction): - (JSC::Yarr::ByteTerm::BodyAlternativeEnd): - (JSC::Yarr::ByteTerm::AlternativeBegin): - (JSC::Yarr::ByteTerm::AlternativeDisjunction): - (JSC::Yarr::ByteTerm::AlternativeEnd): - (JSC::Yarr::ByteTerm::SubpatternBegin): - (JSC::Yarr::ByteTerm::SubpatternEnd): - * yarr/RegexJIT.cpp: - (JSC::Yarr::RegexGenerator::generateParentheticalAssertion): - * yarr/RegexPattern.h: - -2009-04-24 Rob Raguet-Schofield <ragfield@gmail.com> - - Rubber-stamped by Mark Rowe. - - * wtf/CurrentTime.h: Fix a typo in a comment. - -2009-04-24 Oliver Hunt <oliver@apple.com> +2009-06-19 Yong Li <yong.li@torchmobile.com> - Reviewed by NOBODY (Build fix). - - Add reinterpret_cast - - * interpreter/RegisterFile.cpp: - (JSC::RegisterFile::releaseExcessCapacity): - -2009-04-23 Oliver Hunt <oliver@apple.com> - - Reviewed by Geoff Garen. - - <rdar://problem/6050421> JavaScript register file should remap to release physical pages accumulated during deep recursion + Reviewed by George Staikos. - We now track the maximum extent of the RegisterFile, and when we reach the final - return from JS (so the stack portion of the registerfile becomes empty) we see - if that extent is greater than maxExcessCapacity. If it is we use madvise or - VirtualFree to release the physical pages that were backing the excess. + https://bugs.webkit.org/show_bug.cgi?id=26543 + Windows CE uses 'GetLastError' instead of 'errno.' - * interpreter/RegisterFile.cpp: - (JSC::RegisterFile::releaseExcessCapacity): * interpreter/RegisterFile.h: (JSC::RegisterFile::RegisterFile): - (JSC::RegisterFile::shrink): (JSC::RegisterFile::grow): -2009-04-23 Mark Rowe <mrowe@apple.com> - - With great sadness and a heavy heart I switch us back from YARR to WREC in - order to restore greenness to the world once more. - - * wtf/Platform.h: - -2009-04-23 Mark Rowe <mrowe@apple.com> +2009-06-19 David Levin <levin@chromium.org> - More Windows build fixage. + Reviewed by NOBODY (Windows build fix). + Add export for Windows corresponding to OSX export done in r44844. * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore_debug.def: -2009-04-23 Mark Rowe <mrowe@apple.com> - - Attempt to fix the Windows build. +2009-06-18 Oliver Hunt <oliver@apple.com> - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.def: Remove a symbol that no longer exists. + Reviewed by Gavin "Viceroy of Venezuela" Barraclough. -2009-04-23 Francisco Tolmasky <francisco@280north.com> + Bug 26532: Native functions do not correctly unlink from optimised callsites when they're collected + <https://bugs.webkit.org/show_bug.cgi?id=26532> <rdar://problem/6625385> - BUG 24604: WebKit profiler reports incorrect total times - <https://bugs.webkit.org/show_bug.cgi?id=24604> - - Reviewed by Timothy Hatcher and Kevin McCullough. + We need to make sure that each native function instance correctly unlinks any references to it + when it is collected. Allowing this to happen required a few changes: + * Every native function needs a codeblock to track the link information + * To have this codeblock, every function now also needs its own functionbodynode + so we no longer get to have a single shared instance. + * Identifying a host function is now done by looking for CodeBlock::codeType() == NativeCode * JavaScriptCore.exp: - * JavaScriptCore.xcodeproj/project.pbxproj: - * profiler/CallIdentifier.h: - (JSC::CallIdentifier::Hash::hash): - (JSC::CallIdentifier::Hash::equal): - (JSC::CallIdentifier::hash): - (WTF::): - * profiler/HeavyProfile.cpp: Removed. - * profiler/HeavyProfile.h: Removed. - * profiler/Profile.cpp: No more need for TreeProfile/HeavyProfile - (JSC::Profile::create): - * profiler/Profile.h: - * profiler/ProfileNode.cpp: - * profiler/ProfileNode.h: - * profiler/TreeProfile.cpp: Removed. - * profiler/TreeProfile.h: Removed. - -2009-04-23 Gavin Barraclough <barraclough@apple.com> - - Not Reviewed. - - Speculative Windows build fix II. - - * yarr/RegexInterpreter.cpp: - -2009-04-23 Gavin Barraclough <barraclough@apple.com> - - Not Reviewed. - - Speculative Windows build fix. - - * JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj: - * runtime/RegExp.cpp: - -2009-04-23 Gavin Barraclough <barraclough@apple.com> - - Rubber stamped by salty sea dogs Sam & Geoff. - - Enable YARR_JIT by default (where supported), replacing WREC. - - * wtf/Platform.h: - -2009-04-23 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Geoff "Dread Pirate Roberts" Garen. - - Various small fixes to YARR JIT, in preparation for enabling it by default. - - * Correctly index into the callframe when storing restart addresses for - nested alternatives. - * Allow backtracking back into matched alternatives of parentheses. - * Fix callframe offset calculation for parenthetical assertions. - * When a set of parenthese are quantified with a fixed and variable portion, - and the variable portion is quantified once, this should not reset the - pattern match on failure to match (the last match from the firxed portion - should be preserved). - * Up the pattern size limit to match PCRE's new limit. - * Unlclosed parentheses should be reported with the message "missing )". - - * wtf/Platform.h: - * yarr/RegexCompiler.cpp: - (JSC::Yarr::RegexPatternConstructor::quantifyAtom): - (JSC::Yarr::RegexPatternConstructor::setupAlternativeOffsets): - * yarr/RegexInterpreter.cpp: - (JSC::Yarr::Interpreter::matchParentheses): - (JSC::Yarr::Interpreter::backtrackParentheses): - (JSC::Yarr::ByteCompiler::emitDisjunction): - * yarr/RegexJIT.cpp: - (JSC::Yarr::RegexGenerator::loadFromFrameAndJump): - (JSC::Yarr::RegexGenerator::generateParenthesesDisjunction): - (JSC::Yarr::RegexGenerator::generateParentheticalAssertion): - (JSC::Yarr::RegexGenerator::generateTerm): - (JSC::Yarr::executeRegex): - * yarr/RegexParser.h: - (JSC::Yarr::Parser::): - (JSC::Yarr::Parser::parseTokens): - (JSC::Yarr::Parser::parse): - * yarr/RegexPattern.h: - (JSC::Yarr::PatternTerm::): - (JSC::Yarr::PatternTerm::PatternTerm): - -2009-04-22 Mark Rowe <mrowe@apple.com> - - Rubber-stamped by Gavin Barraclough. - - Add the m_ prefix on FixedVMPoolAllocator's member variables, and fix typos in a few comments. - - * jit/ExecutableAllocatorFixedVMPool.cpp: - (JSC::FixedVMPoolAllocator::addToFreeList): - (JSC::FixedVMPoolAllocator::coalesceFreeSpace): - (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): - (JSC::FixedVMPoolAllocator::alloc): - (JSC::FixedVMPoolAllocator::free): - (JSC::FixedVMPoolAllocator::isWithinVMPool): - -2009-04-22 Mark Rowe <mrowe@apple.com> - - Rubber-stamped by Gavin Barraclough. - - Add some assertions to FixedVMPoolAllocator to guard against cases where we - attempt to free memory that didn't originate from the pool, or we attempt to - hand out a bogus address from alloc. - - * jit/ExecutableAllocatorFixedVMPool.cpp: - (JSC::FixedVMPoolAllocator::release): - (JSC::FixedVMPoolAllocator::FixedVMPoolAllocator): - (JSC::FixedVMPoolAllocator::alloc): - (JSC::FixedVMPoolAllocator::free): - (JSC::FixedVMPoolAllocator::isWithinVMPool): - -2009-04-22 Gavin Barraclough <barraclough@apple.com> - - Rubber stamped by Sam "Blackbeard" Weinig. - - Although pirates do spell the word 'generate' as 'genertate', - webkit developers do not. Fixertate. - - * yarr/RegexJIT.cpp: - (JSC::Yarr::RegexGenerator::generateAssertionBOL): - (JSC::Yarr::RegexGenerator::generateAssertionEOL): - (JSC::Yarr::RegexGenerator::generateAssertionWordBoundary): - (JSC::Yarr::RegexGenerator::generatePatternCharacterSingle): - (JSC::Yarr::RegexGenerator::generatePatternCharacterPair): - (JSC::Yarr::RegexGenerator::generatePatternCharacterFixed): - (JSC::Yarr::RegexGenerator::generatePatternCharacterGreedy): - (JSC::Yarr::RegexGenerator::generatePatternCharacterNonGreedy): - (JSC::Yarr::RegexGenerator::generateCharacterClassSingle): - (JSC::Yarr::RegexGenerator::generateCharacterClassFixed): - (JSC::Yarr::RegexGenerator::generateCharacterClassGreedy): - (JSC::Yarr::RegexGenerator::generateCharacterClassNonGreedy): - (JSC::Yarr::RegexGenerator::generateTerm): - -2009-04-22 Gavin Barraclough <barraclough@apple.com> - - Reviewed by Sam "Blackbeard" Weinig. - - Improvements to YARR JIT. This patch expands support in three key areas: - * Add (temporary) support for falling back to PCRE for expressions not supported. - * Add support for x86_64 and Windows. - * Add support for singly quantified parentheses (? and ??), alternatives within - parentheses, and parenthetical assertions. - - * runtime/RegExp.cpp: - (JSC::RegExp::match): - * yarr/RegexJIT.cpp: - (JSC::Yarr::RegexGenerator::storeToFrame): - (JSC::Yarr::RegexGenerator::storeToFrameWithPatch): - (JSC::Yarr::RegexGenerator::loadFromFrameAndJump): - (JSC::Yarr::RegexGenerator::AlternativeBacktrackRecord::AlternativeBacktrackRecord): - (JSC::Yarr::RegexGenerator::TermGenerationState::resetAlternative): - (JSC::Yarr::RegexGenerator::TermGenerationState::resetTerm): - (JSC::Yarr::RegexGenerator::TermGenerationState::jumpToBacktrack): - (JSC::Yarr::RegexGenerator::TermGenerationState::plantJumpToBacktrackIfExists): - (JSC::Yarr::RegexGenerator::TermGenerationState::addBacktrackJump): - (JSC::Yarr::RegexGenerator::TermGenerationState::linkAlternativeBacktracks): - (JSC::Yarr::RegexGenerator::TermGenerationState::propagateBacktrackingFrom): - (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::generateParenthesesDisjunction): - (JSC::Yarr::RegexGenerator::generateParenthesesSingle): - (JSC::Yarr::RegexGenerator::generateParentheticalAssertion): - (JSC::Yarr::RegexGenerator::generateTerm): - (JSC::Yarr::RegexGenerator::generateDisjunction): - (JSC::Yarr::RegexGenerator::generateEnter): - (JSC::Yarr::RegexGenerator::generateReturn): - (JSC::Yarr::RegexGenerator::RegexGenerator): - (JSC::Yarr::RegexGenerator::generate): - (JSC::Yarr::RegexGenerator::compile): - (JSC::Yarr::RegexGenerator::generationFailed): - (JSC::Yarr::jitCompileRegex): - (JSC::Yarr::executeRegex): - * yarr/RegexJIT.h: - (JSC::Yarr::RegexCodeBlock::RegexCodeBlock): - (JSC::Yarr::RegexCodeBlock::~RegexCodeBlock): - -2009-04-22 Sam Weinig <sam@webkit.org> - - Rubber-stamped by Darin Adler. - - Fix for <rdar://problem/6816957> - Turn off Geolocation by default - - * Configurations/FeatureDefines.xcconfig: - -2009-04-22 Oliver Hunt <oliver@apple.com> - - Reviewed by NOBODY (Buildfix). - - * interpreter/CachedCall.h: - -2009-04-21 Oliver Hunt <oliver@apple.com> - - Reviewed by NOBODY (Build fix). - - * runtime/StringPrototype.cpp: - -2009-04-21 Oliver Hunt <oliver@apple.com> - - Reviewed by Maciej Stachowiak. - - Improve String.replace performance slightly - - Apply our vm reentry caching logic to String.replace with global - regexes. - - * runtime/StringPrototype.cpp: - (JSC::stringProtoFuncReplace): - -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. + (JSC::CodeBlock::CodeBlock): + Constructor for NativeCode CodeBlock + (JSC::CodeBlock::derefStructures): + (JSC::CodeBlock::refStructures): + (JSC::CodeBlock::reparseForExceptionInfoIfNecessary): + (JSC::CodeBlock::handlerForBytecodeOffset): + (JSC::CodeBlock::lineNumberForBytecodeOffset): + (JSC::CodeBlock::expressionRangeForBytecodeOffset): + (JSC::CodeBlock::getByIdExceptionInfoForBytecodeOffset): + (JSC::CodeBlock::functionRegisterForBytecodeOffset): + (JSC::CodeBlock::hasGlobalResolveInstructionAtBytecodeOffset): + (JSC::CodeBlock::hasGlobalResolveInfoAtBytecodeOffset): + (JSC::CodeBlock::setJITCode): + Add assertions to ensure we don't try and use NativeCode CodeBlocks as + a normal codeblock. - * bytecompiler/BytecodeGenerator.h: - * interpreter/Interpreter.h: + * bytecode/CodeBlock.h: (JSC::): + (JSC::CodeBlock::source): + (JSC::CodeBlock::sourceOffset): + (JSC::CodeBlock::evalCodeCache): + (JSC::CodeBlock::createRareDataIfNecessary): + More assertions. -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. + (JSC::JIT::privateCompileCTIMachineTrampolines): + (JSC::JIT::linkCall): + Update logic to allow native function caching + * jit/JITStubs.cpp: * 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): + (JSC::FunctionBodyNode::createNativeThunk): + (JSC::FunctionBodyNode::isHostFunction): * 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/JSFunction.cpp: + (JSC::JSFunction::JSFunction): + (JSC::JSFunction::~JSFunction): + (JSC::JSFunction::mark): * runtime/JSGlobalData.cpp: - (JSC::VPtrSet::VPtrSet): - (JSC::JSGlobalData::JSGlobalData): - (JSC::JSGlobalData::create): - (JSC::JSGlobalData::sharedInstance): + (JSC::JSGlobalData::~JSGlobalData): * 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> +2009-06-18 Gavin Barraclough <barraclough@apple.com> - GCC version of the cpuid check. + Reviewed by NOBODY (Windows build fix). - * 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. + * wtf/DateMath.cpp: + (WTF::calculateUTCOffset): -2009-02-23 Jeremy Moskovich <jeremy@chromium.org> +2009-06-18 Gavin Barraclough <barraclough@apple.com> - 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: + Reviewed by Geoff Garen. -2009-02-22 Geoffrey Garen <ggaren@apple.com> + Timezone calculation incorrect in Venezuela. - Build fix? + https://bugs.webkit.org/show_bug.cgi?id=26531 + <rdar://problem/6646169> Time is incorrectly reported to JavaScript in both Safari 3 and Firefox 3 - * GNUmakefile.am: + The problem is that we're calculating the timezone relative to 01/01/2000, + but the VET timezone changed from -4 hours to -4:30 hours on 12/09/2007. + According to the spec, section 15.9.1.9 states "the time since the beginning + of the year", presumably meaning the *current* year. Change the calculation + to be based on whatever the current year is, rather than a canned date. -2009-02-22 Geoffrey Garen <ggaren@apple.com> + No performance impact. - Build fix. + * wtf/DateMath.cpp: + (WTF::calculateUTCOffset): - * GNUmakefile.am: +2009-06-18 Gavin Barraclough <barraclough@apple.com> -2009-02-22 Geoffrey Garen <ggaren@apple.com> + Rubber Stamped by Mark Rowe (originally reviewed by Sam Weinig). - Reviewed by Sam Weinig. + (Reintroducing patch added in r44492, and reverted in r44796.) - 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. + Change the implementation of op_throw so the stub function always modifies its + return address - if it doesn't find a 'catch' it will switch to a trampoline + to force a return from JIT execution. This saves memory, by avoiding the need + for a unique return for every op_throw. - * 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/JITOpcodes.cpp: + (JSC::JIT::emit_op_throw): + JITStubs::cti_op_throw now always changes its return address, + remove return code generated after the stub call (this is now + handled by ctiOpThrowNotCaught). * 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): + Add ctiOpThrowNotCaught definitions. + (JSC::JITStubs::DEFINE_STUB_FUNCTION): + Change cti_op_throw to always change its return address. + * jit/JITStubs.h: + Add ctiOpThrowNotCaught declaration. -2009-02-18 Geoffrey Garen <ggaren@apple.com> +2009-06-18 Kevin McCullough <kmccullough@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: + <rdar://problem/6940880> REGRESSION: Breakpoints don't break in 64-bit -2009-02-17 Geoffrey Garen <ggaren@apple.com> + - Exposed functions now needed by WebCore. - 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): + * JavaScriptCore.exp: -2009-02-16 Csaba Osztrogonac <oszi@inf.u-szeged.hu> +2009-06-17 Darin Adler <darin@apple.com> 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. + Bug 26429: Make JSON.stringify non-recursive so it can handle objects + of arbitrary complexity + https://bugs.webkit.org/show_bug.cgi?id=26429 - * bytecode/Instruction.h: - (JSC::Instruction::Instruction): - * parser/ResultType.h: - (JSC::OperandTypes::OperandTypes): + For marking I decided not to use gcProtect, because this is inside the engine + so it's easy enough to just do marking. And that darned gcProtect does locking! + Oliver tried to convince me to used MarkedArgumentBuffer, but the constructor + for that class says "FIXME: Remove all clients of this API, then remove this API." -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/Collector.cpp: + (JSC::Heap::collect): Add a call to JSONObject::markStringifiers. - * 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/CommonIdentifiers.cpp: + (JSC::CommonIdentifiers::CommonIdentifiers): Added emptyIdentifier. + * runtime/CommonIdentifiers.h: Ditto. * 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. + (JSC::JSGlobalData::JSGlobalData): Initialize firstStringifierToMark to 0. + * runtime/JSGlobalData.h: Added firstStringifierToMark. + + * runtime/JSONObject.cpp: Cut down the includes to the needed ones only. + (JSC::unwrapNumberOrString): Added. Helper for unwrapping number and string + objects to get their number and string values. + (JSC::ReplacerPropertyName::ReplacerPropertyName): Added. The class is used + to wrap an identifier or integer so we don't have to do any work unless we + actually call a replacer. + (JSC::ReplacerPropertyName::value): Added. + (JSC::gap): Added. Helper function for the Stringifier constructor. + (JSC::PropertyNameForFunctionCall::PropertyNameForFunctionCall): Added. + The class is used to wrap an identifier or integer so we don't have to + allocate a number or string until we actually call toJSON or a replacer. + (JSC::PropertyNameForFunctionCall::asJSValue): Added. + (JSC::Stringifier::Stringifier): Updated and moved out of the class + definition. Added code to hook this into a singly linked list for marking. + (JSC::Stringifier::~Stringifier): Remove from the singly linked list. + (JSC::Stringifier::mark): Mark all the objects in the holder stacks. + (JSC::Stringifier::stringify): Updated. + (JSC::Stringifier::appendQuotedString): Tweaked and streamlined a bit. + (JSC::Stringifier::toJSON): Renamed from toJSONValue. + (JSC::Stringifier::appendStringifiedValue): Renamed from stringify. + Added code to use the m_holderStack to do non-recursive stringify of + objects and arrays. This code also uses the timeout checker since in + pathological cases it could be slow even without calling into the + JavaScript virtual machine. + (JSC::Stringifier::willIndent): Added. + (JSC::Stringifier::indent): Added. + (JSC::Stringifier::unindent): Added. + (JSC::Stringifier::startNewLine): Added. + (JSC::Stringifier::Holder::Holder): Added. + (JSC::Stringifier::Holder::appendNextProperty): Added. This is the + function that handles the format of arrays and objects. + (JSC::JSONObject::getOwnPropertySlot): Moved this down to the bottom + of the file so the JSONObject class is not interleaved with the + Stringifier class. + (JSC::JSONObject::markStringifiers): Added. Calls mark. + (JSC::JSONProtoFuncStringify): Streamlined the code here. The code + to compute the gap string is now a separate function. + + * runtime/JSONObject.h: Made everything private. Added markStringifiers. + +2009-06-17 Oliver Hunt <oliver@apple.com> + + Reviewed by Gavin Barraclough. + + <rdar://problem/6974140> REGRESSION(r43849): Crash in cti_op_call_NotJSFunction when getting directions on maps.google.com + + Roll out r43849 as it appears that we cannot rely on the address of + an objects property storage being constant even if the structure is + unchanged. - * 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::compileGetDirectOffset): (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> +2009-06-17 Gavin Barraclough <barraclough@apple.com> - Windows build fix after r40813 + Rubber Stamped by Mark Rowe. - * JavaScriptCore.vcproj/jsc/jsc.vcproj: Added profiler/ to the include - path so that Profiler.h can be found. + Fully revert r44492 & r44748 while we fix a bug they cause on internal builds <rdar://problem/6955963>. -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. + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_throw): + * jit/JITStubs.cpp: (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. + (JSC::JITStubs::DEFINE_STUB_FUNCTION): + * jit/JITStubs.h: -2009-01-20 Darin Adler <darin@apple.com> +2009-06-17 Gavin Barraclough <barraclough@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 + <rdar://problem/6947426> sunspider math-cordic.js exhibits different intermediate results running 32-bit vs. 64-bit - 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. + On 64-bit, NaN-encoded values must be detagged before they can be used in rshift. 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> + (JSC::JIT::emit_op_rshift): - Reviewed by Oliver Hunt. +2009-06-17 Adam Treat <adam.treat@torchmobile.com> - https://bugs.webkit.org/show_bug.cgi?id=23175 + Reviewed by George Staikos. - Adjustment to previous patch. Remove call to initilizeThreading from JSGlobalCreate - and fix jsc.cpp instead. + https://bugs.webkit.org/show_bug.cgi?id=23155 + Move WIN_CE -> WINCE as previously discussed with Qt WINCE folks. * 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-06-17 George Staikos <george.staikos@torchmobile.com> -2009-01-08 Gavin Barraclough <barraclough@apple.com> - - Reviewed by -O-l-i-v-e-r- -H-u-n-t- Sam Weinig (sorry, Sam!). + Reviewed by Adam Treat. - Encode immediates in the low word of JSValuePtrs, on x86-64. + https://bugs.webkit.org/show_bug.cgi?id=23155 + Move WIN_CE -> WINCE as previously discussed with Qt WINCE folks. - 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): + * config.h: + * jsc.cpp: + * wtf/Assertions.cpp: + * wtf/Assertions.h: + * wtf/CurrentTime.cpp: + (WTF::lowResUTCTime): + * wtf/DateMath.cpp: + (WTF::getLocalTime): + * wtf/MathExtras.h: * wtf/Platform.h: + * wtf/StringExtras.h: + * wtf/Threading.h: + * wtf/win/MainThreadWin.cpp: -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> +2009-06-17 Gavin Barraclough <barraclough@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>. + <rdar://problem/6974175> ASSERT in JITStubs.cpp at appsaccess.apple.com - 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. + Remove PropertySlot::putValue - PropertySlots should only be used for getting, + not putting. Rename JSGlobalObject::getOwnPropertySlot to hasOwnPropertyForWrite, + which is what it really was being used to ask, and remove some other getOwnPropertySlot + & getOwnPropertySlotForWrite methods, which were unused and likely to lead to confusion. - 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): + (JSC::JSGlobalObject::hasOwnPropertyForWrite): * 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. +2009-06-16 Gavin Barraclough <barraclough@apple.com> - [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 + Reviewed by Oliver hunt. - 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. + Temporarily partially disable r44492, since this is causing some problems on internal builds. - 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. + * jit/JITOpcodes.cpp: + (JSC::JIT::emit_op_throw): + * jit/JITStubs.cpp: + (JSC::JITStubs::DEFINE_STUB_FUNCTION): - 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. +2009-06-16 Sam Weinig <sam@webkit.org> - - Also removes CodeBlock bloat in non-JIT by #ifdefing the JIT - only data structures. + Fix windows build. - * 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> +2009-06-16 Sam Weinig <sam@webkit.org> 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. + Initialize m_bytecodeIndex to -1 in JIT, and correctly initialize + it for each type of stub using the return address to find the correct + offset. - 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::compileGetByIdProto): (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::compileGetByIdChainList): (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. + * jit/JITStubCall.h: + (JSC::JITStubCall::call): -== Rolled over to ChangeLog-2008-08-10 == +== Rolled over to ChangeLog-2009-06-16 == |